
    z%i+s                       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Z	 d dlZ	 d dlZ	 d dlZd	 Zej<                  j?                  ej@                        d
z   Z!e!dz   Z" ejF                  d      Z$ej<                  jK                  e!d      Z&ej<                  jK                  e!d      Z'ej<                  jK                  e!d      Z(ej<                  jK                  e!d      Z)ej<                  jK                  e!d      Z*dZ+dZ, G d d      Z- ej\                          G d d             Z/ ej`                          G d d             Z1 ejd                          G d d             Z3 G d de-      Z4 G d de4ejj                        Z6 G d  d!e/e6      Z7 G d" d#e1e6      Z8 G d$ d%e3e6      Z9 G d& d'e4ejj                        Z: G d( d)e/e:      Z; G d* d+e1e:      Z< G d, d-e3e:      Z= G d. d/e4      Z> G d0 d1e>      Z? G d2 d3e?ejj                        Z@ G d4 d5e/e?ejj                        ZA G d6 d7e1e?ejj                        ZB G d8 d9e3e?ejj                        ZC G d: d;e>ejj                        ZD G d< d=e/eD      ZE G d> d?e1eD      ZF G d@ dAe3eD      ZG G dB dCe-ejj                        ZH G dD dEe/eH      ZI G dF dGe1eH      ZJ G dH dIe3eH      ZK G dJ dKe/ejj                        ZL G dL dMe4ejj                        ZM G dN dO      ZN G dP dQeNe4ejj                        ZO G dR dSeNe4ejj                        ZP G dT dUe-      ZQ G dV dWeQejj                        ZR G dX dYe/eR      ZS G dZ d[e1eR      ZT G d\ d]e3eR      ZU G d^ d_eQejj                        ZV G d` dae/eV      ZW G db dce1eV      ZX G dd dee3eV      ZY G df dge-      ZZ G dh die1eZejj                        Z[ G dj dke1eZejj                        Z\ G dl dme/eZejj                        Z] G dn doe/eZejj                        Z^ G dp dqejj                        Z_ G dr dsejj                        Z` G dt dueQejj                        Za G dv dweQejj                        Zb G dx dye/eb      Zc G dz d{e1eb      Zd G d| d}e3eb      Ze G d~ deb      Zf ej                   ehed      d       G d dejj                               Zi G d de`      Zj G d d      Zk G d dekejj                        Zl G d dekejj                        Zm G d dekejj                        Zn G d d      Zo G d deoejj                        Zp G d de/eoejj                        Zq G d de1eoejj                        Zr G d de3eoejj                        Zs G d dejj                        Zt G d dejj                        Zu G d dejj                        Zv G d dejj                        Zw ej                   ehed      d       G d de4ejj                               Zy G d de1ejj                        Zzd Z{ ej                   ehed      d       ej                   ehed      d       G d dejj                                      Z| G d de4ejj                        Z} G d de4      Z~ G d de~ejj                        Z G d de~ejj                        Z G d de~ejj                        Z G d de~ejj                        Z G d dejj                        Zd Z G d d      Zej                  rd Znd Z G d dejj                        Zd Zd Zedk(  r ej                          yy# e$ r dZY Bw xY w# e$ r dZY Kw xY w# e$ r dZY Tw xY w# e$ r dZY ]w xY w)    N)sha256)contextmanager	ExitStack)Random)support)	os_helper)script_helper)warnings_helperc                 4    t        |       j                         S N)r   	hexdigest)datas    E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/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.modeB   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,   F   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   r4   BZ2Filer%   r&   r'   bz2openr(   r*   r   r   r3   r3   M   s(    GF3;;4Doo%%Gr   r3   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   r9   r9   T   s(    GF 4==dDoo$$Gr   r9   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.setUp`   s!    <<499)46r   c                 8    | j                   j                          y r   )rG   closer   s    r   tearDownzReadTest.tearDownd   s    r   N)r   r    r!   r   rH   rK   r*   r   r   r@   r@   \   s    F6r   r@   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)	rG   	getmemberextractfilereadassertEquallensizer   sha256_regtyper   tarinfofobjr   s       r   test_fileobj_regular_filez'UstarReadTest.test_fileobj_regular_filej   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)	NrO   r   filterrzfileobj.readlines() failedr   S   zOI will gladly admit that Python is not the fastest running scripting language.
)rG   extractTEMPDIRrQ   r%   ospathjoin	readlinesrR   r#   TextIOWrapperrT   rU   )r   rY   fobj1lines1rZ   fobj2lines2s          r   test_fileobj_readlinesz$UstarReadTest.test_fileobj_readliness   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)NrO   r   r]   r_   zfileobj.__iter__() failed)rG   rb   rc   rQ   r%   rd   re   rf   rg   rR   listr#   rh   rT   )r   rY   ri   rj   rk   rl   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)NrO   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)rG   rb   rc   r%   rd   re   rf   rS   rQ   rR   seekrT   tellrV   rg   rU   readline)	r   rZ   r   rY   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)NrO   rC   d   zseeking failed in text mode)rG   rR   r#   rh   rS   encoderT   r   rW   rx   AttributeErrorfailr   rZ   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   )rG   rR   rT   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/lnktyperO   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/symtyperO   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symtype2rO   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rY   s    r   r^   z3UstarReadTest.add_dir_and_getmember.<locals>.filter   s    (++GK'+Nr   wr]   /)r   temp_cwdr&   r%   tmpnameUSTAR_FORMATformatrd   mkdiraddrmdirrT   rQ   )r   r   r^   rG   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[   rm   rp   r   r   r   r   r   r   r   r   r   unittest
skipUnlesshasattrrd   r   r*   r   r   rM   rM   h   s|    62$1/;b
9-
B;B;=,
 XX.H72x3HBDDr   rM   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   rF   r   s    r   rH   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)decoderG   rE   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#   rh   BytesIOr   	swap_attrsysrG   ro   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#   rh   r   r   r   r   rG   ro   r   r   r   r   )r   r   r   s      r   test_list_verbosezListTest.test_list_verbose4  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   )rG   rY   s     r   membersz+ListTest.test_list_members.<locals>.membersN  s-     >>+ "GLL(!M"s   ",,r   F)r   r   r   r   )r#   rh   r   r   r   r   rG   ro   r   r   r   r   )r   r   r   r   s       r   test_list_memberszListTest.test_list_membersL  s    rzz|WdC	" sHc2 	DHHMM%1BMC	Djjl##%&,*C0		D 	Ds   	.CCN)r   r    r!   rH   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   Y  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   a  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wbrr   s   invalid)	r%   r   assertFalser&   
is_tarfilepathlibPathr#   r   r   rZ   s     r   test_is_tarfile_erroneousz(CommonReadTest.test_is_tarfile_erroneousg  s    '4  		 	++G45 	++GLL,ABC '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)Nrr   )

assertTruer&   r   r"   r   r   r%   r#   r   rS   r   s     r   test_is_tarfile_validz$CommonReadTest.test_is_tarfile_validx  s    **4<<89 	**7<<+EFG $,,% 	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)Nrr   r   )	r%   r"   r&   r   rT   ry   r#   r   rS   )r   rZ   	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   rJ   r   rG   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   rw   )       ar   rt   foor_   T)r   ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   	randbytesr%   r   writer&   TarInforU   rV   tobufr  r   rJ   )r   r   charrZ   rY   rG   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)rw   iX  rt   i  w:r  rt   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of datar   r]   )r&   r%   r   r  rV   addfiler#   r   truncater  r  nextrb   rc   rR   rS   )r   rV   rG   trZ   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       d d d        y # 1 sw Y   y xY wNrO   )rG   rQ   rR   rT   r   )r   filerZ   s      r   test_extractfile_namez$CommonReadTest.test_extractfile_name  sS    xx!!/2XX!!$' 	94TYY8	9 	9 	9s   AA&N)r   r    r!   r   r   r   r  r	  r  r  r  r"  r&  r*   r   r   r   r   e  s7    E"I
2"+D,.09r   r   c                   Z   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 ej$                   eed      d      ej,                  d               Zej0                  d        Zej0                  d        Zd Zd Zd Zd Z ej>                  e du d      d        Z!d Z"y)MiscReadTestBasec                      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Nrr   fileobjr   )r*  r%   r"   assertIsInstancer   strr&   r   rT   rd   re   abspathr   rZ   rG   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)Nrr   r   r-  )r%   r"   rS   r#   r   r  r   getattrr&   r   assertIsNoner   r   rZ   r   rG   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)Nrr   r   r-  )	r%   r"   rS   r#   r   r   r&   r   r6  r7  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r,  )
rd   r%   r"   O_RDONLYr/  r   intr&   r   r6  )r   fdrZ   rG   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r,  )r*  rd   fsencoder"   r%   r/  r   bytesr&   r   rT   re   r1  )r   r"   rZ   rG   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c           	      V   t        j                  | j                        }t        j                  || j
                        5 }| j                  |j                  t               | j                  |j                  t        j                  j                  t        j                  |                   d d d        | j                  |      5 }| j                  |j                  t               | j                  |j                  t        j                  j                  t        j                  |                   d d d        t        j                  j	                  || j
                        5 }| j                  |j                  t               | j                  |j                  t        j                  j                  t        j                  |                   d d d        | j                   dk(  rt        j                  |d      5 }| j                  |j                  t               | j                  |j                  t        j                  j                  t        j                  |                   d d d        y y # 1 sw Y   xY w# 1 sw Y   TxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r_   )r   r   r"   r&   r%   r   r/  r   r0  rT   rd   re   r1  fspathr(   r'   r   )r   r"   rG   s      r   test_pathlike_namez#MiscReadTestBase.test_pathlike_name  s   ,,t||,\\'		2 	Lc!!#((C0SXXrwwryy7I'JK	L \\'" 	Lc!!#((C0SXXrwwryy7I'JK	L __!!'		!: 	Lc!!#((C0SXXrwwryy7I'JK	L ;;"s3 Ps%%chh4  277??299W;M+NOP P 	L 	L	L 	L	L 	LP Ps4   A-I9A-J'A-JA-J9JJJJ(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_arg-  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   rA   r   r.  zseek back did not work)r&   r%   r"   r   r  r   offsetrR   rS   rJ   rx   rT   r   )r   rG   r  r   rN  fr   rZ   s           r   test_fileobj_with_offsetz)MiscReadTestBase.test_fileobj_with_offset7  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r,  )r  r&   r  r%   r"   r   r   s     r   test_fail_compzMiscReadTestBase.test_fail_compS  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)rG   rQ   rT   typer&   DIRTYPEr   rY   s     r   test_v7_dirtypez MiscReadTestBase.test_v7_dirtypeZ  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?))rG   rQ   KeyErrorr   r   s    r   test_xstar_typez MiscReadTestBase.test_xstar_typeb  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)rG   rT   r=  mtimer   
startswithunamerV  s     r   test_check_membersz#MiscReadTestBase.test_check_membersk  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)rT   rG   r   r   r   s    r   test_find_membersz"MiscReadTestBase.test_find_memberst  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)
Nrs   rC   )
errorlevelrE   rO   r   r]   r   rr   r   )r&   r%   r"   rb   rc   
addCleanupr   unlinkrd   re   rf   rS   rT   r   rW   )r   rG   rO  r   s       r   test_extract_hardlinkz&MiscReadTestBase.test_extract_hardlinkx  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)
NrC   rE   
extractallfully_trustedr]   win32  c                     t        | t              r dj                  | | j                               S dj                  |       S )Nz{} ({})z
{!r} (int))
isinstancefloatr   hex)r]  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"   rd   re   rf   rc   r   isdirrm  r   r   platformrT   r   statst_modegetmtimer   r]  rJ   r   rmtree)
r   rG   DIRr  directoriesrY   re   ru  
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
extractdirrC   rl  rn  re   r^   ro  rp  i  )rd   re   rf   rc   r   r&   r%   r"   rQ   rb   rT   rz  r]  r   rw  rx  ry  r   r{  r   dirtyper|  rG   rY   	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                  ||d       |D ]J  }||j                  z  }| j                  t        j                  j                  |      |j                         L 	 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)Nrm  rC   rl  rn  r]   )r   r   rc   r   temp_dirr&   r%   r"   rv  rm  r   rT   rd   re   rz  r]  )r   r|  rG   r  r}  rY   re   s          r   test_extractall_pathlike_namez.MiscReadTestBase.test_extractall_pathlike_name  s    ll7#l2$ 	H\\'K8	H<?&)7QWWY17K7NN3OND& HW\\)  !1!1$!7GH		H 	H 	H7	H 	H 	H 	Hs<   C5C)C$)C$-A%C)C5$C))C2	.C55C>c                    d}t        j                  t              dz  }t        j                  |      5  t        j                  t        d      5 }|j                  |      }|j                  ||d       ||z  }| 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  rm  rC   rl  rn  r  )r   r   rc   r   r  r&   r%   r"   rQ   rb   rT   rd   re   rz  r]  r  s         r   test_extract_pathlike_namez+MiscReadTestBase.test_extract_pathlike_name  s    !ll7#l2$ 	I\\'K8	I<?mmG,GKKc/KBgIRWW--i8'--H	I 	I 	I 	I 	I 	Is$   CA$C4CC	
CC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)rd   re   rf   rc   r%   r  object__new__r&   r'   __init__r   r  r   r.  closedr   ri  )r   r  rZ   rG   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"   ziprT   rN  get_info)r   rG   m1m2s       r   test_parallel_iterationz(MiscReadTestBase.test_parallel_iteration  sx     \\$,,' 	?3c3- ?B  BII6  >?	? 	? 	?s   A)BBNz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   r-  r   r|r_   )r#   r   r&   r%   rJ   rx   rT   r  )r   r>  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*  r3  r8  r:  r?  rC  rF  rK  rP  rR  rW  rZ  r`  rc  r   r   r   rd   r   skip_unless_symlinkrj  skip_unless_working_chmodr  r  r  r  r  r  skipIfr  r  r  r*   r   r   r(  r(    s    G$(,GP ,28<%M9. XV,:<""> #<>$ ((" )"> ((" )"HI$&? X__TT\?3+ 4+.r   r(  c                       e Zd ZdZy)MiscReadTestN)r   r    r!   rR  r*   r   r   r  r    s    Nr   r  c                       e Zd Zy)GzipMiscReadTestNr   r*   r   r   r  r    r   r   r  c                       e Zd Zd Zy)Bz2MiscReadTestc                 &    | j                  d       y )NzBZ2File have no name attributeskipTestr   s    r   r*  z'Bz2MiscReadTest.requires_name_attribute	  s    67r   Nr   r    r!   r*  r*   r   r   r  r    s    8r   r  c                       e Zd Zd Zy)LzmaMiscReadTestc                 &    | j                  d       y )NzLZMAFile have no name attributer  r   s    r   r*  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y)StreamReadTestr  c                 ,   | 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)Nrw   z6simple read-through using TarFile.extractfile() failed)rG   isregrR   rS   r&   StreamErrorr   )r   rY   rZ   bufs       r   test_read_throughz StreamReadTest.test_read_through  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)NrP   )	rG   r  rR   rS   rT   rU   rV   r   rW   rX   s       r   r[   z(StreamReadTest.test_fileobj_regular_file%  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   )rG   r   rR   r  r&   r  rS   )r   tarinfosrO  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)NrC   rl  zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r&   r%   r"   rG   r  assertIsNotNoneislnkissymr  r  rR   rT   rS   rJ   )r   tar1tar2t1t2v1v2s          r   test_compare_membersz#StreamReadTest.test_compare_members3  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    s    F 2;
r   r  c                       e Zd Zy)GzipStreamReadTestNr   r*   r   r   r  r  N  r   r   r  c                       e Zd Zy)Bz2StreamReadTestNr   r*   r   r   r  r  Q  r   r   r  c                       e Zd Zy)LzmaStreamReadTestNr   r*   r   r   r  r  T  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%   rJ   r  r   )r   r   r   rG   es        r   _testfunc_filezDetectReadTest._testfunc_fileY  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)Nrr   r.  )r%   r&   rJ   r  r   )r   r   r   rO  rG   r  s         r   _testfunc_fileobjz DetectReadTest._testfunc_fileobja  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)NrA   r   r  r_   zr:*r|*)r   r  r&   r  r%   r"   )r   testfuncs     r   _test_modeszDetectReadTest._test_modesj  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_filez  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  X  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)Nrr   r   rs   compresslevelr  )r%   r"   rS   r4   r6   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|gzr-  )r#   r   r  r&   r  r%   )r   rO  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 %sr\  r]    r   r   r   zold-v7r&   r_  gnamezwrong value in z
 field of )rG   rR   rT   r   rS   r   itemsr5  )r   rY   chksumkwargsrO  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 )NrO   c  rV   r  rG   rQ   r  rW   rV  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  rV  s     r   test_find_conttypez!MemberReadTest.test_find_conttype  s,    (($$%56'^Dr   c                 `    | j                   j                  d      }| j                  |d       y )Nr  r   rV   rG   rQ   r  rV  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  rV  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   rO   rV   linknamer  rV  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  rV  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      rV   devmajordevminorr  rV  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   rs   r  r  r  rV  s     r   test_find_chrtypez MemberReadTest.test_find_chrtype  r  r   c                 `    | j                   j                  d      }| j                  |d       y )Nzustar/fifotyper   r  r  rV  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   rG   rQ   r  sha256_sparserV  s     r   test_find_sparsezMemberReadTest.test_find_sparse  s+    (($$^4'mDr   c                 j    | j                   j                  d      }| j                  |dt               y )N
gnu/sparser  r   r  rV  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.0r  r   r  rV  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.1r  r   r  rV  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.0r  r   r  rV  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  rV  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   rG   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  rV  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 )NrC   rD   u   pax/umlauts-ÄÖÜäöüßr  r   )	rG   rJ   r&   r%   r"   r   rQ   r  rW   rV  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  r  r!  r$  r'  r+  r.  r0  r2  r4  r6  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)	subdirrG   rQ   rY  r   assertNotEqualrT  r&   rU  )r   r;  rY   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   r:  r;  longlinkzlonglink not foundzlinkname wrong)r<  rG   rQ   rY  r   rT   r  )r   r;  r@  rY   s       r   test_read_longlinkzLongnameTest.test_read_longlink  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   r:  r;  i   zfoo.tar)r   r.  )r<  rG   rQ   rN  r.  rx   r#   r   rS   r  r&   r  r%   )r   r;  rY   rN  rZ   s        r   test_truncated_longnamez$LongnameTest.test_truncated_longname  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   r:  r;  rr   rw   rC   strict)r<  rG   rQ   rN  r%   r"   rx   r&   r  frombufrS   rT   rT  longnametype)r   r;  rN  rZ   rY   s        r   test_header_offsetzLongnameTest.test_header_offset&  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   rd   r   r   r   rstripr  rQ   removesuffix)r   longdirrG   s      r   test_longname_directoryz$LongnameTest.test_longname_directory1  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!   r>  rA  rC  rH  rM  r*   r   r   r8  r8    s    ,G7	>Or   r8  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]   rr   r  rw   )rG   rb   rc   rd   re   rf   r%   rS   rT   r   r   _fs_supports_holesrx  
assertLess	st_blocksst_size)r   r   filenamerZ   r   r|   s         r   _test_sparse_filezGNUReadTest._test_sparse_fileM  s    wv677<<.(D! 	T99;D	4-(4/	1 ""$!AOOAKK#-qyy9 %	 	s   CC(c                 &    | j                  d       y )Nr#  rW  r   s    r   test_sparse_file_oldz GNUReadTest.test_sparse_file_oldY  s    |,r   c                 &    | j                  d       y )Nr&  rY  r   s    r   test_sparse_file_00zGNUReadTest.test_sparse_file_00\      /0r   c                 &    | j                  d       y )Nr*  rY  r   s    r   test_sparse_file_01zGNUReadTest.test_sparse_file_01_  r]  r   c                 &    | j                  d       y )Nr-  rY  r   s    r   test_sparse_file_10zGNUReadTest.test_sparse_file_10b  r]  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   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrw   F)r   rw  r^  rd   re   rf   rc   r%   rx   r  r  rx  r   ri  rT  rU  )r   rZ   r|   s      r   rR  zGNUReadTest._fs_supports_holese  s     <<""7+77<<7DdD!  T		$

;'	 
 AT"KK#%		12   s   3CCN)r   r    r!   r<  r&   GNUTYPE_LONGNAMErG  
GNU_FORMATr   rW  rZ  r\  r_  ra  staticmethodrR  r*   r   r   rO  rO  @  sJ    F++LF
:-111  r   rO  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)NrC   rl  pax/regtype1r  r   zVENDOR.umlautsu   ÄÖÜäöüßzpax/regtype2r   zpax/regtype3r&   )
r&   r%   r"   rQ   rT   r_  r  pax_headersgetrJ   r   rG   rY   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)	NrC   rl  zpax/regtype4r  {   g  ^Aatimectime)r&   r%   r"   rQ   rT   rV   r   r   r]  rT  rs  rl  rJ   rn  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!   r<  r&   XHDTYPErG  
PAX_FORMATr   ro  rt  r*   r   r   rh  rh  |  s%    F??LF.r   rh  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)Nr-  r  z#external fileobjs must never closed)r#   r   r&   r%   r   r  r  r   r  r   r   
gc_collectrT   )r   rZ   rG   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  rr   rv   )r&   r%   r   r   r  
RECORDSIZE	BLOCKSIZErV   r  r#   r   rT   rU   rS   )r   rG   r  rZ   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   rx  rx    s    
0Gr   rx  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  rJ   rT   r   )r   r   rG   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   rd   re   rf   rc   r  r   rJ   assertGreatergetsize)r   rG   re   rZ   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   rd   re   rf   rc   
gettarinforT   rV   r  rJ   )r   rG   re   rY   rZ   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   )rd   re   rf   rc   r   r&   r%   r   r   r  rT   rV   rJ   r   r   r   re   rG   rY   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.listdirrb  )r  r  r  )rd   re   rf   rc   r   r%   rJ   r&   r   r   r   r  r  return_valuer   r   appendsplitr   rT   r   ri  r   )r   re   rG   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                 @   t        j                  t        | j                        5 }t	        j
                  t              dz  }t        |d      5 }|j                  d       d d d        |j                  |      }|j                  t        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   r   r   rc   r  r  rd   rE  r/  r   r0  rT   rV   )r   rG   re   rZ   rY   tarinfo2s         r   test_gettarinfo_pathlike_namez'WriteTest.test_gettarinfo_pathlike_name"  s    \\'499- 	.<<(61DdD! #T

6"#nnT*G~~biio6H!!',,4W\\8==9W\\1-	. 	.# #	. 	.s$   )DD BDD	DDrd  re  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)Nrd  link_targetr   r  os.link(): %sr   )rd   re   rf   rc   r%   r  rd  PermissionErrorr  r&   r   r   r  rT   rV   rJ   r   ri  )r   rd  targetrZ   r  rG   rY   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   )rd   re   rf   rc   r  r&   r%   r   r   r  rT   rV   rJ   r   ri  r  s       r   test_symlink_sizezWriteTest.test_symlink_sizeE  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)rd   re   r1  r   r&   r%   r   rT   r   r   r   r   
change_cwdrc   rJ   )r   dstnamerG   s      r   test_add_selfzWriteTest.test_add_selfS  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   rq  r  )rd   re   basenamer   r   r_  r   s    r   r^   z%WriteTest.test_filter.<locals>.filterm  s3    77##GLL1U:! %r   rC   rl  	empty_dir)arcnamer^   Tr_   rq  r  r  )rd   re   rf   rc   r   r   create_empty_filer&   r%   r   r   r   rJ   r  	TypeErrorrT   r   r_  rU   r   r{  )r   tempdirr   r^   rG   rY   s         r   test_filterzWriteTest.test_filtere  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   )rd   re   rf   rc   r   r  r   r&   r%   r   r   r   rJ   r  ri  r   rT   r   r   sep)r   re   cmp_pathdirr  rG   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  rv   rg  rn  r  z&extractall failed with symlinked files)rd   re   rf   rc   r   r%   r  r  r&   r   rm  OSErrorr   r   ri  r{  )r   r  temparchivesource_filetarget_filerO  rG   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  rd   re   rf   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 )Nro  zC:\foor  z/fooz///foo)r   rw  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  rc   r&   r%   r   r   r   rJ   r   r   r^  r   rG   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  )r.  r   rl  )r  EOFErrorRuntimeErrorr#   r   r  r&   r%   r   r   rv  r   r  )r   r  rO  rG   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   rd   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    r   r   r  c                       e Zd Zy)LzmaWriteTestNr   r*   r   r   r  r    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)Nrr   zfound trailing datar  zincorrect zero padding)r&   r%   r   r   rJ   decompressorrS   
decompressr   unused_datarT   countr}  )r   rG   decrZ   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ro  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   rp  i  zwrong file permissions)rd   re   existsr   r   ri  r  r&   r%   r   rJ   rx  ry  rT   )r   original_umaskrG   r   s       r   test_file_modezStreamWriteTest.test_file_mode   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   rw  r   rd   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      }y)zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1rl  N)r&   r%   r   r   rJ   r   r   	read_text)r   payloads     r    test_source_directory_not_leakedz4GzipStreamWriteTest.test_source_directory_not_leaked7  s;    
 	Wdii(..0,,w'1191Er   N)r   r    r!   r  r*   r   r   r  r  6  s    7r   r  c                   .    e Zd Zerej                  ZydZy)Bz2StreamWriteTestN)r   r    r!   r4   BZ2Decompressorr  r*   r   r   r  r  A  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  D  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  rZ   tarfls       r   _compressed_tarz$_CompressedWriteTest._compressed_tarM  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   ru   s   BZh%d1AY&SYr  rT   r   r   r  rZ   s      r   _test_bz2_headerz%_CompressedWriteTest._test_bz2_headerT  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_headerY  s/    ##M2!,o>r   N)r   r    r!   r  r  r  r  r*   r   r   r  r  G  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 Nrs      	   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_levelsg  r  r   Nr  r*   r   r   r  r  d  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_levelsn  ,    QQQr   Nr  r*   r   r   r  r  l  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_levelsv  r  r   Nr  r*   r   r   r  r  s  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  ru   zw|bz2)r#   r   r  rJ  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!   r   r   requires_bz2r"  r*   r   r   r  r  {  s)    K WC Cr   r  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 )Nrw   rs   )rU   )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 )Nrw   )rU   r&   LENGTH_NAMEr(  LENGTH_LINK)r   r   rd  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  LNKTYPErT  r%   r   re  r   r  r,  rN  rT   rJ   r  r  r   )r   r   rd  rY   rG   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r0  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/longnamer3  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_r3  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/longlnkr3  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/longlinkr3  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_r3  r   s    r   test_longlink_1025zGNUWriteTest.test_longlink_1025  s    

6;<r   c                 (    | j                  dd       y )Nr2  r<  r3  r   s    r   test_longnamelink_1023z#GNUWriteTest.test_longnamelink_1023  s    

11	3r   c                 (    | j                  dd       y )Nr6  r?  r3  r   s    r   test_longnamelink_1024z#GNUWriteTest.test_longnamelink_1024  s    

22	4r   c                 (    | j                  dd       y )Nr9  rB  r3  r   s    r   test_longnamelink_1025z#GNUWriteTest.test_longnamelink_1025  s    

33	5r   r   )r   r    r!   r(  r,  r0  r4  r7  r:  r=  r@  rC  rE  rG  rI  r*   r   r   r%  r%    s>    :345;<=345r   r%  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   rr   iI  iY  s   0000000 0000000 s                   )rd   re   rf   rc   r   r&   r%   r   r   r  BLKTYPErT  REGTYPEr  rJ   rQ   rT   r  r  rS   rN  offset_dataslicer   r{  )r   r  rG   	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   r]  r*   r   r   rK  rK    s    F'&r   rK  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   ri  r   r   s    r   rH   zCreateTest.setUp  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  )clsrZ   s     r   
setUpClasszCreateTest.setUpClass  s3    #--& 	$JJv	 	 	s   2;c                 B    t        j                  | j                         y r   )r   ri  rc  rd  s    r   tearDownClasszCreateTest.tearDownClass  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Nrs   r`  r   )r&   r%   r   r   r   rc  r(   r   rT   rU   r   r   tobjnamess      r   test_createzCreateTest.test_create  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rj  )r&   r%   r   r   r   rc  r  FileExistsErrorr(   r   rT   rU   r   rk  s      r   test_create_existingzCreateTest.test_create_existing(  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xrs   r`  r   )r(   r   r   rc  r   rT   rU   r   rk  s      r   test_create_taropenzCreateTest.test_create_taropen4  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rs  )
r(   r   r   rc  r  rp  r   rT   rU   r   rk  s      r   test_create_existing_taropenz'CreateTest.test_create_existing_taropen=  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rj  )r&   r%   r   r   r   r   r/  r   r0  rT   rd   re   r1  r   rc  r   rU   r   r(   rk  s      r   test_create_pathlike_namez$CreateTest.test_create_pathlike_nameJ  s	   \\',,w/; 	$t!!$))S1TYY(@AHHW\\$..12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rs  )r(   r   r   r   r/  r   r0  rT   rd   re   r1  r   rc  r   rU   r   rk  s      r   !test_create_taropen_pathlike_namez,CreateTest.test_create_taropen_pathlike_nameX  s   \\',,w/5 	$!!$))S1TYY(@AHHW\\$..12MMOE		$
 	UQ'lE!H-\\'" 	$dMMOE	$UQ'lE!H-	$ 	$	$ 	$s   BEE)E&)E2N)r   r    r!   r   rd   re   rf   rc   rc  rH   classmethodre  rh  rn  rq  ru  rw  ry  r{  r*   r   r   r_  r_    sf    FWl3I"   ( (.
.....r   r_  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)Nrs   r  zr:gzr&   r%   r   r   r   rc  r   rl  s     r   test_create_with_compresslevelz-GzipCreateTest.test_create_with_compressleveli  sl    \\'499A> 	%$HHT^^$	%\\'6; 	t	 		% 	%	 	   A2'A>2A;>BNr   r    r!   r  r*   r   r   r~  r~  g      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)Nrs   r  r:bz2r  r  s     r   r  z,Bz2CreateTest.test_create_with_compresslevelr  sl    \\'499A> 	%$HHT^^$	%\\'7!< 		 		% 	%	 	r  Nr  r*   r   r   r  r  p  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)Nrs   )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  y  s    %r   r  c                       e Zd ZdZdZdZy)CreateWithXModeTestrt  N)r   r    r!   r   ru  rw  r*   r   r   r  r    s    F#' r   r  rd  re  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   )rd   re   rf   rc   r  r   r%   r  rd  r  r  r&   r   rG   r   )r   rZ   r  s      r   rH   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   )rG   rJ   r   ri  r  r   r   s    r   rK   zHardlinkTest.tearDown  s4    ""r   c                     | j                   j                  | j                        }| j                  |j                  t
        j                  d       y )Nzadd file as regular failed)rG   r  r  rT   rT  r&   rR  rV  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)rG   r  r   rT   rT  r&   r.  rV  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)rG   dereferencer  r   rT   rT  r&   rR  rV  s     r   test_dereference_hardlinkz&HardlinkTest.test_dereference_hardlink  sC    #((%%dhh/w/	1r   N)r   r    r!   rH   rK   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  r.  rT  r%   r   rv  r  rJ   r   rT   r   )r   r   rd  rY   rG   lns          r   r0  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   r]  r  r  r   )r   rl  rC   rl  r   z"unable to convert pax header field)r&   r%   r   rv  r  r  rJ   rT   rl  r   r  assertIsNotrT  rB  PAX_NUMBER_FIELDSr  rJ  r   )r   rl  rG   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)re   r   r   rC   r   rE   r     rl  r   rq  )r&   r%   r   rv  r  r   r   rl  r  rJ   r   rT   )r   rl  rG   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   rq  |   rC   rl  r   r]  r  rV   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   r]  rV   r   r   r  create_pax_headerrT   r/  r=  rB  )r   r  infoheaders       r   test_create_pax_headerz#PaxWriteTest.test_create_pax_header  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!   r0  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 )NrC   _test_unicode_filenamer   s    r   test_iso8859_1_filenamez#UnicodeTest.test_iso8859_1_filenameB  s    ##K0r   c                 &    | j                  d       y )Nutf7r  r   s    r   test_utf7_filenamezUnicodeTest.test_utf7_filenameE  s    ##F+r   c                 &    | j                  d       y )Nutf-8r  r   s    r   test_utf8_filenamezUnicodeTest.test_utf8_filenameH  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   rE  r   rE   errorsr  rl  r   )
r&   r%   r   r   r  r  rJ   rT   r   r   )r   rE   rG   r   s       r   r  z"UnicodeTest._test_unicode_filenameK  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   rE  r  r  r  )r&   r%   r   r   r  r   r  UnicodeErrorr  r_  rJ   rn  s      r   test_unicode_filename_errorz'UnicodeTest.test_unicode_filename_errorZ  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_   rC   rE  rE   r  )r&   r%   r"   assertIsrT  r   r0  r  r_  r  rJ   r  s      r   test_unicode_argumentz!UnicodeTest.test_unicode_argumenti  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   rC   )r   r   rE   rl  r   u	   )r&   r  r_  r  r%   r   r   r  rJ   rQ   rT   rv  )r   r  rG   s      r   test_uname_unicodezUnicodeTest.test_uname_unicodeu  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  @  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_namerJ  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_   rl  )	r&   r%   r   r   r  r  r  rT   r   r   r   excrG   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_linkrJ  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_   rl  )	r&   r%   r   r   r  r  r  r  rT   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-)rC   u   pax/bad-pax-äöür   r  z%unable to read bad GNU tar pax headerr&   r%   r"   rQ   rY  r   r   rE   r   rG   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&   re  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-)rC   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&   rv  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"   rd   re   r  r   ri  r   s    r   rH   zAppendTestBase.setUp		  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)NrC   rl  rO   r  )r&   r%   r"   rQ   r   rR   r  )r   r   srcr  rO  rG   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_compressed	  s7    TDKK/0'++W\\7CHr   N)r  )r   r    r!   rH   r  r  r*   r   r   r  r  	  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   r.  rG   s      r   _add_testfilezAppendTest._add_testfile	  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"   rT   r   )r   rm  r.  rG   s       r   r0  zAppendTest._test!	  sA    \\$,,8 	4CS\\^U3	4 	4 	4s   !AAc                 D    | j                          | j                          y r   )r  r0  r   s    r   test_non_existingzAppendTest.test_non_existing%	  s    

r   c                     t        j                  | j                  d      j                          | j	                          | j                          y )Nr  )r&   r%   r"   rJ   r  r0  r   s    r   
test_emptyzAppendTest.test_empty)	  s2    T\\4(..0

r   c                     t        j                  d      }| j                  |       |j                  d       | j	                  |       y )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r  )r#   r   r  rx   r0  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)Nrr   r   r  r   )rm  r.  )	r  r%   r"   rS   r#   r   r  rx   r0  r   s      r   test_fileobjzAppendTest.test_fileobj4	  sy    $,,% 	99;D	zz$4 		!

%
6	 	s   BBc                 l    | j                          | j                          | j                  ddg       y )Nr  r   )rm  )r  r  r0  r   s    r   test_existingzAppendTest.test_existing=	  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   rZ   s      r   _test_errorzAppendTest._test_errorD	  sO    $,,% 	JJt	'++T-?-?@	 	s   AA%c                 &    | j                  d       y )Nr   r  r   s    r   	test_nullzAppendTest.test_nullI	  s    r   c                 &    | j                  d       y )N                r  r   s    r   test_incompletezAppendTest.test_incompleteL	      $r   c                 l    t        j                  d      j                         }| j                  |       y )Nr  r&   r  r  r  r   r   s     r   test_premature_eofzAppendTest.test_premature_eofO	  s'    u%++-r   c                 r    t        j                  d      j                         }| j                  |dz          y )Nr  r  r  r  s     r   test_trailing_garbagez AppendTest.test_trailing_garbageS	  s,    u%++-
*+r   c                 &    | j                  d       y )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   s    r   test_invalidzAppendTest.test_invalidW	  r  r   r   )r   r    r!   r  r  r0  r  r  r  r  r  r  r  r  r   r"  r$  r*   r   r   r  r  	  sS    !0 !'4 4
!7)A
%,%r   r  c                       e Zd Zy)GzipAppendTestNr   r*   r   r   r&  r&  Z	  r   r   r&  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/longnamer@  r       )r&   r  r  r   r  rJ  r  r   rV  s     r   test_ustar_limitszLimitsTest.test_ustar_limitsf	  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 Nr.  r@  r   l          )r&   r  r  re  r  r   r  rJ  rV  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 r2  )r&   r  r  rv  r  r   rV  s     r   test_pax_limitszLimitsTest.test_pax_limits	  sr    //";<g(()//*-4g(()//&)+g(()r   N)r   r    r!   r0  r3  r5  r*   r   r   r,  r,  d	  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   rE  s   foo     foobarr  r  s   foo bar )rT   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 rs      7777777            r/               rb                      r  r   s           )rT   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 )Nrs   r?  rA  r@  r/  r  rB  rD  rC  rb  rE  rG  rF  rI  rH  g      Yg      0Bs         gr   )rT   r&   itnre  rJ  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)Nrb  r9  r/  l       l        )r  rJ  r&   rM  r   re  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grprM  rJ  r<  pwdr;  mainrQ  CHRTYPErU  r.  rR  SYMTYPEXGLTYPEru  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_LONGLINKrd  r  symlink_exceptionInvalidHeaderErrorTruncatedHeaderErrorSubsequentHeaderError)not_exported)r   check__all__r&   )r   rs  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')
)rd   re   rf   dirname__file__r  r&   r  CompressionErrorr   r  r  r  r'   r%   r   r0  	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!   r=  rK  rN  rQ  ru  r}  r*   r   r   r7  r7  	  s"     7(W.>G

r   r7  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   rd   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_failure
  s    224JTJJr   c                 ^   t        j                  d      t        j                  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.txt9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   r  )r   r!  rh  r   ri  r&   r%   r   rd   re   r  )r   tar_namefilesr  tardatas        r   make_simple_tarfilez#CommandLineTest.make_simple_tarfile
  s    !!"67!! #> ?@ 		(((3\\(C( 	CB  Cw(8(8(ABC	C 	C 	Cs   !8B##B,c                    t        j                  d      g}| 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  r   benignr   r  ../evil)r   r!  rh  r   ri  r&   r%   r  r  r#   r   )r   r  r  r  r  evils         r   make_evil_tarfilez!CommandLineTest.make_evil_tarfile
  s    !!"678	(((3\\(C( 	6B__X.FJJvrzz#J7??9-DJJtRZZ_J5		6 	6 	6s   A7C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  rT   r   lowerr=  strip)r   r  r   r  s       r   test_bad_usezCommandLineTest.test_bad_use
  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  rT   r   r  optr   s       r   test_test_commandz!CommandLineTest.test_test_command"
  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_verbose(
  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   rs   )r  rr   r   rp  )r   r!  r  r   rT   r  subTestr%   rS   r   r  r   ri  )r   zipnamer  r   r  r  rO  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%   ro   r   r   r  rT   r   r  r  r  expectedr  r   s          r   test_list_commandz!CommandLineTest.test_list_commandC
  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_verboseN
  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   rs   )r   r!  r  r   rT   r   r  r  r   r  s        r   test_list_command_invalid_filez.CommandLineTest.test_list_command_invalid_fileY
  sY    ""<0..tW=C/5c"Qr   c                    t        j                  d      t        j                  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  )-cz--creater   )
r   r!  r  r   rT   r&   r%   r   r   ri  r   r  r  r   rG   s        r   test_create_commandz#CommandLineTest.test_create_command`
  s    !!"67!! #> ?@ $ 	*C*%dooc7;U;  c*\\'* %cNN$%   )	*% %   )s$   AB54B)B5)B2	.B55Cc                    t        j                  d      t        j                  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  s    file created.)
r   r!  r  r   r   r&   r%   r   r   ri  r  s        r   test_create_command_verbosez+CommandLineTest.test_create_command_verbosem
  s    !!"67!! #> ?@ % 	*C*%dooc4 @5 @7>@/5\\'* %cNN$%   )	*
% %   )s$   AB98B-	B9-B6	2B99Cc                 p   t        j                  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  dotlessnamerT   r&   r%   r   r   ri  )r   r  r   rG   s       r   $test_create_command_dotless_filenamez4CommandLineTest.test_create_command_dotless_filename{
  s    !!"678	*!$//$<e<CS#&k* !c ! [)! ! [)s$   AB B,B BB B5c                    t         j                  j                  t        d      }t	        j
                  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   )rd   re   rf   rc   r   r!  r  rT   r&   r%   r   r   ri  )r   r  r  r   rG   s        r   (test_create_command_dot_started_filenamez8CommandLineTest.test_create_command_dot_started_filename
  s    77<<4!!"678	'!$//$959CS#&h' !3 ! X&! ! X&s#   ;B2 7B&B2 &B/+B2 2C	c                    t        j                  d      t        j                  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,   r3   r9   r%   r   r   r  r(   r   r   ri  )r   r  filetyper  r   rG   s         r   test_create_command_compressedz.CommandLineTest.test_create_command_compressed
  s    !!"67!! #> ?@ "7H5 		+H==+"S=8??:%doodH=u=%%h/ %3NN$%   *		+% %   *s$   ;CB9C9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  rT   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   rn  r  r  r  )r  r   rd   re   rf   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   rs   )r   r!  r   r   r  r  r   rT   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"   rJ   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  r/  rz  r   r  )r   r  rG   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  rT   rd   re   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   r=  rd   re   r  r   s    r   test_eofzContextManagerTest.test_eof
  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   r-  zexternal file object was closedr  )r%   r   r&   r  r   r  r   r2  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)Nrn  r]   rr   )rG   rb   rc   r%   rd   re   rf   rS   rT   r   rW   )r   r   rO  r   s       r   _test_link_extractionz'LinkEmulationTest._test_link_extraction  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_extraction1        	""?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_extraction1*  r  r   c                 &    | j                  d       y )Nr   r  r   s    r   test_symlink_extraction2z*LinkEmulationTest.test_symlink_extraction2/  r  r   N)r   r    r!   r  r   r  r   rd   re   r  r  r  r  r*   r   r   r  r    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AssertionErrorry   rU   r   superrS   )r   r  	MyBytesIO	__class__s     r   rS   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.read<  sK    <<( *: ; ;#yy{c$--/.BBY2155r   c                 *    d| _         t        | 
  | S r  )r  r  rx   )r   r  r  r  s     r   rx   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seekB  s    $Y2D99r   )r   r    r!   r  rS   rx   __classcell__)r  r  s   @r   r  r  :  s    G6: :r   r  r  rs   r-  )r#   r   r4   compressr&   r  r  rangerU   r%   r  )r   r   r   rt  r  s       @r   _test_partial_inputz&Bz2PartialReadTest._test_partial_input9  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_inputM  s      %r   c                 &    | j                  d       y )Nr  r
  r   s    r   test_partial_input_bz2z)Bz2PartialReadTest.test_partial_input_bz2P  s      )r   N)r   r    r!   r  r  r  r*   r   r   r  r  5  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)rU  rT  ImportErrorgetpwuidgetgrgid)rU  rT  s     r   root_is_uid_gid_0r  T  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&   rR  rU  r%   r   r  r   r   r_  r  rT  r  )
filename_1	dirname_1
filename_2rZ   r  r   r   r   r   typcontentsr  s               r   _make_test_archivez#NumericOwnerTest._make_test_archivei  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  rd   re   rf   r  r$  r&   r%   )mock_geteuidr{  rw  r  r   r!  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)	NTrn  numeric_ownerr^   r  r  r  r  	any_order)
r(  rb   rc   rd   re   rf   assert_has_callsr   r  call)
r   r&  
mock_chmod
mock_chownr   r  _r!  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)NTrn  r*  r  r  r  r  r  r  r,  )
r(  rm  rc   rd   re   rf   r.  r   r  r/  )r   r&  r0  r1  r   r  r   r!  r3  f_dirname_1r4  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)NFrn  r*  r   )r(  rb   rc   rd   re   rf   assert_called_with)r   r&  r0  r1  r   r  r2  r3  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  rb   rc   )r   r&  r   r  r2  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!   rf  r$  r   r(  r   r  r  r5  r8  r   r  r;  r=  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 )NrO   z
misc/otherrO  )rG   rQ   r   rT   r   r   r/  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 )Nrk  not-barr  r   rG   rQ   r   rl  rT   rA  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 )Nrk  F)deeprE  r  rF  rA  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)NrO   )r   r]  r   r  r   r   r_  r  	attr_namer*   )rG   rQ   r  r   rT   r5  r=  )r   r/  rM  rB  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)NrO   i[)rN  )rG   rQ   r  r  r   )r   r/  s     r   test_replace_internalz"ReplaceTests.test_replace_internal  sG    ##O4y) 	-NN)N,	- 	- 	-s   AAN)r   r    r!   rC  rG  rJ  rN  rP  r*   r   r   r?  r?    s    *LPF-r   r?  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_   rC   rD   extractall_ctrlr   ignore)actioncategoryr]   c              3   T   K   | ]  }|j                  j                         ! y wr   )relative_tocontrol_dir).0prd  s     r   	<genexpr>z2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>  s(       A MM#//* As   %(**/*)r&   r%   r"   r   r   rc   rZ  rg  r   extraction_filterenter_contextwarningscatch_warningsDeprecationWarningrm  rJ   setglobcontrol_paths)rd  rG   cms   `  r   re  zNoneInfoExtractTests.setUpClass  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{  rZ  rg  s    r   rh  z"NoneInfoExtractTests.tearDownClass  s    coo&r   c                     t        fdt        j                        j                  d      D              }| j	                  | j
                  |       y )Nc              3   @   K   | ]  }|j                          y wr   )rY  )r[  r\  r  s     r   r]  z;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>!  s"      ; MM)$;s   r^  )rd  r   r   re  rT   rf  )r   r  	got_pathss    ` r   check_files_presentz(NoneInfoExtractTests.check_files_present   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   rn  r]   )r   r   rc   rG   rg  r   setattrr   r  rm  rm  )r   
attr_namesr|  r/  rM  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)Nr]  r^  re   )r   r   rc   rx  st_mtimerr  re  r  assertGreaterEqualr  
is_symlink)r   nowr|  re   r]  s        r   test_extractall_none_mtimez/NoneInfoExtractTests.test_extractall_none_mtime2  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   r^  rt  )r   r   rc   rx  ry  
write_textrr  re  r  is_dirrT   is_file)r   dir_moder{  regular_file_moder|  re   s         r   test_extractall_none_modez.NoneInfoExtractTests.test_extractall_none_modeB  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   rr  r   s    r   test_extractall_none_uidz-NoneInfoExtractTests.test_extractall_none_uidR  (    ##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_gidV  r  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_unamez/NoneInfoExtractTests.test_extractall_none_unameZ  (    ##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   r_  r  r  r   s    r   test_extractall_none_ownershipz3NoneInfoExtractTests.test_extractall_none_ownershipb  s.    ##E5'7C 		 	 	s    ))r   r    r!   r_  r|  re  rh  rm  r   rr  ry  r  r  r  r  r  r  r*   r   r   rR  rR    so     A A ' '8 	 	K < r   rR  c                       e Zd ZdZy)NoneInfoExtractTests_Datar   Nr   r    r!   r_  r*   r   r   r  r  f  s    r   r  c                       e Zd ZdZy)!NoneInfoExtractTests_FullyTrustedrn  Nr  r*   r   r   r  r  i  s    'r   r  c                       e Zd ZdZy)NoneInfoExtractTests_TarrG   Nr  r*   r   r   r  r  m  s    r   r  c                       e Zd ZdZy)NoneInfoExtractTests_DefaultNr  r*   r   r   r  r  p  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   )r.  r   r   )r]  r   r   r   r_  r  rL  r*   )r#   r   r&   r   re  rv  r  r%   r  r"   r  r   r  rJ  r  )r   bior  rG   rY   rM  rB  s          r   test_addzNoneInfoTests_Misc.test_addu  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)Nr]  r   r   r   r_  r  )rq  rC   rl  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#   rh   r   r   r   r   ro   r   rp  r  r   r   r  rematchrT   r^  r   endswith)r   rq  rG   tio_prevr/  rM  tio_newr  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  t  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  }|S )zInverse of `stat.filemode` (for permission bits)

    Using mode strings rather than numbers makes the later tests more readable.
    rs   Nr   )r_   -)r   r  )rt  r  r|   Srv   r     r  rP     )rt  r  r  Tr9  )rx  S_IRUSRS_IWUSRS_IXUSRS_ISUIDS_IRGRPS_IWGRPS_IXGRPS_ISGIDS_IROTHS_IWOTHS_IXOTHS_ISVTX)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++ ( 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__  s    ::<r   c                 R    t        j                  d| j                        | _        | S )Nr   rM  )r&   r'   r  tar_wr   s    r   	__enter__zArchiveMaker.__enter__  s    __#txx@
r   c                     | j                   j                          | j                  j                         | _        d | _        y r   )r  rJ   r  r   r#  )r   r  s     r   __exit__zArchiveMaker.__exit__   s-    

))+r   N)rT  
symlink_tohardlink_tor   rV   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*   )r0  r&   r  r   rV   r  r   rX  r  r.  r  rU  rT  r  r#   r   rB  r  r  )
r   r   rT  r  r  r   rV   r  rY   r.  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`.r.  r*   )r#   r   r#  r&   r%   )r   r  r  s      r   r%   zArchiveMaker.open  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rO  s    r   symlink_testr  )  s    ?x}}>?BBr   c                     | S r   r*   r  s    r   r  r  ,  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]   Nr^  )r   r  r  rm  r  raised_exceptionrd  re  expected_pathsdiscardr  rJ   rT   )r   rG   r^   r  s       r   check_contextz#TestExtractionFilters.check_context:  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                  |       |ft        j                         rRt        j                  t        j                  |j                         j                              }| j!                  ||       |1t#        |t$              r!|j'                  d      rt(        j*                  }|X| j                  |z  j-                         }t        j                  |      }||k7  r| j/                  |j1                  |             n|t(        j2                  k(  s| | j/                  |j5                                nq|t(        j*                  k(  r | j/                  |j7                                n>|t(        j8                  k(  r | j/                  |j;                                nt=        |      |*| j!                  |j                         j>                  |       |j@                  D ]  }	| j                  jC                  |	        y)z'Check a single file. See check_context.Nr   )"r  r   r   rd   re   normpathr  r   r  remover   	can_chmodrx  r^  S_IMODEry  rT   rr  r0  r  r&   rU  readlinkr   samefilerR  r~  r}  r]  is_fifoNotImplementedErrorrU  parentsr  )
r   r   rT  r  r   rV   re   r  r  parents
             r   expect_filez!TestExtractionFilters.expect_fileW  s      '''||BGG,,T\\D-@ABdD//0""4(	 3 3 5--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_exceptionz  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)rn  rG   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.evilrn  z../escaped.evilrG   r   r   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r  r   r  r  r%   r  r0  r^  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/evilrn  r  rG   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  rp  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  rn  r  r  zcurrent/rG   r   r   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r   r  rd   re   rf   rc   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  rn  r  rG   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_symlink*  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  rn  z.*foo. not foundrG   r   r  )	r  r   r  r  r%   r  rY  r&   r  r  s     r   test_absolute_hardlinkz,TestExtractionFilters.test_absolute_hardlinkH  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  rn  r]   r  zH'../moo' would be extracted to '.*moo', which is outside the destination)r  r   r  r%   r   r  rr  r  rp  r  r  r&   r  r  s      r   test_sly_relative0z(TestExtractionFilters.test_sly_relative0Y  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  rn  tmprT  r  ztmp/../../tmp/moor  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r  r   r  r%   r  r&   rU  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  rG   r   rn  z../targetdir/targetrV   r  
r  r   rd   re   rf   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  r  r   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# 1 sw Y   xY w# 1 sw Y   x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   rn  z
?rwsrwsrwxz
?---rwsrwxrG   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr   z
?rw-r--r--z
?rw-r-----z
?rw-------)r  r   rd   re   rf   rc   r%   chmodrx  ry  r  ri  r   r   r  r  r^  r  r  )r   r  tmp_filename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,$ 		
rww|4<<t||KLWW\2::T\\I
		,

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/:	; 	;Y	/ 	/	 		< 	<	8 	8	; 	;s?   A3P/6P<BQ	A3Q)B=Q#/P9<Q	QQ #Q,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  )rn  rG   mkfifor   z'foo' is a special file)r  r   r&   r]  r  r%   r   rd   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&   r]  rW  rQ  r  rT  fully_trusted_filterr  
tar_filterrT   r  r6  data_filterr/  rz  rY   r   )r   special_typerY   trustedrG   rg  s         r   test_special_filesz(TestExtractionFilters.test_special_files  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   r9  r  r   rG   rY   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r@  )	r&   r'   r%   r"   r   r:  r  r   rT  rA  s       r   test_tar_filterz%TestExtractionFilters.test_tar_filter#  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r@  )
r&   r'   r%   r"   r   r;  FilterErrorr  r   rT  rA  s       r   test_data_filterz&TestExtractionFilters.test_data_filter-  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_warningsrc  r  r%   r  r  s     r   test_default_filter_warnsz/TestExtractionFilters.test_default_filter_warns9  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 r$  rO  rY   re   s     r   strict_filterzSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filterD      ||.r   rO   )r&   r'   r"   r_  r  r  )r   rG   rO  s      r   &test_change_default_filter_on_instancez<TestExtractionFilters.test_change_default_filter_on_instanceB  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 r$  rO  rN  s     r   rO  zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filterN  rP  r   r_   r_  rO   )r&   r'   r"   r   r   rf  r  r  )r   rO  rG   s      r   #test_change_default_filter_on_classz9TestExtractionFilters.test_change_default_filter_on_classM  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 r$  rO  r   rY   re   s      r   r_  zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filter[  s    <<?2"Nr   Nr  r*   r   r   TarSubclassrW  Z  s     r   rZ  r_   rO   )r&   r'   r"   r  r  )r   rZ  rG   s      r   &test_change_default_filter_on_subclassz<TestExtractionFilters.test_change_default_filter_on_subclassY  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"   r_  r  r  r  r  s     r   $test_change_default_filter_to_stringz:TestExtractionFilters.test_change_default_filter_to_stringe  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movedrO  ignore_this)r  r  r   r   )rY   re   r   s     r   custom_filterz?TestExtractionFilters.test_custom_filter.<locals>.custom_filterl  sF    MM$-||{*G44||},Nr   r`  rb  keepra  r  )r   rc  r  s   `  r   test_custom_filterz(TestExtractionFilters.test_custom_filterk  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  rJ  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)Nrs   )r&   r;  rG  rl  rY  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  rn  r  r*   r   r   StatefulFilterrj    s    !r   rr  goodbadr   r  rv   T)r  r   r  r%   r  rT   rl  rp  )r   rr  r  rc  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&   ExtractErrorrN  s     r   extracterror_filterzBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filter  s    &&'ABBr   c                 ,    t        j                  d      )Nzfailed with FilterError)r&   rG  rN  s     r   filtererror_filterzATestExtractionFilters.test_errorlevel.<locals>.filtererror_filter  s    %%&?@@r   c                     t        d      )Nzfailed with OSError)r  rN  s     r   oserror_filterz=TestExtractionFilters.test_errorlevel.<locals>.oserror_filter  s    /00r   c                 ,    t        j                  d      )Nzfailed with base TarError)r&   TarErrorrN  s     r   tarerror_filterz>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filter  s    ""#>??r   c                     t        d      )Nzfailed with ValueError)rJ  rN  s     r   valueerror_filterz@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filter  s    566r   r%  r   r  rs   rv   zboo!)r  r   r  r%   r  r  r&   r  rJ  rG  r  rx  r  )r   ry  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   rc   r  r  r   r  r  r  r  r  r  r  r
  r  r  r  r  r!  r'  r3  r7  r>  rC  rE  rH  rK  rQ  rT  r[  r]  re  rg  ru  r  r*   r   r   r  r  0  s<   
 w||G$z1H G9 98 BF!0F%/K2 00 00d T0 T0l : :::"  -  -D % %& @ @. 9 927;r+$?1;
;(	.
2
.-%".3<E-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)Nrr   r   )r   ri  rc   rd   makedirsr"   r  r%   rS   r,   r3   r9   r  r  )rZ   r   crG   s       r   setUpModuler    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   )rd   re   r  rc   r   r{  r*   r   r   tearDownModuler    s%    	ww~~g! r   __main__)r   rd   r#   hashlibr   
contextlibr   r   randomr   r   ri  r  ra  rx  r   unittest.mockr&   r  r   test.supportr   r	   r
   r/   r  r  r4   r<   r   re   r1  TESTFNrc   r  r!  r"   rf   r.   r5   r;   r   r  rW   r   r   requires_gzipr,   r#  r3   requires_lzmar9   r@   TestCaserM   r   r   r   r   r   r   r   r   r(  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8  rO  rh  rx  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r%  rK  r_  r~  r  r  r  r   r   r  r  r  r  r  r  r  r  r&  r(  r*  r,  r7  r  r  r  r  r  r  r  r?  rR  r  r  r  r  r  r  r  r  r  r  r  r  r   rV  r*   r   r   <module>r     sC   
 	 	  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 	G9X G9TQ.~ Q.f#X%6%6 	x!183D3D 	8g/1B1B 89x!183D3D 9
;^X%6%6 ;z	> 		 		> 	&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Z h'' Z z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u
-H-- u
-p "" zHMMO I  D  D  
C  DsH   ^ ^$ $^2 )_  ^! ^!$^/.^/2^=<^= _
_