
    dafI                       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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 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
 Zej@                  jC                  ejD                        dz   Z#e#dz   Z$ ejJ                  d      Z&ej@                  jO                  e#d      Z(ej@                  jO                  e#d      Z)ej@                  jO                  e#d      Z*ej@                  jO                  e#d      Z+ej@                  jO                  e#d      Z,dZ-dZ. G d d      Z/ ej`                          G d d             Z1 ejd                          G d d             Z3 ejh                          G d d             Z5 G d de/      Z6 G d d e6ejn                        Z8 G d! d"e1e8      Z9 G d# d$e3e8      Z: G d% d&e5e8      Z; G d' d(e6ejn                        Z< G d) d*e1e<      Z= G d+ d,e3e<      Z> G d- d.e5e<      Z? G d/ d0e6      Z@ G d1 d2e@      ZA G d3 d4eAejn                        ZB G d5 d6e1eAejn                        ZC G d7 d8e3eAejn                        ZD G d9 d:e5eAejn                        ZE G d; d<e@ejn                        ZF G d= d>e1eF      ZG G d? d@e3eF      ZH G dA dBe5eF      ZI G dC dDe/ejn                        ZJ G dE dFe1eJ      ZK G dG dHe3eJ      ZL G dI dJe5eJ      ZM G dK dLe1ejn                        ZN G dM dNe6ejn                        ZO G dO dP      ZP G dQ dRePe6ejn                        ZQ G dS dTePe6ejn                        ZR G dU dVe/      ZS G dW dXeSejn                        ZT G dY dZe1eT      ZU G d[ d\e3eT      ZV G d] d^e5eT      ZW G d_ d`eSejn                        ZX G da dbe1eX      ZY G dc dde3eX      ZZ G de dfe5eX      Z[ G dg dhe/      Z\ G di dje3e\ejn                        Z] G dk dle3e\ejn                        Z^ G dm dne1e\ejn                        Z_ G do dpe1e\ejn                        Z` G dq drejn                        Za G ds dtejn                        Zb G du dveSejn                        Zc G dw dxeSejn                        Zd G dy dze1ed      Ze G d{ d|e3ed      Zf G d} d~e5ed      Zg G d ded      Zh ej                   ejed      d       G d dejn                               Zk G d deb      Zl G d d      Zm G d demejn                        Zn G d demejn                        Zo G d demejn                        Zp G d d      Zq G d deqejn                        Zr G d de1eqejn                        Zs G d de3eqejn                        Zt G d de5eqejn                        Zu G d dejn                        Zv G d dejn                        Zw G d dejn                        Zx G d dejn                        Zy ej                   ejed      d       G d de6ejn                               Z{ G d de3ejn                        Z|d Z} ej                   ejed      d       ej                   ejed      d       G d dejn                                      Z~ G d de6ejn                        Z G d de6      Z G d deejn                        Z G d deejn                        Z G d deejn                        Z G d deejn                        Z G d dejn                        Zd Z G d d      Zej                  rd Znd Z G d dejn                        Z G d dej                  ejn                        ZdĄ Zdń Zedk(  r ej                          yy# e$ r dZY cw xY w# e$ r dZY lw xY w# e$ r dZY uw xY w# e$ r dZY ~w xY w)    N)sha256)contextmanager	ExitStack)Random)archiver_tests)support)	os_helper)script_helper)warnings_helperc                 4    t        |       j                         S N)r   	hexdigest)datas    ,/root/Python-3.12.4/Lib/test/test_tarfile.py	sha256sumr   *   s    $<!!##    z-tardirz-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2testtar.tar.xzztmp.tartesttar@e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ce@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc                   h    e Zd ZeZdZej                  Zej                  j                  Z
ed        Zy)TarTest c                 4    | j                   | j                  z   S r   )prefixsuffixselfs    r   modezTarTest.modeD   s    {{T[[((r   N)__name__
__module____qualname__tarnamer   ioFileIOopentarfileTarFiletaropenpropertyr    r   r   r   r   >   s6    GF99Doo%%G) )r   r   c                   `    e Zd ZeZdZerej                  ndZe	j                  j                  Zy)GzipTestgzN)r    r!   r"   gzipnamer#   r   gzipGzipFiler&   r'   r(   gzopenr)   r+   r   r   r-   r-   H   s(    GF 4==dDoo$$Gr   r-   c                   `    e Zd ZeZdZerej                  ndZe	j                  j                  Zy)Bz2Testbz2N)r    r!   r"   bz2namer#   r   r5   BZ2Filer&   r'   r(   bz2openr)   r+   r   r   r4   r4   O   s(    GF3;;4Doo%%Gr   r4   c                   `    e Zd ZeZdZerej                  ndZe	j                  j                  Zy)LzmaTestxzN)r    r!   r"   xznamer#   r   lzmaLZMAFiler&   r'   r(   xzopenr)   r+   r   r   r:   r:   V   s(    GF 4==dDoo$$Gr   r:   c                       e Zd ZdZd Zd Zy)ReadTestr:c                 f    t        j                  | j                  | j                  d      | _        y )N	iso8859-1r   encodingr'   r&   r#   r   tarr   s    r   setUpzReadTest.setUpb   s!    <<499)46r   c                 8    | j                   j                          y r   )rH   closer   s    r   tearDownzReadTest.tearDownf   s    r   N)r    r!   r"   r   rI   rL   r+   r   r   rA   rA   ^   s    F6r   rA   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z ej                    eed      xr	  eed      d      d        Zy)UstarReadTestc                 F   | j                   j                  d      }| j                   j                  |      5 }|j                         }| j	                  t        |      |j                  d       | j	                  t        |      t        d       d d d        y # 1 sw Y   y xY w)Nustar/regtyperegular file extraction failed)	rH   	getmemberextractfilereadassertEquallensizer   sha256_regtyper   tarinfofobjr   s       r   test_fileobj_regular_filez'UstarReadTest.test_fileobj_regular_filel   s    (($$_5XX!!'* 	6d99;DSY46Yt_n46		6 	6 	6s   ABB c                 X   | j                   j                  dt        d       | j                   j                  d      }t	        t
        j                  j                  t        d      d      5 }|j                         }d d d        | j                   j                  |      5 }t        j                  |      }|j                         }| j                  |d       | j                  t        |      dd       | j                  |d   dd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	NrP   r   filterrzfileobj.readlines() failedr   S   zOI will gladly admit that Python is not the fastest running scripting language.
)rH   extractTEMPDIRrR   r&   ospathjoin	readlinesrS   r$   TextIOWrapperrU   rV   )r   rZ   fobj1lines1r[   fobj2lines2s          r   test_fileobj_readlinesz$UstarReadTest.test_fileobj_readlinesu   s   '&A(($$_5"'',,w8#> 	'%__&F	' XX!!'* 
	2d$$T*E__&FVV02S[#02VBZ402
	2 
	2	' 	'
	2 
	2s   ,D A+D D D)c                    | j                   j                  dt        d       | j                   j                  d      }t	        t
        j                  j                  t        d      d      5 }|j                         }d d d        | j                   j                  |      5 }t        t        j                  |            }| j                  |d       d d d        y # 1 sw Y   _xY w# 1 sw Y   y xY w)NrP   r   r^   r`   zfileobj.__iter__() failed)rH   rc   rd   rR   r&   re   rf   rg   rh   rS   listr$   ri   rU   )r   rZ   rj   rk   rl   rm   s         r   test_fileobj_iterzUstarReadTest.test_fileobj_iter   s    '&A(($$_5"'',,w8#> 	'%__&F	'XX!!'* 	1e"**512FVV/1	1 	1	' 	'	1 	1s   ,C 2C'C$'C0c                 2   | j                   j                  dt        d       t        t        j
                  j                  t        d      d      5 }|j                         }d d d        | j                   j                  d      }| j                   j                  |      5 }|j                         }|j                  d       | j                  d|j                         d       |j                  dd       | j                  d|j                         d       |j                  d	d
       | j                  d|j                         d       |j                  dd
       | j                  d|j                         d       |j                  d      }| j                  |dd d       |j                  dd       | j                  |j                  |j                         d       | j                  |j                         dd       |j                  |j                   d       | j                  d|j                         d       |j                  d       |j                         }|j                  d       |j                         }| j                  ||d       |j                  d       | j                  t        |j!                               |j                         d       |j                  d       | j                  t        |j!                               dz   |j                         d       |j                  d       |j!                         }| j                  |j                         |t        |      d  d       d d d        y # 1 sw Y    xY w# 1 sw Y   y xY w)NrP   r   r^   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 failedr   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)rH   rc   rd   r&   re   rf   rg   rT   rR   rS   seekrU   tellrW   rh   rV   readline)	r   r[   r   rZ   textss1s2lines	            r   test_fileobj_seekzUstarReadTest.test_fileobj_seek   s   ' & 	 	("'',,w8$? 	499;D	 (($$_5XX!!'* (	;d99;DIIaLQ		8:IIdAT499;=?IIeQT499;FHIIdAT499;FH		"AQT$35IIaOW\\499;68TYY[#KMIIw||mQ'Q		?AIIcN!BIIcN!BR8:IIaLS1499;9;IIcNS1C7DFIIaL==?DTYY[$s4yz*:9;O(	; (	;		 	(	; (	;s   N  KN N
Nc                 n   | j                   j                  d      5 }t        j                  |      }|j	                         j                  d      }| j                  t        |      t               	 |j                  d       d d d        y # t        $ r | j                  d       Y %w xY w# 1 sw Y   y xY w)NrP   rD   d   zseeking failed in text mode)rH   rS   r$   ri   rT   encoderU   r   rX   ry   AttributeErrorfailr   r[   r   s      r   test_fileobj_textzUstarReadTest.test_fileobj_text   s    XX!!/2 		9d##D)D99;%%k2DYt_n=9		#		9 		9 " 9 		789		9 		9s*   AB+1BB(%B+'B((B++B4c                    | j                   j                  |      5 }| j                   j                  |      5 }| j                  |j                  |j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   )rH   rS   rU   name)r   lnktyperegtypeabs        r   _test_fileobj_linkz UstarReadTest._test_fileobj_link   sm    XX!!'* 	-aXX!!'*	-./QVVQVV,	- 	- 	- 	- 	- 	-s"   A<'A0A<0A9	5A<<Bc                 (    | j                  dd       y )Nustar/lnktyperP   r   r   s    r   test_fileobj_link1z UstarReadTest.test_fileobj_link1       Ar   c                 (    | j                  dd       y )N./ustar/linktest2/lnktypeustar/linktest1/regtyper   r   s    r   test_fileobj_link2z UstarReadTest.test_fileobj_link2        ; 9	;r   c                 (    | j                  dd       y )Nustar/symtyperP   r   r   s    r   test_fileobj_symlink1z#UstarReadTest.test_fileobj_symlink1   r   r   c                 (    | j                  dd       y )N./ustar/linktest2/symtyper   r   r   s    r   test_fileobj_symlink2z#UstarReadTest.test_fileobj_symlink2   r   r   c                 (    | j                  dd       y )Nsymtype2rP   r   r   s    r   test_issue14160zUstarReadTest.test_issue14160   s    
O<r   c                 H    | j                  d       | j                  d       y )Nbareaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)add_dir_and_getmemberr   s    r   test_add_dir_getmemberz$UstarReadTest.test_add_dir_getmember   s    ""5)""7+r   getuidgetgidz'Missing getuid or getgid implementationc           	      X   d }t        j                         5  t        j                  t        d      5 }t        j
                  |_        	 t        j                  |       |j                  ||       t        j                  |       	 d d d        t        j                  t              5 }| j                  |j                  |      |j                  |dz                d d d        d d d        y # t        j                  |       w xY w# 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   y xY w)Nc                 "    dx| _         | _        | S )Nr   )uidgidrZ   s    r   r_   z3UstarReadTest.add_dir_and_getmember.<locals>.filter   s    (++GK'+Nr   wr^   /)r	   temp_cwdr'   r&   tmpnameUSTAR_FORMATformatre   mkdiraddrmdirrU   rR   )r   r   r_   rH   s       r   r   z#UstarReadTest.add_dir_and_getmember   s    	 ! 	gs+ #s$11
#HHTNGGDG0HHTN# g& #  MM$'MM$*-	 	 HHTN# # 	 	sR   D D
(C.2D!D )4DD .DDD	D D	D  D)N)r    r!   r"   r\   rn   rq   r   r   r   r   r   r   r   r   r   unittest
skipUnlesshasattrre   r   r+   r   r   rN   rN   j   s|    62$1/;b
9-
B;B;=,
 XX.H72x3HBDDr   rN   c                       e Zd Zy)GzipUstarReadTestNr    r!   r"   r+   r   r   r   r         r   r   c                       e Zd Zy)Bz2UstarReadTestNr   r+   r   r   r   r     r   r   r   c                       e Zd Zy)LzmaUstarReadTestNr   r+   r   r   r   r     r   r   r   c                   $    e Zd Zd Zd Zd Zd Zy)ListTestc                 d    t        j                  | j                  | j                        | _        y )Nr   rG   r   s    r   rI   zListTest.setUp  s    <<499=r   c                     t        j                  t        j                         dd      }t        j                  t
        d|      5   j                  j                  d       d d d        |j                         j                         } j                  d|        j                  d|        j                  d	|        j                  d
|        j                  d|        j                  d|        j                  d|        j                  d|        fd} j                   |d      |        j                   |d      |        j                   |d      |        j                   |d      |        j                   |d      |        j                  |d        j                  d|        j                  d|       y # 1 sw Y   lxY w)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                 t    | j                  j                  j                  d      }|j                  dd      S )Nsurrogateescaper   backslashreplace)decoderH   rF   r   )r   r}   r   s     r   convz ListTest.test_list.<locals>.conv   s0    **,=>A88G%788r   s   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$   ri   BytesIOr   	swap_attrsysrH   rp   detachgetvalueassertInassertRegexassertNotIn)r   tiooutr   s   `   r   	test_listzListTest.test_list  s   rzz|WdCsHc2 	)HHMM%M(	)jjl##%'-&,&,BCH2C82C8'-137	9 	dHI3Od ; <=@	Bd ; <=@	Bd67=d9:C@ 	 7 	8 	S)$C	) 	)s   GGc                    t        j                  t        j                         dd      }t        j                  t
        d|      5  | j                  j                  d       d d d        |j                         j                         }| j                  |d       | j                  d|       | j                  d	|       | j                  d
|       | j                  d|       | j                  d|       y # 1 sw Y   xY w)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$   ri   r   r   r   r   rH   rp   r   r   r   r   )r   r   r   s      r   test_list_verbosezListTest.test_list_verbose6  s    rzz|WdCsHc2 	(HHMM$M'	(jjl##% 	 = 	> 	137JCP 347	9 569	; 569	;'	( 	(s   C66C?c                    t        j                  t        j                         dd      }d }t        j                  t
        d|      5  | j                  j                  d || j                               d d d        |j                         j                         }| j                  d|       | j                  d	|       y # 1 sw Y   LxY w)
Nr   r   r   c              3   \   K   | j                         D ]  }d|j                  v s|  y w)Nreg)
getmembersr   )rH   rZ   s     r   membersz+ListTest.test_list_members.<locals>.membersP  s-     >>+ "GLL(!M"s   ",,r   F)r   r   r   r   )r$   ri   r   r   r   r   rH   rp   r   r   r   r   )r   r   r   r   s       r   test_list_memberszListTest.test_list_membersN  s    rzz|WdC	" sHc2 	DHHMM%1BMC	Djjl##%&,*C0		D 	Ds   	.CCN)r    r!   r"   rI   r   r   r   r+   r   r   r   r     s    >#%J;0
1r   r   c                       e Zd Zy)GzipListTestNr   r+   r   r   r   r   [  r   r   r   c                       e Zd Zy)Bz2ListTestNr   r+   r   r   r   r   _  r   r   r   c                       e Zd Zy)LzmaListTestNr   r+   r   r   r   r   c  r   r   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)CommonReadTestc                    t        t        d      5  	 d d d        | j                  t        j                  t                     | j                  t        j                  t        j                  t                           t        t        d      5 }| j                  t        j                  |             d d d        | j                  t        j                  t        j                  d                   y # 1 sw Y   xY w# 1 sw Y   MxY w)Nwbrs   s   invalid)	r&   r   assertFalser'   
is_tarfiler	   FakePathr$   r   r   r[   s     r   test_is_tarfile_erroneousz(CommonReadTest.test_is_tarfile_erroneousi  s    '4  		 	++G45 	++I,>,>w,GHI '4  	7DW//56	7 	++BJJz,BCD	 		7 	7s   C3%C?3C<?Dc           	      `   | j                  t        j                  | j                               | j                  t        j                  t	        j
                  | j                                     t        | j                  d      5 }| j                  t        j                  |             d d d        t        | j                  d      5 }| j                  t        j                  t        j                  |j                                            d d d        y # 1 sw Y   nxY w# 1 sw Y   y xY w)Nrs   )

assertTruer'   r   r#   r	   r   r&   r$   r   rT   r   s     r   test_is_tarfile_validz$CommonReadTest.test_is_tarfile_validz  s    **4<<89 	**9+=+=dll+KLM $,,% 	6OOG..t45	6 $,,% 	IOOG..rzz$))+/FGH	I 	I		6 	6	I 	Is   %D	AD$D!$D-c                    t        | j                  d      5 }t        j                  |       | j	                  |j                         d       d d d        t        | j                  d      5 }t        j                  |j                               }t        j                  |       | j	                  |j                         d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrs   r   )	r&   r#   r'   r   rU   rz   r$   r   rT   )r   r[   	file_likes      r   test_is_tarfile_keeps_positionz-CommonReadTest.test_is_tarfile_keeps_position  s     $,,% 	-t$TYY[!,	- $,,% 	2

499;/Iy)Y^^-q1	2 	2		- 	-	2 	2s   6C+ACCC"c                    t        j                  t        | j                  j	                  dd            5  	 d d d        	 t        j                  t        | j                        }|j                          | j                  |j                         g        j                          y # 1 sw Y   oxY w# t         j                  $ r | j                  d       Y Cw xY w# j                          w xY w)Nr`   r   z&tarfile.open() failed on empty archive)r'   r&   r   r   replacegetnamesassertListEqualr   	ReadErrorr   rK   r   rH   s     r   test_empty_tarfilez!CommonReadTest.test_empty_tarfile  s    
 \\'499#4#4S##>? 			,,w		2CLLN   !126IIK	 	
    	@II>?	@
 IIKs5   B% 4B1 4 C %B.1$CC CC C-c                     | j                  t        d      5  t        j                  d| j                         d d d        y # 1 sw Y   y xY w)Nxxx)assertRaisesRegexFileNotFoundErrorr'   r&   r   r   s    r   test_non_existent_tarfilez(CommonReadTest.test_non_existent_tarfile  s<     ##$5u= 	+LL		*	+ 	+ 	+s   !AA
c                 2   t        t        d      5  	 d d d        | j                  t        j                  t        j                   t        | j
                         | j                  t        j                  t        j                   t               y # 1 sw Y   {xY wNr   )r&   r   assertRaisesr'   r  r   r   s    r   test_null_tarfilez CommonReadTest.test_null_tarfile  sd     '4  		'++W\\7DIIN'++W\\7C	 	s   BBc                 <   t        d      j                  d      }dD ]  }| j                  t        d      5 }|j	                  |dz         t        j                  d      }t        |      |_        |j	                  |j                                |j	                  |       d d d        t        j                  t        dd	      }	 | j                  |j                         dgd
|z         |j                           y # 1 sw Y   ^xY w# |j                          w xY w)Nr   rx   )       ar   ru   foor`   T)r   ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   	randbytesr&   r   writer'   TarInforV   rW   tobufr  r   rK   )r   r   charr[   rZ   rH   s         r   test_ignore_zerosz CommonReadTest.test_ignore_zeros  s     ay""3'! 	D 7C( !D

4$;'!//%0"4y

7==?+

4 ! ,,wStDC$$S\\^eWI 		!	! ! 		s   A*C=%D	=D		Dc                    dD ]  }t        j                  t        d      5 }t        j                  d      }d|_        |j                  |t        j                  d             d d d        t        t        d      5 }|j                  |       d d d        t        j                  t              5 }| j                  t         j                  d      5  |D ]  } 	 d d d        d d d        t        j                  t              5 }|j                         }| j                  t         j                  d      5  |j                  |t        d	       d d d        | j                  t         j                  d      5  |j                  |      j                          d d d        d d d         y # 1 sw Y   FxY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   xY w)
N)rx   iX  ru   i  w:r  ru   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of datar   r^   )r'   r&   r   r  rW   addfiler$   r   truncater  r  nextrc   rd   rS   rT   )r   rW   rH   tr[   s        r   test_premature_end_of_archivez,CommonReadTest.test_premature_end_of_archive  s   * 	.Dgt, 8OOE*Arzz+678
 gu% $d#$ g& #++G,=,=?WX   
 g& .#HHJ++G,=,=?WX ;KK76K:; ++G,=,=?WX .OOA&++-.. .	.8 8
$ $  ; ;. .. .sx   AF';F4.!GGG1G12G(G13 G%G1'F1	4F>	G
GG	G"G1%G.*G11G;	c                     | j                  t        j                  d      5  t        j                  t	        j
                  d            5 }	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz%file could not be opened successfullyzrecursion.tar)r  r'   r  r&   r   findfiler  s     r   test_length_zero_headerz&CommonReadTest.test_length_zero_header  sf     ##G$5$57^_ 	g..?@ C	 	 	 	s#   )A)
AA)A&	"A))A2c                 .   | j                   j                  d      }| j                   j                  |      5 }| j                  |j                  d       | j                  t        |j                         | j                  |j                         d       | j                  |j                         d       | j                  r!| j                  t        |j                         n | j                  |j                         d       | j                  |j                  d       d d d        | j                  j                  d       | j                  |j                  d       | j                  t        |j                         | j                  |j                         d       | j                  |j                         d       | j                  r!| j                  t        |j                         y | j                  |j                         d       y # 1 sw Y   xY w)NrP   TF)rH   rR   rS   rU   r   r  r   filenoassertIsreadablewritable	is_streamseekableclosed)r   filer[   s      r   test_extractfile_attrsz%CommonReadTest.test_extractfile_attrs  sc   xx!!/2XX!!$' 		.4TYY8ndkk:MM$--/40MM$--/51~~!!.$--@dmmot4MM$++u-		. 	dkk4(O4.$++6dmmot,dmmou->>ndmm<MM$--/40%		. 		.s   C&HHN)r    r!   r"   r   r   r   r  r	  r  r  r  r"  r,  r+   r   r   r   r   g  s7    E"I
2"+D,.01r   r   c                   r   e Zd ZdZd Zd Zd Zd Zd Zd Z	d d	Z
d
 Zd Zd Zd Zd Zd Zd Zd Z ej(                   eed      d      ej0                  d               Zej4                  d        Zej4                  d        Zd Zd Zd Zd Z d Z!d Z" ejF                  e$du d      d        Z%d Z&y)!MiscReadTestBaseFc                      y r   r+   r   s    r   requires_name_attributez(MiscReadTestBase.requires_name_attribute  s    r   c                    | j                          t        | j                  d      5 }| j                  |j                  t
               t        j                  || j                        5 }| j                  |j                  t
               | j                  |j                  t        j                  j                  |j                               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNrs   fileobjr   )r0  r&   r#   assertIsInstancer   strr'   r   rU   re   rf   abspathr   r[   rH   s      r   test_no_name_argumentz&MiscReadTestBase.test_no_name_argument  s    $$&$,,% 	G!!$))S1d; Gs%%chh4  277??499+EFG	G 	GG G	G 	Gs%   AC*)A$CC*C'	#C**C3c                 T   t        | j                  d      5 }|j                         }d d d        t        j                        }| j                  t        t        |d       t        j                   || j                        }| j                  |j                         y # 1 sw Y   wxY w)Nrs   r   r3  )r&   r#   rT   r$   r   r  r   getattrr'   r   assertIsNoner   r   r[   r   rH   s       r   test_no_name_attributez'MiscReadTestBase.test_no_name_attribute  sz    $,,% 	99;D	zz$.'4@ll4dii8#((#	 	s   BB'c                 T   t        | j                  d      5 }|j                         }d d d        t        j                        }d|_        t        j                   || j                        5 }| j                  |j
                         d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nrs   r   r3  )	r&   r#   rT   r$   r   r   r'   r   r<  r=  s       r   test_empty_name_attributez*MiscReadTestBase.test_empty_name_attribute  s    $,,% 	99;D	zz$	\\$TYY7 	(3chh'	( 	(		 		( 	(s   B-BBB'c                    t        j                  | j                  t         j                        }t        |d      5 }| j	                  |j
                  t               t        j                  || j                        5 }| j                  |j
                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr2  )
re   r&   r#   O_RDONLYr5  r   intr'   r   r<  )r   fdr[   rH   s       r   test_int_name_attributez(MiscReadTestBase.test_int_name_attribute  s     WWT\\2;;/"d^ 	,t!!$))S1d; ,s!!#((+,	, 	,, ,	, 	,s$   AB6=B*B6*B3	/B66B?c                    | j                          t        j                  | j                        }t	        |d      5 }| j                  |j                  t               t        j                  || j                        5 }| j                  |j                  t               | j                  |j                  t        j                  j                  |j                               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr2  )r0  re   fsencoder#   r&   r5  r   bytesr'   r   rU   rf   r7  )r   r#   r[   rH   s       r   test_bytes_name_attributez*MiscReadTestBase.test_bytes_name_attribute(  s    $$&++dll+'4  	GD!!$))U3d; Gs%%chh6  277??499+EFG	G 	GG G	G 	Gs%   AC?>A$C3"C?3C<	8C??DNc                    || j                   }t        j                  j                  |      }t	        j
                  |      }t        j                  || j                        5 }| j                  |j                  |       d d d        | j                  |      5 }| j                  |j                  |       d d d        t        j                  j                  || j                        5 }| j                  |j                  |       d d d        | j                  dk(  r=t        j                  |d      5 }| j                  |j                  |       d d d        y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)Nr   r   r`   )r#   re   rf   r7  r	   r   r'   r&   r   rU   r   r)   r(   r   )r   r#   expectedrH   s       r   test_pathlike_namez#MiscReadTestBase.test_pathlike_name1  s;   ?llG77??7+$$W-\\'		2 	1cSXXx0	1\\'" 	1cSXXx0	1__!!'		!: 	1cSXXx0	1;;"s3 5s  845 5 	1 	1	1 	1	1 	15 5s0   $EE(*E45F E%(E14E= F	c                 `    | j                  t        j                  | j                               y r   )rL  re   rG  r#   r   s    r   test_pathlike_bytes_namez)MiscReadTestBase.test_pathlike_bytes_name@  s    DLL 9:r   c                    t        t        d      5  	 d d d        | j                  t        d      5  | j	                  t        d      }d d d        | j                  t        d      5  | j	                  t        d      }d d d        | j                  t        d      5  | j	                  t        d      }d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)Nr   zmode must be qrwr   )r&   r   r  
ValueErrorr)   r  s     r   test_illegal_mode_argz&MiscReadTestBase.test_illegal_mode_argC  s    '4  		##J@ 	-,,w,C	-##J@ 	.,,w-C	.##J@ 	,,,w+C	, 	,	 		- 	-	. 	.	, 	,s.   B;C&CC;CCCC(c                 B   t        j                  | j                  | j                        }	 |j	                          |j	                         }|j
                  }|j                  }|j                  |      5 }|j                         }d d d        |j                          | j                  | j                        5 }|j                  |       |j                  | j                  d|      5 }|j	                         }| j                  |j
                  |       |j                          | j                  |j                  |      j                         d       d d d        d d d        y # 1 sw Y   xY w# |j                          w xY w# 1 sw Y   3xY w# 1 sw Y   y xY w)Nr   rB   r   r4  zseek back did not work)r'   r&   r#   r   r  r   offsetrS   rT   rK   ry   rU   r   )r   rH   r  r   rV  fr   r[   s           r   test_fileobj_with_offsetz)MiscReadTestBase.test_fileobj_with_offsetM  sG    ll4<<dii8	HHJ
A66DXXF#  qvvx  IIK YYt||$ 	2IIf $,,T4@ 2CHHJ  .    !3!8!8!:D022		2 	2    IIK2 2		2 	2sI   A	E4 6E(E4 :0F*A-F	F(E1-E4 4F	F	FFc                 @   | j                  t        j                  t        j                  t        | j
                         t        t        d      5 }| j                  t        j                  t        j                  || j
                         d d d        y # 1 sw Y   y xY wr2  )r  r'   r  r&   r#   r   r   s     r   test_fail_compzMiscReadTestBase.test_fail_compi  so    '++W\\7DIIN'4  	<Dg//&*  <	< 	< 	<s   <BBc                     | j                   j                  d      }| j                  |j                  t        j
                  d       y )Nzmisc/dirtype-old-v7zv7 dirtype failed)rH   rR   rU   typer'   DIRTYPEr   rZ   s     r   test_v7_dirtypez MiscReadTestBase.test_v7_dirtypep  s6     (($$%:;w#	%r   c                 |    	 | j                   j                  d       y # t        $ r | j                  d       Y y w xY w)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))rH   rR   KeyErrorr   r   s    r   test_xstar_typez MiscReadTestBase.test_xstar_typex  s9    	MHH34 	MIIKL	Ms    ;;c                    | j                   D ]{  }| j                  t        |j                        dd|j                  z         |j                  j                  d      sR| j                  |j                  dd|j                  z         } y )N鏽>zwrong mtime for %szustar/r'   zwrong uname for %s)rH   rU   rC  mtimer   
startswithunamer^  s     r   test_check_membersz#MiscReadTestBase.test_check_members  ss    xx 	9GS/(7<<79<<**84W]]I(7<<79	9r   c                 t    | j                  | j                  j                         d   j                  dd       y )Nzmisc/eofzcould not find all members)rU   rH   r   r   r   s    r   test_find_membersz"MiscReadTestBase.test_find_members  s/    ,,.r277,	.r   linkMissing hardlink implementationc                 J   t        j                  t        dd      5 }|j                  dt        d       | j                  t        j                  t        j                  j                  t        d             |j                  dt        d       | j                  t        j                  t        j                  j                  t        d             t        t        j                  j                  t        d      d      5 }|j                         }d d d        | j                  t              t               |j                  d	t        d       | j                  t        j                  t        j                  j                  t        d	             t        t        j                  j                  t        d	      d      5 }|j                         }d d d        | j                  t        |      t               d d d        y # 1 sw Y   xY w# 1 sw Y   =xY w# 1 sw Y   y xY w)
Nrt   rD   )
errorlevelrF   rP   r   r^   r   rs   r   )r'   r&   r#   rc   rd   
addCleanupr	   unlinkre   rf   rg   rT   rU   r   rX   )r   rH   rW  r   s       r   test_extract_hardlinkz&MiscReadTestBase.test_extract_hardlink  sm   
 \\'a+F 	>#KKK@OOI,,bggll7O.TUKKK@OOI,,bggll7O.TUbggll7O<dC  qvvx Yt_n=KKK@OOI,,bggll7O.TUbggll7O<dC  qvvx Yt_n=	> 	>      	> 	>s=   C#H HB/H H'HH
	HH	HH"c                    t        j                  t        d      }t        j                  j                  t        d      }t        j                  |       	 |D cg c]  }|j                         s| }}|j                  ||d       |D ]  }t        j                  j                  ||j                        }t        j                  dk7  rJ| j                  |j                  dz  t        j                  |      j                   dz  |j                         d }t        j                  j#                  |      }d	j%                   ||j&                         ||      |      }	| j                  |j&                  ||	        	 |j)                          t+        j,                  |       y c c}w # |j)                          t+        j,                  |       w xY w)
NrD   rF   
extractallfully_trustedr^   win32  c                     t        | t              r dj                  | | j                               S dj                  |       S )Nz{} ({})z
{!r} (int))
isinstancefloatr   hex)re  s    r   format_mtimez6MiscReadTestBase.test_extractall.<locals>.format_mtime  s6    !%/(//uyy{CC+22599r   z,tar mtime {0} != file time {1} of path {2!a})r'   r&   r#   re   rf   rg   rd   r   isdirru  r   r   platformrU   r   statst_modegetmtimer   re  rK   r	   rmtree)
r   rH   DIRr  directoriesrZ   rf   r}  
file_mtimeerrmsgs
             r   test_extractallz MiscReadTestBase.test_extractall  sc    ll7[9ggll7L1
	"&)7QWWY17K7NN3OND& Dww||C6<<7*$$W\\E%9%'WWT]%:%:U%B%,\\3:
  WW--d3
GNN / ,   
FC#D& IIKS!- 8* IIKS!s%   F, F'0F'4DF, 'F, ,'Gc                    d}t         j                  j                  t        d      }t        j                  |       	 t        j                  t        d      5 }|j                  |      }|j                  ||d       t         j                  j                  ||      }| j                  t         j                  j                  |      |j                         t        j                  dk7  r2| j                  t        j                  |      j                   dz  d	       d d d        t#        j$                  |       y # 1 sw Y   xY w# t#        j$                  |       w xY w)
Nustar/dirtype
extractdirrD   rt  rv  rf   r_   rw  rx  i  )re   rf   rg   rd   r   r'   r&   r#   rR   rc   rU   r  re  r   r  r  r  r	   r  r   dirtyper  rH   rZ   	extracteds         r   test_extract_directoryz'MiscReadTestBase.test_extract_directory  s    !ggll7L1
		"g< P--0G#oFGGLLg6	  !1!1)!<gmmL<<7*$$RWWY%7%?%?%%GOP S!P P S!s$   E CD:E :E?E Ec                    t        j                  t              dz  }t        j                  |      5  t        j                  t        d      5 }|D cg c]  }|j                         s| }}| j                  t        d      5 }|j                  ||       d d d        | j                  j                  t               d d d        d d d        y c c}w # 1 sw Y   ?xY w# 1 sw Y   #xY w# 1 sw Y   y xY w)Nru  rD   rt  Use the filter argument)pathlibPathrd   r	   temp_dirr'   r&   r#   r~  assertWarnsRegexDeprecationWarningru  rU   filename__file__)r   r  rH   r  r  cms         r   2test_deprecation_if_no_filter_passed_to_extractallzCMiscReadTestBase.test_deprecation_if_no_filter_passed_to_extractall  s    ll7#l2s#	4LL;7	4;>&)7QWWY17K7&&'9;TU 1Y[sK01 R[[(3	4 	4 	4 81 1	4 	4 	4 	4sS   C.C"C)C-C"C(C" C.C"CC""C+	'C..C7c                    d}t        j                  t              dz  }t        j                  |      5  t        j                  t        d      5 }|j                  |      }| j                  t        d      5 }|j                  ||       d d d        | j                  j                  t               d d d        d d d        y # 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  ru  rD   rt  r  rf   )r  r  rd   r	   r  r'   r&   r#   rR   r  r  rc   rU   r  r  )r   r  r  rH   rZ   r  s         r   /test_deprecation_if_no_filter_passed_to_extractz@MiscReadTestBase.test_deprecation_if_no_filter_passed_to_extract  s    !ll7#l2s#	4LL;7	4;>mmG,G&&'9;TU /Y[G#./ R[[(3	4 	4 	4
/ /	4 	4 	4 	4s;   C(C8C(C4CC
CC	CC&c                 n   t         j                  j                  t        d      }t	        j
                  |      5  t        j                  t        d      5 }|D cg c]  }|j                         s| }}|j                  t	        j                  |      |d       |D ]e  }t         j                  j                  ||j                        }| j                  t         j                  j                  |      |j                         g 	 d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nru  rD   rt  rv  r^   )re   rf   rg   rd   r	   r  r'   r&   r#   r~  ru  r   r   rU   r  re  )r   r  rH   r  r  rZ   rf   s          r   test_extractall_pathlike_dirz-MiscReadTestBase.test_extractall_pathlike_dir  s    ggll7L1$ 	H\\'K8	H<?&)7QWWY17K7NN9--c2KNX& Hww||C6  !1!1$!7GH		H 	H 	H7	H 	H 	H 	Hs<   D+DD1D5BD	D+DD(	$D++D4c                 &   d}t         j                  j                  t        d      }t	        j
                  |      5  t        j                  t        d      5 }|j                  |      }|j                  |t	        j                  |      d       t         j                  j                  ||      }| j                  t         j                  j                  |      |j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  ru  rD   rt  rv  r  )re   rf   rg   rd   r	   r  r'   r&   r#   rR   rc   r   rU   r  re  r  s         r   test_extract_pathlike_dirz*MiscReadTestBase.test_extract_pathlike_dir  s    !ggll7L1$ 	I\\'K8	I<?mmG,GKKi&8&8&=oKVS'2IRWW--i8'--H	I 	I 	I 	I 	I 	Is$   DBC;*D;D	 DDc                    t         j                  j                  t        d      }t	        |d      5 }|j                  d       d d d        	 t        j                  t        j                        }	 |j                  |       | j                  d       t!        j"                  |       y # 1 sw Y   fxY w# t        j                  $ r( | j                  |j                  j                         Y \w xY w# t!        j"                  |       w xY w)Nemptyr   r   zReadError not raised)re   rf   rg   rd   r&   r  object__new__r'   r(   __init__r   r  r   r4  r*  r	   rq  )r   r  r[   rH   s       r   test_init_close_fobjz%MiscReadTestBase.test_init_close_fobj   s     Wg.% 	$JJsO			$..1C2U# 		01U#	 	 $$ 4 2 234
 U#s;   B(#C2 0B4 C2 (B148C/,C2 .C//C2 2D	c                 >   t        j                  | j                        5 }t        ||      D ]Y  \  }}| j	                  |j
                  |j
                         | j	                  |j                         |j                                [ 	 d d d        y # 1 sw Y   y xY wr   )r'   r&   r#   ziprU   rV  get_info)r   rH   m1m2s       r   test_parallel_iterationz(MiscReadTestBase.test_parallel_iteration  sx     \\$,,' 	?3c3- ?B  BII6  >?	? 	? 	?s   A)BBzrequires zlibc                 <   t         j                  j                  d      5 }t        j                  |_        | j                  t        j                        5  t        j                  | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nztarfile.TarInfo.fromtarfile)r   mockpatchzliberrorside_effectr  r'   r  r&   r#   )r   r  s     r   test_zlib_error_does_not_leakz.MiscReadTestBase.test_zlib_error_does_not_leak  sx     ]]  !>? 	+4#zzD""7#4#45 +T\\*+	+ 	++ +	+ 	+s#   5B B5BB	BBc                    t        j                         }t        j                  |d      }|j	                          |j                  d       t        j                  |d      5 }| j                  |j                         d        d d d        |j                  d       t        j                  |d      5 }| j                  |j                         d        d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nr   r3  r   r|r`   )r$   r   r'   r&   rK   ry   rU   r  )r   rD  tfs      r   test_next_on_empty_tarfilez+MiscReadTestBase.test_next_on_empty_tarfile$  s    ZZ\\\"3/



\\"40 	.BRWWY-	. 	
\\"3/ 	.2RWWY-	. 	.		. 	.	. 	.s   $!C5!C+C(+C4r   )'r    r!   r"   r(  r0  r9  r>  r@  rE  rI  rL  rN  rS  rX  rZ  r_  rb  rh  rk  r   r   r   re   r	   skip_unless_symlinkrr  skip_unless_working_chmodr  r  r  r  r  r  r  r  skipIfr  r  r  r+   r   r   r.  r.    s   IG$(,G5;,28<%M9. XV,:<""> #<>$ ((" )"> ((" )"
44HI$&? X__TT\?3+ 4+.r   r.  c                       e Zd ZdZy)MiscReadTestN)r    r!   r"   rZ  r+   r   r   r  r  1  s    Nr   r  c                       e Zd Zy)GzipMiscReadTestNr   r+   r   r   r  r  4  r   r   r  c                       e Zd Zd Zy)Bz2MiscReadTestc                 &    | j                  d       y )NzBZ2File have no name attributeskipTestr   s    r   r0  z'Bz2MiscReadTest.requires_name_attribute8  s    67r   Nr    r!   r"   r0  r+   r   r   r  r  7  s    8r   r  c                       e Zd Zd Zy)LzmaMiscReadTestc                 &    | j                  d       y )NzLZMAFile have no name attributer  r   s    r   r0  z(LzmaMiscReadTest.requires_name_attribute<  s    78r   Nr  r+   r   r   r  r  ;  s    9r   r  c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)StreamReadTestr  Tc                 ,   | j                   D ]O  }|j                         s| j                   j                  |      5 }	 	 |j                  d      }sn	 d d d        Q y # t        j
                  $ r | j                  d       Y 6w xY w# 1 sw Y   xY w)Nrx   z6simple read-through using TarFile.extractfile() failed)rH   isregrS   rT   r'   StreamErrorr   )r   rZ   r[   bufs       r   test_read_throughz StreamReadTest.test_read_throughE  s     xx 	G==?%%g. $B"iin    	 #.. B		 #A BB	 s.   B
A B
 $BB
BB

B	c                 D   | j                   j                         }| j                   j                  |      5 }|j                         }d d d        | j	                  t              |j                  d       | j	                  t        |      t        d       y # 1 sw Y   PxY w)NrQ   )	rH   r  rS   rT   rU   rV   rW   r   rX   rY   s       r   r\   z(StreamReadTest.test_fileobj_regular_fileU  s{    ((--/XX!!'* 	d99;D	TGLL0	24.0	2		 	s   BBc                     | j                   j                         }| j                   j                  |d         5 }| j                  t        j
                  |j                         d d d        y # 1 sw Y   y xY wNr   )rH   r   rS   r  r'   r  rT   )r   tarinfosrW  s      r   test_provoke_stream_errorz(StreamReadTest.test_provoke_stream_error^  s[    88&&(XX!!(1+. 	;!g11166:	; 	; 	;s   +A--A6c                    t        j                  t        d      }	 | j                  }	 |j	                         }|j	                         }|n| j                  |d       |j                         s|j                         r:| j                  t         j                        5  |j                  |       d d d        |j                  |      }|j                  |      }|| j                  |d       | j                  |j                         |j                         d       	 |j                          y # 1 sw Y   xY w# |j                          w xY w)NrD   rt  zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r'   r&   r#   rH   r  assertIsNotNoneislnkissymr  r  rS   rU   rT   rK   )r   tar1tar2t1t2v1v2s          r   test_compare_membersz#StreamReadTest.test_compare_membersc  s   ||Gk:	88DYY[YY[:$$R)@A88:**7+>+>? -((,-%%b)%%b):$$R)FG  BGGI24#    JJL- - JJLs%   BD> D20A0D> 2D;7D> >EN)	r    r!   r"   r   r(  r  r\   r  r  r+   r   r   r  r  @  s     FI 2;
r   r  c                       e Zd Zy)GzipStreamReadTestNr   r+   r   r   r  r  ~  r   r   r  c                       e Zd Zy)Bz2StreamReadTestNr   r+   r   r   r  r    r   r   r  c                       e Zd Zy)LzmaStreamReadTestNr   r+   r   r   r  r    r   r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)DetectReadTestc                     	 t        j                  ||      }|j                          y # t         j                  $ r}| j	                          Y d }~y d }~ww xY wr   )r'   r&   rK   r  r   )r   r   r   rH   es        r   _testfunc_filezDetectReadTest._testfunc_file  sE    	,,tT*C IIK    	IIKK	s   ) AAAc                     	 t        |d      5 }t        j                   |||      }d d d        j                          y # 1 sw Y   xY w# t        j                  $ r}| j	                          Y d }~y d }~ww xY w)Nrs   r4  )r&   r'   rK   r  r   )r   r   r   rW  rH   r  s         r   _testfunc_fileobjz DetectReadTest._testfunc_fileobj  se    	dD! :Qll4q9:
 IIK: :   	IIKK	s-   A A A  A	A A9A44A9c                    | j                   r2| j                  t        j                        5  t        j                  t
        d| j                   z          d d d        | j                  t        j                        5  t        j                  t
        d| j                   z          d d d        | j                  t        j                        5  t        j                  | j
                  d       d d d        | j                  t        j                        5  t        j                  | j
                  d       d d d         || j
                  d        || j
                  d| j                   z           || j
                  d        || j
                  d| j                   z           || j
                  d       y # 1 sw Y   fxY w# 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w)NrB   r   r  r`   zr:*r|*)r   r  r'   r  r&   r#   )r   testfuncs     r   _test_modeszDetectReadTest._test_modes  sW   ;;""7#4#45 ?W4$+++=>?""7#4#45 ?W4$+++=>?""7#4#45 6T\\56""7#4#45 6T\\56s#tdkk12u%tdkk12u%? ?? ?6 66 6s/   )F:=)G"G"G :GGG G)c                 :    | j                  | j                         y r   )r  r  r   s    r   test_detect_filezDetectReadTest.test_detect_file  s    ,,-r   c                 :    | j                  | j                         y r   )r  r  r   s    r   test_detect_fileobjz"DetectReadTest.test_detect_fileobj  s    //0r   N)r    r!   r"   r  r  r  r  r  r+   r   r   r  r    s    & .1r   r  c                       e Zd Zy)GzipDetectReadTestNr   r+   r   r   r  r    r   r   r  c                       e Zd Zd Zy)Bz2DetectReadTestc                    t        t        d      5 }|j                         }d d d        t        j                  t
        dd      5 }|j                         d d d        | j                  t
        d       y # 1 sw Y   VxY w# 1 sw Y   ,xY w)Nrs   r   rt   compresslevelr  )r&   r#   rT   r5   r7   r   r  r  r   s      r   test_detect_stream_bz2z(Bz2DetectReadTest.test_detect_stream_bz2  sw    
 '4  	D99;D	 [[$a8 	DJJt	 	GU+	 		 	s   A7B7B BN)r    r!   r"   r  r+   r   r   r  r    s    ,r   r  c                       e Zd Zy)LzmaDetectReadTestNr   r+   r   r   r   r     r   r   r   c                       e Zd ZdZd Zy) GzipBrokenHeaderCorrectExceptionz>
    See: https://github.com/python/cpython/issues/107396
    c                     t        j                  d      }| j                  t        j                        5  t        j
                  |d       d d d        y # 1 sw Y   y xY w)Ns               zr|gzr3  )r$   r   r  r'   r  r&   )r   rW  s     r   runTestz(GzipBrokenHeaderCorrectException.runTest  sN    JJ
 w001 	1LL0	1 	1 	1s   AAN)r    r!   r"   __doc__r  r+   r   r   r  r    s    
1r   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)MemberReadTestNc           	         |[| j                   j                  |      5 }| j                  t        |j	                               |d|j
                  z         d d d        d|d<   d|d<   d|d<   d|j
                  vr
d	|d
<   d	|d<   |j                         D ]2  \  }}| j                  t        ||      |d|d|j
                         4 y # 1 sw Y   vxY w)Nwrong sha256sum for %srd  re    r   r   r   zold-v7r'   rg  gnamezwrong value in z
 field of )rH   rS   rU   r   rT   r   itemsr;  )r   rZ   chksumkwargsrW  kvs          r   _test_memberzMemberReadTest._test_member  s    %%g. A!  1668!4f07<<?AA 'wuu7<<''F7O'F7OLLN 	IDAqWWa0!78',,GI	IA As   8CCc                 j    | j                   j                  d      }| j                  |dt               y )NrP   c  rW   r  rH   rR   r  rX   r^  s     r   test_find_regtypez MemberReadTest.test_find_regtype  s+    (($$_5'^Dr   c                 j    | j                   j                  d      }| j                  |dt               y )Nzustar/conttyper  r  r  r^  s     r   test_find_conttypez!MemberReadTest.test_find_conttype  s,    (($$%56'^Dr   c                 `    | j                   j                  d      }| j                  |d       y )Nr  r   rW   rH   rR   r  r^  s     r   test_find_dirtypez MemberReadTest.test_find_dirtype  s)    (($$_5'*r   c                 `    | j                   j                  d      }| j                  |d       y )Nzustar/dirtype-with-size   r  r  r^  s     r   test_find_dirtype_with_sizez*MemberReadTest.test_find_dirtype_with_size  s*    (($$%>?',r   c                 b    | j                   j                  d      }| j                  |dd       y )Nr   r   rP   rW   linknamer  r^  s     r   test_find_lnktypez MemberReadTest.test_find_lnktype  s+    (($$_5'ODr   c                 b    | j                   j                  d      }| j                  |dd       y )Nr   r   r   r!  r  r^  s     r   test_find_symtypez MemberReadTest.test_find_symtype  s+    (($$_5'I>r   c                 d    | j                   j                  d      }| j                  |ddd       y )Nzustar/blktyper      rW   devmajordevminorr  r^  s     r   test_find_blktypez MemberReadTest.test_find_blktype  -    (($$_5'ABr   c                 d    | j                   j                  d      }| j                  |ddd       y )Nzustar/chrtyper   rt   r'  r(  r  r^  s     r   test_find_chrtypez MemberReadTest.test_find_chrtype  r,  r   c                 `    | j                   j                  d      }| j                  |d       y )Nzustar/fifotyper   r  r  r^  s     r   test_find_fifotypez!MemberReadTest.test_find_fifotype
  s*    (($$%56'*r   c                 j    | j                   j                  d      }| j                  |dt               y )Nzustar/sparse P r  rH   rR   r  sha256_sparser^  s     r   test_find_sparsezMemberReadTest.test_find_sparse  s+    (($$^4'mDr   c                 j    | j                   j                  d      }| j                  |dt               y )N
gnu/sparser2  r  r3  r^  s     r   test_find_gnusparsez"MemberReadTest.test_find_gnusparse  s+    (($$\2'mDr   c                 j    | j                   j                  d      }| j                  |dt               y )Ngnu/sparse-0.0r2  r  r3  r^  s     r   test_find_gnusparse_00z%MemberReadTest.test_find_gnusparse_00  ,    (($$%56'mDr   c                 j    | j                   j                  d      }| j                  |dt               y )Ngnu/sparse-0.1r2  r  r3  r^  s     r   test_find_gnusparse_01z%MemberReadTest.test_find_gnusparse_01  r<  r   c                 j    | j                   j                  d      }| j                  |dt               y )Ngnu/sparse-1.0r2  r  r3  r^  s     r   test_find_gnusparse_10z%MemberReadTest.test_find_gnusparse_10  r<  r   c                 j    | j                   j                  d      }| j                  |dt               y )Nu   ustar/umlauts-ÄÖÜäöüßr  r  r  r^  s     r   test_find_umlautsz MemberReadTest.test_find_umlauts"  s2    (($$ &D E'^Dr   c                 \    d}| j                  || j                  j                                y )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   rH   r   )r   r   s     r   test_find_ustar_longnamez'MemberReadTest.test_find_ustar_longname'  s"    <dDHH--/0r   c                 j    | j                   j                  d      }| j                  |dt               y )Nzmisc/regtype-old-v7r  r  r  r^  s     r   test_find_regtype_oldv7z&MemberReadTest.test_find_regtype_oldv7+  s,    (($$%:;'^Dr   c                     | j                   j                          t        j                  | j                  | j
                  d      | _         | j                   j                  d      }| j                  |dt               y )NrD   rE   u   pax/umlauts-ÄÖÜäöüßr  r  )	rH   rK   r'   r&   r#   r   rR   r  rX   r^  s     r   test_find_pax_umlautsz$MemberReadTest.test_find_pax_umlauts/  s_    <<499)46(($$ &D E'^Dr   r   )r    r!   r"   r  r  r  r  r  r#  r%  r+  r.  r0  r5  r8  r;  r?  rB  rD  rF  rH  rJ  r+   r   r   r  r    so    I"EE+-E?CC+EEEEEE
1EEr   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)LongnameTestc                     | j                   dz   dz   dz   }	 | j                  j                  |      }| j                  j                  t        j                  d       y # t        $ r | j	                  d       Y Hw xY w)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)	subdirrH   rR   ra  r   assertNotEqualr\  r'   r]  )r   rO  rZ   s      r   test_read_longnamezLongnameTest.test_read_longname:  sp    ;;$|3j@	,hh((2G 	GLL'//*	,  	,II*+	,s   A A;:A;c                 
   | j                   dz   dz   dz   }| j                   dz   dz   dz   }	 | j                  j                  |      }| j                  j                  |d       y # t        $ r | j	                  d       Y :w xY w)Nr   rN  rO  longlinkzlonglink not foundzlinkname wrong)rP  rH   rR   ra  r   rU   r"  )r   rO  rT  rZ   s       r   test_read_longlinkzLongnameTest.test_read_longlinkD  s    ;;$|3j@;;$|3j@	,hh((2G 	))85EF  	,II*+	,s   A% %BBc                    | j                   dz   dz   dz   }| j                  j                  |      }|j                  }| j                  j                  j                  |       t        j                  | j                  j                  j                  d            }| j                  t        j                        5  t        j                  d|       d d d        y # 1 sw Y   y xY w)Nr   rN  rO  i   zfoo.tar)r   r4  )rP  rH   rR   rV  r4  ry   r$   r   rT   r  r'   r  r&   )r   rO  rZ   rV  r[   s        r   test_truncated_longnamez$LongnameTest.test_truncated_longnameM  s    ;;$|3j@(($$X.f%zz$((**//89w001 	7LLi6	7 	7 	7s   9CC#c                    | j                   dz   dz   dz   }| j                  j                  |      j                  }t	        t
        d      5 }|j                  |       t        j                  j                  |j                  d      dd      }| j                  |j                  | j                         d d d        y # 1 sw Y   y xY w)Nr   rN  rO  rs   rx   rD   strict)rP  rH   rR   rV  r&   r#   ry   r'   r  frombufrT   rU   r\  longnametype)r   rO  rV  r[   rZ   s        r   test_header_offsetzLongnameTest.test_header_offsetV  s     ;;$|3j@##H-44'4  	>DIIfoo--diin.98EGW\\4+<+<=		> 	> 	>s   A(B<<Cc           	         d}t        j                         5  t        j                  t        d      5 }| j
                  |_        	 t        j                  |       |j                  |       t        j                  |j                  d             	 d d d        t        j                  t              5 }| j                  |j                  |             | j                  |j                  |j                  d                   d d d        d d d        y # t        j                  |j                  d             w xY w# 1 sw Y   xY w# 1 sw Y   GxY w# 1 sw Y   y xY w)Nzfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/r   r   )r	   r   r'   r&   r   r   re   r   r   r   rstripr  rR   removesuffix)r   longdirrH   s      r   test_longname_directoryz$LongnameTest.test_longname_directorya  s   #! 
	Ogs+ 2s![[
2HHW%GGG$HHW^^C012 g& O#$$S]]7%;<$$S]]73G3G3L%MNO
	O 
	O HHW^^C012 2O O
	O 
	OsS   ED;&D+$D;!E1AEE&D88D;;E	 EE	EEN)r    r!   r"   rR  rU  rW  r\  ra  r+   r   r   rL  rL  8  s    ,G7	>Or   rL  c                   n    e Zd ZdZej
                  Zej                  Zd Z	d Z
d Zd Zd Zed        Zy)	GNUReadTestgnuc                    | j                   j                  |t        d       t        j                  j                  t        |      }t        |d      5 }|j                         }d d d        | j                  t              t        d|z         | j                         r?t        j                  |      }| j                  |j                  dz  |j                         y y # 1 sw Y   |xY w)Nr   r^   rs   r	  rx   )rH   rc   rd   re   rf   rg   r&   rT   rU   r   r4  _fs_supports_holesr  
assertLess	st_blocksst_size)r   r   r  r[   r   r}   s         r   _test_sparse_filezGNUReadTest._test_sparse_file}  s    wv677<<.(D! 	T99;D	4-(4/	1 ""$!AOOAKK#-qyy9 %	 	s   CC(c                 &    | j                  d       y )Nr7  rj  r   s    r   test_sparse_file_oldz GNUReadTest.test_sparse_file_old  s    |,r   c                 &    | j                  d       y )Nr:  rl  r   s    r   test_sparse_file_00zGNUReadTest.test_sparse_file_00      /0r   c                 &    | j                  d       y )Nr>  rl  r   s    r   test_sparse_file_01zGNUReadTest.test_sparse_file_01  rp  r   c                 &    | j                  d       y )NrA  rl  r   s    r   test_sparse_file_10zGNUReadTest.test_sparse_file_10  rp  r   c                     t         j                  j                  d      rt        j                  j                  t        d      } t        | d      5 }|j                  d       |j                  d       |j                          d d d        t        j                  |       }t        j                  |        |j                  dz  |j                  k  S y# 1 sw Y   PxY w)Nlinuxzsparse-testr   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrx   F)r   r  rf  re   rf   rg   rd   r&   ry   r  r  r  r	   rq  rh  ri  )r   r[   r}   s      r   rf  zGNUReadTest._fs_supports_holes  s     <<""7+77<<7DdD!  T		$

;'	 
 AT"KK#%		12   s   3CCN)r    r!   r"   rP  r'   GNUTYPE_LONGNAMEr[  
GNU_FORMATr   rj  rm  ro  rr  rt  staticmethodrf  r+   r   r   rc  rc  p  sJ    F++LF
:-111  r   rc  c                   L    e Zd ZdZej
                  Zej                  Zd Z	d Z
y)PaxReadTestpaxc                 >   t        j                  t        d      }	 |j                  d      }| j	                  |j
                  d       | j	                  |j                  d       | j	                  |j                  j                  d      d       |j                  d      }| j	                  |j
                  d	       | j	                  |j                  d       | j	                  |j                  j                  d      d       |j                  d
      }| j	                  |j
                  d       | j	                  |j                  d       | j	                  |j                  j                  d      d       |j                          y # |j                          w xY w)NrD   rt  pax/regtype1r  r   zVENDOR.umlautsu   ÄÖÜäöüßzpax/regtype2r   zpax/regtype3r'   )
r'   r&   r#   rR   rU   rg  r  pax_headersgetrK   r   rH   rZ   s      r   test_pax_global_headersz#PaxReadTest.test_pax_global_headers  sA   ll7[9	mmN3GW]]E2W]]E2W00445EF;= mmN3GW]]B/W]]E2W00445EF;= mmN3GW]]I6W]]I6W00445EF;= IIKCIIKs   EF
 
Fc                 z   t        j                  t        d      }	 |j                  d      }| j	                  |j
                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  t        |j                        t               | j	                  t        |j                  d         d       | j	                  t        |j                  d         d       |j                          y # |j                          w xY w)	NrD   rt  zpax/regtype4r  {   g  ^Aatimectime)r'   r&   r#   rR   rU   rW   r   r   re  r\  r{  r  rK   r  s      r   test_pax_number_fieldsz"PaxReadTest.test_pax_number_fields  s    ll7[9
	mmN3GW\\40W[[#.W[[#.W]]L9T'--0%8U7#6#6w#?@,OU7#6#6w#?@,OIIKCIIKs   C:D( (D:N)r    r!   r"   rP  r'   XHDTYPEr[  
PAX_FORMATr   r  r  r+   r   r   r{  r{    s%    F??LF.r   r{  c                       e Zd Zd Zd Zy)WriteTestBasec                    t        j                         }t        j                  || j                        5 }|j                  t        j                  d             d d d        | j                  |j                  d       |j                         }~t        j                          | j                  |j                         | j                  ||j                                y # 1 sw Y   xY w)Nr3  r  z#external fileobjs must never closed)r$   r   r'   r&   r   r  r  r   r*  r   r   
gc_collectrU   )r   r[   rH   r   s       r   test_fileobj_no_closez#WriteTestBase.test_fileobj_no_close  s    zz|\\$TYY7 	03KK./	0&KL}}%t}}/	0 	0s   %C  C)c                    t        j                  t        | j                        5 }t        j                  d      }t         j
                  t         j                  z
  |_        |j                  |t        j                  d|j                  z               d d d        | j                  t        d      5 }| j                  t        |j                               t         j
                  dz         d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w)Nr  r  rs   rw   )r'   r&   r   r   r  
RECORDSIZE	BLOCKSIZErW   r  r$   r   rU   rV   rT   )r   rH   r  r[   s       r   test_eof_markerzWriteTestBase.test_eof_marker  s    
 \\'499- 	6&A'''*;*;;AFKK2::dQVVm45	6
 YYw% 	GS-w/A/AA/EF	G 	G	6 	6
	G 	Gs   A.C51;D5C>D
N)r    r!   r"   r  r  r+   r   r   r  r    s    
0Gr   r  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	 e
j                   eed      d	      d
        Zej                   d        Zd Zd ZddZej                   d        Zd Zd Zd Zd Zy)	WriteTestr  c                    d}t        j                  t        | j                        }	 t        j                  |      }|j                  |       |j                          t        j                  t              }	 | j                  |j                         d   |d       |j                          y # |j                          w xY w# |j                          w xY w)Nd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r'   r&   r   r   r  r  rK   rU   r   )r   r   rH   r  s       r   test_100_char_namezWriteTest.test_100_char_name  s    
 !ll7DII.	%AKKNIIKll7#	S\\^A.79 IIK IIK IIKs   &B- 8$C -B?Cc                    t        j                  t        | j                        }	 t        j
                  j                  t        d      }t        |d      5 }|j                  d       d d d        |j                  |       |j                          | j                  t        j
                  j                  t              dd       y # 1 sw Y   _xY w# |j                          w xY w)Nr+  r      aaar   ztarfile is empty)r'   r&   r   r   re   rf   rg   rd   r  r   rK   assertGreatergetsize)r   rH   rf   r[   s       r   test_tar_sizezWriteTest.test_tar_size  s    ll7DII.	77<<0DdD! #T

6"#GGDMIIK277??73Q"	$# # IIKs#   0C C(C CC C$c                 <   t        j                  t        | j                        }	 t        j
                  j                  t        d      }t        |d      5  	 d d d        |j                  |      }| j                  |j                  d       t        |d      5 }|j                  d       d d d        |j                  |      }| j                  |j                  d       |j                          y # 1 sw Y   xY w# 1 sw Y   SxY w# |j                          w xY w)Nr+  r   r   r  r'  )r'   r&   r   r   re   rf   rg   rd   
gettarinforU   rW   r  rK   )r   rH   rf   rZ   r[   s        r   test_file_sizezWriteTest.test_file_size  s    ll7DII.	77<<0DdD! nnT*GW\\1-dD! #T

6"#nnT*GW\\1-IIK 
# #
 IIKs<   0D	 C1AD	 C=+5D	 1C:6D	 =DD	 	Dc                    t         j                  j                  t        d      }t        j                  |       	 t        j                  t        | j                        }	 |j                  |      }| j                  |j                  d       |j                          	 t        j                  |       y # |j                          w xY w# t        j                  |       w xY w)N	directoryr   )re   rf   rg   rd   r   r'   r&   r   r   r  rU   rW   rK   r	   r   r   rf   rH   rZ   s       r   test_directory_sizezWriteTest.test_directory_size-  s    ww||G[1
	",,w		2C...  q1		OOD! 		OOD!s#   $C	  -B4 C	 4CC	 	C c                 L   t         j                  j                  t        d      }t        j                  |       t        t         j                  j                  |d      d      j                          t        t         j                  j                  |d      d      j                          	 t        j
                  t        | j                        }	 t        j                  j                  d      5 }ddg|_        |j                  |       d d d        g }|j                         D ]=  }|j!                  t         j                  j#                  |j$                        d          ? | j'                  |g d       |j                          	 t)        j*                  t         j                  j                  |d             t)        j*                  t         j                  j                  |d             t)        j,                  |       y # 1 sw Y   xY w# |j                          w xY w# t)        j*                  t         j                  j                  |d             t)        j*                  t         j                  j                  |d             t)        j,                  |       w xY w)Nr  1r   2z
os.listdirrj  )r  r  r  )re   rf   rg   rd   r   r&   rK   r'   r   r   r   r  r  return_valuer   r   appendsplitr   rU   r	   rq  r   )r   rf   rH   mock_listdirpathsms         r   test_ordered_recursionz WriteTest.test_ordered_recursion<  s   ww||G[1
RWW\\$$c*002RWW\\$$c*002	",,w		2C	]]((6 ",14c
L-GGDM" ) <ALLqvv!6r!:;<  (?@		RWW\\$45RWW\\$45OOD!" " 		RWW\\$45RWW\\$45OOD!s>   +$H& H /H
A.H 8H& H
H H##H& &A=J#c                 P   t        j                  t        | j                        5 }t        j
                  j                  t        d      }t        |d      5 }|j                  d       d d d        |j                  t        j                  |            }|j                  |      }| j                  |j                  t               | j                  |j                  |j                         | j                  |j                   d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr+  r   r  r'  )r'   r&   r   r   re   rf   rg   rd   r  r  r	   r   r5  r   r6  rU   rW   )r   rH   rf   r[   rZ   tarinfo2s         r   test_gettarinfo_pathlike_namez'WriteTest.test_gettarinfo_pathlike_nameR  s    \\'499- 	.77<<0DdD! #T

6"#nnY%7%7%=>G~~d+H!!',,4W\\8==9W\\1-	. 	.# #	. 	.s$   1DD(BDD	DD%rl  rm  c                 @   t         j                  j                  t        d      }t         j                  j                  t        d      }t	        |d      5 }|j                  d       d d d        	 t        j                  ||       	 t        j                  t        | j                        }	 |j                  |       |j                  |      }| j                  |j                  d       |j                          	 t!        j"                  |       t!        j"                  |       y # 1 sw Y   xY w# t        $ r}| j                  d|z         Y d }~d }~ww xY w# |j                          w xY w# t!        j"                  |       t!        j"                  |       w xY w)Nrl  link_targetr   r  os.link(): %sr   )re   rf   rg   rd   r&   r  rl  PermissionErrorr  r'   r   r   r  rU   rW   rK   r	   rq  )r   rl  targetr[   r  rH   rZ   s          r   test_link_sizezWriteTest.test_link_size]  s+    ww||GV,g}5&$ 	4JJv		/GGFD!	#,,w		2Cv&...  q1		V$T"#	 	  	/MM/A-..	/ 		V$T"sH   D&0D2 $E1 ,>E *E1 &D/2	E;EEE..E1 1,Fc                    t         j                  j                  t        d      }t        j                  d|       	 t        j                  t        | j                        }	 |j                  |      }| j                  |j                  d       |j                          	 t        j                  |       y # |j                          w xY w# t        j                  |       w xY w)Nsymlinkr  r   )re   rf   rg   rd   r  r'   r&   r   r   r  rU   rW   rK   r	   rq  r  s       r   test_symlink_sizezWriteTest.test_symlink_sizeu  s    ww||GY/


=$'	#,,w		2C...  q1		T" 		T"s#   $C
 !-B5 C
 5CC
 
C!c                 <   t         j                  j                  t              }t	        j
                  t        | j                        }	 | j                  |j                  |d       |j                  |       | j                  |j                         g d       t        j                  t              5  |j                  |       d d d        | j                  |j                         g d       |j                          y # 1 sw Y   ;xY w# |j                          w xY w)Nzarchive name must be absolutezadded the archive to itself)re   rf   r7  r   r'   r&   r   rU   r   r   r   r	   
change_cwdrd   rK   )r   dstnamerH   s      r   test_add_selfzWriteTest.test_add_self  s    ''//'*ll7DII.	SXXw35GGGS\\^R13 %%g. ! !S\\^R13 IIK! !
 IIKs%   	A(D	 1C=)D	 =DD	 	Dc                    t         j                  j                  t        d      }t        j                  |       	 dD ]7  }t         j                  j                  ||      }t        j                  |       9 d }t        j                  t        | j                  d      }	 |j                  |d|       |j                          | j                  t              5  |j                  |ddd |       d d d        t        j                  t        d	      }	 |D ]:  }| j                  |j                   d
       | j                  |j"                  d       < | j                  t%        |j'                               d       |j                          	 t        j(                  |       y # |j                          w xY w# 1 sw Y   xY w# |j                          w xY w# t        j(                  |       w xY w)Nr_   )r  r   bazc                 |    t         j                  j                  | j                        dk(  ry d| _        d| _        | S )Nr   r  r  )re   rf   basenamer   r   rg  r   s    r   r_   z%WriteTest.test_filter.<locals>.filter  s3    77##GLL1U:! %r   rD   rt  	empty_dir)arcnamer_   Tr`   r  r  r'  )re   rf   rg   rd   r   r	   create_empty_filer'   r&   r   r   r   rK   r  	TypeErrorrU   r   rg  rV   r   r  )r   tempdirr   r_   rH   rZ   s         r   test_filterzWriteTest.test_filter  s}   '',,w1
	&- 2ww||GT2++D12 ,,w		KHCVD		 ""9- BdD&AB ,,w,C" ;G$$W[[#6$$W]]E:;   S^^%5!6:		W% 		B B 		W%sU   A%G !F" 5%G F70"G A(G ;G "F44G 7G <G GG G/Nc                    t         j                  j                  t        d      }|st	        j
                  |       nt        j                  |       t        j                  t        | j                        }	 |j                  ||       |j                          t        j                  t        d      }	 |j                         }|j                          |st	        j                  |       nt	        j                  |       | j!                  |j"                  |xs  |j%                  t         j&                  d             y # |j                          w xY w# |j                          w xY w)Nr  r  r`   r   )re   rf   rg   rd   r	   r  r   r'   r&   r   r   r   rK   r  rq  r   rU   r   r   sep)r   rf   cmp_pathdirr  rH   r  s          r   _test_pathnamezWriteTest._test_pathname  s     ggll7E*'',HHSMll7DII.	GGCG&IIKll7C(	
AIIKS!OOC !FT\\"&&#-FG IIK IIKs   7E 5E EE(c                    t         j                  j                  t        d      }t         j                  j                  t        d      }t        j                  |       	 t         j                  j                  |d      }t         j                  j                  |d      }t        |d      5 }|j                  d       d d d        t        j                  ||       t        j
                  |d      5 }|j                  |d       |j                  |d       d d d        t        j
                  |d	      5 }	 |j                  |d
       d d d        t        j                  |       t        j                  |       y # 1 sw Y   xY w# 1 sw Y   txY w# t        $ r | j                  d       Y gw xY w# 1 sw Y   lxY w# t        j                  |       t        j                  |       w xY w)Ntestsymlinksztestsymlinks.tarsourcer  r   z
something
r  rw   ro  rv  r  z&extractall failed with symlinked files)re   rf   rg   rd   r   r&   r  r  r'   r   ru  OSErrorr   r	   rq  r  )r   r  temparchivesource_filetarget_filerW  rH   s          r   test_extractall_symlinksz"WriteTest.test_extractall_symlinks  s    '',,w7ggll7,>?
	&'',,wx8K'',,wy9Kk#& '!&'JJ{K0k3/ 83X6Y78 ka8 HCHNN*9 # ;H [)W%!' '8 8  HIIFGHH H [)W%ss   AG +E?=4G 1'FG 7F79FG ?FG FG F41F73F44F77G <G ,G/c                 $   | j                  d       | j                  t        j                  j                  ddd             | j                  t        j                  j                  ddd             | j                  t        j                  j                  dd             | j                  t        j                  j                  ddd             | j                  t        j                  j                  dddd             | j                  t        j                  j                  dddd             | j                  t        j                  j                  dddd             | j                  t        j                  j                  dd             | j                  t        j                  j                  ddd             | j                  t        j                  j                  dddd             | j                  t        j                  j                  dddd             | j                  dt        j                  z   t        j                  z   dz          | j                  dt        j                  z   t        j                  z   dd       y )Nr  .r   ..T)r  )r  re   rf   rg   r  r   s    r   test_pathnameszWriteTest.test_pathnames  s   E"BGGLLU;<BGGLLe<=BGGLLe45BGGLLeS9:BGGLLeS%@ABGGLLeT5ABBGGLLeT5ABBGGLLu56BGGLLud;<BGGLLuc5ABBGGLLudEBCEBFFNRVV3e;<EBFFNRVV3UEr   c                     t         j                  dk(  r| j                  dd       y | j                  dd       | j                  dd       y )Nrw  zC:\foor  z/fooz///foo)r   r  r  r   s    r   test_abs_pathnameszWriteTest.test_abs_pathnames  s>    <<7"	51.%0r   c                 2   t        j                  t              5  t        j                  t
        | j                        }	 |j                  d       |j                          t        j                  t
        d      }	 |D ]G  }|j                  dk7  s| j                  |j                  j                  d      |j                         I 	 |j                          	 d d d        y # |j                          w xY w# |j                          w xY w# 1 sw Y   y xY w)Nr  r`   z./)r	   r  rd   r'   r&   r   r   r   rK   r   r   rf  r   rH   r  s      r   test_cwdzWriteTest.test_cwd  s    !!'* 	,,w		2C		,,w,C IAvv}(9(9$(?HI 			 	
 		 			 	sA   %D C#*D<C87C8	D#C55D8D

DDc           
      h   t         t        t        fD ]   G fddt        j                        } |       }| j                        5  t        j                  t        | j                  |t        j                  ddi      }d d d        | j                  |j                          y # 1 sw Y   'xY w)Nc                       e Zd ZdZ fdZy)8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTc                 0    | j                   r	d| _         y NF)first)r   r   exctypes     r   r  z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.write"  s    zz%*
% "r   N)r    r!   r"   r  r  )r  s   r   BadFiler     s    &r   r  nonr  )r4  r   r  )r  EOFErrorRuntimeErrorr$   r   r  r'   r&   r   r   r  r   r*  )r   r  rW  rH   r  s       @r   test_open_nonwritable_fileobjz'WriteTest.test_open_nonwritable_fileobj  s    ,6 	'G&"** & 	A""7+ All7DIIq*1*<*<05w/?AA QXX&	'A As   	9B((B1	r  )r    r!   r"   r   r  r  r  r  r  r  r   r   r   re   r  r	   r  r  r  r  r  r  r  r  r  r  r+   r   r   r  r    s    F($ "",	. XV,:<#<#, ""# ##$"&PH: ""& #&4F"1"'r   r  c                       e Zd Zy)GzipWriteTestNr   r+   r   r   r  r  /  r   r   r  c                       e Zd Zy)Bz2WriteTestNr   r+   r   r   r  r  3  r   r   r  c                       e Zd Zy)LzmaWriteTestNr   r+   r   r   r  r  7  r   r   r  c                       e Zd ZdZdZd Z ej                  ej                  dk7  xr	  e
ed      d       ej                  ej                  xs ej                  d      d               Zy)	StreamWriteTestw|Nc                 >   t        j                  t        | j                        }|j	                          | j
                  rg| j                         }t        t        d      5 }|j                         }d d d        |j                        }| j                  |j                  d       n.| j                  t              5 }|j                         }d d d        | j                  j                  d      t         j                  d       y # 1 sw Y   xY w# 1 sw Y   FxY w)Nrs   zfound trailing datar  zincorrect zero padding)r'   r&   r   r   rK   decompressorrT   
decompressr   unused_datarU   countr  )r   rH   decr[   r   s        r   test_stream_paddingz#StreamWriteTest.test_stream_padding@  s    ll7DII.		##%Cgt$ #yy{#>>$'DS__.CD7# #tyy{#E*G,>,>0	2# #
# #s   !D=DDDrw  umaskzMissing umask implementationz$Emscripten's/WASI's umask is a stub.c                    t         j                  j                  t              rt	        j
                  t               t        j                  d      }	 t        j                  t        | j                        }|j                          t        j                  t              j                  dz  }| j                  |dd       t        j                  |       y # t        j                  |       w xY w)N   rx  i  zwrong file permissions)re   rf   existsr   r	   rq  r  r'   r&   r   rK   r  r  rU   )r   original_umaskrH   r   s       r   test_file_modezStreamWriteTest.test_file_modeP  s     77>>'"W%%	%,,w		2CIIK777#++e3DT5*BCHH^$BHH^$s   A-C C-)r    r!   r"   r   r  r  r   r   r   r  r   re   r  r   is_emscriptenis_wasir  r+   r   r   r  r  ;  st    FL2  X0IWR5I79X__0.%	9%r   r  c                       e Zd Zd Zy)GzipStreamWriteTestc                    t        j                  t        | j                        j	                          t        j                  t              j                  d      }t        j                  j                  t              |vsJ y)zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1rt  N)r'   r&   r   r   rK   r  r  	read_textre   rf   dirname)r   payloads     r    test_source_directory_not_leakedz4GzipStreamWriteTest.test_source_directory_not_leakedg  sV    
 	Wdii(..0,,w'1191Ewww'w666r   N)r    r!   r"   r
  r+   r   r   r  r  f  s    7r   r  c                   .    e Zd Zerej                  ZydZy)Bz2StreamWriteTestN)r    r!   r"   r5   BZ2Decompressorr  r+   r   r   r  r  q  s    *-3&&L4Lr   r  c                   .    e Zd Zerej                  ZydZy)LzmaStreamWriteTestN)r    r!   r"   r=   LZMADecompressorr  r+   r   r   r  r  t  s    ,04((LdLr   r  c                   "    e Zd ZdZd Zd Zd Zy)_CompressedWriteTestsF   And we move to Bristol where they have a special, Very Silly candidatec                 ,   t        j                         }t        j                  t        | j
                  ||      5 }|j                  t        j                  d      t        j                  | j                               d d d        |S # 1 sw Y   |S xY w)Nr  r  )	r$   r   r'   r&   r   r   r  r  r  )r   r  r[   tarfls       r   _compressed_tarz$_CompressedWriteTest._compressed_tar}  sn    zz|\\'499d(57 	K:?MM'//%0"**T[[2IJ	K 	K s   AB		Bc                 r    | j                  |      }| j                  |j                         dd d|z         y )Nr   rv   s   BZh%d1AY&SYr  rU   r   r   r  r[   s      r   _test_bz2_headerz%_CompressedWriteTest._test_bz2_header  s7    ##M22.'-7	9r   c                 l    | j                  |      }| j                  |j                         d d d       y )Nr'  s   r  r  s      r   _test_gz_headerz$_CompressedWriteTest._test_gz_header  s/    ##M2!,o>r   N)r    r!   r"   r  r  r  r  r+   r   r   r  r  w  s    &F9
?r   r  c                       e Zd ZdZd Zy)Bz2CompressWriteTestr  c                 j    | j                  d       | j                  d       | j                  d       y Nrt      	   r  r   s    r   test_compression_levelsz,Bz2CompressWriteTest.test_compression_levels  ,    a a a r   Nr    r!   r"   r   r#  r+   r   r   r  r    s    F!r   r  c                       e Zd ZdZd Zy)Bz2CompressStreamWriteTestr  c                 j    | j                  d       | j                  d       | j                  d       y r  r"  r   s    r   r#  z2Bz2CompressStreamWriteTest.test_compression_levels  r$  r   Nr%  r+   r   r   r'  r'    s    F!r   r'  c                       e Zd ZdZd Zy)GzCompressWriteTestr  c                 j    | j                  d       | j                  d       | j                  d       y r  r  r   s    r   r#  z+GzCompressWriteTest.test_compression_levels  ,    QQQr   Nr%  r+   r   r   r*  r*    s    F r   r*  c                       e Zd ZdZd Zy)GzCompressStreamWriteTestr  c                 j    | j                  d       | j                  d       | j                  d       y r  r,  r   s    r   r#  z1GzCompressStreamWriteTest.test_compression_levels  r-  r   Nr%  r+   r   r   r/  r/    s    F r   r/  c                   @    e Zd Zd Z ej
                         d        Zy)CompressLevelRaisesc                     d}t        j                         }| j                  t              5  t	        j
                  t        d||       d d d        y # 1 sw Y   y xY w)Nr   r  r  )r$   r   r  r  r'   r&   r   r  s      r   test_compresslevel_wrong_modesz2CompressLevelRaises.test_compresslevel_wrong_modes  sK    zz|y) 	KLL$MJ	K 	K 	Ks   AAc                    t        j                         }| j                  t              5  t	        j
                  t        d|d       d d d        | j                  t              5  t	        j
                  t        d|d       d d d        | j                  t              5  t	        j
                  t        d|d       d d d        y # 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)Nzw:bz2r   r  rv   zw|bz2)r$   r   r  rR  r'   r&   r   r   s     r   test_wrong_compresslevelsz-CompressLevelRaises.test_wrong_compresslevels  s     zz|z* 	BLL'4qA	Bz* 	CLL'4rB	Cz* 	CLL'4rB	C 	C		B 	B	C 	C	C 	Cs#   C%C CCCC(N)r    r!   r"   r4  r   requires_bz2r6  r+   r   r   r2  r2    s)    K WC Cr   r2  c                   X    e Zd Zd ZddZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)GNUWriteTestc                 .    t        |      dz  dz   }|dz  S )Nrx   rt   )rV   )r   r}   blockss      r   _lengthzGNUWriteTest._length  s    Q3"|r   Nc                     d}t        |      t        j                  kD  r|dz  }|| j                  |      z  }|5t        |      t        j                  kD  r|dz  }|| j                  |      z  }|S )Nrx   )rV   r'   LENGTH_NAMEr<  LENGTH_LINK)r   r   rl  r  s       r   
_calc_sizezGNUWriteTest._calc_size  sm    t9w***SLET\\$''ED	G,?,? ?SLET\\$''Er   c                    t        j                  |      }|r||_        t         j                  |_        t        j
                  t        d      }	 t         j                  |_        |j                  |       | j                  ||      }|j                  }| j                  ||d       |j                          t        j
                  t              }	 |j                         }| j                  |d       | j                  |j                   |j                   d       | j                  |j                  |j                  d       |j                          y # |j                          w xY w# |j                          w xY w)Nr   z%GNU longname/longlink creation failedzunable to read longname member)r'   r  r"  LNKTYPEr\  r&   r   rx  r   r  r@  rV  rU   rK   r  r  r   )r   r   rl  rZ   rH   r  r  members           r   _testzGNUWriteTest._test  s   //$'#G"??GLll7C(	 ++CJKK t,BBR%LMIIKll7#		XXZF  46W\\6;;46W--v46 IIK IIK IIKs   AE A0E& E#&E8c                 &    | j                  d       y )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rD  r   s    r   test_longname_1023zGNUWriteTest.test_longname_1023  s    

12r   c                 &    | j                  d       y )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/longnamerG  r   s    r   test_longname_1024zGNUWriteTest.test_longname_1024  s    

23r   c                 &    | j                  d       y )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_rG  r   s    r   test_longname_1025zGNUWriteTest.test_longname_1025  s    

34r   c                 (    | j                  dd       y )Nr     longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnkrG  r   s    r   test_longlink_1023zGNUWriteTest.test_longlink_1023  s    

69:r   c                 (    | j                  dd       y )Nr      longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlinkrG  r   s    r   test_longlink_1024zGNUWriteTest.test_longlink_1024  s    

6:;r   c                 (    | j                  dd       y )Nr     longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_rG  r   s    r   test_longlink_1025zGNUWriteTest.test_longlink_1025  s    

6;<r   c                 (    | j                  dd       y )NrF  rP  rG  r   s    r   test_longnamelink_1023z#GNUWriteTest.test_longnamelink_1023  s    

11	3r   c                 (    | j                  dd       y )NrJ  rS  rG  r   s    r   test_longnamelink_1024z#GNUWriteTest.test_longnamelink_1024  s    

22	4r   c                 (    | j                  dd       y )NrM  rV  rG  r   s    r   test_longnamelink_1025z#GNUWriteTest.test_longnamelink_1025
  s    

33	5r   r   )r    r!   r"   r<  r@  rD  rH  rK  rN  rQ  rT  rW  rY  r[  r]  r+   r   r   r9  r9    s>    :345;<=345r   r9  c                       e Zd ZdZd Zy)DeviceHeaderTestr  c                 8   t         j                  j                  t        d      }t        j                  |       	 t        j                  t        | j                        }	 t        j                  d      }t        j                  d      }t
        j                  |_        t
        j                  |_        |j                  |       |j                  |       |j                          t        j                  t        d      }	 |j                  d      }|j                  d      }|j                          | j!                  |j"                  d       | j!                  |j$                  d       | j!                  |j"                  d       | j!                  |j$                  d       t        t        d      5 }|j'                         }d d d        |j(                  |j*                   }	||j(                  |j*                   }
t-        dd	      }| j!                  |	|   d
       | j!                  |
|   d       t/        j0                  |       y # |j                          w xY w# |j                          w xY w# 1 sw Y   xY w# t/        j0                  |       w xY w)Ndevice_header_testmy_block_devicer   my_regular_filer`   r   rs   iI  iY  s   0000000 0000000 s                   )re   rf   rg   rd   r   r'   r&   r   r   r  BLKTYPEr\  REGTYPEr  rK   rR   rU   r)  r*  rT   rV  offset_dataslicer	   r  )r   r  rH   	input_blk	input_reg
output_blk
output_reginfiler  buf_blkbuf_regdevice_headerss               r   *test_headers_written_only_for_device_filesz;DeviceHeaderTest.test_headers_written_only_for_device_files  s   '',,w(<=
#	&,,w		2C#OO1BC	#OO1BC	!(	!(	I&I&		 ,,w,C ]]+<=
 ]]+<=
		Z00!4Z00!4Z00!4Z00!4 gt$ $kkm$*++J,B,BCG*++J,B,BCG #31NW^46FGW^4jAW%3 		 		$ $ W%sV   $J  A8I *J "I! %BJ 5I6A0J IJ !I33J 6I?;J JN)r    r!   r"   r   rq  r+   r   r   r_  r_    s    F'&r   r_  c                       e Zd ZdZej
                  j                  ed      Zd Z	e
d        Ze
d        Zd Zd Zd Zd	 Zd
 Zd Zy)
CreateTestzx:
spameggs42c                 6    t        j                  t               y r   )r	   rq  r   r   s    r   rI   zCreateTest.setUpC  s    !r   c                 |    t        | j                  d      5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nr   r  )r&   	file_pathr  )clsr[   s     r   
setUpClasszCreateTest.setUpClassF  s3    #--& 	$JJv	 	 	s   2;c                 B    t        j                  | j                         y r   )r	   rq  rw  rx  s    r   tearDownClasszCreateTest.tearDownClassK  s    'r   c                    t        j                  t        | j                        5 }|j	                  | j
                         d d d        | j                  t              5 }|j                         }d d d        | j                  t              d       | j                  d|d          y # 1 sw Y   hxY w# 1 sw Y   FxY wNrt   rt  r   )r'   r&   r   r   r   rw  r)   r   rU   rV   r   r   tobjnamess      r   test_createzCreateTest.test_createO  s    \\'499- 	%HHT^^$	% \\'" 	$dMMOE	$UQ'lE!H-	% 	%	$ 	$s   B(B4(B14B=c                    t        j                  t        | j                        5 }|j	                  | j
                         d d d        | j                  t              5  t        j                  t        | j                        }d d d        | j                  t              5 }|j                         }d d d        | j                  t              d       | j                  d|d          y # 1 sw Y   xY w# 1 sw Y   txY w# 1 sw Y   RxY wr~  )r'   r&   r   r   r   rw  r  FileExistsErrorr)   r   rU   rV   r   r  s      r   test_create_existingzCreateTest.test_create_existingX  s    \\'499- 	%HHT^^$	% / 	4<<3D	4 \\'" 	$dMMOE	$UQ'lE!H-	% 	%	4 	4	$ 	$s#   C*%C6 D*C36C?Dc                 d   | j                  t        d      5 }|j                  | j                         d d d        | j                  t              5 }|j	                         }d d d        | j                  t              d       | j                  d|d          y # 1 sw Y   hxY w# 1 sw Y   FxY wNxrt   rt  r   )r)   r   r   rw  r   rU   rV   r   r  s      r   test_create_taropenzCreateTest.test_create_taropend  s    \\'3' 	%4HHT^^$	% \\'" 	$dMMOE	$UQ'lE!H-	% 	%	$ 	$s   BB&B#&B/c                    | j                  t        d      5 }|j                  | j                         d d d        | j	                  t
              5  | j                  t        d      5  	 d d d        d d d        | j                  t              5 }|j                         }d d d        | j                  t              d       | j                  d|d          y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   ^xY wr  )
r)   r   r   rw  r  r  r   rU   rV   r   r  s      r   test_create_existing_taropenz'CreateTest.test_create_existing_taropenm  s    \\'3' 	%4HHT^^$	% / 	gs+ 	 \\'" 	$dMMOE	$UQ'lE!H-	% 	% 	 		$ 	$s;   CC0'C$)C0C<C!$C-	)C00C9<Dc                    t        j                  t        j                  t              | j
                        5 }| j                  |j                  t               | j                  |j                  t        j                  j                  t                     |j                  t        j                  | j                               |j                         }d d d        | j                  t!              d       | j#                  d|d          | j%                  t              5 }|j                         }d d d        | j                  t!        |      d       | j#                  d|d          y # 1 sw Y   xY w# 1 sw Y   FxY wr~  )r'   r&   r	   r   r   r   r5  r   r6  rU   re   rf   r7  r   rw  r   rV   r   r)   r  s      r   test_create_pathlike_namez$CreateTest.test_create_pathlike_namez  s   \\),,W5tyyA 	$T!!$))S1TYY(@AHHY''78MMOE		$
 	UQ'lE!H-\\'" 	$dMMOE	$UQ'lE!H-	$ 	$	$ 	$s   BE+!E7+E47F c                    | j                  t        j                  t              d      5 }| j	                  |j
                  t               | j                  |j
                  t        j                  j                  t                     |j                  t        j                  | j                               |j                         }d d d        | j                  t              d       | j                  d|d          | j                  t              5 }|j                         }d d d        | j                  t        |      d       | j                  d|d          y # 1 sw Y   xY w# 1 sw Y   FxY wr  )r)   r	   r   r   r5  r   r6  rU   re   rf   r7  r   rw  r   rV   r   r  s      r   !test_create_taropen_pathlike_namez,CreateTest.test_create_taropen_pathlike_name  s	   \\),,W5s; 	$t!!$))S1TYY(@AHHY''78MMOE		$
 	UQ'lE!H-\\'" 	$dMMOE	$UQ'lE!H-	$ 	$	$ 	$s   BEE)E&)E2N)r    r!   r"   r   re   rf   rg   rd   rw  rI   classmethodry  r|  r  r  r  r  r  r  r+   r   r   rs  rs  =  sf    FWl3I"   ( (.
.....r   rs  c                       e Zd Zd Zy)GzipCreateTestc                    t        j                  t        | j                  d      5 }|j	                  | j
                         d d d        t        j                  t        dd      5 }	 d d d        y # 1 sw Y   0xY w# 1 sw Y   y xY w)Nrt   r  zr:gzr'   r&   r   r   r   rw  r   r  s     r   test_create_with_compresslevelz-GzipCreateTest.test_create_with_compresslevel  sl    \\'499A> 	%$HHT^^$	%\\'6; 	t	 		% 	%	 	   A2'A>2A;>BNr    r!   r"   r  r+   r   r   r  r        r   r  c                       e Zd Zd Zy)Bz2CreateTestc                    t        j                  t        | j                  d      5 }|j	                  | j
                         d d d        t        j                  t        dd      5 }	 d d d        y # 1 sw Y   0xY w# 1 sw Y   y xY w)Nrt   r  r:bz2r  r  s     r   r  z,Bz2CreateTest.test_create_with_compresslevel  sl    \\'499A> 	%$HHT^^$	%\\'7!< 		 		% 	%	 	r  Nr  r+   r   r   r  r    r  r   r  c                       e Zd Zd Zy)LzmaCreateTestc                     t        j                  t        | j                  d      5 }|j	                  | j
                         d d d        y # 1 sw Y   y xY w)Nrt   )presetr  r  s     r   test_create_with_presetz&LzmaCreateTest.test_create_with_preset  s=    \\'499Q7 	%4HHT^^$	% 	% 	%s   AAN)r    r!   r"   r  r+   r   r   r  r    s    %r   r  c                       e Zd ZdZdZdZy)CreateWithXModeTestr  N)r    r!   r"   r   r  r  r+   r   r   r  r    s    F#' r   r  rl  rm  c                   *    e Zd Zd Zd Zd Zd Zd Zy)HardlinkTestc                 R   t         j                  j                  t        d      | _        t         j                  j                  t        d      | _        t        | j                  d      5 }|j                  d       d d d        	 t        j                  | j                  | j
                         t        j                  t        d      | _        | j                  j                  | j                         y # 1 sw Y   yxY w# t        $ r}| j                  d|z         Y d }~sd }~ww xY w)Nr  r   r      foor  r   )re   rf   rg   rd   r  r   r&   r  rl  r  r  r'   r   rH   r   )r   r[   r  s      r   rI   zHardlinkTest.setUp  s    77<</77<</$((D! 	TJJv		/GGDHHdhh' <<-TXX	 	
  	/MM/A-..	/s$   )C3*C? 3C<?	D&D!!D&c                     | j                   j                          t        j                  | j                         t        j                  | j
                         y r   )rH   rK   r	   rq  r  r   r   s    r   rL   zHardlinkTest.tearDown  s4    ""r   c                     | j                   j                  | j                        }| j                  |j                  t
        j                  d       y )Nzadd file as regular failed)rH   r  r  rU   r\  r'   rf  r^  s     r   test_add_twicezHardlinkTest.test_add_twice  s9     ((%%dhh/w,	.r   c                     | j                   j                  | j                        }| j                  |j                  t
        j                  d       y )Nzadd file as hardlink failed)rH   r  r   rU   r\  r'   rB  r^  s     r   test_add_hardlinkzHardlinkTest.test_add_hardlink  s7    ((%%dhh/w-	/r   c                     d| j                   _        | j                   j                  | j                        }| j	                  |j
                  t        j                  d       y )NTzdereferencing hardlink failed)rH   dereferencer  r   rU   r\  r'   rf  r^  s     r   test_dereference_hardlinkz&HardlinkTest.test_dereference_hardlink  sC    #((%%dhh/w/	1r   N)r    r!   r"   rI   rL   r  r  r  r+   r   r   r  r    s    #
./
1r   r  c                   &    e Zd ZddZd Zd Zd Zy)PaxWriteTestNc                 p   t        j                  |      }|r||_        t         j                  |_        t        j
                  t        dt         j                        }	 |j                  |       |j                          t        j
                  t              }	 |r1|j                         d   j                  }| j                  ||d       n0|j                         d   j                  }| j                  ||d       |j                          y # |j                          w xY w# |j                          w xY w)Nr   r   r   zPAX longlink creation failedzPAX longname creation failed)r'   r  r"  rB  r\  r&   r   r  r  rK   r   rU   r   )r   r   rl  rZ   rH   lns          r   rD  zPaxWriteTest._test  s    //$'#G"??GLll7C0B0BC	KK IIKll7#	NN$Q'00  q*HINN$Q',,  q*HIIIK IIK IIKs   D A#D# D #D5c                 x   dddddd}t        j                  t        dt         j                  |      }	 |j	                  t        j
                  d             |j                          t        j                  t        d	
      }	 | j                  |j                  |       | j                  |j                         d   j                  |       |j                  j                         D ]o  \  }}| j                  t        |      t               | j                  t        |      t               |t         j                  v sW	 t        j                  |   |       q 	 |j                          y # |j                          w xY w# t        t         f$ r | j#                  d       Y w xY w# |j                          w xY w)Nr   0z1.23   äöütest)r  r   re  r  r  r   )r   r  rD   rt  r   z"unable to convert pax header field)r'   r&   r   r  r  r  rK   rU   r  r   r  assertIsNotr\  rH  PAX_NUMBER_FIELDSr  rR  r   )r   r  rH   keyvals        r   test_pax_global_headerz#PaxWriteTest.test_pax_global_header  s`   & &( ll7C0B0B')	KK/0IIK ll7[9	S__k:S^^-a0<<kJOO113 HS  cE2  cE2'333H11#6s;H IIK# IIK &z2 H		"FGH IIKs<   $E, B9F'  FF' ,E> F$!F' #F$$F' 'F9c                 t   ddd}t        j                  t        dt         j                  d      }	 t        j                         }d|_        d|_        ||_        |j                  |       |j                          t        j                  t        d	      }	 |j                         d
   }| j                  |j                  |       | j                  |j
                  d       | j                  |j                  d       |j                          y # |j                          w xY w# |j                          w xY w)Nr  123)rf   r   r   rD   r   rF   r     rt  r   r  )r'   r&   r   r  r  r   r   r  r  rK   r   rU   )r   r  rH   r  s       r   test_pax_extended_headerz%PaxWriteTest.test_pax_extended_header  s      %U3ll7C0B0B$/1	!A#AFAE'AMKKNIIKll7[9	 #AQ]]K8QVVU+QUUC(IIK IIK IIKs   :D A'D% D"%D7c                 .   t        j                         }d|_        d|_        d|_        d|_        d|_        |j                         }|j                  |d      }| j                  |d   d       | j                  |d	   t               | j                  |d	   d
       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |dt        d      z   dz   t        d      z   dz   t        d      z   dz   t        d      z   dz   t        d      z   dz   t        d      z   dz   t        d      z          t        j                         }d|_        d|_        d|_        d|_        d|_        |j                         }|j                  |d      }| j                  |d   d       | j                  |d	   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |dt        d      z   dz   t        d      z   dz   t        d      z   dz   dz   d z   t        d!      z   d"z   t        d#      z   d$z   t        d      z   dz   t        d      z          y )%Nr  g@@r   r  |   rD   rt  r   re  r
  rW   r   r   s   ././@PaxHeaderV   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(	 r  i  r   s9   0000000 0000000 0000000 00000000130 00000000000 010207  xs   15 path=foo㍴
16 uid=16777216
s$   16 gid=16777217
20 size=10000000000
s   21 mtime=10000000000
i  s   foo?`   s9   0000644 0000000 0000000 00000000000 00000000000 006540  0)r'   r  r   re  rW   r   r   r  create_pax_headerrU   r5  rC  rH  )r   r  infoheaders       r   test_create_pax_headerz#PaxWriteTest.test_create_pax_header8  s    OOzz|$$TK$@fu-d7mS1g-fs+ec*ec*b	)\]Cj)*+0:6 ## &+3Z0 399 <A9E ]	]
 Cj
 **
 -2#J7	8 OOzz|$$TK$@f{3g*fq)ea(ea(b	)\]Cj)*,1#J7 << 8	8
 ((
 */s4
 7>>
 AFb	J ]] Cj ** -2#J7	8r   r   )r    r!   r"   rD  r  r  r  r+   r   r   r  r    s    0@258r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	UnicodeTestc                 &    | j                  d       y )NrD   _test_unicode_filenamer   s    r   test_iso8859_1_filenamez#UnicodeTest.test_iso8859_1_filenamer  s    ##K0r   c                 &    | j                  d       y )Nutf7r  r   s    r   test_utf7_filenamezUnicodeTest.test_utf7_filenameu  s    ##F+r   c                 &    | j                  d       y )Nutf-8r  r   s    r   test_utf8_filenamezUnicodeTest.test_utf8_filenamex  s    ##G,r   c                    t        j                  t        d| j                  |d      }	 d}|j	                  t        j
                  |             |j                          t        j                  t        |      }	 | j                  |j                         d   j                  |       |j                          y # |j                          w xY w# |j                          w xY w)Nr   rY  r   rF   errorsr  rt  r   )
r'   r&   r   r   r  r  rK   rU   r   r   )r   rF   rH   r   s       r   r  z"UnicodeTest._test_unicode_filename{  s    ll7C$,X?	!DKK-.IIKll7X6	S^^-a055t<IIK IIK IIKs   &B: <-C :CC!c                 v   t        j                  t        d| j                  dd      }	 t        j                         }d|_        | j                  t        |j                  |       d|_        d|_	        | j                  t        |j                  |       |j                          y # |j                          w xY w)Nr   r   rY  r  r  r  )r'   r&   r   r   r  r   r  UnicodeErrorr  rg  rK   r  s      r   test_unicode_filename_errorz'UnicodeTest.test_unicode_filename_error  s    ll7C$+H>
	oo'G)GLlCKKA GL*GMlCKKAIIKCIIKs   A+B& &B8c                    t        j                  t        ddd      }	 |D ]  }| j                  t	        |j
                        t               | j                  t	        |j                        t               | j                  t	        |j                        t               | j                  t	        |j                        t                	 |j                          y # |j                          w xY w)Nr`   rD   rY  rF   r  )r'   r&   r#   r%  r\  r   r6  r"  rg  r  rK   r  s      r   test_unicode_argumentz!UnicodeTest.test_unicode_argument  s    ll7C$/B	 2d166lC0d1::.4d177mS1d177mS1	2 IIKCIIKs   B+C C.c                 <   t        j                  d      }d|_        d|_        t        j                  t
        d| j                  d      }	 |j                  |       |j                          t        j                  t
        d      }	 |j                  d      }| j                  |j                  d       | j                  |j                  d       | j                  t         j                  k7  rt|j                          t        j                  t
        d      }|j                  d      }| j                  |j                  d       | j                  |j                  d       |j                          y # |j                          w xY w# |j                          w xY w)	Nr  r  r   rD   )r   r   rF   rt  r   u	   )r'   r  rg  r  r&   r   r   r  rK   rR   rU   r  )r   r  rH   s      r   test_uname_unicodezUnicodeTest.test_uname_unicode  s"   OOE"  ll7T[[$/1	KKNIIKll7[9	e$AQWWn5QWWn5{{g000		ll7W=MM%(  *>?  *>?IIK IIK IIKs   E4 	CF	 4F	FN)
r    r!   r"   r  r  r  r  r  r  r  r+   r   r   r  r  p  s%    1,-
r   r  c                   d    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d ZddZd	 Zd
 ZddZy)UstarUnicodeTestc                     | j                  d       | j                  dt               | j                  d       | j                  dt               y Nr  e01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ_test_ustar_namerR  r   s    r   test_unicode_name1z#UstarUnicodeTest.test_unicode_name1  B    /05zB?@@*Mr   c                 R    | j                  d       | j                  dt               y Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   s    r   test_unicode_name2z#UstarUnicodeTest.test_unicode_name2  "    ABBJOr   c                     | j                  d       | j                  dt               | j                  d       | j                  dt               y )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r   s    r   test_unicode_longname1z'UstarUnicodeTest.test_unicode_longname1  sD    NONPZ[PQQS]^r   c                 \    | j                  dt               | j                  dt               y )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r   s    r   test_unicode_longname2z'UstarUnicodeTest.test_unicode_longname2  s&    PR\]SU_`r   c                 ~    | j                  dt               | j                  d       | j                  dt               y )Nu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿr  r   s    r   test_unicode_longname3z'UstarUnicodeTest.test_unicode_longname3  s5    TV`a^__aklr   c                 R    | j                  d       | j                  dt               y )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   s    r   test_unicode_longname4z'UstarUnicodeTest.test_unicode_longname4  s#    `aacmnr   Nc                    t        j                  t        d| j                  d      5 }t        j                  |      }||j                  |       n| j                  ||j
                  |       d d d        |Jt        j                  t        dd      5 }|D ]  }| j                  ||j                          n d d d        y y # 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   r  r  r`   rt  )	r'   r&   r   r   r  r  r  rU   r   r   r   excrH   r  s        r   r  z!UstarUnicodeTest._test_ustar_name  s    \\'3t{{WM 	7QT%A{A!!#s{{A6	7 ;gsW=  A$$T1662  	7 	7 s   AC%CCCc                     | j                  d       | j                  dt               | j                  d       | j                  dt               y r  _test_ustar_linkrR  r   s    r   test_unicode_link1z#UstarUnicodeTest.test_unicode_link1  r  r   c                 R    | j                  d       | j                  dt               y r  r  r   s    r   test_unicode_link2z#UstarUnicodeTest.test_unicode_link2  r  r   c                    t        j                  t        d| j                  d      5 }t        j                  d      }||_        ||j                  |       n| j                  ||j                  |       d d d        |Jt        j                  t        dd      5 }|D ]  }| j                  ||j
                          n d d d        y y # 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   r  r  r  r`   rt  )	r'   r&   r   r   r  r"  r  r  rU   r  s        r   r   z!UstarUnicodeTest._test_ustar_link 	  s    \\'3t{{WM 	7QT&AAJ{A!!#s{{A6	7 ;gsW=  A$$T1::6  	7 	7 s   AC%CCC r   )r    r!   r"   r'   r   r   r  r  r  r  r  r  r  r  r  r   r+   r   r   r  r    sG    !!F
NP_am
oNPr   r  c                   *    e Zd Zej                  Zd Zy)GNUUnicodeTestc                     dD ]<  \  }}t        j                  t        |d      5 }	 |j                  |      }d d d        > y # t        $ r | j                  d       Y 'w xY w# 1 sw Y   ixY w)N))r  u   pax/bad-pax-)rD   u   pax/bad-pax-äöür   r  z%unable to read bad GNU tar pax headerr'   r&   r#   rR   ra  r   r   rF   r   rH   r  s        r   test_bad_pax_headerz"GNUUnicodeTest.test_bad_pax_header	  s    < 	GNHd g%68 G;>Gd+AG G	G   GIIEFG	G G(   A#AA A#A  A##A,	N)r    r!   r"   r'   rx  r   r
  r+   r   r   r  r  	  s    FGr   r  c                   .    e Zd Zej                  ZdZd Zy)PAXUnicodeTestNc                     dD ]<  \  }}t        j                  t        |d      5 }	 |j                  |      }d d d        > y # t        $ r | j                  d       Y 'w xY w# 1 sw Y   ixY w)N))r  u   pax/hdrcharset-)rD   u   pax/hdrcharset-äöür   r  z)unable to read POSIX.1-2008 binary headerr  r	  s        r   test_binary_headerz!PAXUnicodeTest.test_binary_header)	  s    ? 	KNHd g%68 K;>Kd+AK K	K   KIIIJK	K Kr  )r    r!   r"   r'   r  r   r  r  r+   r   r   r  r  "	  s    F #'
Kr   r  c                        e Zd Zd ZddZd Zy)AppendTestBasec                     t         | _        t        j                  j	                  | j                        r t        j                  | j                         y y r   )r   r#   re   rf   r  r	   rq  r   s    r   rI   zAppendTestBase.setUp9	  s4    77>>$,,'T\\* (r   c                 n   t        j                  t        d      5 }|j                  d      }d|_        |j                  |      5 }t        j                  | j                  |      5 }|j                  ||       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrD   rt  rP   r  )r'   r&   r#   rR   r   rS   r  )r   r   srcr  rW  rH   s         r   _create_testtarzAppendTestBase._create_testtar>	  s    \\'K8 	&Co.AAF# &q\\$,,5 &KK1%&&	& 	&& && &	& 	&s;   *B+!B'B:BB+BBB(	$B++B4c                     | j                  d| j                  z          | j                  t        j                  t        j
                  t        d       y )Nr  r   )r  r   r  r'   r  r&   r   r   s    r   test_append_compressedz%AppendTestBase.test_append_compressedF	  s7    TDKK/0'++W\\7CHr   N)r  )r    r!   r"   rI   r  r  r+   r   r   r  r  6	  s    +
&Ir   r  c                   h    e Zd ZdZddZdgdfdZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy)
AppendTestNc                     t        j                  | j                  d|      5 }|j                  t        j                  d             d d d        y # 1 sw Y   y xY w)Nr   r  r   )r'   r&   r#   r  r  )r   r4  rH   s      r   _add_testfilezAppendTest._add_testfileM	  sB    \\$,,W= 	0KK./	0 	0 	0s   %AAr   c                     t        j                  | j                  |      5 }| j                  |j	                         |       d d d        y # 1 sw Y   y xY w)Nr  )r'   r&   r#   rU   r   )r   r  r4  rH   s       r   rD  zAppendTest._testQ	  sA    \\$,,8 	4CS\\^U3	4 	4 	4s   !AAc                 D    | j                          | j                          y r   )r  rD  r   s    r   test_non_existingzAppendTest.test_non_existingU	  s    

r   c                     t        j                  | j                  d      j                          | j	                          | j                          y )Nr  )r'   r&   r#   rK   r  rD  r   s    r   
test_emptyzAppendTest.test_emptyY	  s2    T\\4(..0

r   c                     t        j                  d      }| j                  |       |j                  d       | j	                  |       y )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r  )r$   r   r  ry   rD  r   s     r   test_empty_fileobjzAppendTest.test_empty_fileobj^	  s7    zz,'4 		!

4
 r   c                 2   | j                          t        | j                  d      5 }|j                         }d d d        t	        j
                        }| j                  |       |j                  d       | j                  ddg|       y # 1 sw Y   VxY w)Nrs   r   r  r   )r  r4  )	r  r&   r#   rT   r$   r   r  ry   rD  r   s      r   test_fileobjzAppendTest.test_fileobjd	  sy    $,,% 	99;D	zz$4 		!

%
6	 	s   BBc                 l    | j                          | j                          | j                  ddg       y )Nr  r   )r  )r  r  rD  r   s    r   test_existingzAppendTest.test_existingm	  s,    

%
(r   c                     t        | j                  d      5 }|j                  |       d d d        | j                  t        j
                  | j                         y # 1 sw Y   4xY wr  )r&   r#   r  r  r'   r  r  )r   r   r[   s      r   _test_errorzAppendTest._test_errort	  sO    $,,% 	JJt	'++T-?-?@	 	s   AA%c                 &    | j                  d       y )Nr   r(  r   s    r   	test_nullzAppendTest.test_nully	  s    r   c                 &    | j                  d       y )N                r*  r   s    r   test_incompletezAppendTest.test_incomplete|	      $r   c                 l    t        j                  d      j                         }| j                  |       y )Nr  r'   r  r  r(  r   r   s     r   test_premature_eofzAppendTest.test_premature_eof	  s'    u%++-r   c                 r    t        j                  d      j                         }| j                  |dz          y )Nr  r-  r1  r2  s     r   test_trailing_garbagez AppendTest.test_trailing_garbage	  s,    u%++-
*+r   c                 &    | j                  d       y )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar*  r   s    r   test_invalidzAppendTest.test_invalid	  r/  r   r   )r    r!   r"   r  r  rD  r  r   r"  r$  r&  r(  r+  r.  r3  r5  r7  r+   r   r   r  r  J	  sS    !0 !'4 4
!7)A
%,%r   r  c                       e Zd Zy)GzipAppendTestNr   r+   r   r   r9  r9  	  r   r   r9  c                       e Zd Zy)Bz2AppendTestNr   r+   r   r   r;  r;  	  r   r   r;  c                       e Zd Zy)LzmaAppendTestNr   r+   r   r   r=  r=  	  r   r   r=  c                       e Zd Zd Zd Zd Zy)
LimitsTestc                    t        j                  d      }|j                  t         j                         t        j                  d      }| j	                  t
        |j                  t         j                         t        j                  d      }|j                  t         j                         t        j                  d      }| j	                  t
        |j                  t         j                         t        j                  d      }| j	                  t
        |j                  t         j                         t        j                  d      }d|_        | j	                  t
        |j                  t         j                         t        j                  d      }d|_        | j	                  t
        |j                  t         j                         y )	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/longnamerT  r       )r'   r  r  r   r  rR  r"  r   r^  s     r   test_ustar_limitszLimitsTest.test_ustar_limits	  s4   //"34g**+ //"9:*gmmW5I5IJ //":;g**+ //">?*gmmW5I5IJ //";<*gmmW5I5IJ //*-4*gmmW5I5IJ //&) *gmmW5I5IJr   c                 x   t        j                  d      }|j                  t         j                         t        j                  d      }d|_        |j                  t         j                         t        j                  d      }d|_        | j                  t        |j                  t         j                         y NrA  rT  r   l          )r'   r  r  rx  r"  r   r  rR  r^  s     r   test_gnu_limitszLimitsTest.test_gnu_limits	  s~    //";<g(()//*-4g(() //&)+*gmmW5G5GHr   c                 X   t        j                  d      }|j                  t         j                         t        j                  d      }d|_        |j                  t         j                         t        j                  d      }d|_        |j                  t         j                         y rE  )r'   r  r  r  r"  r   r^  s     r   test_pax_limitszLimitsTest.test_pax_limits	  sr    //";<g(()//*-4g(()//&)+g(()r   N)r    r!   r"   rC  rF  rH  r+   r   r   r?  r?  	  s    K>I
*r   r?  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)MiscTestc                 @   | j                  t        j                  dddd      d       | j                  t        j                  dddd      d       | j                  t        j                  ddd      d       | j                  t        j                  d	dd      d       y )
Nr     r   rY  s   foo     foobarr'  r  s   foo bar )rU   r'   stnntsr   s    r   test_char_fieldszMiscTest.test_char_fields	  s    UAwA)	+Xq'8D	!%5wI	 ]GXF	 r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d	      d
       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y )N   0000001 rt      7777777            rB               rj                      r  r   s           )rU   r'   ntir   s    r   test_read_number_fieldsz MiscTest.test_read_number_fields	  s     	^4a8^4i@%HI#	%%HI#	%%HI	%HI	%HI+	- 	U+Q/\2A6r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dt        j                        d       | j                  t        j                  dt        j                        d	       | j                  t        j                  d
t        j                        d       | j                  t        j                  dt        j                        d       | j                  t        j                  dt        j                        d       | j                  t        j                  dt        j                        d       | j                  t        j                  dt        j                        d       | j                  t        j                  t        j                  dt        j                              d       y )Nrt   rR  rT  rS  rB  r  rU  rW  rV  rj  rX  rZ  rY  r\  r[  g      Yg      0Bs         gr   )rU   r'   itnrx  r]  r   s    r   test_write_number_fieldsz!MiscTest.test_write_number_fields	  sa   Q8Y/@Z8J8JK<	>Z8J8JK<	>R0B0BC<	>T'2D2DE<	>%7,3,>,>@<	> 	VG4F4FG<	>]7;M;MN<	>W[[g>P>P%QRTUVr   c                 |   | j                  t              5  t        j                  ddt        j                         d d d        | j                  t              5  t        j                  ddt        j                         d d d        | j                  t              5  t        j                  ddt        j
                         d d d        | j                  t              5  t        j                  ddt        j
                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   y xY w)Nrj  rL  rB  l       l        )r  rR  r'   r`  r   rx  r   s    r   test_number_field_limitsz!MiscTest.test_number_field_limits
  s    z* 	5KKAw334	5z* 	=KK
Aw';';<	=z* 	?KK7+=+=>	?z* 	>KKq'*<*<=	> 	>	5 	5	= 	=	? 	?	> 	>s/   &D&D&D&&D2DD#&D/2D;c                 D    h d}t        j                  | t        |       y )N>/   NULgrpr`  r]  rO  pwdrN  mainre  CHRTYPEr]  rB  rf  SYMTYPEXGLTYPEr  versionAREGTYPECONTTYPEFIFOTYPEfilemoder  	GNU_MAGIC	GNU_TYPES
PAX_FIELDSr  r?  r>  POSIX_MAGICcopyfileobjExFileObjectcalc_chksumsLENGTH_PREFIXREGULAR_TYPESEOFHeaderErrorGNUTYPE_SPARSEPAX_NAME_FIELDSSOLARIS_XHDTYPESUPPORTED_TYPESEmptyHeaderErrorGNUTYPE_LONGLINKrw  r  symlink_exceptionInvalidHeaderErrorTruncatedHeaderErrorSubsequentHeaderError)not_exported)r   check__all__r'   )r   r  s     r   test__all__zMiscTest.test__all__
  s    = 	T7Fr   c                 ,   t         j                  j                  t         j                  j                  t              d      }| j                  t        j                        5 }t        j                  d      f}t        j                  j                  j                  t        j                  d|      5  t        j                  |       d d d        d d d        | j                  dt!        j"                               y # 1 sw Y   7xY w# 1 sw Y   ;xY w)Nr   zlzma module is not availabler?   )r  z?
- method xz: CompressionError('lzma module is not available')
)re   rf   rg   r  r  r  r'   r  CompressionErrorr   r  r  r  r(   r&   r   r6  	exception)r   fnameexcinfor  s       r   .test_useful_error_message_when_modules_missingz7MiscTest.test_useful_error_message_when_modules_missing
  s    RWW__X68HIw001 	$W,,-KLME$$++GOOXSX+Y $U#$	$
 	O!!"	
$ $	$ 	$s%   !AD
2C>D
>D	D

DN)	r    r!   r"   rP  r^  ra  rd  r  r  r+   r   r   rJ  rJ  	  s"     7(W.>G

r   rJ  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)CommandLineTestc                     t        j                  ddg|i |\  }}}|j                  t        j                  j                         d      S )N-mr'      
)r
   assert_python_okr   re   linesepr   )r   argsr  rcr   errs         r   
tarfilecmdzCommandLineTest.tarfilecmd.
  sL    $55dI @ @8>@C{{2::,,.66r   c                 0    t        j                  ddg| S )Nr  r'   )r
   assert_python_failure)r   r  s     r   tarfilecmd_failurez"CommandLineTest.tarfilecmd_failure3
  s    224JTJJr   c                 f   t        j                  dd      t        j                  dd      g}| j                  t        j                  |       t        j                  |d      5 }|D ]2  }|j                  |t        j                  j                  |             4 	 d d d        y # 1 sw Y   y xY w)Ntokenize_tests.txttokenizedatarP  9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   r  )r   r!  rp  r	   rq  r'   r&   r   re   rf   r  )r   tar_namefilesr  tardatas        r   make_simple_tarfilez#CommandLineTest.make_simple_tarfile6
  s    !!"6)79!! #>)79:
 		(((3\\(C( 	CB  Cw(8(8(ABC	C 	C 	Cs   %8B''B0c                    | j                  t        j                  |       t        j                  |d      5 }t        j
                  d      }|j                  |t        j                  d             t        j
                  d      }|j                  |t        j                  d             d d d        y # 1 sw Y   y xY w)Nr   benignr   r  ../evil)	rp  r	   rq  r'   r&   r  r  r$   r   )r   r  r  r  evils        r   make_evil_tarfilez!CommandLineTest.make_evil_tarfileA
  s    	(((3\\(C( 	6B__X.FJJvrzz#J7??9-DJJtRZZ_J5		6 	6 	6s   A7B77C c                    | j                         \  }}}| j                  |d       | j                  d|j                                | j                  d|j                                | j                  d|j                                | j                  dd      \  }}}| j                  |d       | j	                  |j                         d       y )Nr   s   usages   errors   required-lr   )r  rU   r   lowerrQ  strip)r   r  r   r  s       r   test_bad_usezCommandLineTest.test_bad_useI
  s    ..0Cc"h		,h		,k399;/..tR8Cc"CIIK-r   c                 p    t         D ]-  }dD ]&  }| j                  ||      }| j                  |d       ( / y )N)-tz--testr   )testtarnamesr  rU   r   r  optr   s       r   test_test_commandz!CommandLineTest.test_test_commandS
  s@    $ 	+H% +ooc84  c*+	+r   c                 v    t         D ]0  }dD ])  }| j                  |d|d      }| j                  d|       + 2 y )N-vz	--verboser  r  PYTHONIOENCODINGs   is a tar archive.
)r  r  r   r  s       r   test_test_command_verbosez)CommandLineTest.test_test_command_verboseY
  sL    $ 	;H( ;ooc47> & @4c:;	;r   c                    t        j                  d      }| j                  d|      \  }}}| j                  d|       | j	                  |d       | j	                  |d       t
        D ]  }| j                  |      5  t        |d      5 }|j                         }d d d        	 t        t        d      5 }|j                  d d	        d d d        | j                  dt              \  }}}| j	                  |d       | j	                  |d       t        j                  t               	 d d d         y # 1 sw Y   xY w# 1 sw Y   xxY w# t        j                  t               w xY w# 1 sw Y   xY w)
N
zipdir.zipr      is not a tar archive.r   rt   )r  rs   r   rx  )r   r!  r  r   rU   r  subTestr&   rT   r   r  r	   rq  )r   zipnamer  r   r  r  rW  r   s           r   test_test_command_invalid_filez.CommandLineTest.test_test_command_invalid_file`
  sK   ""<0..tW=C/5c"Q$ 	.Hx0 
.(D) $Q668D$.gt, ,Tc
+,#'#:#:4#ILBS$$S#.$$R+$$W-
. 
.	.$ $, , $$W-
. 
.sU   =E*
D4E*$E4E 	AEE*4D=9E* E	EE''E**E4	c                    t         D ]  }t        j                         5 }t        j                  |d      5 }|j                  d       d d d        d d d        j                         j                  dd      }dD ](  }| j                  ||d      }| j                  ||       *  y # 1 sw Y   axY w# 1 sw Y   exY w)Nr`   Fr   r   r   )r  z--listr  
r  r   captured_stdoutr'   r&   rp   r   r   r  rU   r   r  r  r  rK  r  r   s          r   test_list_commandz!CommandLineTest.test_list_commandt
  s    $ 	0H((* +a\\(C0 +BGGEG*++ zz|**74FGH% 0ooc87> & @  h/0	0+ ++ +s"   B4B(B4(B1-B44B=	c                    t         D ]  }t        j                         5 }t        j                  |d      5 }|j                  d       d d d        d d d        j                         j                  dd      }dD ])  }| j                  |d|d      }| j                  ||       +  y # 1 sw Y   bxY w# 1 sw Y   fxY w)	Nr`   Tr   r   r   r  r  r  r  r  s          r   test_list_command_verbosez)CommandLineTest.test_list_command_verbose
  s    $ 	0H((* *a\\(C0 *BGGDG)** zz|**74FGH( 0ooc47> & @  h/0	0* ** *s"   B5B)B5)B2.B55B>	c                     t        j                  d      }| j                  d|      \  }}}| j                  d|       | j	                  |d       | j	                  |d       y )Nr  r  r  r   rt   )r   r!  r  r   rU   r   r  r  r   r  s        r   test_list_command_invalid_filez.CommandLineTest.test_list_command_invalid_file
  sY    ""<0..tW=C/5c"Qr   c                    t        j                  dd      t        j                  dd      g}dD ]x  }	  | j                  |t        g| }| j	                  |d       t        j                  t              5 }|j                          d d d        t        j                  t               z y # 1 sw Y   %xY w# t        j                  t               w xY w)Nr  r  r  r  )-cz--creater   )
r   r!  r  r   rU   r'   r&   r   r	   rq  r   r  r  r   rH   s        r   test_create_commandz#CommandLineTest.test_create_command
  s    !!"6)79!! #>)79:
 $ 	*C*%dooc7;U;  c*\\'* %cNN$%   )	*% %   )s$   AB98B-	B9-B6	2B99Cc                    t        j                  dd      t        j                  dd      g}dD ]|  }	  | j                  |dt        g|ddi}| j	                  d	|       t        j                  t              5 }|j                          d d d        t        j                  t               ~ y # 1 sw Y   %xY w# t        j                  t               w xY w)
Nr  r  r  r  r  r  r  r  s    file created.)
r   r!  r  r   r   r'   r&   r   r	   rq  r  s        r   test_create_command_verbosez+CommandLineTest.test_create_command_verbose
  s    !!"6)79!! #>)79:
 % 	*C*%dooc4 @5 @7>@/5\\'* %cNN$%   )	*
% %   )s$   AB=<B1B=1B:	6B==Cc                 t   t        j                  dd      g}	  | j                  dt        g| }| j	                  |d       t        j                  t              5 }|j                          d d d        t        j                  t               y # 1 sw Y   #xY w# t        j                  t               w xY w)Nr  r  r  r  r   )
r   r!  r  dotlessnamerU   r'   r&   r   r	   rq  )r   r  r   rH   s       r   $test_create_command_dotless_filenamez4CommandLineTest.test_create_command_dotless_filename
  s    !!"6~NO	*!$//$<e<CS#&k* !c ! [)! ! [)s$   AB B.B BB B7c                    t         j                  j                  t        d      }t	        j
                  dd      g}	  | j                  d|g| }| j                  |d       t        j                  |      5 }|j                          d d d        t        j                  |       y # 1 sw Y   xY w# t        j                  |       w xY w)Nz.testtarr  r  r  r  r   )re   rf   rg   rd   r   r!  r  rU   r'   r&   r   r	   rq  )r   r  r  r   rH   s        r   (test_create_command_dot_started_filenamez8CommandLineTest.test_create_command_dot_started_filename
  s    77<<4!!"6~NO	'!$//$959CS#&h' !3 ! X&! ! X&s#   ;B4 9B(
B4 (B1-B4 4Cc                    t        j                  dd      t        j                  dd      g}t        t        t        fD ]y  }|j
                  s	 t        dz   |j                  z   } | j                  d|g| }|j                  |      5 }|j                          d d d        t        j                  |       { y # 1 sw Y   !xY w# t        j                         w xY w)Nr  r  r  r  r  r  )r   r!  r-   r4   r:   r&   r   r   r  r)   r   r	   rq  )r   r  filetyper  r   rH   s         r   test_create_command_compressedz.CommandLineTest.test_create_command_compressed
  s    !!"6)79!! #>)79:
 "7H5 		+H==+"S=8??:%doodH=u=%%h/ %3NN$%   *		+% %   *s$   ;C	B=C	=C	C		C c                 X   | j                  t               dD ]f  }	 t        j                  t              5  | j                  |t              }d d d        | j                  d       t        j                  t               h y # 1 sw Y   7xY w# t        j                  t               w xY w)N)-ez	--extractr   r  r   r	   r   	tarextdirr  rU   r  r   r  r   s      r   test_extract_commandz$CommandLineTest.test_extract_command
  s      )$ 	,C,''	2 8//#w7C8  c*  +	,8 8   +s"   BBBB	BB)c                 ^   | j                  t               dD ]i  }	 t        j                  t              5  | j                  |dt        d      }d d d        | j                  d       t        j                  t               k y # 1 sw Y   7xY w# t        j                  t               w xY w)Nr  r  r  r      file is extracted.)r  r   r	   r   r  r  r   r  r  s      r   test_extract_command_verbosez,CommandLineTest.test_extract_command_verbose
  s      )$ 	,C,''	2 D//#tW;B * DCD 4c:  +	,D D
   +s"   BBBB	
BB,c           	         | j                  t               t        j                  j	                  t
        d      }t        j                  t
               	 t        j                  |      5  | j                  dt        ddd       | j                  dt        dddd      }| j                  d	|       d d d        t        j                  t
               y # 1 sw Y   #xY w# t        j                  t
               w xY w)
Ndestr  r  z--filterr   rv  r  r  r  )r  r   re   rf   rg   r  r   r	   r   r  r  r   r  )r   destdirr   s      r   test_extract_command_filterz+CommandLineTest.test_extract_command_filter
  s    w' '',,y&1
	(##G, ;''g(,(2F< oodG&*&0/7> & @ 4c:; Y'; ; Y's%   C )AC0C CC C9c                 L   | j                  t               	 t        j                  t              5  | j                  dt        d      }d d d        | j                  d       t        j                  t               y # 1 sw Y   5xY w# t        j                  t               w xY w)Nr  spamdirr   r  )r   r   s     r   (test_extract_command_different_directoryz8CommandLineTest.test_extract_command_different_directory
  s}      )	(##I. @oodGY?@S#&Y'	@ @ Y's"   B A<B <BB B#c                 "   t        j                  d      }t        j                  t              5  | j                  d|      \  }}}d d d        | j                  d       | j                  d       | j                  d       y # 1 sw Y   @xY w)Nr  r  r  r   rt   )r   r!  r	   r   r  r  r   rU   r  s        r   !test_extract_command_invalid_filez1CommandLineTest.test_extract_command_invalid_file  s    ""<0	* 	B224ALBS	B/5c"Q		B 	Bs   BBN)r    r!   r"   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r   r   r  r  ,
  sm    7
K	C6.+;.(	0	0 ** *	'+",	,(&( r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ContextManagerTestc                     t        j                  t              5 }| j                  |j                  d       d d d        | j                  j                  d       y # 1 sw Y   &xY w)Nzclosed inside runtime contextcontext manager failed)r'   r&   r#   r   r*  r   r  s     r   
test_basiczContextManagerTest.test_basic  sQ    \\'" 	JcSZZ)HI	J

$<=	J 	Js   AA%c                     t        j                  t              }|j                          | j	                  t
              5  |5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   )r'   r&   r#   rK   r  r  r  s     r   test_closedzContextManagerTest.test_closed  s^     ll7#		w' 	 	 	 	 	s#   A!AA!A	A!!A*c                 .   | j                  t              5 }t        j                  t              5 }t
        # 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY w| j                  j                  t
        d       | j                  j                  d       y )Nz)wrong exception raised in context managerr  )
r  	Exceptionr'   r&   r#   r  r5  r  r   r*  )r   r  rH   s      r   test_exceptionz!ContextManagerTest.test_exception   s~    y) 	Sg& #  	 	 	 	cmmWI	K

$<=s   A7A 	AAc                    	 t        j                  t        d      5 }t        # 1 sw Y   nxY wn#  Y nxY w| j	                  t
        j                  j                  t              dd       | j                  j                  d       y )Nr   r   z-context manager wrote an end-of-archive blockr  )
r'   r&   r   r  rU   re   rf   r  r   r*  r  s     r   test_no_eofzContextManagerTest.test_no_eof)  sq    	gs+  s     	11?	A

$<=s   0 #,0 4c                     t        j                  t        d      5  	 d d d        | j                  t        j
                  j                  t              dd       y # 1 sw Y   >xY w)Nr   r   z-context manager wrote no end-of-archive block)r'   r&   r   rQ  re   rf   r  r   s    r   test_eofzContextManagerTest.test_eof5  sM     \\'3' 		BGGOOG4a?	A	 	s   AA#c                 $   t        t        d      5 }	 t        j                   |d      5 }t        # 1 sw Y   nxY wn#  Y nxY w| j	                  |j
                  d       | j                  j
                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r3  zexternal file object was closedr  )r&   r   r'   r  r   r*  r   r8  s      r   r$  zContextManagerTest.test_fileobj=  s     '4  	BD\\$S9 $S#O$ $ $T[[*KLOOCJJ(@A	B 	B 	Bs+   B>1:	>BA =BBN)	r    r!   r"   r  r  r  r  r  r$  r+   r   r   r  r    s"    >
>
>A
Br   r  zrequires os.link to be missingc                   :   e Zd Zd Z ej
                   eej                  d      d      d        Z	 ej
                   eej                  d      d      d        Z
 ej
                   eed      d      d        Z ej
                   eed      d      d	        Zy
)LinkEmulationTestc                 ,   | j                   j                  |t        d       t        t        j
                  j                  t        |      d      5 }|j                         }d d d        | j                  t              t               y # 1 sw Y   )xY w)Nrv  r^   rs   )rH   rc   rd   r&   re   rf   rg   rT   rU   r   rX   )r   r   rW  r   s       r   _test_link_extractionz'LinkEmulationTest._test_link_extractionP  sj    w?"'',,w-t4 	668D	4.9	 	s   B

Bislinkz3Skip emulation - has os.path.islink but not os.linkc                 &    | j                  d       y )Nr   r  r   s    r   test_hardlink_extraction1z+LinkEmulationTest.test_hardlink_extraction1W       	""?3r   c                 &    | j                  d       y )Nr   r  r   s    r   test_hardlink_extraction2z+LinkEmulationTest.test_hardlink_extraction2\       	""#>?r   r  z Skip emulation if symlink existsc                 &    | j                  d       y )Nr   r  r   s    r   test_symlink_extraction1z*LinkEmulationTest.test_symlink_extraction1a  r  r   c                 &    | j                  d       y )Nr   r  r   s    r   test_symlink_extraction2z*LinkEmulationTest.test_symlink_extraction2f  r  r   N)r    r!   r"   r  r   r  r   re   rf   r  r  r  r
  r+   r   r   r  r  J  s    : X__WRWWh/JL4L4 X__WRWWh/JL@L@ X__WR+79494 X__WR+79@9@r   r  c                       e Zd Zd Zd Zd Zy)Bz2PartialReadTestc                 T    G fddt         j                        t        j                  t	        j
                  d      j                               }t        t        |      dz         D ]#  }	 t	        j                   |d |       |       % y # t        j                  $ r Y <w xY w)Nc                   2     e Zd ZdZ fdZ fdZ xZS )9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFc                     | j                   rt        d      | j                         t        | j	                               k(  | _         t
        |   |      S )Nz(infinite loop detected in tarfile.open())hit_eofAssertionErrorrz   rV   r   superrT   )r   r  	MyBytesIO	__class__s     r   rT   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.reads  sK    <<( *: ; ;#yy{c$--/.BBY2155r   c                 *    d| _         t        | 
  | S r  )r  r  ry   )r   r  r  r  s     r   ry   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seeky  s    $Y2D99r   )r    r!   r"   r  rT   ry   __classcell__)r  r  s   @r   r  r  q  s    G6: :r   r  r  rt   r3  )r$   r   r5   compressr'   r  r  rangerV   r&   r  )r   r   r   r  r  s       @r   _test_partial_inputz&Bz2PartialReadTest._test_partial_inputp  s    
	:

 
	: ||GOOE288:;s4y1}% 	AYtBQx%8tD	 $$ s   . BB'&B'c                 &    | j                  d       y Nr`   r  r   s    r   test_partial_inputz%Bz2PartialReadTest.test_partial_input  s      %r   c                 &    | j                  d       y )Nr  r  r   s    r   test_partial_input_bz2z)Bz2PartialReadTest.test_partial_input_bz2  s      )r   N)r    r!   r"   r  r  r   r+   r   r   r  r  l  s    (&*r   r  c                      	 dd l } dd l}| j                  d      d   dk7  ry|j	                  d      d   dk7  ryy# t        $ r Y yw xY w)Nr   FrootT)rh  rg  ImportErrorgetpwuidgetgrgid)rh  rg  s     r   root_is_uid_gid_0r&    sS     ||AqV#
||AqV#  s   ; 	AAchownzmissing os.chowngeteuidzmissing os.geteuidc                      e Zd Zed        Zeed               Zej                  j                  d      ej                  j                  d      ej                  j                  d      d                      Z
ej                  j                  d      ej                  j                  d      ej                  j                  d      d                      Z ej                   e       d      ej                  j                  d      ej                  j                  d      ej                  j                  d      d	                             Zej                  j                  d      d
        Zy)NumericOwnerTestc                    t        j                  d      }| ddt        j                  |f|ddt        j                  d f|ddt        j                  |fg}t        j
                  t        d      5 }|D ]R  \  }}}}	}
t        j                  |      }||_        ||_	        d	|_
        d	|_        |	|_        |j                  ||
       T 	 d d d        t        S # 1 sw Y   t        S xY w)
Ns   contentc   b   M   L   X   W   r   r"  )r$   r   r'   rf  r]  r&   r   r  r   r   rg  r  r\  r  )
filename_1	dirname_1
filename_2r[   r  r  r   r   r   typcontentsr  s               r   _make_test_archivez#NumericOwnerTest._make_test_archive  s     zz*% b"goot<b"goot<b"goot< \\'3' 	+516 +-c3XOOD)  a*+	+ 	+ s   .ACC#c              #      K   d| _         d}d}|}|}t        j                  j                  ||      }t        j                  |||      }t        j                  |      5 }||||f d d d        y # 1 sw Y   y xY ww)Nr   znumeric-owner-testfiler  )r  re   rf   rg   r*  r7  r'   r&   )mock_geteuidr  r  r2  r3  r4  tar_filenamer  s           r   _setup_testzNumericOwnerTest._setup_test  s      %&!( 
	WW\\'51
 (:::;D;EG \\,' 	;5Y
::	; 	; 	;s   AA<	A0'	A<0A95A<zos.chownzos.chmodz
os.geteuidc                    | j                  |      5 \  }}}}|j                  |t        dd       |j                  |t        dd       d d d        t        j                  j                  t              }t        j                  j                  t              }	|j                  t        j                  j                  |dd      t        j                  j                  |	dd      gd       y # 1 sw Y   xY w)	NTrv  numeric_ownerr_   r,  r-  r0  r1  	any_order)
r;  rc   rd   re   rf   rg   assert_has_callsr   r  call)
r   r9  
mock_chmod
mock_chownr  r2  _r4  f_filename_1f_filename_2s
             r   test_extract_with_numeric_ownerz0NumericOwnerTest.test_extract_with_numeric_owner  s    
 l+ 	2 0<z10:MM*gT!0  2MM*wd!0  2		2 ww||GZ8ww||GZ8##X]]%7%7b"%M%-]]%7%7b"%M%' /3 	$ 	4	2 	2s   8C..C7c           	      H   | j                  |      5 \  }}}}|j                  t        dd       d d d        t        j                  j                  t              }t        j                  j                  t              }	t        j                  j                  t              }
|j                  t        j                  j                  |dd      t        j                  j                  |	dd      t        j                  j                  |
dd	      gd
       y # 1 sw Y   xY w)NTrv  r=  r,  r-  r.  r/  r0  r1  r?  )
r;  ru  rd   re   rf   rg   rA  r   r  rB  )r   r9  rC  rD  r  r2  r3  r4  rF  f_dirname_1rG  s              r   "test_extractall_with_numeric_ownerz3NumericOwnerTest.test_extractall_with_numeric_owner  s    
 l+ 	5 0<z90:WD$3  5	5 ww||GZ8ww||GY7ww||GZ8##X]]%7%7b"%M%-]]%7%7R%L%-]]%7%7b"%M%' /3	 	$ 	4	5 	5s   DD!z uid=0,gid=0 must be named "root"c                     | j                  |      5 \  }}}}|j                  |t        dd       d d d        t        j                  j                  t              }|j                  |dd       y # 1 sw Y   AxY w)NFrv  r=  r   )r;  rc   rd   re   rf   rg   assert_called_with)r   r9  rC  rD  r  r2  rE  rF  s           r   "test_extract_without_numeric_ownerz3NumericOwnerTest.test_extract_without_numeric_owner  st     l+ 	2/Hz1aMM*gU!0  2	2
 ww||GZ8%%lAq9	2 	2s   A11A:c           	          | j                  |      5 \  }}}}| j                  t        |j                  |t        dd       d d d        y # 1 sw Y   y xY w)NFT)r;  r  r  rc   rd   )r   r9  r  r2  rE  s        r   test_keyword_onlyz"NumericOwnerTest.test_keyword_only  sT    l+ 	O/Hz1ai#mmZ%O	O 	O 	Os   .A		AN)r    r!   r"   ry  r7  r   r;  r   r  r  rH  rK  r   r&  rN  rP  r+   r   r   r*  r*    sh     . ;  ;( ]]$]]$]]&4 ' % %4$ ]]$]]$]]&4 ' % %4, X*,;=]]$]]$]]&	: ' % %=
	: ]]&O 'Or   r*  c                   *    e Zd Zd Zd Zd Zd Zd Zy)ReplaceTestsc                 8   | j                   j                  d      }|j                  d      }| j                  |j                  d       | j                  |j                  d       | j                  | j                   j                  d      j                  d       y )NrP   z
misc/otherrc  )rH   rR   r   rU   r   r   rC  replaceds      r   test_replace_namezReplaceTests.test_replace_name  sv    ##O4>>|>45o6++O<AA(	*r   c                 &   | j                   j                  d      }|j                         }d|j                  d<   | j	                  |j                  d   d       | j	                  | j                   j                  d      j                  d   d       y )Nr~  not-barr  r   rH   rR   r   r  rU   rT  s      r   test_replace_deepzReplaceTests.test_replace_deep  s{    ##N3>>#(1W%++G4e<HH~.::7CU	Lr   c                 *   | j                   j                  d      }|j                  d      }d|j                  d<   | j	                  |j                  d   d       | j	                  | j                   j                  d      j                  d   d       y )Nr~  F)deeprX  r  rY  rT  s      r   test_replace_shallowz!ReplaceTests.test_replace_shallow$  s    ##N3>>u>-(1W%++G4i@HH~.::7CY	Pr   c                 .   | j                   j                  d      }dD ]i  }| j                  |      5   |j                  di |d i}| j	                  t        ||      d        | j                  t        ||      d        d d d        k y # 1 sw Y   vxY w)NrP   )r   re  r   r"  r   r   rg  r  	attr_namer+   )rH   rR   r  r   rU   r;  rQ  )r   rC  r`  rU  s       r   test_replace_allzReplaceTests.test_replace_all,  s    ##O4: 	FI	2 F)6>>>Y,=>  9!=tD##GFI$>EF F	FF Fs   ABB	c                     | j                   j                  d      }| j                  t              5  |j	                  d       d d d        y # 1 sw Y   y xY w)NrP   i[)rV  )rH   rR   r  r  r   )r   rC  s     r   test_replace_internalz"ReplaceTests.test_replace_internal5  sG    ##O4y) 	-NN)N,	- 	- 	-s   AAN)r    r!   r"   rV  rZ  r]  ra  rc  r+   r   r   rR  rR    s    *LPF-r   rR  c                   p    e Zd ZdZed        Zed        Zd Zed        Z	d Z
d Zd Zd	 Zd
 Zd Zd Zy)NoneInfoExtractTestsNc                 0    t        j                  t        dd      }t        j                  t
              dz   _        d|_        t               5 } j                  *|j                  t        j                  dt                     |j                   j                   j                         d d d        |j                          t!         fd	t        j                   j                        j#                  d
      D               _        y # 1 sw Y   _xY w)Nr`   rD   rE   extractall_ctrlr   ignore)actioncategoryr^   c              3   T   K   | ]  }|j                  j                         ! y wr   )relative_tocontrol_dir).0prx  s     r   	<genexpr>z2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>O  s(       A MM#//* As   %(**/*)r'   r&   r#   r  r  rd   rm  ro  r   extraction_filterenter_contextwarningscatch_warningsr  ru  rK   setglobcontrol_paths)rx  rH   r  s   `  r   ry  zNoneInfoExtractTests.setUpClassD  s    ll7{C!,,w/2CC[ 	JB$$,  !8!8#.@"B CNN3??33H3HNI		J
 			  A\\#//277? A A	J 	Js   ADDc                 B    t        j                  | j                         y r   )shutilr  rm  r{  s    r   r|  z"NoneInfoExtractTests.tearDownClassS  s    coo&r   c                     t        fdt        j                        j                  d      D              }| j	                  | j
                  |       y )Nc              3   @   K   | ]  }|j                          y wr   )rl  )rn  ro  r  s     r   rp  z;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>X  s"      ; MM)$;s   rq  )rv  r  r  rw  rU   rx  )r   r  	got_pathss    ` r   check_files_presentz(NoneInfoExtractTests.check_files_presentW  sF     ;\\),11&9; ;	 	++Y7r   c              '     K   t        j                  t              dz  }d| j                  _        | j                  j                         D ]  }|D ]  }t        ||d          t        j                  |      5  | j                  j                  |d       | j                  |       | d d d        y # 1 sw Y   y xY ww)Nextractall_noner   rv  r^   )r  r  rd   rH   ro  r   setattrr	   r  ru  r~  )r   
attr_namesr  rC  r`  s        r   extract_with_nonez&NoneInfoExtractTests.extract_with_none]  s     ll7#&77hh))+ 	1F' 1		401	1 $ 	HHO<$$S)I	 	 	s   A6C 83B4+	C 4B=9C c                    t        j                  t              j                         j                  }| j                  d      5 }t        j                  |      j                  d      D ]b  }| j                  |      5  	 |j                         j                  }| j                  |j                         j                  |       d d d        d 	 d d d        y # t        $ r |j                         s Y 0w xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nre  rq  r  )r  r  rd   r  st_mtimer  rw  r  assertGreaterEqualr  
is_symlink)r   nowr  rf   re  s        r   test_extractall_none_mtimez/NoneInfoExtractTests.test_extractall_none_mtimei  s     ll7#((*33##G, 
	KS)..v6 	K\\t\, KK $		 4 4 //		0D0DcJK K	K
	K 
	K
 # "#0!  1"K K
	K 
	KsH   :D=C7?C*C7
DC4	1C73C4	4C77D <DDc                    t        j                  t              j                         j                  }t        j                  t              dz  }|j                  d       |j                         j                  }| j                  d      5 }t        j                  |      j                  d      D ]  }| j                  |      5  |j                         r+| j                  |j                         j                  |       n:|j                         r*| j                  |j                         j                  |       d d d         	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nregular_filer   r   rq  r  )r  r  rd   r  r  
write_textr  rw  r  is_dirrU   is_file)r   dir_moder  regular_file_moder  rf   s         r   test_extractall_none_modez.NoneInfoExtractTests.test_extractall_none_modey  s    <<(--/77||G,~=#(--/77##F+ 	<sS)..v6 <\\t\, <{{}(()<)<hG(()<)<):<	< <<	< 	<< <	< 	<s%   
:EA6E:
EEEE#c                 R    | j                  d      5  	 d d d        y # 1 sw Y   y xY w)Nr   r  r   s    r   test_extractall_none_uidz-NoneInfoExtractTests.test_extractall_none_uid  (    ##E* 		 	 	   &c                 R    | j                  d      5  	 d d d        y # 1 sw Y   y xY w)Nr   r  r   s    r   test_extractall_none_gidz-NoneInfoExtractTests.test_extractall_none_gid  r  r  c                 R    | j                  d      5  	 d d d        y # 1 sw Y   y xY w)Nrg  r  r   s    r   test_extractall_none_unamez/NoneInfoExtractTests.test_extractall_none_uname  (    ##G, 		 	 	r  c                 R    | j                  d      5  	 d d d        y # 1 sw Y   y xY w)Nr  r  r   s    r   test_extractall_none_gnamez/NoneInfoExtractTests.test_extractall_none_gname  r  r  c                 X    | j                  dddd      5  	 d d d        y # 1 sw Y   y xY w)Nr   r   rg  r  r  r   s    r   test_extractall_none_ownershipz3NoneInfoExtractTests.test_extractall_none_ownership  s.    ##E5'7C 		 	 	s    ))r    r!   r"   rr  r  ry  r|  r~  r   r  r  r  r  r  r  r  r  r+   r   r   re  re  ;  so     A A ' '8 	 	K < r   re  c                       e Zd ZdZy)NoneInfoExtractTests_Datar   Nr    r!   r"   rr  r+   r   r   r  r    s    r   r  c                       e Zd ZdZy)!NoneInfoExtractTests_FullyTrustedrv  Nr  r+   r   r   r  r    s    'r   r  c                       e Zd ZdZy)NoneInfoExtractTests_TarrH   Nr  r+   r   r   r  r    s    r   r  c                       e Zd ZdZy)NoneInfoExtractTests_DefaultNr  r+   r   r   r  r    s    r   r  c                       e Zd Zd Zd Zy)NoneInfoTests_Miscc           
         t        j                         }t        j                  t        j                  t        j
                  fD ]  }| j                  |      5  t        j                  |d|      }|j                  t              }	 |j                  |       dD ]b  }| j                  |      5   |j                  di |d i}| j                  t        |       5  |j                  |       d d d        d d d        d 	 d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# t        $ r |t        j                  k(  rn Y Cw xY w# 1 sw Y   xY w)N)	tarformatr   )r4  r   r   )re  r   r   r   rg  r  r_  r+   )r$   r   r'   r   rx  r  r  r&   r  r#   r  r   r  rR  r  )r   bior  rH   rZ   r`  rU  s          r   test_addzNoneInfoTests_Misc.test_add  sD   jjl!..0B0B!,,. 	6I	2 6ll3SK..16KK(&6 6	!\\I\> 6'6w'K)T9J'KH!%!7!7
;D+"H 6 #H 566 666 6	6&6 66 6 !  G$8$88  	6 6s`   .ED$E0,D	D.D	6EDD	D!E$EEEEE	c           
      	   dhdhdhdhdhdhddhddhfD ]  }| j                  |      5  t        j                  t        d	      5 }t	        j
                  t	        j                         d
d      }t        j                  t        d|      5  |j                          d d d        |j                         D ]  }|D ]  }t        ||d          t	        j
                  t	        j                         d
d      }t        j                  t        d|      5  |j                          d d d        t        |j                         j                         j!                         |j                         j                         j!                               D ]  \  }}|dhk(  r)t#        j$                  d|      r| j'                  |d       6|dhk(  r)t#        j$                  d|      r| j'                  |d       e|dhk(  r)t#        j$                  d|      r| j'                  |d       |dhk(  r^|j)                  d      rM|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||
       | j+                  |d       |dhk(  r_|j-                  d      rN|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||	       | j+                  |d       ]|dhk(  r_|j)                  d      rN|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||
       | j'                  |d       |dhk(  r_|j-                  d      rN|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||	       | j'                  |d       '|ddhk(  r_|j)                  d      rN|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||
       | j'                  |d       |ddhk(  r_|j-                  d      rN|j!                  d      \  }	}
|j!                  d      \  }}| j'                  ||	       | j'                  |d       | j'                  ||        	 d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   /xY w# 1 sw Y   xY w)Nre  r   r   r   rg  r  )r  rD   rt  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$   ri   r   r   r   r   rp   r   r  r  r   r   r  rematchrU   rf  r   endswith)r   r  rH   tio_prevrC  r`  tio_newrK  gotexp_user	exp_groupgot_user	got_groups                r   r   zNoneInfoTests_Misc.test_list  sr   
 $9vh%#9wi!7+eW-=? <	8J ,,*,5 98,,w=98AD++BJJL'4P&&sHh? HHJ!nn. 9F%/ 9		4899 **2::<$O&&sHg> HHJ%():)C)C)E)K)K)M)0)9)B)B)D)J)J)L&N .8MHc!gY.288<Lh3W((m<#y0RXX>PRZ5[((k:#x/BHH2H5>((m<#y0X5H5H<6>.6nnT.B+).1iio+)((I>((9=#y0X5F5F=6?.6nnT.B+).1iio+)((8<((I>#w.83F3F%4(.6nnT.B+).1iio+)((I>((7;#w.83D3Dg3O.6nnT.B+).1iio+)((8<((G<#w'77H<O<OF=H.6nnT.B+).1iio+)((I>((7;#'77H<M<MF=H.6nnT.B+).1iio+)((8<((G< ((37].898 98 98<	8  98 98 98 98sV   SASR*	A6SR7	%M0SS*R4/S7S<SS	SS	N)r    r!   r"   r  r   r+   r   r   r  r    s    64A8r   r  c                 <   | dd }t         j                  dd|d      t         j                  dd|d      z  t         j                  dt         j                  t         j                  z  t         j                  d|d      z  t         j
                  dd|d      z  t         j                  dd|d	      z  t         j                  dt         j                  t         j                  z  t         j                  d|d
      z  t         j                  dd|d      z  t         j                  dd|d      z  t         j                  dt         j                  t         j                  z  t         j                  d|d      z  }t        j                  |      dd | dd k(  sJ |S )zInverse of `stat.filemode` (for permission bits)

    Using mode strings rather than numbers makes the later tests more readable.
    rt   Nr   )r`   -)r   r  )r  r  r}   Srw   r'     r   rc     )r  r  r  TrL  )r  S_IRUSRS_IWUSRS_IXUSRS_ISUIDS_IRGRPS_IWGRPS_IXGRPS_ISGIDS_IROTHS_IWOTHS_IXOTHS_ISVTXrq  )r   str_moderesults      r   _filemode_to_intr  	  s   
 ABxH1
%hqk
21
%hqk
231t||+&qk++
 1
%hqk
23 1
%hqk
23 1t||+&qk+	+ 1
%hqk
2
3 1
%hqk
23 1t||+&qk++ $ == $QR000Mr   c                   <    e Zd ZdZd Zd Zd ZdddddddZd Zy)	ArchiveMakerzHelper 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                 6    t        j                         | _        y r   )r$   r   r  r   s    r   r  zArchiveMaker.__init__0  s    ::<r   c                 R    t        j                  d| j                        | _        | S )Nr   rU  )r'   r(   r  tar_wr   s    r   	__enter__zArchiveMaker.__enter__3  s    __#txx@
r   c                     | j                   j                          | j                  j                         | _        d | _        y r   )r  rK   r  r   r6  )r   r  s     r   __exit__zArchiveMaker.__exit__7  s-    

))+r   N)r\  
symlink_tohardlink_tor   rW   c                (   t        |      } t        j                  |      j                  di |}|||_        |rt        |      |_        | t        j                  }t        |      |_        | t        j                  }t        |      |_        |j                  d      r|t        j                  }|||_        |j                         r)t        j                  t!        |j                              }	nd}	| j"                  j%                  ||	       y)z5Add a member to the test archive. Call within `with`.Nr   r+   )r6  r'   r  r   rW   r  r   rk  r"  rB  r  r]  r\  r  r$   r   rH  r  r  )
r   r   r\  r  r  r   rW   r  rZ   r4  s
             r   r   zArchiveMaker.add<  s     4y/'//$'//9&9GL+D1GL!??D":G"??D";/G==$,??DGL==?jjw||!45GG

7G,r   c                 n    t        j                  | j                        }t        j                  dd|i|S )z9Open the resulting archive as TarFile. Call after `with`.r4  r+   )r$   r   r6  r'   r&   )r   r  r  s      r   r&   zArchiveMaker.openU  s+    jj'||2C2622r   )	r    r!   r"   r  r  r  r  r   r&   r+   r   r   r  r  %  s.    	 
 !%4D-23r   r  c                 8     t        j                  d      |       S )NzWASI: Skip symlink test for now)r   skiprW  s    r   symlink_testr  `  s    ?x}}>?BBr   c                     | S r   r+   r  s    r   r  r  c  s    r   c                   @   e Zd Z ej                  e      dz  Zedz  Zed        Z		 	 d dZ
d!dZd Zd Zed	        Zed
        Zed        Zd Zed        Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%y)"TestExtractionFiltersouterdirr  c              #   ~  K   t        j                  | j                        5  	 |j                  | j                  |       d| _        t        | j                  j                  d            | _        | j                  j                  | j                         	 d |j                          | j
                  r| j
                  | j                  | j                  t                      ddd       y# t        $ r }|| _        t               | _        Y d}~~d}~ww xY w# |j                          w xY w# 1 sw Y   yxY ww)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.
        r^   Nrq  )r	   r  r  ru  r  raised_exceptionrv  rw  expected_pathsdiscardr  rK   rU   )r   rH   r_   r  s       r   check_contextz#TestExtractionFilters.check_contextq  s      . 	9:t||F;
 )-%&)$--*<*<V*D&E###++DLL9		$$+++T00#%8!	9 	9  ,(+%&)e##, 			9 	9s_    D=D1C0AD1DAD1'	D=0	D9DD1DD1D..D11D:6D=Nc                 ,   | j                   r| j                   t        j                  t        j                  j                  | j                  |z              }| j                  || j                         | j                  j                  |       |yt        j                         ret        j                  dk7  rRt        j                  t        j                  |j                         j                               }| j#                  ||       |1t%        |t&              r!|j)                  d      rt*        j,                  }|X| j                  |z  j/                         }t        j                  |      }||k7  r| j1                  |j3                  |             n|t*        j4                  k(  s| | j1                  |j7                                nq|t*        j,                  k(  r | j1                  |j9                                n>|t*        j:                  k(  r | j1                  |j=                                nt?        |      |*| j#                  |j                         j@                  |       |jB                  D ]  }	| j                  jE                  |	        y)z'Check a single file. See check_context.Nntr   )#r  r  r  re   rf   normpathr  r   r  remover	   	can_chmodr   r  rq  S_IMODEr  rU   rz  r6  r  r'   r]  readlinkr   samefilerf  r  r  rp  is_fifoNotImplementedErrorri  parentsr  )
r   r   r\  r  r   rW   rf   r  rK  parents
             r   expect_filez!TestExtractionFilters.expect_file  s      '''||BGG,,T\\D-@ABdD//0""4(	 3 3 5"''T/--TYY[-@-@ ABCS$'<JtS1dmmC6H??D!<<$&002C||J/H 3X 67W__$OODLLN+W__$OODKKM*W%%%OODLLN+%d++TYY[00$7ll 	0F''/	0r   c                     | j                  ||      5  | j                  | j                  	 d d d        d | _        y # 1 sw Y   d | _        y xY wr   )r  r  )r   exc_type
message_res      r   expect_exceptionz&TestExtractionFilters.expect_exception  sS    ##Hj9 	,$$0+++ 1	, !%	, !%s	   =Ac                     t               5 }|j                  d       d d d        dD ]<  }| j                  j                         |      5  | j	                  d       d d d        > y # 1 sw Y   KxY w# 1 sw Y   UxY w)Nz
benign.txt)rv  rH   r   r  r   r  r&   r  r   arcr_   s      r   test_benign_filez&TestExtractionFilters.test_benign_file  sw    ^ 	"sGGL!	"4 	/F##CHHJ7 /  ./ /	/	" 	"/ /s   A'
A3'A03A<	c                 |   t               5 }|j                  | j                  dz         d d d        | j                  j	                         d      5  | j                  d       d d d        dD ]  }| j                  |j	                         |      5  t        | j                        j                  d      r9t        | j                        j                  d      }| j                  | d       n | j                  t        j                  d       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nzescaped.evilrv  z../escaped.evilrH   r   r   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r  r   r  r  r&   r  r6  rf  lstripr  r'   AbsolutePathError)r   r  r_   outerdir_strippeds       r   test_absolutez#TestExtractionFilters.test_absolute  s     ^ 	4sGGDMMN23	4 
O< 	0./	0 $ 	KF##CHHJ7 Kt}}%005 ),DMM(:(A(A#(F%$$(9':-%HI ))11IKK K	K	4 	4	0 	0K Ks$   DD&A>D2D#&D/2D;	c                 
   t               5 }|j                  dd       |j                  dd       |j                  d       d d d        t        j                         r| j	                  j                         d      5  | j                  | j                  t               	 d d d        y | j                  dd       | j                  dd       | j                  d       	 d d d        | j	                  |j                         d	      5  | j                  t        j                  d
       d d d        | j	                  |j                         d      5  | j                  t        j                  d       d d d        y | j	                  j                         d      5  | j                  d       d d d        | j	                  |j                         d	      5  | j                  d       d d d        | j	                  |j                         d      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   y xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Ncurrentr  r  r  z
current/..parent/evilrv  r  rH   T'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr   zK'parent' would link to ['"].*outerdir['"], which is outside the destination)r  r   r	   can_symlinkr  r&   r  r  r  r  r'   OutsideDestinationErrorLinkOutsideDestinationErrorr   r  s     r   test_parent_symlinkz)TestExtractionFilters.test_parent_symlink  s4    ^ 
	#s
 GGI#G. GGHG6GGM"
	#   "##CHHJ@ 0((4 ))/: 0 0 $$Y3$?$$X,$G$$Y/0 ##CHHJ6 :%%339:: ##CHHJ7 :%%779:: : ##CHHJ@ 0  /0##CHHJ6 0  /0##CHHJ7 0  /0 0Y
	# 
	#0 0: :: :0 00 00 0sY   8H. #H;,7H;!I!II!I-I9.H8;III!I*-I69Jc                    t        j                         r/t        j                  j	                  t
        d      }t        j                  |       t        j                  dt        j                  j	                  |d             t        t        j                  j	                  |ddd      d      5  	 d d d        t        j                  j                  t        j                  j	                  |d            rd}nLt        j                  j                  t        j                  j	                  |dd            rd}nt        d	      t               5 }|j                  dd
       |j                  dd
       |j                  d       d d d        | j                  j                         d      5  t        j                         r8| j                  dd
       | j                  dd
       | j                  d       n"| j                  d       | j                  d       d d d        | j                  |j                         d      5  t        j                         r!| j                  t         j"                  d       n"| j                  d       | j                  d       d d d        | j                  |j                         d      5  t        j                         rDr!| j                  t         j"                  d       nC| j                  t         j$                  d       n"| j                  d       | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nresolution_testr  r  r  r+  r   TFz#Could not determine link resolutionr  zcurrent/parentr  rv  r  r  zcurrent/rH   r  r   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r	   r  re   rf   rg   rd   r   r  r&   r  r  r  r   r  r  r  r'   r  r  )r   testpathdotdot_resolves_earlyr  s       r   test_parent_symlink2z*TestExtractionFilters.test_parent_symlink2
  s      "ww||G->?HHHX JJsBGGLL9=> bggll8YfEsK  ww~~bggll8V<= )-%XtV DE ).%$%JKK^ 
	#s GGI#G. GG$G6GGM"
	# 
O< 	0$$&  s ;  d ;  +  ,  /	0 
E2 
	0$$&%%77,-   ,  /
	0 
F3 	0$$&())#;;01 ))#??01   ,  /%	0 	0_ 
	# 
	#	0 	0
	0 
	0	0 	0s?   /M
8M/A/M$AM1A;M=
MM!$M.1M:=Nc                 R   t               5 }|j                  d| j                         |j                  d       d d d        | j                  j	                         d      5  t        j                         r/| j                  d| j                         | j                  d       n| j                  d       d d d        | j                  |j	                         d      5  t        j                         r!| j                  t        j                  d       n| j                  d       d d d        | j                  |j	                         d      5  | j                  t        j                  d	       d d d        y # 1 sw Y   @xY w# 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   y xY w)
Nr  r  r  rv  r  rH   r  r   &'parent' is a link to an absolute path)r  r   r  r  r&   r	   r  r  r  r'   r  AbsoluteLinkErrorr  s     r   test_absolute_symlinkz+TestExtractionFilters.test_absolute_symlinka  s]    ^ 	#sGGHG7GGM"	# 
O< 	0$$&  dmm D  +  /	0 
E2 	0$$&%%77,-   /	0 
F3 	:!!))8:	: 	:+	# 	#	0 	0	0 	0	: 	:s1   /E8"AFAF!F8FFFF&c                 X   t               5 }|j                  d| j                  dz         d d d        | j                  j	                         d      5  | j                  t        d       d d d        | j                  |j	                         d      5  | j                  t        d       d d d        | j                  |j	                         d      5  | j                  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   kxY w# 1 sw Y   y xY w)	Nr  r  r  rv  z.*foo. not foundrH   r   r  )	r  r   r  r  r&   r  ra  r'   r  r  s     r   test_absolute_hardlinkz,TestExtractionFilters.test_absolute_hardlink  s    ^ 	AsGGH$--%*?G@	A 
O< 	@!!(,>?	@ 
E2 	@!!(,>?	@ 
F3 	:!!))8:	: 	:	A 	A	@ 	@	@ 	@	: 	:s/   !C<DD!D <DDD D)c                 ^   t               5 }|j                  dd       d d d        	 | j                  j                         d      5  t	        j
                         rDt        | j                  t              r| j                  t               n| j                  dd       n	 d d d        dD ]K  }| j                  j                         |      5  | j                  t        j                  d       d d d        M y # 1 sw Y   xY w# 1 sw Y   fxY w# t        $ r Y tw xY w# 1 sw Y   xY w)N../mooz..//tmp/moor  rv  r^   r  zH'../moo' would be extracted to '.*moo', which is outside the destination)r  r   r  r&   r	   r  rz  r  r  r  r  r'   r  r  s      r   test_sly_relative0z(TestExtractionFilters.test_sly_relative0  s    ^ 	8sGGHG7	8	##CHHJ#G ((*!$"7"7I --o>((m(L & $ 	-F##CHHJ7 -%%77,-- -	-1	8 	8
    		- -sA   C<!D 	AD#D !D#<DDD 	D D #D,	c                 <   t               5 }|j                  d       |j                  dd       d d d        | j                  j                         d      5  | j	                  dt
        j                         t        j                         r| j	                  dd	       d d d        d
D ]K  }| j                  |j                         |      5  | j                  t
        j                  d       d d d        M y # 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   pxY w)Nztmp/ztmp/../../mooztmp/../..//tmp/moor  rv  tmpr\  r$  ztmp/../../tmp/moor  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r  r   r  r&   r  r'   r]  r	   r  r  r  r  s      r   test_sly_relative2z(TestExtractionFilters.test_sly_relative2  s    ^ 	FsGGFOGGO0DGE	F 
O< 	KU9$$&  6I J	K
 $ 	%F##CHHJ7 %%%33$%% %	%	F 	F	K 	K% %s$   %C:A	D!D:DDD	c           	      j   t               5 }|j                  dd       |j                  dt        j                  j	                  dd             |j                  dt        j                  j	                  d	dd      
       d d d        dD ]  }| j                  j                         |      5  | j                  dd       | j                  dd       t        j                         r| j                  ddd       n| j                  dd       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Ntargetdir/targetr'  r  linkdir/hardlink	targetdirr  r!  linkdir/symlinkr  r  rH   r   rv  z../targetdir/targetrW   r  
r  r   re   rf   rg   r  r&   r  r	   r  r  s      r   test_deep_symlinkz'TestExtractionFilters.test_deep_symlink  s-   
 ^ 	.sGG&QG/GG&BGGLLX5'G ( GG%"'',,k83-G .	. 5 	@F##CHHJ7 @  !3! <  !3! <((*$$%6Q0E % G $$%6Q$?@ @	@	. 	.@ @s   A7D/A#D)D&)D2	c                    t               5 }|j                  dd       |j                  dt        j                  j	                  dd             |j                  dd	       |j                  d
d       |j                  dd       d d d        dD ]  }| j                  j                         |      5  | j                  dd	       | j                  d
d	       | j                  dd	       t        j                         r)| j                  ddd       | j                  ddd       n&| j                  dd	       | j                  dd	       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr.  hardlinkr  symlink2linkdir	hardlink2r+  r'  r  r,  r!  zlinkdir/hardlink2r/  r0  r1  r  s      r   test_chainsz!TestExtractionFilters.test_chains  sv    ^ 	HsGG%*G=GGJ277<<;,(G )GG&QG/GG&4FGGGG'5FGG	H 5 	9F##CHHJ7 9  !3! <  !3! <  !41 =((*$$%6Q0: % <$$Za0C % E $$%6Q$?$$Za$89 9	9	H 	H9 9s   A>E6BE*E'*E3	c                 	   t               5 }|j                  dd       |j                  dd       |j                  dd       |j                  dd	       |j                  d
d       |j                  dd       d d d        t        j                  j	                  t
        d      }t        |d      5  	 d d d        	 	 t        j                  |t        j                  |      j                  t        j                  z         t        j                  |      j                  t        j                  z  }t        j                  |       t        j                   |       t        j                  |t        j                  |      j                  t        j                  z         t        j                  |      j                  t        j                  z  }t        j"                  |       | j%                  j                         d      5  |r| j'                  dd       n| j'                  dd       | j'                  dd       | j'                  dd       | j'                  dd	       | j'                  d
d       |r| j'                  dd       n| j'                  dd       d d d        | j%                  |j                         d      5  | j'                  dd       | j'                  dd       | j'                  dd       | j'                  dd	       | j'                  d
d       | j'                  dd       d d d        | j%                  |j                         d      5  t        j(                  t        j*                  | j,                  j                         j                              }| j'                  dd       | j'                  dd       | j'                  dd       | j'                  dd       | j'                  d
d       | j'                  d|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# t        $ r<}|j                  t        t        dd      k(  r| j                  d       n Y d }~d }~ww xY w# t        j                  |       w xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   y xY w)Nall_bitsz
?rwsrwsrwtr   	perm_bitsz
?rwxrwxrwxexec_group_otherz
?rw-rwxrwxread_group_onlyz
?---r-----no_bitsz
?---------zdir/z
?---rwsrwtztmp.filer   EFTYPEr   z?chmod() failed with EFTYPE: regular users cannot set sticky bitrv  z
?rwsrwsrwxz
?---rwsrwxrH   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr   z
?rw-r--r--z
?rw-r-----z
?rw-------)r  r   re   rf   rg   rd   r&   chmodr  r  r  r  errnor;  r  rq  r   r   r  r  rq  r  r  )r   r  tmp_filenamer  have_sticky_fileshave_sticky_dirsnormal_dir_modes          r   
test_modesz TestExtractionFilters.test_modes  s    ^ 	/sGGJ\G2GGKlG3GG&\G:GG%LG9GGILG1GGFG.	/ ww||GZ8,$ 			$
.66EG "$!6!>!>!MIIl#

rww|4<<t||KLGGL199DLLH

O< 	<   , ?  , ?[|</lC.\BY\:  l ;  l ;	< 
E2 	8Zl;[|</lC.\BY\:V,7	8 
F3 	;"mmDLL""$,,-. /OZl;[|</lC.\BY\:V/:	; 	;q	/ 	/	 	  99x ;; MM #H I I	 IIl#	< 	<	8 	8	; 	;sp   A3P16P>AQ 0R 	BR-A3R:+B=S1P;>Q	R1RR RR R*-R7:SSc                    t               5 }|j                  dt        j                         d d d        dD ]^  }| j	                  j                         |      5  t        t        d      r"| j                  dt        j                         n	 d d d        ` | j	                  j                         d      5  | j                  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r(  )rv  rH   mkfifor   z'foo' is a special file)r  r   r'   rp  r  r&   r   re   r  r  SpecialFileErrorr  s      r   	test_pipezTestExtractionFilters.test_pipe>  s    ^ 	2sGGE 0 0G1	2 - 	F##CHHJ7 2x($$U1A1A$B  	 
F3 	+!!(()+	+ 	+	2 	2 	+ 	+s#   "C"4C.8!C:"C+.C7	:Dc                    t         j                  t         j                  t         j                  fD ]  }t        j                  d      }||_        t        j                  |d      }| j                  ||       t        j                  |d      }| j                  |j
                  |       | j                  t         j                        5 }t        j                  |d       d d d        | j                  j                  j                  t         j                         | j                  |j                  j                  j                   d        y # 1 sw Y   qxY w)Nr  r   )r'   rp  rj  re  r  r\  fully_trusted_filterr%  
tar_filterrU   r  rI  data_filterr5  r  rZ   r   )r   special_typerZ   trustedrH   r  s         r   test_special_filesz(TestExtractionFilters.test_special_filesP  s     $,,goowN 
	?Looe,G'GL227B?GMM'7+$$Wb1CSXX|4""7#;#;< 1##GR01!!",,"6"6HR\\1166>
	?1 1s   	EE	c                     t         j                  j                  t              5 }|j	                         D ]*  }t        j
                  |d      }| j                  ||       , 	 d d d        y # 1 sw Y   y xY wNr   )r'   r(   r&   r#   r   rL  r%  r   rH   rZ   filtereds       r   test_fully_trusted_filterz/TestExtractionFilters.test_fully_trusted_filter_  sa    __!!'* 	1c>>+ 1"77Dh01	1 	1 	1s   >A,,A5c                 d   t         j                  j                  t              5 }|j	                         D ]d  }t        j
                  |d      }| j                  |j                  |j                         | j                  |j                  |j                         f 	 d d d        y # 1 sw Y   y xY wrS  )	r'   r(   r&   r#   r   rM  r%  r   r\  rT  s       r   test_tar_filterz%TestExtractionFilters.test_tar_filterf  s     __!!'* 	;c>>+ ;"--gr:hmmW\\:hmmW\\:;	; 	; 	;s   A8B&&B/c                    t         j                  j                  t              5 }|j	                         D ]e  }	 t        j
                  |d      }| j                  |j                  |j                         | j                  |j                  |j                         g 	 d d d        y # t         j                  $ r Y w xY w# 1 sw Y   y xY wrS  )
r'   r(   r&   r#   r   rN  FilterErrorr%  r   r\  rT  s       r   test_data_filterz&TestExtractionFilters.test_data_filterp  s     __!!'* 	;c>>+ ;&227B?H hmmW\\:hmmW\\:;	; 	; ** 		; 	;s/   C B'AC 'B=:C <B==C  C	c                 P   t               5 }|j                  d       ddd       t        j                  dt        f      5  | j                  j                         d      5  | j                  d       ddd       ddd       y# 1 sw Y   hxY w# 1 sw Y   xY w# 1 sw Y   yxY w)zEnsure the default filter warnsr  NzPython 3.14)r  r   r   check_warningsr  r  r&   r  r  s     r   test_default_filter_warnsz/TestExtractionFilters.test_default_filter_warns|  s    ^ 	sGGEN	++ 235 	(##CHHJ5 (  '(	( 	(	 	( (	( 	(s/   B !B!B3BBB	BB%c                     t        j                  t        d      }d }||_        | j	                  |d       5  | j                  d       d d d        y # 1 sw Y   y xY w)Nr`   c                 &    | j                   dk(  r| S y NrP   rc  rZ   rf   s     r   strict_filterzSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filter      ||.r   rP   )r'   r(   r#   rr  r  r  )r   rH   rc  s      r   &test_change_default_filter_on_instancez<TestExtractionFilters.test_change_default_filter_on_instance  sT    oogs+	
 !.T* 	._-	. 	. 	.s   AAc                 4   d }t        j                  t        d      }t        j                  t         j                  dt        |            5  | j                  |d       5  | j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 &    | j                   dk(  r| S y ra  rc  rb  s     r   rc  zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filter  rd  r   r`   rr  rP   )r'   r(   r#   r   r   ry  r  r  )r   rc  rH   s      r   #test_change_default_filter_on_classz9TestExtractionFilters.test_change_default_filter_on_class  s    	
 oogs+w0C+M:< 	2##C. 2  12	2 	22 2	2 	2s$   BB1BB	BBc                      G d dt         j                        } |t        d      }| j                  |d       5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)QTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclassc                 &    |j                   dk(  r|S y ra  rc  r   rZ   rf   s      r   rr  zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filter  s    <<?2"Nr   Nr  r+   r   r   TarSubclassrk    s     r   rn  r`   rP   )r'   r(   r#   r  r  )r   rn  rH   s      r   &test_change_default_filter_on_subclassz<TestExtractionFilters.test_change_default_filter_on_subclass  sS    	 '// 	  '3'T* 	._-	. 	. 	.s   AAc                     t        j                  t        d      }d|_        | j	                  |d       5  | j                  t               d d d        y # 1 sw Y   y xY w)Nr`   r   )r'   r(   r#   rr  r  r  r  r  s     r   $test_change_default_filter_to_stringz:TestExtractionFilters.test_change_default_filter_to_string  sM    oogs+ &T* 	-!!),	- 	- 	-s   AAc                 b     fd}t               5 }|j                  d       |j                  d       |j                  d       d d d         j                  j                         |      5   j	                  d        j	                  d       d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)Nc                     j                  |j                         | j                  dk(  r| j                  d      S | j                  dk(  ry | S )N	move_thismovedrc  ignore_this)r%  r  r   r   )rZ   rf   r   s     r   custom_filterz?TestExtractionFilters.test_custom_filter.<locals>.custom_filter  sF    MM$-||{*G44||},Nr   rt  rv  keepru  r  )r   rw  r  s   `  r   test_custom_filterz(TestExtractionFilters.test_custom_filter  s    	 ^ 	sGGK GGM"GGFO	 
M: 	%W%V$	% 	%		 		% 	%s   4B-#B%B"%B.c                     t               5 }|j                  d       d d d        | j                  j                         d      5  | j	                  t
               d d d        y # 1 sw Y   HxY w# 1 sw Y   y xY w)Nr  zbad filter name)r  r   r  r&   r  rR  r  s     r   test_bad_filter_namez*TestExtractionFilters.test_bad_filter_name  sh    ^ 	sGGEN	
,=> 	.!!*-	. 	.	 		. 	.s   A$A0$A-0A9c                     G d d      }t               5 }|j                  d       |j                  dd       |j                  d       d d d         |       5 }| j                  j                         |      5  | j	                  d       d d d        d d d        | j                  j                  d       | j                  |j                  d       y # 1 sw Y   xY w# 1 sw Y   VxY w# 1 sw Y   ZxY w)	Nc                       e Zd Zd Zd Zd Zy)BTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilterc                     d| _         | S r  )num_files_processedr   s    r   r  zLTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__  s    +,(r   c                     	 t        j                  ||      }| xj                  dz  c_        |S # t         j                  $ r Y y w xY w)Nrt   )r'   rN  rZ  r  rm  s      r   __call__zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__  sK     %11'4@G ((A-( **   s   / AAc                     d| _         y )NT)done)r   exc_infos     r   r  zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__  s	     	r   N)r    r!   r"   r  r  r  r+   r   r   StatefulFilterr~    s    !r   r  goodbadr   r  rw   T)r  r   r  r&   r  rU   r  r  )r   r  r  rw  s       r   test_stateful_filterz*TestExtractionFilters.test_stateful_filter  s    	! 	!  ^ 	sGGFOGGEcG*GGFO	  	)##CHHJ> )  ()	) 	::A>++T2	 	
) )	) 	)s/   6C!C.;C"C.C"C+	'C..C7c                 z
   d }d }d }d }d }t               5 }|j                  d       d d d        | j                  j                  d      |      5  | j	                  d       d d d        | j                  |j                  d      |      5  | j	                  d       d d d        | j                  |j                  d      |      5  | j	                  d       d d d        | j                  |j                  d      |      5  | j                  t        j                         d d d        | j                  |j                  d      |      5  | j                  t               d d d        | j                  |j                  d	      |      5  | j	                  d       d d d        | j                  |j                  d	      |      5  | j                  t        j                         d d d        | j                  |j                  d	      |      5  | j                  t               d d d        | j                  |j                  d	      |      5  | j                  t        j                         d d d        | j                  |j                  d	      |      5  | j                  t               d d d        | j                  |j                  d
      |      5  | j                  t        j                         d d d        | j                  |j                  d
      |      5  | j                  t        j                         d d d        | j                  |j                  d
      |      5  | j                  t               d d d        | j                  |j                  d
      |      5  | j                  t        j                         d d d        | j                  |j                  d
      |      5  | j                  t               d d d        | j                  |j                  d      |      5  | j                  t               d d d        y # 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   +xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 ,    t        j                  d      )Nzfailed with ExtractError)r'   ExtractErrorrb  s     r   extracterror_filterzBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filter  s    &&'ABBr   c                 ,    t        j                  d      )Nzfailed with FilterError)r'   rZ  rb  s     r   filtererror_filterzATestExtractionFilters.test_errorlevel.<locals>.filtererror_filter  s    %%&?@@r   c                     t        d      )Nzfailed with OSError)r  rb  s     r   oserror_filterz=TestExtractionFilters.test_errorlevel.<locals>.oserror_filter  s    /00r   c                 ,    t        j                  d      )Nzfailed with base TarError)r'   TarErrorrb  s     r   tarerror_filterz>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filter  s    ""#>??r   c                     t        d      )Nzfailed with ValueError)rR  rb  s     r   valueerror_filterz@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filter  s    566r   r+  r   r  rt   rw   zboo!)r  r   r  r&   r  r  r'   r  rR  rZ  r  r  r  )r   r  r  r  r  r  r  s          r   test_errorlevelz%TestExtractionFilters.test_errorlevel  s{   	C	A	1	@	7 ^ 	sGGFO	
 A 68KL 	%V$	% A 68JK 	%V$	% A 6G 	%V$	% A 6H 	4!!'"2"23	4 A 68IJ 	.!!*-	.
 A 68KL 	%V$	% A 68JK 	7!!'"5"56	7 A 6G 	+!!'*	+ A 6H 	4!!'"2"23	4 A 68IJ 	.!!*-	.
 A 68KL 	8!!'"6"67	8 A 68JK 	7!!'"5"56	7 A 6G 	+!!'*	+ A 6H 	4!!'"2"23	4 A 68IJ 	.!!*-	.
 F ;=OP 	-!!),	- 	-q	 	
	% 	%	% 	%	% 	%	4 	4	. 	.
	% 	%	7 	7	+ 	+	4 	4	. 	.
	8 	8	7 	7	+ 	+	4 	4	. 	.
	- 	-s   Q!Q.Q;R
 RR"R/ R<S	 S$S#$ S0. S=8T
8 TT$T1!Q+.Q8;RRR"R,/R9<S	SS #S-0S:=T
TT!$T.1T:)NNNN)r  )&r    r!   r"   r  r  rd   r  r  r   r  r  r  r  r  r  r  r  r  r"  r%  r)  r2  r8  rF  rJ  rQ  rV  rX  r[  r^  re  rh  ro  rq  ry  r{  r  r  r+   r   r   r  r  g  s=   
 w||G$z1H G9 98 BF!0F%/K2 00 00d T0 T0l : :::"  -  -D % %& @ @. 9 92C;J+$?1;
;(	.
2
.-%".3<E-r   r  c                   `    e Zd Zej                  j                  ed      Zed        Z	d Z
d Zy)OverwriteTeststestoverwritec                 ,   t         j                  j                  t        d      x}| _        | j                  t        j                  |       t        j                  |d      5 }t        j                  d      }d|_        |j                  |t        j                  d             d d d        t         j                  j                  t        d      x}| _        | j                  t        j                  |       t        j                  |d      5 }|j                  |j!                  t         j"                  d             d d d        t         j                  j                  t        d      }|| _        | j                  t        j                  |       t        j                  |d      5 }t        j                  d      }d|_        |j                  |t        j                  d             d d d        y # 1 sw Y   OxY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nztar-with-file.tarr   r  rv   s
   newcontentztar-with-dir.tarztar-with-implicit-dir.tarz	test/file)re   rf   rg   rd   ar_with_fileaddClassCleanupr	   rq  r'   r&   r  rW   r  r$   r   ar_with_dirr  curdirar_with_implicit_dir)rx  ro  rH   r  s       r   ry  zOverwriteTests.setUpClass.  s   !ww||G5HIICI,,a0\\!S! 	6S'AAFKK2::m45	6
 !ggll74FGGCOI,,a0\\!S! 	;SKKryy&9:	; GGLL"=>#$ I,,a0\\!S! 	6S,AAFKK2::m45	6 	6	6 	6	; 	;	6 	6s&   "AG10G>&AH
1G;>H
Hc                 .    t        j                  |d      S r  )r'   r&   )r   rf   s     r   r&   zOverwriteTests.openD  s    ||D#&&r   c                 >    |j                  | j                  d       y )Nrv  r^   )ru  testdir)r   ars     r   ru  zOverwriteTests.extractallG  s    
dll?;r   N)r    r!   r"   re   rf   rg   rd   r  r  ry  r&   ru  r+   r   r   r  r  +  s2    ggll7O4G6 6*'<r   r  c                  &   t        j                  t               t        j                  t               t
        gat        t
        d      5 } | j                         }d d d        t        t        t        fD ]  }|j                  st        j                  |j
                         t        j                  |j
                         |j                  |j
                  d      5 }|j                         d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nrs   r   )r	   rq  rd   re   makedirsr#   r  r&   rT   r-   r4   r:   r  r  )r[   r   crH   s       r   setUpModuler  K  s    WKK 9L	gt	 yy{ w(  66QYY'		*		4(  C		$   	 	    s   
C;D;DD	c                  ~    t         j                  j                  t              rt	        j
                  t               y y r   )re   rf   r  rd   r	   r  r+   r   r   tearDownModuler  \  s%    	ww~~g! r   __main__)rA  r   re   r$   hashlibr   
contextlibr   r   randomr   r  rz  r  rt  r  r   unittest.mockr'   r  r   r   test.supportr	   r
   r   r0   r#  r  r5   r=   r   rf   r7  TESTFNrd   r  r!  r#   rg   r/   r6   r<   r   r  rX   r4  r   requires_gzipr-   r7  r4   requires_lzmar:   rA   TestCaserN   r   r   r   r   r   r   r   r   r.  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rL  rc  r{  r  r  r  r  r  r  r  r  r  r  r  r'  r*  r/  r2  r9  r_  rs  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r9  r;  r=  r?  rJ  r  r  r  r  r  r&  r*  rR  re  r  r  r  r  r  r  r  r  r  r  r  r  r  r    ri  r+   r   r   <module>r     sd    
 	 	  0    	        " & ($ ''//)**
+i
7o%	
'

=
)77<<!12
'',,w 1
2	g/	0
'',,w	
*ggll7I. G  G 
) ) % % % & & & % % %	w 	UHh// Un	- 		w 		- 	M1x** M1`	8X 		'8 		8X 	X1X X1vm.~ m.^	#X%6%6 	x!183D3D 	8g/1B1B 89x!183D3D 9
<^X%6%6 <|	> 		 		> 	&1Wh// &1P	> 	, ,	> 	1x1B1B 1"^EXx00 ^EB6O 6Op9,(*;*; 9x*,(*;*; *ZGG G<u'x00 u'p		Hi 		7I 		Hi 	(%mX%6%6 (%V7(O 78/ 8;(O ;?7 ?,!7$8(:K:K !!*>! (%98;L;L   *> C(++ C$O58$$ O5d+&}h&7&7 +&\W. 1 1 W.tXz GZ %Xz %(* ( WR(*KL'18$$ '1 M'1TH8< H8VN NbL{H$5$5 L^G[("3"3 G$K[("3"3 K(I I(>%!2!2 >%@	X~x/@/@ 		G^X->-> 		X~x/@/@ 	8*"" 8*vZ
x   Z
za h'' a H7B** 7Bt V$&FG@("3"3 @ H@B*("3"3 *>	 WR)+=>WR+-ABwOx(( wO C ?wOt%-8X.. %-P`8 `D 4h6G6G ((<(0(9(9(3X5F5F #7#+#4#4\8** \8|833 33t ??CA-H-- A-H<^22H4E4E <@ "" zHMMO KB  D  D  
C  DsH   $_ )_ ._ 3_+ _____('_(+_65_6