
    <eg                       d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ 	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY wd	 Zej                            ej                  d
z   Z e dz   Z! ej"        d          Z#ej        $                    e d          Z%ej        $                    e d          Z&ej        $                    e d          Z'ej        $                    e d          Z(ej        $                    e d          Z)dZ*dZ+ G d d          Z, ej-                     G d d                      Z. ej/                     G d d                      Z0 ej1                     G d d                      Z2 G d de,          Z3 G d de3ej4                  Z5 G d  d!e.e5          Z6 G d" d#e0e5          Z7 G d$ d%e2e5          Z8 G d& d'e3ej4                  Z9 G d( d)e.e9          Z: G d* d+e0e9          Z; G d, d-e2e9          Z< G d. d/e3          Z= G d0 d1e=          Z> G d2 d3e>ej4                  Z? G d4 d5e.e>ej4                  Z@ G d6 d7e0e>ej4                  ZA G d8 d9e2e>ej4                  ZB G d: d;e=ej4                  ZC G d< d=e.eC          ZD G d> d?e0eC          ZE G d@ dAe2eC          ZF G dB dCe,ej4                  ZG G dD dEe.eG          ZH G dF dGe0eG          ZI G dH dIe2eG          ZJ G dJ dKe.ej4                  ZK G dL dMe3ej4                  ZL G dN dO          ZM G dP dQeMe3ej4                  ZN G dR dSeMe3ej4                  ZO G dT dUe,          ZP G dV dWePej4                  ZQ G dX dYe.eQ          ZR G dZ d[e0eQ          ZS G d\ d]e2eQ          ZT G d^ d_ePej4                  ZU G d` dae.eU          ZV G db dce0eU          ZW G dd dee2eU          ZX G df dgej4                  ZY G dh diePej4                  ZZ G dj dkePej4                  Z[ G dl dme.e[          Z\ G dn doe0e[          Z] G dp dqe2e[          Z^ G dr dse[          Z_ ej`         eaedt          du           G dv dwej4                              Zb G dx dyeY          Zc G dz d{          Zd G d| d}edej4                  Ze G d~ dedej4                  Zf G d dedej4                  Zg G d d          Zh G d dehej4                  Zi G d de.ehej4                  Zj G d de0ehej4                  Zk G d de2ehej4                  Zl G d dej4                  Zm G d dej4                  Zn G d dej4                  Zo G d dej4                  Zp ejq         eaedt          d           G d de3ej4                              Zr G d de0ej4                  Zsd Zt ej`         eaed          d           ej`         eaed          d           G d dej4                                          Zu G d de3ej4                  Zv G d de3          Zw G d dewej4                  Zx G d dewej4                  Zy G d dewej4                  Zz G d dewej4                  Z{ G d dej4                  Z|d Z} G d d          Z~ej        rd Znd Z G d dej4                  Zd Zd Zedk    r ej                     dS dS )    N)sha256)contextmanager)Random)support)	os_helper)script_helper)warnings_helperc                 D    t          |                                           S N)r   	hexdigest)datas    (/usr/lib/python3.11/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                   R    e Zd ZeZdZej        Zej	        j
        Z
ed             ZdS )TarTest c                      | 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   <   sH        GF9Do%G) ) X) ) )r   r   c                   D    e Zd ZeZdZerej        ndZe	j
        j        ZdS )GzipTestgzN)r   r   r    gzipnamer!   r   gzipGzipFiler$   r%   r&   gzopenr'   r)   r   r   r+   r+   F   s2        GF *4==dDo$GGGr   r+   c                   D    e Zd ZeZdZerej        ndZe	j
        j        ZdS )Bz2Testbz2N)r   r   r    bz2namer!   r   r3   BZ2Filer$   r%   r&   bz2openr'   r)   r   r   r2   r2   M   s2        GF'3;;4Do%GGGr   r2   c                   D    e Zd ZeZdZerej        ndZe	j
        j        ZdS )LzmaTestxzN)r   r   r    xznamer!   r   lzmaLZMAFiler$   r%   r&   xzopenr'   r)   r   r   r8   r8   T   s2        GF *4==dDo$GGGr   r8   c                       e Zd ZdZd Zd ZdS )ReadTestr:c                 R    t          j        | j        | j        d          | _        d S )N	iso8859-1r   encodingr%   r$   r!   r   tarr   s    r   setUpzReadTest.setUp`   s)    <49)46 6 6r   c                 8    | j                                          d S r   )rF   closer   s    r   tearDownzReadTest.tearDownd   s    r   N)r   r   r    r   rG   rJ   r)   r   r   r?   r?   \   s7        F6 6 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          o eed          d          d             ZdS )UstarReadTestc                 l   | j                             d          }| j                             |          5 }|                                }|                     t          |          |j        d           |                     t          |          t          d           d d d            d S # 1 swxY w Y   d S )Nustar/regtyperegular file extraction failed)	rF   	getmemberextractfilereadassertEquallensizer   sha256_regtyper   tarinfofobjr   s       r   test_fileobj_regular_filez'UstarReadTest.test_fileobj_regular_filej   s    ($$_55X!!'** 	6d99;;DSYY46 6 6Yt__n46 6 6		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   A'B))B-0B-c                    | j                             dt          d           | j                             d          }t	          t
          j                            t          d          d          5 }|                                }d d d            n# 1 swxY w Y   | j         	                    |          5 }t          j        |          }|                                }|                     ||d           |                     t          |          dd           |                     |d         dd           d d d            d S # 1 swxY w Y   d S )	NrN   r   filterrzfileobj.readlines() failedr   S   zOI will gladly admit that Python is not the fastest running scripting language.
)rF   extractTEMPDIRrP   r$   ospathjoin	readlinesrQ   r"   TextIOWrapperrS   rT   )r   rX   fobj1lines1rY   fobj2lines2s          r   test_fileobj_readlinesz$UstarReadTest.test_fileobj_readliness   s   '&AAA($$_55"',,w88#>> 	'%__&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' X!!'** 
	2d$T**E__&&FVV02 2 2S[[#02 2 2VBZ402 2 2
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2s%   0BBB6BEEEc                    | j                             dt          d           | j                             d          }t	          t
          j                            t          d          d          5 }|                                }d d d            n# 1 swxY w Y   | j         	                    |          5 }t          t          j        |                    }|                     ||d           d d d            d S # 1 swxY w Y   d S )NrN   r   r\   r^   zfileobj.__iter__() failed)rF   ra   rb   rP   r$   rc   rd   re   rf   rQ   listr"   rg   rS   )r   rX   rh   ri   rj   rk   s         r   test_fileobj_iterzUstarReadTest.test_fileobj_iter   sc   '&AAA($$_55"',,w88#>> 	'%__&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'X!!'** 	1e"*51122FVV/1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s$   0BBB69C<<D D c                    | j                             dt          d           t          t          j                            t          d          d          5 }|                                }d d d            n# 1 swxY w Y   | j                             d          }| j         	                    |          5 }|                                }|
                    d           |                     d|                                d           |
                    dd           |                     d|                                d           |
                    d	d
           |                     d|                                d           |
                    dd
           |                     d|                                d           |                    d          }|                     ||dd         d           |
                    dd           |                     |j        |                                d           |                     |                                dd           |
                    |j         d           |                     d|                                d           |
                    d           |                                }|
                    d           |                                }|                     ||d           |
                    d           |                     t          |                                          |                                d           |
                    d           |                     t          |                                          dz   |                                d           |
                    d           |                                }|                     |                                |t          |          d          d           d d d            d S # 1 swxY w Y   d S )NrN   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)rF   ra   rb   r$   rc   rd   re   rR   rP   rQ   seekrS   tellrU   rf   rT   readline)	r   rY   r   rX   textss1s2lines	            r   test_fileobj_seekzUstarReadTest.test_fileobj_seek   sM   ' & 	 	( 	( 	("',,w88$?? 	499;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ($$_55X!!'** (	;d99;;DIIaLLLQ		8: : :IIdAT499;;=? ? ?IIeQT499;;FH H HIIdAT499;;FH H H		"AQT$Y35 5 5IIaOOOW\499;;68 8 8TYY[[#KM M MIIw|mQ'''Q		?A A AIIcNNN!!BIIcNNN!!BR8: : :IIaLLLS11499;;9; ; ;IIcNNNS11C7DF F FIIaLLL==??DTYY[[$s4yyzz*:9; ; ;O(	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	; (	;s%   A77A;>A;6NQQ
Q
c                    | j                             d          5 }t          j        |          }|                                                    d          }|                     t          |          t                     	 |	                    d           n%# t          $ r |                     d           Y nw xY wd d d            d S # 1 swxY w Y   d S )NrN   rB   d   zseeking failed in text mode)rF   rQ   r"   rg   rR   encoderS   r   rV   rw   AttributeErrorfailr   rY   r   s      r   test_fileobj_textzUstarReadTest.test_fileobj_text   s   X!!/22 		9d#D))D99;;%%k22DYt__n===9		#! 9 9 9 		7888889		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9s6   A$C BCB85C7B88CCCc                    | j                             |          5 }| j                             |          5 }|                     |j        |j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   )rF   rQ   rS   name)r   lnktyperegtypeabs        r   _test_fileobj_linkz UstarReadTest._test_fileobj_link   s    X!!'** 	-aX!!'**	-./QVQV,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s4   A;!A#A;#A'	'A;*A'	+A;;A?A?c                 2    |                      dd           d S )Nustar/lnktyperN   r   r   s    r   test_fileobj_link1z UstarReadTest.test_fileobj_link1       AAAAAr   c                 2    |                      dd           d S )N./ustar/linktest2/lnktypeustar/linktest1/regtyper   r   s    r   test_fileobj_link2z UstarReadTest.test_fileobj_link2   *     ; 9	; 	; 	; 	; 	;r   c                 2    |                      dd           d S )Nustar/symtyperN   r   r   s    r   test_fileobj_symlink1z#UstarReadTest.test_fileobj_symlink1   r   r   c                 2    |                      dd           d S )N./ustar/linktest2/symtyper   r   r   s    r   test_fileobj_symlink2z#UstarReadTest.test_fileobj_symlink2   r   r   c                 2    |                      dd           d S )Nsymtype2rN   r   r   s    r   test_issue14160zUstarReadTest.test_issue14160   s    
O<<<<<r   c                 Z    |                      d           |                      d           d S )Nbareaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)add_dir_and_getmemberr   s    r   test_add_dir_getmemberz$UstarReadTest.test_add_dir_getmember   s0    ""5)))""7+++++r   getuidgetgidz'Missing getuid or getgid implementationc           	         d }t          j                    5  t          j        t          d          5 }t          j        |_        	 t          j        |           |	                    ||           t          j
        |           n# t          j
        |           w xY w	 d d d            n# 1 swxY w Y   t          j        t                    5 }|                     |                    |          |                    |dz                        d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                 "    dx| _         | _        | S )Nr   )uidgidrX   s    r   r]   z3UstarReadTest.add_dir_and_getmember.<locals>.filter   s    (++GK'+Nr   wr\   /)r   temp_cwdr%   r$   tmpnameUSTAR_FORMATformatrc   mkdiraddrmdirrS   rP   )r   r   r]   rF   s       r   r   z#UstarReadTest.add_dir_and_getmember   s   	 	 	 !! 	 	gs++ #s$1
#HTNNNGGDG000HTNNNNBHTNNNNN# # # # # # # # # # # # # # # g&& #  MM$''MM$*--                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sq   D3B++B0B+BB+D3+B/	/D32B/	3D3A DD3D	D3"D	#D33D7:D7N)r   r   r    rZ   rl   ro   r   r   r   r   r   r   r   r   r   unittest
skipUnlesshasattrrc   r   r)   r   r   rL   rL   h   s"       6 6 62 2 2$1 1 1/; /; /;b
9 
9 
9- - -
B B B; ; ;B B B; ; ;= = =, , ,
 XX..H772x3H3HBD D D D  r   rL   c                       e Zd ZdS )GzipUstarReadTestNr   r   r    r)   r   r   r   r              Dr   r   c                       e Zd ZdS )Bz2UstarReadTestNr   r)   r   r   r   r     r   r   r   c                       e Zd ZdS )LzmaUstarReadTestNr   r)   r   r   r   r     r   r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )ListTestc                 P    t          j        | j        | j                  | _        d S )Nr   rE   r   s    r   rG   zListTest.setUp  s     <49===r   c                 d    t          j        t          j                    dd          }t          j        t
          d|          5   j                            d           d d d            n# 1 swxY w Y   |                                	                                } 
                    d|            
                    d|            
                    d	|            
                    d
|            
                    d|            
                    d|            
                    d|            
                    d|            fd} 
                     |d          |            
                     |d          |            
                     |d          |            
                     |d          |            
                     |d          |                                |d                                d|                                d|           d S )Nascii
newlinestdoutFverbose   ustar/conttype   ustar/regtypes   ustar/lnktypes   ustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longnames   ./ustar/linktest2/symtypes   ./ustar/linktest2/lnktypes   ustar/dirtype/s   ustar/dirtype-with-size/c                 p    |                      j        j        d          }|                    dd          S )Nsurrogateescaper   backslashreplace)decoderF   rD   r   )r   r{   r   s     r   convz ListTest.test_list.<locals>.conv  s1    *,=>>A88G%78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"   rg   BytesIOr   	swap_attrsysrF   rn   detachgetvalueassertInassertRegexassertNotIn)r   tiooutr   s   `   r   	test_listzListTest.test_list  s   rz||WdCCCsHc22 	) 	)HMM%M(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)jjll##%%'---&,,,&,,,BCHHH2C8882C888'---13777	9 	9 	9 	9 	9 	ddHII3OOOdd ; < <=@	B 	B 	Bdd ; < <=@	B 	B 	Bdd677===dd9::C@@@ 	 7 	8 	8 	8 	S)))$$$$$s   A--A14A1c                 F   t          j        t          j                    dd          }t          j        t
          d|          5  | j                            d           d d d            n# 1 swxY w Y   |                                	                                }| 
                    |d           |                     d|           |                     d	|           |                     d
|           |                     d|           |                     d|           d S )Nr   r   r   r   Tr   s   \?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\ns   ustar/symtype -> regtypes1   ./ustar/linktest2/symtype -> ../linktest1/regtypes;   ./ustar/linktest2/lnktype link to ./ustar/linktest1/regtypes	  gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnames	  pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longname)r"   rg   r   r   r   r   rF   rn   r   r   r   r   )r   r   r   s      r   test_list_verbosezListTest.test_list_verbose4  si   rz||WdCCCsHc22 	( 	(HMM$M'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(jjll##%% 	 = 	> 	> 	> 	13777JCPPP 347	9 	9 	9 569	; 	; 	; 569	; 	; 	; 	; 	;s   A,,A03A0c                    t          j        t          j                    dd          }d }t          j        t
          d|          5  | j                            d || j                             d d d            n# 1 swxY w Y   |                                	                                }| 
                    d|           |                     d	|           d S )
Nr   r   r   c              3   R   K   |                                  D ]}d|j        v r|V  d S )Nreg)
getmembersr   )rF   rX   s     r   membersz+ListTest.test_list_members.<locals>.membersN  s@      >>++ " "GL((!MMM" "r   r   F)r   r   r   r   )r"   rg   r   r   r   r   rF   rn   r   r   r   r   )r   r   r   r   s       r   test_list_memberszListTest.test_list_membersL  s   rz||WdCCC	" 	" 	" sHc22 	D 	DHMM%1B1BMCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Djjll##%%&,,,*C00000s   +A>>BBN)r   r   r    rG   r   r   r   r)   r   r   r   r   	  sQ        > > >#% #% #%J; ; ;0
1 
1 
1 
1 
1r   r   c                       e Zd ZdS )GzipListTestNr   r)   r   r   r   r   Y  r   r   r   c                       e Zd ZdS )Bz2ListTestNr   r)   r   r   r   r   ]  r   r   r   c                       e Zd ZdS )LzmaListTestNr   r)   r   r   r   r   a  r   r   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )CommonReadTestc                 P   t          t          d          5  	 d d d            n# 1 swxY w Y   |                     t          j        t                               |                     t          j        t          j        t                                         t          t          d          5 }|                     t          j        |                     d d d            n# 1 swxY w Y   |                     t          j        t          j        d                               d S )Nwbrq   s   invalid)	r$   r   assertFalser%   
is_tarfilepathlibPathr"   r   r   rY   s     r   test_is_tarfile_erroneousz(CommonReadTest.test_is_tarfile_erroneousg  sj   '4   	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	+G44555 	+GL,A,ABBCCC '4   	7DW/55666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	+BJz,B,BCCDDDDDs   $((.(C""C&)C&c           	      t   |                      t          j        | j                             |                      t          j        t	          j        | j                                       t          | j        d          5 }|                      t          j        |                     d d d            n# 1 swxY w Y   t          | j        d          5 }|                      t          j        t          j        |	                                                               d d d            d S # 1 swxY w Y   d S )Nrq   )

assertTruer%   r   r!   r   r   r$   r"   r   rR   r   s     r   test_is_tarfile_validz$CommonReadTest.test_is_tarfile_validx  s   *4<88999 	*7<+E+EFFGGG $,%% 	6OOG.t44555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 $,%% 	IOOG.rz$))++/F/FGGHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is%    (B44B8;B8AD--D14D1c                    t          | j        d          5 }t          j        |           |                     |                                d           d d d            n# 1 swxY w Y   t          | j        d          5 }t          j        |                                          }t          j        |           |                     |                                d           d d d            d S # 1 swxY w Y   d S )Nrq   r   )	r$   r!   r%   r   rS   rx   r"   r   rR   )r   rY   	file_likes      r   test_is_tarfile_keeps_positionz-CommonReadTest.test_is_tarfile_keeps_position  sT    $,%% 	-t$$$TYY[[!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- $,%% 	2
499;;//Iy)))Y^^--q111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s$   =AA#&A#?A#C//C36C3c                    t          j        t          | j                            dd                    5  	 d d d            n# 1 swxY w Y   	 t          j        t          | j                  }|                                 |                     |                                g            n*# t           j        $ r | 	                    d           Y nw xY w|
                                 d S # |
                                 w xY w)Nr^   r   z&tarfile.open() failed on empty archive)r%   r$   r   r   replacegetnamesassertListEqualr   	ReadErrorr   rI   r   rF   s     r   test_empty_tarfilez!CommonReadTest.test_empty_tarfile  s,   
 \'49#4#4S##>#>?? 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		,w	22CLLNNN   !1!126666   	@ 	@ 	@II>?????	@
 IIKKKKKCIIKKKKs;   AA	A3B* )C* *$CC* CC* *D c                     |                      t          d          5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )Nxxx)assertRaisesRegexFileNotFoundErrorr%   r$   r   r   s    r   test_non_existent_tarfilez(CommonReadTest.test_non_existent_tarfile  s     ##$5u== 	+ 	+L	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   AAAc                 .   t          t          d          5  	 d d d            n# 1 swxY w Y   |                     t          j        t          j         t          | j                   |                     t          j        t          j         t                     d S Nr   )r$   r   assertRaisesr%   r  r   r   s    r   test_null_tarfilez CommonReadTest.test_null_tarfile  s     '4   	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	'+W\7DINNN'+W\7CCCCCs   $((c                    t          d                              d          }dD ])}|                     t          d          5 }|                    |dz             t          j        d          }t          |          |_        |                    |	                                           |                    |           d d d            n# 1 swxY w Y   t          j        t          dd	          }	 | 
                    |                                dgd
|z             |                                 # |                                 w xY wd S )Nr   rv   )       ar   rs   foor^   T)r   ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   	randbytesr$   r   writer%   TarInforT   rU   tobufr   r   rI   )r   r   charrY   rX   rF   s         r   test_ignore_zerosz CommonReadTest.test_ignore_zeros  sm    ayy""3''! 	 	D 7C(( !D

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

7==??+++

4   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ,wStDDDC$$S\\^^eWI   				!	 	s   A=CC	C	4-D77Ec                 R   dD ]"}t          j        t          d          5 }t          j        d          }d|_        |                    |t          j        d                     d d d            n# 1 swxY w Y   t          t          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t                    5 }| 	                    t           j
        d          5  |D ]}	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5 }|                                }| 	                    t           j
        d          5  |                    |t          d	           d d d            n# 1 swxY w Y   | 	                    t           j
        d          5  |                    |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   $d S )
N)rv   iX  rs   i  w:r  rs   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of datar   r\   )r%   r$   r   r  rU   addfiler"   r   truncater  r  nextra   rb   rQ   rR   )r   rU   rF   trY   s        r   test_premature_end_of_archivez,CommonReadTest.test_premature_end_of_archive  s   * 	. 	.Dgt,, 8OE**Arz+667778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 gu%% $d###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ g&& #++G,=?WXX                                 
 g&& .#HHJJ++G,=?WXX ; ;KK76K:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ++G,=?WXX . .OOA&&++---. . . . . . . . . . . . . . .. . . . . . . . . . . . . . .	. 	.s   AA00A4	7A4	B22B6	9B6	!D!7D
>D!
DD!DD!!D%	(D%	5H:F$H$F((H+F(,#H(H7HHH
HHH	!H	c                     |                      t          j        d          5  t          j        t	          j        d                    5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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  s     ##G$57^__ 	 	g.??@@ C              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   'A.A
A.A	A.A	A..A25A2N)r   r   r    r   r   r   r  r  r  r  r  r!  r)   r   r   r   r   e  s        E E E"I I I
2 
2 
2  "+ + +D D D  ,. . .0    r   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j        d             Zej        d             Zd Zd Zd Zd Z ej        e du d          d             Z!d Z"dS )MiscReadTestBasec                     d S r   r)   r   s    r   requires_name_attributez(MiscReadTestBase.requires_name_attribute  s    r   c                    |                                   t          | j        d          5 }|                     |j        t
                     t          j        || j                  5 }|                     |j        t
                     |                     |j        t          j
                            |j                             d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S Nrq   fileobjr   )r%  r$   r!   assertIsInstancer   strr%   r   rS   rc   rd   abspathr   rY   rF   s      r   test_no_name_argumentz&MiscReadTestBase.test_no_name_argument  sk   $$&&&$,%% 	G!!$)S111d;;; Gs%%ch444  27??49+E+EFFFG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs6   <C(&ACC(C	C(C	C((C,/C,c                 ^   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   t          j        |          }|                     t          t          |d           t          j         || j	                  }| 
                    |j                   d S )Nrq   r   r(  )r$   r!   rR   r"   r   r  r   getattrr%   r   assertIsNoner   r   rY   r   rF   s       r   test_no_name_attributez'MiscReadTestBase.test_no_name_attribute  s    $,%% 	99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z$.'4@@@l4di888#(#####s   7;;c                 Z   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   t          j        |          }d|_        t          j         || j                  5 }|                     |j                   d d d            d S # 1 swxY w Y   d S )Nrq   r   r(  )	r$   r!   rR   r"   r   r   r%   r   r1  r2  s       r   test_empty_name_attributez*MiscReadTestBase.test_empty_name_attribute  s   $,%% 	99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z$	\$TY777 	(3ch'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   7;;8B  B$'B$c                 z   t          j        | j        t           j                  }t          |d          5 }|                     |j        t                     t          j        || j                  5 }| 	                    |j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r'  )
rc   r$   r!   O_RDONLYr*  r   intr%   r   r1  )r   fdrY   rF   s       r   test_int_name_attributez(MiscReadTestBase.test_int_name_attribute  s    WT\2;//"d^^ 	,t!!$)S111d;;; ,s!!#(+++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s5   <B01BB0B	B0B	 B00B47B4c                    |                                   t          j        | j                  }t	          |d          5 }|                     |j        t                     t          j        || j	                  5 }|                     |j        t                     | 
                    |j        t          j                            |j                             d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r'  )r%  rc   fsencoder!   r$   r*  r   bytesr%   r   rS   rd   r,  )r   r!   rY   rF   s       r   test_bytes_name_attributez*MiscReadTestBase.test_bytes_name_attribute  sz   $$&&&+dl++'4   	GD!!$)U333d;;; Gs%%ch666  27??49+E+EFFFG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs6   <C<:AC$C<$C(	(C<+C(	,C<<D D c           	      <   t          j        | j                  }t          j        || j                  5 }|                     |j        t                     | 	                    |j        t          j                            t          j        |                               d d d            n# 1 swxY w Y   |                     |          5 }|                     |j        t                     | 	                    |j        t          j                            t          j        |                               d d d            n# 1 swxY w Y   t          j                            || j                  5 }|                     |j        t                     | 	                    |j        t          j                            t          j        |                               d d d            n# 1 swxY w Y   | j        dk    rt          j        |d          5 }|                     |j        t                     | 	                    |j        t          j                            t          j        |                               d d d            d S # 1 swxY w Y   d S d S )Nr   r   r^   )r   r   r!   r%   r$   r   r*  r   r+  rS   rc   rd   r,  fspathr'   r&   r   )r   r!   rF   s      r   test_pathlike_namez#MiscReadTestBase.test_pathlike_name  sC   ,t|,,\'	222 	Lc!!#(C000SXrwry7I7I'J'JKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L \\'"" 	Lc!!#(C000SXrwry7I7I'J'JKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L _!!'	!:: 	Lc!!#(C000SXrwry7I7I'J'JKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L ;"s333 Ps%%ch444  27??29W;M;M+N+NOOOP P P P P P P P P P P P P P P P P P sK   A+B,,B03B0A+EE
E4A+G++G/2G/A+JJJc                 8   t          t          d          5  	 d d d            n# 1 swxY w Y   |                     t          d          5  |                     t          d          }d d d            n# 1 swxY w Y   |                     t          d          5  |                     t          d          }d d d            n# 1 swxY w Y   |                     t          d          5  |                     t          d          }d d d            d S # 1 swxY w Y   d S )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	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sB   $((
A22A69A6C  CC&DDDc                    t          j        | j        | j                  }	 |                                 |                                }|j        }|j        }|                    |          5 }|                                }d d d            n# 1 swxY w Y   |	                                 n# |	                                 w xY w|                     | j                  5 }|
                    |           |                    | j        d|          5 }|                                }|                     |j        |           |                                 |                     |                    |                                          |d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r@   r   r)  zseek back did not work)r%   r$   r!   r   r  r   offsetrQ   rR   rI   rw   rS   r   )r   rF   r  r   rI  fr   rY   s           r   test_fileobj_with_offsetz)MiscReadTestBase.test_fileobj_with_offset0  sB    l4<di888	HHJJJ

A6DXF##  qvvxx                              IIKKKKCIIKKKK YYt|$$ 	2IIf $,T4@@ 2CHHJJ  ...      !3!3!8!8!:!:D02 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2		2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2sg   AB. -BB. BB. BB. .C!3F8B F F8 F$	$F8'F$	(F88F<?F<c                 2   |                      t          j        t          j        t          | j                   t          t          d          5 }|                      t          j        t          j        || j                   d d d            d S # 1 swxY w Y   d S r'  )r  r%   r  r$   r!   r   r   s     r   test_fail_compzMiscReadTestBase.test_fail_compL  s    '+W\7DINNN'4   	<Dg/&*  < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   3BBBc                     | j                             d          }|                     |j        t          j        d           d S )Nzmisc/dirtype-old-v7zv7 dirtype failed)rF   rP   rS   typer%   DIRTYPEr   rX   s     r   test_v7_dirtypez MiscReadTestBase.test_v7_dirtypeS  sG     ($$%:;;w#	% 	% 	% 	% 	%r   c                     	 | j                             d           d S # t          $ r |                     d           Y d S w xY w)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))rF   rP   KeyErrorr   r   s    r   test_xstar_typez MiscReadTestBase.test_xstar_type[  s`    	MH344444 	M 	M 	MIIKLLLLLL	Ms    A Ac                     | j         D ]r}|                     t          |j                  dd|j        z             |j                            d          sN|                     |j        dd|j        z             sd S )N鏽>zwrong mtime for %szustar/r%   zwrong uname for %s)rF   rS   r8  mtimer   
startswithunamerQ  s     r   test_check_membersz#MiscReadTestBase.test_check_membersd  s    x 	9 	9GS//(7<79 9 9<**844 W]I(7<79 9 9 9	9 	9r   c                 x    |                      | j                                        d         j        dd           d S )Nzmisc/eofzcould not find all members)rS   rF   r   r   r   s    r   test_find_membersz"MiscReadTestBase.test_find_membersm  sA    ,,..r27,	. 	. 	. 	. 	.r   linkMissing hardlink implementationc                    t          j        t          dd          5 }|                    dt          d           |                     t          j        t          j	        
                    t          d                     |                    dt          d           |                     t          j        t          j	        
                    t          d                     t          t          j	        
                    t          d          d          5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          t                     |                    d	t          d           |                     t          j        t          j	        
                    t          d	                     t          t          j	        
                    t          d	          d          5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          t                     d d d            d S # 1 swxY w Y   d S )
Nrr   rB   )
errorlevelrD   rN   r   r\   r   rq   r   )r%   r$   r!   ra   rb   
addCleanupr   unlinkrc   rd   re   rR   rS   r   rV   )r   rF   rJ  r   s       r   test_extract_hardlinkz&MiscReadTestBase.test_extract_hardlinkq  so   
 \'a+FFF 	>#KKK@@@OOI,bgll7O.T.TUUUKKK@@@OOI,bgll7O.T.TUUUbgll7O<<dCC  qvvxx                             Yt__n===KKK@@@OOI,bgll7O.T.TUUUbgll7O<<dCC  qvvxx                             Yt__n===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s[   C4ID2&I2D6	6I9D6	:B>I8HIH	I H	!+II Ic                 l   t          j        t          d          }t          j                            t          d          }t          j        |           	 d |D             }|                    ||d           |D ]}t          j                            ||j	                  }t          j        dk    r>|                     |j        dz  t          j        |          j        dz  |j	                   d	 }t          j                            |          }d
                     ||j                   ||          |          }|                     |j        ||           	 |                                 t)          j        |           d S # |                                 t)          j        |           w xY w)NrB   rD   
extractallc                 :    g | ]}|                                 |S r)   isdir.0r  s     r   
<listcomp>z4MiscReadTestBase.test_extractall.<locals>.<listcomp>  %    777QWWYY71777r   fully_trustedr\   win32  c                     t          | t                    r(d                    | |                                           S d                    |           S )Nz{} ({})z
{!r} (int))
isinstancefloatr   hex)rX  s    r   format_mtimez6MiscReadTestBase.test_extractall.<locals>.format_mtime  sF    !%// :(//uyy{{CCC+225999r   z,tar mtime {0} != file time {1} of path {2!a})r%   r$   r!   rc   rd   re   rb   r   rh  r   r   platformrS   r   statst_modegetmtimer   rX  rI   r   rmtree)	r   rF   DIRdirectoriesrX   rd   rw  
file_mtimeerrmsgs	            r   test_extractallz MiscReadTestBase.test_extractall  s    l7[999gll7L11
	"77c777KNN3ONDDD& D Dw||C66<7**$$W\E%9%'WT]]%:U%B%,\3 3 3: : :
  W--d33
GNN L// L,,    
FCCCC#D& IIKKKS!!!!! IIKKKS!!!!s   DF	 	*F3c                    d}t           j                            t          d          }t          j        |           	 t          j        t          d          5 }|                    |          }|	                    ||d           t           j                            ||          }| 
                    t           j                            |          |j                   t          j        dk    r0| 
                    t          j        |          j        dz  d	           d d d            n# 1 swxY w Y   t#          j        |           d S # t#          j        |           w xY w)
Nustar/dirtype
extractdirrB   rg  rp  rd   r]   rq  rr  i  )rc   rd   re   rb   r   r%   r$   r!   rP   ra   rS   r{  rX  r   rx  ry  rz  r   r|  r   dirtyper}  rF   rX   	extracteds         r   test_extract_directoryz'MiscReadTestBase.test_extract_directory  sp   !gll7L11
		"g<<< P--00G#oFFFGLLg66	  !1!1)!<!<gmLLL<7**$$RWY%7%7%?%%GOOOP P P P P P P P P P P P P P P S!!!!!IS!!!!s0   E CD*E *D..E 1D.2E E!c                    t          j        t                    dz  }t          j        |          5  t          j        t          d          5 }d |D             }|                    ||d           |D ]D}||j	        z  }| 
                    t          j                            |          |j                   E	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrh  rB   rg  c                 :    g | ]}|                                 |S r)   rj  rl  s     r   rn  zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>  ro  r   rp  r\   )r   r   rb   r   temp_dirr%   r$   r!   rh  r   rS   rc   rd   r{  rX  )r   r}  rF   r~  rX   rd   s         r   test_extractall_pathlike_namez.MiscReadTestBase.test_extractall_pathlike_name  s   l7##l2$$ 	H 	H\'K888	H<?77c777KNN3ONDDD& H HW\)  !1!1$!7!7GGGGH		H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs6   CA,C:CC
	
CC
	CC"%C"c                    d}t          j        t                    dz  }t          j        |          5  t          j        t          d          5 }|                    |          }|	                    ||d           ||z  }| 
                    t          j                            |          |j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  rh  rB   rg  rp  r  )r   r   rb   r   r  r%   r$   r!   rP   ra   rS   rc   rd   r{  rX  r  s         r   test_extract_pathlike_namez+MiscReadTestBase.test_extract_pathlike_name  sv   !l7##l2$$ 	I 	I\'K888	I<?mmG,,GKKc/KBBBgIRW--i88'-HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is6   CA+C:CC
	
CC
	CC"%C"c                 .   t           j                            t          d          }t	          |d          5 }|                    d           d d d            n# 1 swxY w Y   	 t                              t          j	                  }	 |
                    |           |                     d           n4# t          j        $ r" |                     |j        j                   Y nw xY wt!          j        |           d S # t!          j        |           w xY w)Nemptyr   r   zReadError not raised)rc   rd   re   rb   r$   r  object__new__r%   r&   __init__r   r  r   r)  closedr   rd  )r   r  rY   rF   s       r   test_init_close_fobjz%MiscReadTestBase.test_init_close_fobj  s>    Wg..% 	$JJsOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 			$..11C2U### 		01111 $ 4 4 4 2333334
 U#####IU####sA   AAA$$C> 	B4 C> 4.C%"C> $C%%C> >Dc                 L   t          j        | j                  5 }t          ||          D ]_\  }}|                     |j        |j                   |                     |                                |                                           `	 d d d            d S # 1 swxY w Y   d S r   )r%   r$   r!   ziprS   rI  get_info)r   rF   m1m2s       r   test_parallel_iterationz(MiscReadTestBase.test_parallel_iteration  s     \$,'' 	?3c3-- ? ?B  BI666  >>>>?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   A1BB BNzrequires zlibc                 8   t           j                            d          5 }t          j        |_        |                     t          j                  5  t          j	        | j
                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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  s    ]  !>?? 	+4#zD""7#455 + +T\***+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s5   1BA7+B7A;	;B>A;	?BBBc                 .   t          j                    }t          j        |d          }|                                 |                    d           t          j        |d          5 }|                     |                                d            d d d            n# 1 swxY w Y   |                    d           t          j        |d          5 }|                     |                                d            d d d            d S # 1 swxY w Y   d S )Nr   r(  r   r|r^   )r"   r   r%   r$   rI   rw   rS   r  )r   r9  tfs      r   test_next_on_empty_tarfilez+MiscReadTestBase.test_next_on_empty_tarfile  sg   Z\\\"3///







\"4000 	.BRWWYY---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	


\"3/// 	.2RWWYY---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s$   ))BB"%B")D

DD)#r   r   r    r%  r.  r3  r5  r:  r>  rA  rF  rK  rM  rR  rU  r[  r^  r   r   r   rc   r   skip_unless_symlinkre  skip_unless_working_chmodr  r  r  r  r  r  skipIfr  r  r  r)   r   r   r#  r#    s         G G G$ $ $( ( (, , ,G G GP P P , , ,2 2 28< < <% % %M M M9 9 9. . . XV,,:< <"> > #"< <>$ (" " )("> (" " )("H H HI I I$ $ $&? ? ? X_TT\?33+ + 43+. . . . .r   r#  c                       e Zd ZdZdS )MiscReadTestN)r   r   r    rM  r)   r   r   r  r    s        NNNr   r  c                       e Zd ZdS )GzipMiscReadTestNr   r)   r   r   r  r    r   r   r  c                       e Zd Zd ZdS )Bz2MiscReadTestc                 0    |                      d           d S )NzBZ2File have no name attributeskipTestr   s    r   r%  z'Bz2MiscReadTest.requires_name_attribute  s    677777r   Nr   r   r    r%  r)   r   r   r  r    s#        8 8 8 8 8r   r  c                       e Zd Zd ZdS )LzmaMiscReadTestc                 0    |                      d           d S )NzLZMAFile have no name attributer  r   s    r   r%  z(LzmaMiscReadTest.requires_name_attribute  s    788888r   Nr  r)   r   r   r  r    s#        9 9 9 9 9r   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )StreamReadTestr  c                 6   | j         D ]}|                                s| j                             |          5 }	 	 |                    d          }n*# t          j        $ r |                     d           Y nw xY w|snE	 d d d            n# 1 swxY w Y   d S )NTrv   z6simple read-through using TarFile.extractfile() failed)rF   isregrQ   rR   r%   StreamErrorr   )r   rX   rY   bufs       r   test_read_throughz StreamReadTest.test_read_through  s    x 	 	G==?? %%g.. $B"iinn". B B B		 #A B B B B BB                 	 	s4   BAB$A96B8A99BB	B	c                 h   | j                                         }| j                             |          5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          |j        d           |                     t          |          t          d           d S )NrO   )	rF   r  rQ   rR   rS   rT   rU   r   rV   rW   s       r   rZ   z(StreamReadTest.test_fileobj_regular_file  s    (--//X!!'** 	d99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	TGL0	2 	2 	24.0	2 	2 	2 	2 	2s   AAAc                     | j                                         }| j                             |d                   5 }|                     t          j        |j                   d d d            d S # 1 swxY w Y   d S Nr   )rF   r   rQ   r  r%   r  rR   )r   tarinfosrJ  s      r   test_provoke_stream_errorz(StreamReadTest.test_provoke_stream_error'  s    8&&((X!!(1+.. 	;!g116:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   &A--A14A1c                    t          j        t          d          }	 | j        }	 |                                }|                                }|n|                     |d           |                                s|                                rM|                     t           j	                  5  |
                    |           d d d            n# 1 swxY w Y   |
                    |          }|
                    |          }||                     |d           |                     |                                |                                d           7	 |                                 d S # |                                 w xY w)NrB   rg  Tzstream.next() failed.zstream.extractfile() failedzstream extraction failed)r%   r$   r!   rF   r  assertIsNotNoneislnkissymr  r  rQ   rS   rR   rI   )r   tar1tar2t1t2v1v2s          r   test_compare_membersz#StreamReadTest.test_compare_members,  s   |Gk:::	8D4YY[[YY[[:$$R)@AAA88::  **7+>?? - -((,,,- - - - - - - - - - - - - - -%%b))%%b)):$$R)FGGG  BGGII24 4 4#4   JJLLLLLDJJLLLLs1   BE3 .CE3 CE3 CBE3 3F	N)r   r   r    r   r  rZ   r  r  r)   r   r   r  r  
  sU        F   2 2 2; ; ;
    r   r  c                       e Zd ZdS )GzipStreamReadTestNr   r)   r   r   r  r  G  r   r   r  c                       e Zd ZdS )Bz2StreamReadTestNr   r)   r   r   r  r  J  r   r   r  c                       e Zd ZdS )LzmaStreamReadTestNr   r)   r   r   r  r  M  r   r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )DetectReadTestc                     	 t          j        ||          }|                                 d S # t           j        $ r}|                                  Y d }~d S d }~ww xY wr   )r%   r$   rI   r  r   )r   r   r   rF   es        r   _testfunc_filezDetectReadTest._testfunc_fileR  sh    	,tT**C IIKKKKK   	 	 	IIKKKKKKKKK	s   - AAAc                    	 t          |d          5 }t          j         |||          }d d d            n# 1 swxY w Y   |                                 d S # t          j        $ r}|                                  Y d }~d S d }~ww xY w)Nrq   r)  )r$   r%   rI   r  r   )r   r   r   rJ  rF   r  s         r   _testfunc_fileobjz DetectReadTest._testfunc_fileobjZ  s    	dD!! :Ql4q999: : : : : : : : : : : : : : :
 IIKKKKK   	 	 	IIKKKKKKKKK	s2   A 6A :A :A B&B  Bc                    | j         rX|                     t          j                  5  t          j        t
          d| j         z              d d d            n# 1 swxY w Y   |                     t          j                  5  t          j        t
          d| j         z              d d d            n# 1 swxY w Y   |                     t          j                  5  t          j        | j        d           d d d            n# 1 swxY w Y   |                     t          j                  5  t          j        | j        d           d d d            n# 1 swxY w Y    || j        d            || j        d| j         z               || j        d            || j        d| j         z               || j        d           d S )Nr@   r   r  r^   zr:*r|*)r   r  r%   r  r$   r!   )r   testfuncs     r   _test_modeszDetectReadTest._test_modesc  s   ; 	6""7#455 ? ?W4$++=>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?""7#455 ? ?W4$++=>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?""7#455 6 6T\55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6""7#455 6 6T\55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6s###tdk1222u%%%tdk1222u%%%%%sG   $AAA$B22B69B6DDD.EEEc                 :    |                      | j                   d S r   )r  r  r   s    r   test_detect_filezDetectReadTest.test_detect_files  s    ,-----r   c                 :    |                      | j                   d S r   )r  r  r   s    r   test_detect_fileobjz"DetectReadTest.test_detect_fileobjv  s    /00000r   N)r   r   r    r  r  r  r  r  r)   r   r   r  r  Q  s_            & & & . . .1 1 1 1 1r   r  c                       e Zd ZdS )GzipDetectReadTestNr   r)   r   r   r  r  y  r   r   r  c                       e Zd Zd ZdS )Bz2DetectReadTestc                 P   t          t          d          5 }|                                }d d d            n# 1 swxY w Y   t          j        t
          dd          5 }|                    |           d d d            n# 1 swxY w Y   |                     t
          d           d S )Nrq   r   rr   compresslevelr  )r$   r!   rR   r3   r5   r   r  r  r   s      r   test_detect_stream_bz2z(Bz2DetectReadTest.test_detect_stream_bz2}  s   
 '4   	D99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [$a888 	DJJt	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	GU+++++s   7;;B  BBN)r   r   r    r  r)   r   r   r  r  |  s#        , , , , ,r   r  c                       e Zd ZdS )LzmaDetectReadTestNr   r)   r   r   r  r    r   r   r  c                       e Zd ZdZd ZdS ) GzipBrokenHeaderCorrectExceptionz>
    See: https://github.com/python/cpython/issues/107396
    c                     t          j        d          }|                     t          j                  5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Ns               zr|gzr(  )r"   r   r  r%   r  r$   )r   rJ  s     r   runTestz(GzipBrokenHeaderCorrectException.runTest  s    J
 
 w011 	1 	1L0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AAAN)r   r   r    __doc__r  r)   r   r   r  r    s-         
1 
1 
1 
1 
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dS )MemberReadTestNc           	         |p| j                             |          5 }|                     t          |                                          |d|j        z             d d d            n# 1 swxY w Y   d|d<   d|d<   d|d<   d|j        vr
d	|d
<   d	|d<   |                                D ]5\  }}|                     t          ||          |d|d|j                   6d S )Nwrong sha256sum for %srW  rX    r   r   r   zold-v7r%   rZ  gnamezwrong value in z
 field of )rF   rQ   rS   r   rR   r   itemsr0  )r   rX   chksumkwargsrJ  kvs          r   _test_memberzMemberReadTest._test_member  s_   %%g.. A!  16688!4!4f07<?A A AA A A A A A A A A A A A A A A 'wuu7<'''F7O'F7OLLNN 	I 	IDAqWWa00!!78qq',,GI I I I	I 	Is   ?A((A,/A,c                 t    | j                             d          }|                     |dt                     d S )NrN   c  rU   r  rF   rP   r  rV   rQ  s     r   test_find_regtypez MemberReadTest.test_find_regtype  s8    ($$_55'^DDDDDr   c                 t    | j                             d          }|                     |dt                     d S )Nzustar/conttyper  r  r  rQ  s     r   test_find_conttypez!MemberReadTest.test_find_conttype  s9    ($$%566'^DDDDDr   c                 h    | j                             d          }|                     |d           d S )Nr  r   rU   rF   rP   r  rQ  s     r   test_find_dirtypez MemberReadTest.test_find_dirtype  s6    ($$_55'*****r   c                 h    | j                             d          }|                     |d           d S )Nzustar/dirtype-with-size   r  r	  rQ  s     r   test_find_dirtype_with_sizez*MemberReadTest.test_find_dirtype_with_size  s7    ($$%>??',,,,,r   c                 j    | j                             d          }|                     |dd           d S )Nr   r   rN   rU   linknamer	  rQ  s     r   test_find_lnktypez MemberReadTest.test_find_lnktype  s8    ($$_55'ODDDDDr   c                 j    | j                             d          }|                     |dd           d S )Nr   r   r   r  r	  rQ  s     r   test_find_symtypez MemberReadTest.test_find_symtype  s8    ($$_55'I>>>>>r   c                 l    | j                             d          }|                     |ddd           d S )Nzustar/blktyper      rU   devmajordevminorr	  rQ  s     r   test_find_blktypez MemberReadTest.test_find_blktype  :    ($$_55'ABBBBBr   c                 l    | j                             d          }|                     |ddd           d S )Nzustar/chrtyper   rr   r  r  r	  rQ  s     r   test_find_chrtypez MemberReadTest.test_find_chrtype  r  r   c                 h    | j                             d          }|                     |d           d S )Nzustar/fifotyper   r  r	  rQ  s     r   test_find_fifotypez!MemberReadTest.test_find_fifotype  s7    ($$%566'*****r   c                 t    | j                             d          }|                     |dt                     d S )Nzustar/sparse P r  rF   rP   r  sha256_sparserQ  s     r   test_find_sparsezMemberReadTest.test_find_sparse  s8    ($$^44'mDDDDDr   c                 t    | j                             d          }|                     |dt                     d S )N
gnu/sparser   r  r!  rQ  s     r   test_find_gnusparsez"MemberReadTest.test_find_gnusparse  s8    ($$\22'mDDDDDr   c                 t    | j                             d          }|                     |dt                     d S )Ngnu/sparse-0.0r   r  r!  rQ  s     r   test_find_gnusparse_00z%MemberReadTest.test_find_gnusparse_00  9    ($$%566'mDDDDDr   c                 t    | j                             d          }|                     |dt                     d S )Ngnu/sparse-0.1r   r  r!  rQ  s     r   test_find_gnusparse_01z%MemberReadTest.test_find_gnusparse_01  r*  r   c                 t    | j                             d          }|                     |dt                     d S )Ngnu/sparse-1.0r   r  r!  rQ  s     r   test_find_gnusparse_10z%MemberReadTest.test_find_gnusparse_10  r*  r   c                 t    | j                             d          }|                     |dt                     d S )Nu   ustar/umlauts-ÄÖÜäöüßr  r  r  rQ  s     r   test_find_umlautsz MemberReadTest.test_find_umlauts  sB    ($$ &D E E'^DDDDDr   c                 d    d}|                      || j                                                   d S )Na   ustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longname)r   rF   r   )r   r   s     r   test_find_ustar_longnamez'MemberReadTest.test_find_ustar_longname  s/    <dDH--//00000r   c                 t    | j                             d          }|                     |dt                     d S )Nzmisc/regtype-old-v7r  r  r  rQ  s     r   test_find_regtype_oldv7z&MemberReadTest.test_find_regtype_oldv7  s9    ($$%:;;'^DDDDDr   c                     | j                                          t          j        | j        | j        d          | _         | j                             d          }|                     |dt                     d S )NrB   rC   u   pax/umlauts-ÄÖÜäöüßr  r  )	rF   rI   r%   r$   r!   r   rP   r  rV   rQ  s     r   test_find_pax_umlautsz$MemberReadTest.test_find_pax_umlauts  sw    <49)46 6 6($$ &D E E'^DDDDDr   r   )r   r   r    r  r  r  r
  r  r  r  r  r  r  r#  r&  r)  r-  r0  r2  r4  r6  r8  r)   r   r   r  r    sc       I I I I"E E EE E E+ + +- - -E E E? ? ?C C CC C C+ + +E E EE E EE E EE E EE E EE E E
1 1 1E E EE E E E Er   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )LongnameTestc                     | j         dz   dz   dz   }	 | j                            |          }n%# t          $ r |                     d           Y nw xY w|                     |j        t          j        d           d S )Nr     123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamezlongname not foundzread longname as dirtype)	subdirrF   rP   rT  r   assertNotEqualrO  r%   rP  )r   r=  rX   s      r   test_read_longnamezLongnameTest.test_read_longname  s    ;$|3j@	,h((22GG 	, 	, 	,II*+++++	,GL'/*	, 	, 	, 	, 	,s   - AAc                     | j         dz   dz   dz   }| j         dz   dz   dz   }	 | j                            |          }n%# t          $ r |                     d           Y nw xY w|                     |j        |d           d S )Nr   r<  r=  longlinkzlonglink not foundzlinkname wrong)r>  rF   rP   rT  r   rS   r  )r   r=  rB  rX   s       r   test_read_longlinkzLongnameTest.test_read_longlink  s    ;$|3j@;$|3j@	,h((22GG 	, 	, 	,II*+++++	,)85EFFFFFs   = AAc                    | j         dz   dz   dz   }| j                            |          }|j        }| j        j                            |           t          j        | j        j                            d                    }| 	                    t          j                  5  t          j        d|           d d d            d S # 1 swxY w Y   d S )Nr   r<  r=  i   zfoo.tar)r   r)  )r>  rF   rP   rI  r)  rw   r"   r   rR   r  r%   r  r$   )r   r=  rX   rI  rY   s        r   test_truncated_longnamez$LongnameTest.test_truncated_longname  s    ;$|3j@($$X..f%%%z$(*//8899w011 	7 	7Li6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   !CC	C	c                    | j         dz   dz   dz   }| j                            |          j        }t	          t
          d          5 }|                    |           t          j        	                    |
                    d          dd          }|                     |j        | j                   d d d            d S # 1 swxY w Y   d S )Nr   r<  r=  rq   rv   rB   strict)r>  rF   rP   rI  r$   r!   rw   r%   r  frombufrR   rS   rO  longnametype)r   r=  rI  rY   rX   s        r   test_header_offsetzLongnameTest.test_header_offset  s     ;$|3j@##H--4'4   	>DIIfo--diinn.98E EGW\4+<===		> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   A*B<<C C c           	         d}t          j                    5  t          j        t          d          5 }| j        |_        	 t          j        |           |                    |           t          j	        |
                    d                     n,# t          j	        |
                    d                     w xY w	 d d d            n# 1 swxY w Y   t          j        t                    5 }|                     |                    |                     |                     |                    |                    d                               d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nzfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/r   r   )r   r   r%   r$   r   r   rc   r   r   r   rstripr  rP   removesuffix)r   longdirrF   s      r   test_longname_directoryz$LongnameTest.test_longname_directory*  s(   #!! 
	O 
	Ogs++ 2s![
2HW%%%GGG$$$HW^^C001111BHW^^C00111112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 g&& O#$$S]]7%;%;<<<$$S]]73G3G3L3L%M%MNNNO O O O O O O O O O O O O O O
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	Osp   E5C	)B((C	)B99C	=E5	C	E5C	E5-A$EE5E!	!E5$E!	%E55E9<E9N)r   r   r    r@  rC  rE  rJ  rO  r)   r   r   r:  r:    sg        , , ,G G G7 7 7	> 	> 	>O O O O Or   r:  c                   b    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dS )	GNUReadTestgnuc                    | j                             |t          d           t          j                            t          |          }t          |d          5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          t          d|z             |                                 r9t          j        |          }|                     |j        dz  |j                   d S d S )Nr   r\   rq   r  rv   )rF   ra   rb   rc   rd   re   r$   rR   rS   r   r"  _fs_supports_holesry  
assertLess	st_blocksst_size)r   r   filenamerY   r   r{   s         r   _test_sparse_filezGNUReadTest._test_sparse_fileF  s   wv6667<<..(D!! 	T99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4-(4/	1 	1 	1 ""$$ 	:!!AOOAK#-qy99999	: 	:s   A99A= A=c                 0    |                      d           d S )Nr%  rY  r   s    r   test_sparse_file_oldz GNUReadTest.test_sparse_file_oldR  s    |,,,,,r   c                 0    |                      d           d S )Nr(  r[  r   s    r   test_sparse_file_00zGNUReadTest.test_sparse_file_00U      /00000r   c                 0    |                      d           d S )Nr,  r[  r   s    r   test_sparse_file_01zGNUReadTest.test_sparse_file_01X  r_  r   c                 0    |                      d           d S )Nr/  r[  r   s    r   test_sparse_file_10zGNUReadTest.test_sparse_file_10[  r_  r   c                     t           j                            d          rt          j                            t          d          } t          | d          5 }|                    d           |	                    d           |
                                 d d d            n# 1 swxY w Y   t          j        |           }t          j        |            |j        dz  |j        k     S dS )Nlinuxzsparse-testr   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrv   F)r   rx  rY  rc   rd   re   rb   r$   rw   r  r  ry  r   rd  rV  rW  )r   rY   r{   s      r   rT  zGNUReadTest._fs_supports_holes^  s     <""7++ 	7<<77DdD!!  T		$

;'''	                             
 AT"""K#%	125s   ?B  B$'B$N)r   r   r    r>  r%   GNUTYPE_LONGNAMErI  
GNU_FORMATr   rY  r\  r^  ra  rc  staticmethodrT  r)   r   r   rQ  rQ  9  s        F+LF
: 
: 
:- - -1 1 11 1 11 1 1   \  r   rQ  c                   :    e Zd ZdZej        Zej        Zd Z	d Z
dS )PaxReadTestpaxc                 n   t          j        t          d          }	 |                    d          }|                     |j        d           |                     |j        d           |                     |j                            d          d           |                    d          }|                     |j        d	           |                     |j        d           |                     |j                            d          d           |                    d
          }|                     |j        d           |                     |j        d           |                     |j                            d          d           |	                                 d S # |	                                 w xY w)NrB   rg  pax/regtype1r  r   zVENDOR.umlautsu   ÄÖÜäöüßzpax/regtype2r   zpax/regtype3r%   )
r%   r$   r!   rP   rS   rZ  r  pax_headersgetrI   r   rF   rX   s      r   test_pax_global_headersz#PaxReadTest.test_pax_global_headers{  s   l7[999	mmN33GW]E222W]E222W0445EFF;= = = mmN33GW]B///W]E222W0445EFF;= = = mmN33GW]I666W]I666W0445EFF;= = = IIKKKKKCIIKKKKs   E+F F4c                    t          j        t          d          }	 |                    d          }|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     t          |j                  t                     |                     t          |j        d                   d           |                     t          |j        d                   d           |                                 d S # |                                 w xY w)	NrB   rg  zpax/regtype4r  {   g  ^Aatimectime)r%   r$   r!   rP   rS   rU   r   r   rX  rO  ru  rn  rI   rp  s      r   test_pax_number_fieldsz"PaxReadTest.test_pax_number_fields  s   l7[999
	mmN33GW\4000W[#...W[#...W]L999T'-00%888U7#6w#?@@,OOOU7#6w#?@@,OOOIIKKKKKCIIKKKKs   D
D= =EN)r   r   r    r>  r%   XHDTYPErI  
PAX_FORMATr   rq  rv  r)   r   r   rj  rj  u  sF        F?LF  .    r   rj  c                       e Zd Zd Zd ZdS )WriteTestBasec                    t          j                    }t          j        || j                  5 }|                    t          j        d                     d d d            n# 1 swxY w Y   |                     |j        d           |	                                }~t          j                     |                     |j                   |                     ||	                                           d S )Nr(  r  z#external fileobjs must never closed)r"   r   r%   r$   r   r  r  r   r  r   r   
gc_collectrS   )r   rY   rF   r   s       r   test_fileobj_no_closez#WriteTestBase.test_fileobj_no_close  s   z||\$TY777 	03KK..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0&KLLL}}%%%t}}/////s   (A##A'*A'c                 $   t          j        t          | j                  5 }t          j        d          }t           j        t           j        z
  |_        |                    |t          j
        d|j        z                       d d d            n# 1 swxY w Y   |                     t          d          5 }|                     t          |                                          t           j        dz             d d d            d S # 1 swxY w Y   d S )Nr  r  rq   ru   )r%   r$   r   r   r  
RECORDSIZE	BLOCKSIZErU   r  r"   r   rS   rT   rR   )r   rF   r  rY   s       r   test_eof_markerzWriteTestBase.test_eof_marker  sg   
 \'49-- 	6&&A''*;;AFKK2:dQVm44555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6
 YYw%% 	GS--w/AA/EFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs%   A#BBB5ADD	D	N)r   r   r    r}  r  r)   r   r   rz  rz    s7        
0 
0 
0G G G G Gr   rz  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dS )	WriteTestr  c                    d}t          j        t          | j                  }	 t          j        |          }|                    |           |                                 n# |                                 w xY wt          j        t                    }	 |                     |                                d         |d           |                                 d S # |                                 w xY w)Nd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r%   r$   r   r   r  r  rI   rS   r   )r   r   rF   r  s       r   test_100_char_namezWriteTest.test_100_char_name  s    
 !l7DI..	%%AKKNNNIIKKKKCIIKKKKl7##	S\\^^A.79 9 9 IIKKKKKCIIKKKKs   )A! !A7/C C/c                    t          j        t          | j                  }	 t          j                            t          d          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |	                    |           |
                                 n# |
                                 w xY w|                     t          j                            t                    dd           d S )Nfiler      aaar   ztarfile is empty)r%   r$   r   r   rc   rd   re   rb   r  r   rI   assertGreatergetsize)r   rF   rd   rY   s       r   test_tar_sizezWriteTest.test_tar_size  s
   l7DI..	7<<00DdD!! #T

6"""# # # # # # # # # # # # # # #GGDMMMIIKKKKCIIKKKK27??733Q"	$ 	$ 	$ 	$ 	$s/   5B- A8,B- 8A<<B- ?A< B- -Cc                 v   t          j        t          | j                  }	 t          j                            t          d          }t          |d          5  	 d d d            n# 1 swxY w Y   |                    |          }| 	                    |j
        d           t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                    |          }| 	                    |j
        d           |                                 d S # |                                 w xY w)Nr  r   r   r  r  )r%   r$   r   r   rc   rd   re   rb   
gettarinforS   rU   r  rI   )r   rF   rd   rX   rY   s        r   test_file_sizezWriteTest.test_file_size  s   l7DI..	7<<00DdD!!                nnT**GW\1---dD!! #T

6"""# # # # # # # # # # # # # # #nnT**GW\1---IIKKKKKCIIKKKKsT   5D" A$D" $A((D" +A(,AD" /CD" CD" C3D" "D8c                    t           j                            t          d          }t          j        |           	 t          j        t          | j                  }	 |	                    |          }| 
                    |j        d           |                                 n# |                                 w xY w	 t          j        |           d S # t          j        |           w xY w)N	directoryr   )rc   rd   re   rb   r   r%   r$   r   r   r  rS   rU   rI   r   r   r   rd   rF   rX   s       r   test_directory_sizezWriteTest.test_directory_size  s    w||G[11
	",w	22C....  q111				OD!!!!!IOD!!!!s#   C 0B  C  B66C C&c                    t           j                            t          d          }t          j        |           t          t           j                            |d          d                                           t          t           j                            |d          d                                           	 t          j        t          | j	                  }	 t          j                            d          5 }ddg|_        |                    |           d d d            n# 1 swxY w Y   g }|                                D ]?}|                    t           j                            |j                  d                    @|                     |g d           |                                 n# |                                 w xY w	 t)          j        t           j                            |d                     t)          j        t           j                            |d                     t)          j        |           d S # t)          j        t           j                            |d                     t)          j        t           j                            |d                     t)          j        |           w xY w)Nr  1r   2z
os.listdirr]  )r  r  r  )rc   rd   re   rb   r   r$   rI   r%   r   r   r   r  r  return_valuer   r   appendsplitr   rS   r   rd  r   )r   rd   rF   mock_listdirpathsms         r   test_ordered_recursionz WriteTest.test_ordered_recursion  sY   w||G[11
RW\\$$$c**00222RW\\$$$c**00222	",w	22C	]((66 ",14c
L-GGDMMM" " " " " " " " " " " " " " " )) < <ALLqv!6!6r!:;;;;  (?(?(?@@@				RW\\$44555RW\\$44555OD!!!!! RW\\$44555RW\\$44555OD!!!!sJ   ;I F3 :D%F3 %D))F3 ,D)-A1F3 I 3G		I A:Kc                 V   t          j        t          | j                  5 }t	          j        t                    dz  }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                    |          }|                    t          j
        |                    }|                     |j        t                     |                     |j        |j                   |                     |j        d           d d d            d S # 1 swxY w Y   d S )Nr  r   r  r  )r%   r$   r   r   r   r   rb   r  r  rc   r@  r*  r   r+  rS   rU   )r   rF   rd   rY   rX   tarinfo2s         r   test_gettarinfo_pathlike_namez'WriteTest.test_gettarinfo_pathlike_name  ss   \'49-- 	.<((61DdD!! #T

6"""# # # # # # # # # # # # # # #nnT**G~~bioo66H!!',444W\8=999W\1---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s6   -DA/#D/A3	3D6A3	7BDD"%D"r_  r`  c                 t   t           j                            t          d          }t           j                            t          d          }t	          |d          5 }|                    d           d d d            n# 1 swxY w Y   	 t          j        ||           n/# t          $ r"}|                     d|z             Y d }~nd }~ww xY w	 t          j        t          | j                  }	 |                    |           |                    |          }|                     |j        d           |                                 n# |                                 w xY w	 t!          j        |           t!          j        |           d S # t!          j        |           t!          j        |           w xY w)Nr_  link_targetr   r  os.link(): %sr   )rc   rd   re   rb   r$   r  r_  PermissionErrorr  r%   r   r   r  rS   rU   rI   r   rd  )r   r_  targetrY   r  rF   rX   s          r   test_link_sizezWriteTest.test_link_size&  s    w||GV,,g}55&$ 	4JJv	 	 	 	 	 	 	 	 	 	 	 	 	 	 		/GFD!!!! 	/ 	/ 	/MM/A-........	/	#,w	22Cv&&&....  q111				V$$$T""""" V$$$T""""sO   A==BB	B 
C)CCF /AE	 4F 	EF *F7c                    t           j                            t          d          }t          j        d|           	 t          j        t          | j                  }	 |	                    |          }| 
                    |j        d           |                                 n# |                                 w xY w	 t          j        |           d S # t          j        |           w xY w)Nsymlinkr  r   )rc   rd   re   rb   r  r%   r$   r   r   r  rS   rU   rI   r   rd  r  s       r   test_symlink_sizezWriteTest.test_symlink_size>  s    w||GY//

=$'''	#,w	22C....  q111				T"""""IT""""s#   C 0B! C !B77C C'c                 z   t           j                            t                    }t	          j        t          | j                  }	 |                     |j        |d           |	                    |           |                     |
                                g d           t          j        t                    5  |	                    |           d d d            n# 1 swxY w Y   |                     |
                                g d           |                                 d S # |                                 w xY w)Nzarchive name must be absolutezadded the archive to itself)rc   rd   r,  r   r%   r$   r   rS   r   r   r   r   
change_cwdrb   rI   )r   dstnamerF   s      r   test_add_selfzWriteTest.test_add_selfL  sM   '//'**l7DI..	SXw35 5 5GGGS\\^^R13 3 3 %g.. ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !S\\^^R13 3 3 IIKKKKKCIIKKKKs1   A3D$ 8CD$ CD$ !C",D$ $D:c                 &   t           j                            t          d          }t          j        |           	 dD ]6}t           j                            ||          }t          j        |           7d }t          j        t          | j
        d          }	 |                    |d|           |                                 n# |                                 w xY w|                     t                    5  |                    |ddd |           d d d            n# 1 swxY w Y   t          j        t          d	          }	 |D ]8}|                     |j        d
           |                     |j        d           9|                     t%          |                                          d           |                                 n# |                                 w xY w	 t          j        |           d S # t          j        |           w xY w)Nr]   )r  r   bazc                 v    t           j                            | j                  dk    rd S d| _        d| _        | S )Nr   rs  r  )rc   rd   basenamer   r   rZ  r   s    r   r]   z%WriteTest.test_filter.<locals>.filterf  s7    7##GL11U::F! %r   rB   rg  	empty_dir)arcnamer]   Tr^   rs  r  r  )rc   rd   re   rb   r   r   create_empty_filer%   r$   r   r   r   rI   r  	TypeErrorrS   r   rZ  rT   r   r|  )r   tempdirr   r]   rF   rX   s         r   test_filterzWriteTest.test_filter^  s4   ',,w11
	&- 2 2w||GT22+D1111   ,w	KHHHCVDDD				 ""9-- B BdD&AAAB B B B B B B B B B B B B B B ,w,,C" ; ;G$$W[#666$$W]E::::  S^^%5%5!6!6:::				W%%%%%IW%%%%sa   AG: C 1G: CG: 9DG: D##G: &D#'G: A0G
 5G: 
G  G: :HNFc                    t           j                            t          d          }|st	          j        |           nt          j        |           t          j        t          | j
                  }	 |                    ||           |                                 n# |                                 w xY wt          j        t          d          }	 |                                }|                                 n# |                                 w xY w|st	          j        |           nt	          j        |           |                     |j        |p|                    t           j        d                     d S )Nr  r  r^   r   )rc   rd   re   rb   r   r  r   r%   r$   r   r   r   rI   r  rd  r   rS   r   r   sep)r   rd   cmp_pathdirr  rF   r  s          r   _test_pathnamezWriteTest._test_pathname  s4    gll7E** 	',,,,HSMMMl7DI..	GGCG&&&IIKKKKCIIKKKKl7C((	

AIIKKKKCIIKKKK 	!S!!!!OC   !FT\\"&#-F-FGGGGGs   1B B3C: :Dc                     t           j                            t          d          }t           j                            t          d          }t          j        |           	 t           j                            |d          }t           j                            |d          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        ||           t          j        |d          5 }|	                    |d           |	                    |d           d d d            n# 1 swxY w Y   t          j        |d	          5 }	 |
                    |d
           n%# t          $ r |                     d           Y nw xY wd d d            n# 1 swxY w Y   t          j        |           t          j        |           d S # t          j        |           t          j        |           w xY w)Ntestsymlinksztestsymlinks.tarsourcer  r   z
something
r  ru   rb  rp  r  z&extractall failed with symlinked files)rc   rd   re   rb   r   r$   r  r  r%   r   rh  OSErrorr   r   rd  r|  )r   r  temparchivesource_filetarget_filerJ  rF   s          r   test_extractall_symlinksz"WriteTest.test_extractall_symlinks  s    ',,w77gll7,>??
	&',,wx88K',,wy99Kk#&& '!&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'J{K000k3// 83X666Y7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ka888 HCHNN*9 # ; ; ; ; H H HIIFGGGGGHH H H H H H H H H H H H H H H [)))W%%%%% [)))W%%%%s    AG# 0CG# CG# C-G# /E6G# EG# 	E
G# #F.%E=<F.=FF.FF."G# .F22G# 5F26G# #*Hc                 v   |                      d           |                      t          j                            ddd                     |                      t          j                            ddd                     |                      t          j                            dd                     |                      t          j                            ddd                     |                      t          j                            dddd                     |                      t          j                            dddd                     |                      t          j                            dddd                     |                      t          j                            dd                     |                      t          j                            ddd                     |                      t          j                            dddd                     |                      t          j                            dddd                     |                      dt          j        z   t          j        z   dz              |                      dt          j        z   t          j        z   dd           d S )Nr  .r   ..T)r  )r  rc   rd   re   r  r   s    r   test_pathnameszWriteTest.test_pathnames  s   E"""BGLLU;;<<<BGLLe<<===BGLLe44555BGLLeS99:::BGLLeS%@@AAABGLLeT5AABBBBGLLeT5AABBBBGLLu55666BGLLud;;<<<BGLLuc5AABBBBGLLudEBBCCCEBFNRV3e;<<<EBFNRV3UEEEEEr   c                     t           j        dk    r|                     dd           d S |                     dd           |                     dd           d S )Nrq  zC:\foor  z/fooz///foo)r   rx  r  r   s    r   test_abs_pathnameszWriteTest.test_abs_pathnames  s]    <7""	511111...%00000r   c                 L   t          j        t                    5  t          j        t
          | j                  }	 |                    d           |                                 n# |                                 w xY wt          j        t
          d          }	 |D ]@}|j	        dk    r3| 
                    |j	                            d          |j	                   A	 |                                 n# |                                 w xY w	 d d d            d S # 1 swxY w Y   d S )Nr  r^   z./)r   r  rb   r%   r$   r   r   r   rI   r   r   rY  r   rF   r  s      r   test_cwdzWriteTest.test_cwd  sC   !'** 	 	,w	22C				,w,,C I IAv}}(9(9$(?(?HHHI 					 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sA    DA%D%A;;DAC2D2DDD Dc           
      j   t           t          t          fD ] G fddt          j                  } |            }|                               5  t          j        t          | j	        |t          j
        ddi          }d d d            n# 1 swxY w Y   |                     |j                   d S )Nc                       e Zd ZdZ fdZdS )8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTc                 (    | j         r	d| _         d S NF)first)r   r   exctypes     r   r  z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.write  s#    z &%*
%& &r   N)r   r   r    r  r  )r  s   r   BadFiler    s3        & & & & & & &r   r  nonr  )r)  r   rn  )r  EOFErrorRuntimeErrorr"   r   r  r%   r$   r   r   rx  r   r  )r   r  rJ  rF   r  s       @r   test_open_nonwritable_fileobjz'WriteTest.test_open_nonwritable_fileobj  s*   ,6 	' 	'G& & & & & & &"* & & & 		A""7++ A Al7DIq*1*<05w/?A A AA A A A A A A A A A A A A A A QX&&&&	' 	's   0BB	B	r  )r   r   r    r   r  r  r  r  r  r  r   r   r   rc   r  r   r  r  r  r  r  r  r  r  r  r  r)   r   r   r  r    se       F  ($ $ $   " " "" " ",	. 	. 	. XV,,:< <# #< <#, "# # #"#  $"& "& "&PH H H H: "& & #"&4F F F"1 1 1  "' ' ' ' 'r   r  c                       e Zd ZdS )GzipWriteTestNr   r)   r   r   r  r    r   r   r  c                       e Zd ZdS )Bz2WriteTestNr   r)   r   r   r  r    r   r   r  c                       e Zd ZdS )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k    o e
ed          d           ej        ej        pej        d          d                         ZdS )	StreamWriteTestzw|Nc                 z   t          j        t          | j                  }|                                 | j        r|                                 }t          t          d          5 }|                                }d d d            n# 1 swxY w Y   |                    |          }|                     |j	        d           nF|                     t                    5 }|                                }d d d            n# 1 swxY w Y   | 
                    |                    d          t           j        d           d S )Nrq   zfound trailing datar  zincorrect zero padding)r%   r$   r   r   rI   decompressorrR   
decompressr   unused_datarS   countr  )r   rF   decrY   r   s        r   test_stream_paddingz#StreamWriteTest.test_stream_padding	  s   l7DI..		 	###%%Cgt$$ #yy{{# # # # # # # # # # # # # # #>>$''DS_.CDDDD7## #tyy{{# # # # # # # # # # # # # # #E**G,>0	2 	2 	2 	2 	2s$   $BB	B	C<<D D rq  umaskzMissing umask implementationz$Emscripten's/WASI's umask is a stub.c                    t           j                            t                    rt	          j        t                     t          j        d          }	 t          j        t          | j	                  }|
                                 t          j        t                    j        dz  }|                     |dd           t          j        |           d S # t          j        |           w xY w)N   rr  i  zwrong file permissions)rc   rd   existsr   r   rd  r  r%   r$   r   rI   ry  rz  rS   )r   original_umaskrF   r   s       r   test_file_modezStreamWriteTest.test_file_mode  s     7>>'"" 	&W%%%%	%,w	22CIIKKK77##+e3DT5*BCCCH^$$$$$BH^$$$$s   A+C C*)r   r   r    r   r  r  r   r   r   rx  r   rc   r  r   is_emscriptenis_wasir  r)   r   r   r  r    s        FL2 2 2  X0IWWR5I5I79 9X_0. % %	 9 9% % %r   r  c                       e Zd Zd ZdS )GzipStreamWriteTestc                     t          j        t          | j                                                   t          j        t                                        d          }dS )zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1rg  N)r%   r$   r   r   rI   r   r   	read_text)r   payloads     r    test_source_directory_not_leakedz4GzipStreamWriteTest.test_source_directory_not_leaked0  sH    
 	Wdi((..000,w''1191EEr   N)r   r   r    r  r)   r   r   r  r  /  s#        7 7 7 7 7r   r  c                   $    e Zd Zerej        ndZdS )Bz2StreamWriteTestN)r   r   r    r3   BZ2Decompressorr  r)   r   r   r  r  :  s         *-73&&4LLLr   r  c                   $    e Zd Zerej        ndZdS )LzmaStreamWriteTestN)r   r   r    r;   LZMADecompressorr  r)   r   r   r  r  =  s         ,0:4((dLLLr   r  c                   Z    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dS )GNUWriteTestc                 6    t          |          dz  dz   }|dz  S )Nrv   rr   )rT   )r   r{   blockss      r   _lengthzGNUWriteTest._lengthE  s     Q3"|r   Nc                     d}t          |          t          j        k    r|dz  }||                     |          z  }|:t          |          t          j        k    r|dz  }||                     |          z  }|S )Nrv   )rT   r%   LENGTH_NAMEr  LENGTH_LINK)r   r   r_  r  s       r   
_calc_sizezGNUWriteTest._calc_sizeI  sw    t99w***SLET\\$'''ED		G,? ? ?SLET\\$'''Er   c                    t          j        |          }|r||_        t           j        |_        t          j        t          d          }	 t           j        |_        |	                    |           | 
                    ||          }|j        }|                     ||d           |                                 n# |                                 w xY wt          j        t                    }	 |                                }|                     |d           |                     |j        |j        d           |                     |j        |j        d           |                                 d S # |                                 w xY w)Nr   z%GNU longname/longlink creation failedzunable to read longname member)r%   r  r  LNKTYPErO  r$   r   rg  r   r  r  rI  rS   rI   r  r  r   )r   r   r_  rX   rF   r  r  members           r   _testzGNUWriteTest._testW  sZ   /$'' 	+#G"?GLl7C((	 +CJKK   t,,BBR%LMMMIIKKKKCIIKKKKl7##		XXZZF  46 6 6W\6;46 6 6W-v46 6 6 IIKKKKKCIIKKKKs   
AB9 9C,A,E. .Fc                 0    |                      d           d S )N  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamr  r   s    r   test_longname_1023zGNUWriteTest.test_longname_1023t  s    

122222r   c                 0    |                      d           d S )N   longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamer  r   s    r   test_longname_1024zGNUWriteTest.test_longname_1024w  s    

233333r   c                 0    |                      d           d S )N  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longname_r  r   s    r   test_longname_1025zGNUWriteTest.test_longname_1025z  s    

344444r   c                 2    |                      dd           d S )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/longlnkr  r   s    r   test_longlink_1023zGNUWriteTest.test_longlink_1023}  s    

69:::::r   c                 2    |                      dd           d S )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/longlinkr  r   s    r   test_longlink_1024zGNUWriteTest.test_longlink_1024  s    

6:;;;;;r   c                 2    |                      dd           d S )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_r  r   s    r   test_longlink_1025zGNUWriteTest.test_longlink_1025  s    

6;<<<<<r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   test_longnamelink_1023z#GNUWriteTest.test_longnamelink_1023  s(    

11	3 	3 	3 	3 	3r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   test_longnamelink_1024z#GNUWriteTest.test_longnamelink_1024  s(    

22	4 	4 	4 	4 	4r   c                 2    |                      dd           d S )Nr  r  r  r   s    r   test_longnamelink_1025z#GNUWriteTest.test_longnamelink_1025  s(    

33	5 	5 	5 	5 	5r   r   )r   r   r    r  r  r  r  r  r  r  r  r  r   r"  r$  r)   r   r   r   r   A  s                :3 3 34 4 45 5 5; ; ;< < <= = =3 3 34 4 45 5 5 5 5r   r   c                       e Zd ZdZd ZdS )DeviceHeaderTestr  c                 |   t           j                            t          d          }t          j        |           	 t          j        t          | j                  }	 t          j	        d          }t          j	        d          }t
          j
        |_        t
          j        |_        |                    |           |                    |           |                                 n# |                                 w xY wt          j        t          d          }	 |                    d          }|                    d          }|                                 n# |                                 w xY w|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           t          t          d          5 }|                                }d d d            n# 1 swxY w Y   ||j        |j                 }	||j        |j                 }
t-          dd	          }|                     |	|         d
           |                     |
|         d           t/          j        |           d S # t/          j        |           w xY w)Ndevice_header_testmy_block_devicer   my_regular_filer^   r   rq   iI  iY  s   0000000 0000000 s                   )rc   rd   re   rb   r   r%   r$   r   r   r  BLKTYPErO  REGTYPEr  rI   rP   rS   r  r  rR   rI  offset_dataslicer   r|  )r   r  rF   	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	22C#O1BCCC	#O1BCCC	!(	!(	I&&&I&&&				 ,w,,C ]]+<==
 ]]+<==
				Z0!444Z0!444Z0!444Z0!444 gt$$ $kkmm$ $ $ $ $ $ $ $ $ $ $ $ $ $ $*+J,BBCG*+J,BBCG #311NW^46FGGGW^4jAAAW%%%%%IW%%%%sb   J% A6C& J% &C<<J% *E J% E//BJ% 3HJ% HJ% HA3J% %J;N)r   r   r    r   r8  r)   r   r   r&  r&    s(        F'& '& '& '& '&r   r&  c                       e Zd ZdZej                            ed          Zd Z	e
d             Ze
d             Zd Zd Zd Zd	 Zd
 Zd ZdS )
CreateTestzx:
spameggs42c                 8    t          j        t                     d S r   )r   rd  r   r   s    r   rG   zCreateTest.setUp  s    !!!!!r   c                     t          | j        d          5 }|                    d           d d d            d S # 1 swxY w Y   d S )Nr   r  )r$   	file_pathr  )clsrY   s     r   
setUpClasszCreateTest.setUpClass  s    #-&& 	$JJv	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   9= =c                 8    t          j        | j                   d S r   )r   rd  r>  r?  s    r   tearDownClasszCreateTest.tearDownClass  s    '''''r   c                    t          j        t          | j                  5 }|                    | j                   d d d            n# 1 swxY w Y   |                     t                    5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          d           | 
                    d|d                    d S Nrr   r;  r   )r%   r$   r   r   r   r>  r'   r   rS   rT   r   r   tobjnamess      r   test_createzCreateTest.test_create  s)   \'49-- 	%HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% \\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----s#   AAA,BBBc                 T   t          j        t          | j                  5 }|                    | j                   d d d            n# 1 swxY w Y   |                     t                    5  t          j        t          | j                  }d d d            n# 1 swxY w Y   |                     t                    5 }|	                                }d d d            n# 1 swxY w Y   | 
                    t          |          d           |                     d|d                    d S rE  )r%   r$   r   r   r   r>  r  FileExistsErrorr'   r   rS   rT   r   rF  s      r   test_create_existingzCreateTest.test_create_existing  s   \'49-- 	%HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% // 	4 	4<33D	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 \\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----s5   AAA, BBB=CC"%C"c                    |                      t          d          5 }|                    | j                   d d d            n# 1 swxY w Y   |                      t                    5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          d           |                     d|d                    d S Nxrr   r;  r   )r'   r   r   r>  r   rS   rT   r   rF  s      r   test_create_taropenzCreateTest.test_create_taropen  s)   \\'3'' 	%4HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% \\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----s#   AA
A(B		BBc                 v   |                      t          d          5 }|                    | j                   d d d            n# 1 swxY w Y   |                     t
                    5  |                      t          d          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                      t                    5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          d           | 	                    d|d                    d S rN  )
r'   r   r   r>  r  rK  r   rS   rT   r   rF  s      r   test_create_existing_taropenz'CreateTest.test_create_existing_taropen  s    \\'3'' 	%4HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% // 	 	gs++                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 \\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----sY   AA
A(B)BB)B	B)B	B))B-0B-C//C36C3c                 Z   t          j        t          j        t                    | j                  5 }|                     |j        t                     | 	                    |j        t          j                            t                               |                    t          j        | j                             |                                }d d d            n# 1 swxY w Y   | 	                    t!          |          d           |                     d|d                    |                     t                    5 }|                                }d d d            n# 1 swxY w Y   | 	                    t!          |          d           |                     d|d                    d S rE  )r%   r$   r   r   r   r   r*  r   r+  rS   rc   rd   r,  r   r>  r   rT   r   r'   rF  s      r   test_create_pathlike_namez$CreateTest.test_create_pathlike_name  s   \',w//;; 	$t!!$)S111TY(@(@AAAHHW\$.11222MMOOE		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	UQ'''lE!H---\\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----s$   BCC #C  E!!E%(E%c                 R   |                      t          j        t                    d          5 }|                     |j        t                     |                     |j        t          j	        
                    t                               |                    t          j        | j                             |                                }d d d            n# 1 swxY w Y   |                     t          |          d           |                     d|d                    |                      t                    5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          d           |                     d|d                    d S rN  )r'   r   r   r   r*  r   r+  rS   rc   rd   r,  r   r>  r   rT   r   rF  s      r   !test_create_taropen_pathlike_namez,CreateTest.test_create_taropen_pathlike_name  s   \\',w//55 	$!!$)S111TY(@(@AAAHHW\$.11222MMOOE		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	UQ'''lE!H---\\'"" 	$dMMOOE	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$UQ'''lE!H-----s$   BCCC<EE!$E!N)r   r   r    r   rc   rd   re   rb   r>  rG   classmethodr@  rC  rI  rL  rP  rR  rT  rV  r)   r   r   r:  r:    s        FWl33I" " "   [ ( ( [(. . .
. 
. 
.. . .. . .. . .. . . . .r   r:  c                       e Zd Zd ZdS )GzipCreateTestc                    t          j        t          | j        d          5 }|                    | j                   d d d            n# 1 swxY w Y   t          j        t          dd          5 }	 d d d            d S # 1 swxY w Y   d S )Nrr   r  zr:gzr%   r$   r   r   r   r>  r   rG  s     r   test_create_with_compresslevelz-GzipCreateTest.test_create_with_compresslevel  s    \'49A>>> 	%$HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%\'6;;; 	t	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#   A		AA0A??BBNr   r   r    r]  r)   r   r   rY  rY    #            r   rY  c                       e Zd Zd ZdS )Bz2CreateTestc                    t          j        t          | j        d          5 }|                    | j                   d d d            n# 1 swxY w Y   t          j        t          dd          5 }	 d d d            d S # 1 swxY w Y   d S )Nrr   r  r:bz2r[  r\  s     r   r]  z,Bz2CreateTest.test_create_with_compresslevel&  s    \'49A>>> 	%$HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%\'7!<<< 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r^  Nr_  r)   r   r   rb  rb  $  r`  r   rb  c                       e Zd Zd ZdS )LzmaCreateTestc                     t          j        t          | j        d          5 }|                    | j                   d d d            d S # 1 swxY w Y   d S )Nrr   )presetr[  r\  s     r   test_create_with_presetz&LzmaCreateTest.test_create_with_preset1  s    \'49Q777 	%4HHT^$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A

AAN)r   r   r    ri  r)   r   r   rf  rf  -  s#        % % % % %r   rf  c                       e Zd ZdZdZdZdS )CreateWithXModeTestrO  N)r   r   r    r   rP  rR  r)   r   r   rk  rk  6  s!        F#'   r   rk  r_  r`  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )HardlinkTestc                 N   t           j                            t          d          | _        t           j                            t          d          | _        t          | j        d          5 }|                    d           d d d            n# 1 swxY w Y   	 t          j        | j        | j                   n/# t          $ r"}| 
                    d|z             Y d }~nd }~ww xY wt          j        t          d          | _        | j                            | j                   d S )Nr  r   r      foor  r   )rc   rd   re   rb   r  r   r$   r  r_  r  r  r%   r   rF   r   )r   rY   r  s      r   rG   zHardlinkTest.setUpB  s:   7<<//7<<//$(D!! 	TJJv	 	 	 	 	 	 	 	 	 	 	 	 	 	 		/GDHdh'''' 	/ 	/ 	/MM/A-........	/ <--TXs*   *BBBB8 8
C$CC$c                     | j                                          t          j        | j                   t          j        | j                   d S r   )rF   rI   r   rd  r  r   r   s    r   rJ   zHardlinkTest.tearDownQ  s@    """"""""r   c                     | j                             | j                  }|                     |j        t
          j        d           d S )Nzadd file as regular failed)rF   r  r  rS   rO  r%   r-  rQ  s     r   test_add_twicezHardlinkTest.test_add_twiceV  sH     (%%dh//w,	. 	. 	. 	. 	.r   c                     | j                             | j                  }|                     |j        t
          j        d           d S )Nzadd file as hardlink failed)rF   r  r   rS   rO  r%   r	  rQ  s     r   test_add_hardlinkzHardlinkTest.test_add_hardlink]  sF    (%%dh//w-	/ 	/ 	/ 	/ 	/r   c                     d| j         _        | j                             | j                  }|                     |j        t          j        d           d S )NTzdereferencing hardlink failed)rF   dereferencer  r   rS   rO  r%   r-  rQ  s     r   test_dereference_hardlinkz&HardlinkTest.test_dereference_hardlinkb  sP    #(%%dh//w/	1 	1 	1 	1 	1r   N)r   r   r    rG   rJ   rr  rt  rw  r)   r   r   rm  rm  >  s_          # # #
. . ./ / /
1 1 1 1 1r   rm  c                   (    e Zd ZddZd Zd Zd ZdS )PaxWriteTestNc                    t          j        |          }|r||_        t           j        |_        t          j        t          dt           j                  }	 |                    |           |	                                 n# |	                                 w xY wt          j        t                    }	 |r7|
                                d         j        }|                     ||d           n6|
                                d         j        }|                     ||d           |	                                 d S # |	                                 w xY w)Nr   r   r   zPAX longlink creation failedzPAX longname creation failed)r%   r  r  r	  rO  r$   r   rx  r  rI   r   rS   r   )r   r   r_  rX   rF   lns          r   r  zPaxWriteTest._testk  s   /$'' 	+#G"?GLl7C0BCCC	KK   IIKKKKCIIKKKKl7##	 JNN$$Q'0  q*HIIIINN$$Q',  q*HIIIIIKKKKKCIIKKKKs   B   B3A/D8 8Ec                    dddddd}t          j        t          dt           j        |          }	 |                    t          j        d                     |                                 n# |                                 w xY wt          j        t          d	
          }	 |                     |j        |           |                     |	                                d         j        |           |j        
                                D ]\  }}|                     t          |          t                     |                     t          |          t                     |t           j        v rH	 t          j        |         |           # t          t           f$ r |                     d           Y w xY w	 |                                 d S # |                                 w xY w)Nr   0z1.23   äöütest)r  r   rX  r  r  r   )r   rn  rB   rg  r   z"unable to convert pax header field)r%   r$   r   rx  r  r  rI   rS   rn  r   r  assertIsNotrO  r=  PAX_NUMBER_FIELDSr  rE  r   )r   rn  rF   keyvals        r   test_pax_global_headerz#PaxWriteTest.test_pax_global_header  s   & &( ( l7C0B') ) )	KK//000IIKKKKCIIKKKK l7[999	S_k:::S^^--a0<kJJJO1133 H HS  cE222  cE222'333H1#6s;;;;%z2 H H H		"FGGGGGH 4H IIKKKKKCIIKKKKs<   'A- -B"C
G -FG &F1.G 0F11G G"c                    ddd}t          j        t          dt           j        d          }	 t          j                    }d|_        d|_        ||_        |                    |           |	                                 n# |	                                 w xY wt          j        t          d	          }	 |
                                d
         }|                     |j        |           |                     |j        d           |                     |j        d           |	                                 d S # |	                                 w xY w)Nr  123)rd   r   r   rB   r   rD   r     rg  r   rs  )r%   r$   r   rx  r  r   r   rn  r  rI   r   rS   )r   rn  rF   r  s       r   test_pax_extended_headerz%PaxWriteTest.test_pax_extended_header  s"     %U33l7C0B$/1 1 1	!!A#AFAE'AMKKNNNIIKKKKCIIKKKKl7[999	  #AQ]K888QVU+++QUC(((IIKKKKKCIIKKKKs   =B   B5A+D6 6Ec                 h   t          j                    }d|_        d|_        d|_        d|_        d|_        |                                }|                    |d          }| 	                    |d         d           | 
                    |d	         t                     | 	                    |d	         d
           | 	                    |d         d           | 	                    |d         d           | 	                    |d         d           | 	                    |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|_        |                                }|                    |d          }| 	                    |d         d           | 	                    |d	         d           | 	                    |d         d           | 	                    |d         d           | 	                    |d         d           | 	                    |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              d S )%Nr  g@@r   rs  |   rB   rg  r   rX  r  rU   r   r   s   ././@PaxHeaderV   s9   0000000 0000000 0000000 00000000020 00000000000 010205  xs   ustar 00   s   16 mtime=1000.1
i  ro  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   rX  rU   r   r   r  create_pax_headerrS   r*  r8  r=  )r   r  infoheaders       r   test_create_pax_headerz#PaxWriteTest.test_create_pax_header  so    Ozz||$$TK$@@fu---d7mS111g---fs+++ec***ec***b		)\]Cjj)*+0::6 ## &+3ZZ0 399 <A99E ]	]
 Cjj
 **
 -2#JJ7	8 	8 	8 Ozz||$$TK$@@f{333g***fq)))ea(((ea(((b		)\]Cjj)*,1#JJ7 << 8	8
 ((
 */s4
 7>>
 AFb		J ]] Cjj ** -2#JJ7	8 	8 	8 	8 	8r   r   )r   r   r    r  r  r  r  r)   r   r   ry  ry  i  sV           0  @  258 58 58 58 58r   ry  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	UnicodeTestc                 0    |                      d           d S )NrB   _test_unicode_filenamer   s    r   test_iso8859_1_filenamez#UnicodeTest.test_iso8859_1_filename  s    ##K00000r   c                 0    |                      d           d S )Nutf7r  r   s    r   test_utf7_filenamezUnicodeTest.test_utf7_filename  s    ##F+++++r   c                 0    |                      d           d S )Nutf-8r  r   s    r   test_utf8_filenamezUnicodeTest.test_utf8_filename  s    ##G,,,,,r   c                    t          j        t          d| j        |d          }	 d}|                    t          j        |                     |                                 n# |                                 w xY wt          j        t          |          }	 |                     |                                d         j	        |           |                                 d S # |                                 w xY w)Nr   rG  r   rD   errorsr  rg  r   )
r%   r$   r   r   r  r  rI   rS   r   r   )r   rD   rF   r   s       r   r  z"UnicodeTest._test_unicode_filename  s    l7C$,X? ? ?	!DKK--...IIKKKKCIIKKKKl7X666	S^^--a05t<<<IIKKKKKCIIKKKKs   )A# #A93C! !C7c                 |   t          j        t          d| j        dd          }	 t          j                    }d|_        |                     t          |j        |           d|_        d|_	        |                     t          |j        |           |
                                 d S # |
                                 w xY w)Nr   r   rG  r  r  r  )r%   r$   r   r   r  r   r  UnicodeErrorr  rZ  rI   rp  s      r   test_unicode_filename_errorz'UnicodeTest.test_unicode_filename_error  s    l7C$+H> > >
	o''G)GLlCKAAA GL*GMlCKAAAIIKKKKKCIIKKKKs   A*B% %B;c                    t          j        t          ddd          }	 |D ]}|                     t	          |j                  t                     |                     t	          |j                  t                     |                     t	          |j                  t                     |                     t	          |j	                  t                     	 |
                                 d S # |
                                 w xY w)Nr^   rB   rG  rD   r  )r%   r$   r!   assertIsrO  r   r+  r  rZ  r  rI   r  s      r   test_unicode_argumentz!UnicodeTest.test_unicode_argument  s    l7C$/B B B	 2 2d16llC000d1:..444d17mmS111d17mmS1111	2 IIKKKKKCIIKKKKs   B9C/ /Dc                 \   t          j        d          }d|_        d|_        t          j        t
          d| j        d          }	 |                    |           |                                 n# |                                 w xY wt          j        t
          d          }	 |	                    d          }| 
                    |j        d           | 
                    |j        d           | j        t           j        k    rz|                                 t          j        t
          d          }|	                    d          }| 
                    |j        d           | 
                    |j        d           |                                 d S # |                                 w xY w)	Nr  r  r   rB   )r   r   rD   rg  r   u	   )r%   r  rZ  r  r$   r   r   r  rI   rP   rS   rx  )r   r  rF   s      r   test_uname_unicodezUnicodeTest.test_uname_unicode)  sf   OE""  l7T[$/1 1 1	KKNNNIIKKKKCIIKKKKl7[999	e$$AQWn555QWn555{g000		l7W===MM%((  *>???  *>???IIKKKKKCIIKKKKs   A0 0B%CF F+N)
r   r   r    r  r  r  r  r  r  r  r)   r   r   r  r    s}        1 1 1, , ,- - -    
 
 
    r   r  c                   \    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dS )UstarUnicodeTestc                     |                      d           |                      dt                     |                      d           |                      dt                     d S Nr  e01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ_test_ustar_namerE  r   s    r   test_unicode_name1z#UstarUnicodeTest.test_unicode_name1L  `    /0005zBBB?@@@@*MMMMMr   c                 f    |                      d           |                      dt                     d S Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   s    r   test_unicode_name2z#UstarUnicodeTest.test_unicode_name2R  4    ABBBBJOOOOOr   c                     |                      d           |                      dt                     |                      d           |                      dt                     d S )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r   s    r   test_unicode_longname1z'UstarUnicodeTest.test_unicode_longname1X  sb    NOOONPZ[[[PQQQQS]^^^^^r   c                 r    |                      dt                     |                      dt                     d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r   s    r   test_unicode_longname2z'UstarUnicodeTest.test_unicode_longname2^  s8    PR\]]]SU_`````r   c                     |                      dt                     |                      d           |                      dt                     d S )Nu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿr  r   s    r   test_unicode_longname3z'UstarUnicodeTest.test_unicode_longname3b  sM    TV`aaa^____aklllllr   c                 f    |                      d           |                      dt                     d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   s    r   test_unicode_longname4z'UstarUnicodeTest.test_unicode_longname4g  s5    `aaaacmnnnnnr   Nc                    t          j        t          d| j        d          5 }t          j        |          }||                    |           n|                     ||j        |           d d d            n# 1 swxY w Y   |Wt          j        t          dd          5 }|D ]}|                     ||j                    d d d            d S # 1 swxY w Y   d S d S )Nr   r  r  r^   rg  )	r%   r$   r   r   r  r  r  rS   r   r   r   excrF   r  s        r   r  z!UstarUnicodeTest._test_ustar_namek  s_   \'3t{WMMM 	7QT%%A{A!!#s{A666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ;gsW===   A$$T16222                  ;s$   A	A88A<?A<!!CCCc                     |                      d           |                      dt                     |                      d           |                      dt                     d S r  _test_ustar_linkrE  r   s    r   test_unicode_link1z#UstarUnicodeTest.test_unicode_link1z  r  r   c                 f    |                      d           |                      dt                     d S 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          }||_        ||                    |           n|                     ||j        |           d d d            n# 1 swxY w Y   |Wt          j        t          dd          5 }|D ]}|                     ||j                    d d d            d S # 1 swxY w Y   d S d S )Nr   r  r  r  r^   rg  )	r%   r$   r   r   r  r  r  r  rS   r  s        r   r  z!UstarUnicodeTest._test_ustar_link  sf   \'3t{WMMM 	7QT&&AAJ{A!!#s{A666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ;gsW===   A$$T1:666                  ;s$   AA??BB(!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  E  s        !F
N N NP P P_ _ _a a am m m
o o o   N N NP P P     r   r  c                   "    e Zd Zej        Zd ZdS )GNUUnicodeTestc                     dD ]u\  }}t          j        t          |d          5 }	 |                    |          }n%# t          $ r |                     d           Y nw xY wd d d            n# 1 swxY w Y   vd S )N))r  u   pax/bad-pax-)rB   u   pax/bad-pax-äöür   r  z%unable to read bad GNU tar pax headerr%   r$   r!   rP   rT  r   r   rD   r   rF   r  s        r   test_bad_pax_headerz"GNUUnicodeTest.test_bad_pax_header  s    < 	G 	GNHd g%68 8 8 G;>Gd++AA G G GIIEFFFFFG	G G G G G G G G G G G G G G G	G 	G1   A-<A-AA-AA--A1	4A1	N)r   r   r    r%   rg  r   r  r)   r   r   r  r    s0        FG G G G Gr   r  c                   &    e Zd Zej        ZdZd ZdS )PAXUnicodeTestNc                     dD ]u\  }}t          j        t          |d          5 }	 |                    |          }n%# t          $ r |                     d           Y nw xY wd d d            n# 1 swxY w Y   vd S )N))r  u   pax/hdrcharset-)rB   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 	KNHd g%68 8 8 K;>Kd++AA K K KIIIJJJJJK	K K K K K K K K K K K K K K K	K 	Kr  )r   r   r    r%   rx  r   r  r  r)   r   r   r  r    s8        F #'
K 
K 
K 
K 
Kr   r  c                   "    e Zd Zd ZddZd ZdS )AppendTestBasec                     t           | _        t          j                            | j                  rt          j        | j                   d S d S r   )r   r!   rc   rd   r  r   rd  r   s    r   rG   zAppendTestBase.setUp  sD    7>>$,'' 	+T\*****	+ 	+r   r  c                    t          j        t          d          5 }|                    d          }d|_        |                    |          5 }t          j        | j        |          5 }|                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB   rg  rN   r  )r%   r$   r!   rP   r   rQ   r  )r   r   srcr  rJ  rF   s         r   _create_testtarzAppendTestBase._create_testtar  sn   \'K888 	&Co..AAF## &q\$,55 &KK1%%%& & & & & & & & & & & & & & && & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sY   2B;B#)B B#BB#BB#B;#B'	'B;*B'	+B;;B?B?c                     |                      d| j        z              |                     t          j        t          j        t          d           d S )Nr  r   )r  r   r  r%   r  r$   r   r   s    r   test_append_compressedz%AppendTestBase.test_append_compressed  sB    TDK/000'+W\7CHHHHHr   N)r  )r   r   r    rG   r  r  r)   r   r   r  r    sK        + + +
& & & &I I I I Ir   r  c                   j    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dS )
AppendTestNc                     t          j        | j        d|          5 }|                    t          j        d                     d d d            d S # 1 swxY w Y   d S )Nr   r  r   )r%   r$   r!   r  r  )r   r)  rF   s      r   _add_testfilezAppendTest._add_testfile  s    \$,W=== 	0KK..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   (AAAr   c                     t          j        | j        |          5 }|                     |                                |           d d d            d S # 1 swxY w Y   d S )Nr  )r%   r$   r!   rS   r   )r   rH  r)  rF   s       r   r  zAppendTest._test  s    \$,888 	4CS\\^^U333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   )AAAc                 V    |                                   |                                  d S r   )r  r  r   s    r   test_non_existingzAppendTest.test_non_existing  s%    

r   c                     t          j        | j        d                                           |                                  |                                  d S )Nr  )r%   r$   r!   rI   r  r  r   s    r   
test_emptyzAppendTest.test_empty  sE    T\4((..000

r   c                     t          j        d          }|                     |           |                    d           |                     |           d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r  )r"   r   r  rw   r  r   s     r   test_empty_fileobjzAppendTest.test_empty_fileobj  sN    z,''4   		!

4
     r   c                 ^   |                                   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   t	          j        |          }|                     |           |                    d           |                     ddg|           d S )Nrq   r   r  r   )rH  r)  )	r  r$   r!   rR   r"   r   r  rw   r  r   s      r   test_fileobjzAppendTest.test_fileobj  s    $,%% 	99;;D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z$4   		!

%
66666s   AAAc                     |                                   |                                  |                     ddg           d S )Nr  r   )rH  )r  r  r  r   s    r   test_existingzAppendTest.test_existing  sD    

%
(((((r   c                     t          | j        d          5 }|                    |           d d d            n# 1 swxY w Y   |                     t          j        | j                   d S r
  )r$   r!   r  r  r%   r  r  )r   r   rY   s      r   _test_errorzAppendTest._test_error  s    $,%% 	JJt	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'+T-?@@@@@s   8<<c                 0    |                      d           d S )Nr   r  r   s    r   	test_nullzAppendTest.test_null  s    r   c                 0    |                      d           d S )N                r  r   s    r   test_incompletezAppendTest.test_incomplete 	      $$$$$r   c                 |    t          j        d                                          }|                     |           d S )Nr  r%   r  r  r  r   r   s     r   test_premature_eofzAppendTest.test_premature_eof	  s7    u%%++--r   c                     t          j        d                                          }|                     |dz              d S )Nr  r  r  r  s     r   test_trailing_garbagez AppendTest.test_trailing_garbage	  s<    u%%++--
*+++++r   c                 0    |                      d           d S )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   s    r   test_invalidzAppendTest.test_invalid	  r  r   r   )r   r   r    r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r   r   r  r    s        !0 0 0 0 !'4 4 4 4 4    
! ! !7 7 7) ) )A A A
  % % %  , , ,% % % % %r   r  c                       e Zd ZdS )GzipAppendTestNr   r)   r   r   r  r  	  r   r   r  c                       e Zd ZdS )Bz2AppendTestNr   r)   r   r   r  r  	  r   r   r  c                       e Zd ZdS )LzmaAppendTestNr   r)   r   r   r  r  	  r   r   r  c                        e Zd Zd Zd Zd ZdS )
LimitsTestc                 d   t          j        d          }|                    t           j                   t          j        d          }|                     t
          |j        t           j                   t          j        d          }|                    t           j                   t          j        d          }|                     t
          |j        t           j                   t          j        d          }|                     t
          |j        t           j                   t          j        d          }d|_        |                     t
          |j        t           j                   t          j        d          }d|_        |                     t
          |j        t           j                   d S )	Nr  r  a   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamea   1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/longname   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamerB  r       )r%   r  r  r   r  rE  r  r   rQ  s     r   test_ustar_limitszLimitsTest.test_ustar_limits	  sL   /"344g*+++ /"9::*gmW5IJJJ /":;;g*+++ /">??*gmW5IJJJ /";<<*gmW5IJJJ /*--4*gmW5IJJJ /&)) *gmW5IJJJJJr   c                 l   t          j        d          }|                    t           j                   t          j        d          }d|_        |                    t           j                   t          j        d          }d|_        |                     t          |j        t           j                   d S Nr	  rB  r   l          )r%   r  r  rg  r  r   r  rE  rQ  s     r   test_gnu_limitszLimitsTest.test_gnu_limits9	  s    /";<<g()))/*--4g())) /&))+*gmW5GHHHHHr   c                 T   t          j        d          }|                    t           j                   t          j        d          }d|_        |                    t           j                   t          j        d          }d|_        |                    t           j                   d S r  )r%   r  r  rx  r  r   rQ  s     r   test_pax_limitszLimitsTest.test_pax_limitsF	  s    /";<<g()))/*--4g()))/&))+g()))))r   N)r   r   r    r  r  r  r)   r   r   r  r  	  sG        K K K>I I I
* 
* 
* 
* 
*r   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )MiscTestc                 Z   |                      t          j        dddd          d           |                      t          j        dddd          d           |                      t          j        ddd          d           |                      t          j        d	dd          d           d S )
Nr     r   rG  s   foo     foobarr  ro  s   foo bar )rS   r%   stnntsr   s    r   test_char_fieldszMiscTest.test_char_fieldsU	  s    UAwAA)	+ 	+ 	+Xq'8DD	! 	! 	!%5wII	  	  	 ]GXFF	  	  	  	  	 r   c                    |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d	          d
           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           d S )N   0000001 rr      7777777            r
               r]                      r  r   s           )rS   r%   ntir   s    r   test_read_number_fieldsz MiscTest.test_read_number_fields_	  sT    	^44a888^44i@@@%HII#	% 	% 	%%HII#	% 	% 	%%HII	 	 	%HII	 	 	%HII+	- 	- 	- 	U++Q///\22A66666r   c                 
   |                      t          j        d          d           |                      t          j        d          d           |                      t          j        dt          j                  d           |                      t          j        dt          j                  d	           |                      t          j        d
t          j                  d           |                      t          j        dt          j                  d           |                      t          j        dt          j                  d           |                      t          j        dt          j                  d           |                      t          j        dt          j                  d           |                      t          j        t          j        dt          j                            d           d S )Nrr   r  r  r  r
  r{  r  r  r  r]  r   r"  r!  r$  r#  g      Yg      0Bs         gr   )rS   r%   itnrg  r%  r   s    r   test_write_number_fieldsz!MiscTest.test_write_number_fieldss	  s   Q888Y//@@@Z8JKKK<	> 	> 	>Z8JKKK<	> 	> 	>R0BCCC<	> 	> 	>T'2DEEE<	> 	> 	>%7,3,>@ @ @<	> 	> 	> 	VG4FGGG<	> 	> 	>]7;MNNN<	> 	> 	>W[g>P%Q%Q%QRRTUVVVVVr   c                    |                      t                    5  t          j        ddt          j                   d d d            n# 1 swxY w Y   |                      t                    5  t          j        ddt          j                   d d d            n# 1 swxY w Y   |                      t                    5  t          j        ddt          j                   d d d            n# 1 swxY w Y   |                      t                    5  t          j        ddt          j                   d d d            d S # 1 swxY w Y   d S )Nr]  r  r
  l       l        )r  rE  r%   r(  r   rg  r   s    r   test_number_field_limitsz!MiscTest.test_number_field_limits	  s   z** 	5 	5KAw3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5z** 	= 	=K
Aw';<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=z** 	? 	?K7+=>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?z** 	> 	>Kq'*<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>sG   !AAA-!BB!B?!C,,C03C0!D??EEc                 F    h d}t          j        | t          |           d S )N>8   NULgrpr(  r%  r  pwdr  mainr,  CHRTYPErP  r	  r-  SYMTYPEXGLTYPErw  versionAREGTYPECONTTYPEFIFOTYPEfilemoder  	GNU_MAGIC	GNU_TYPES
PAX_FIELDSr  
tar_filterFilterErrorr  r  POSIX_MAGICcopyfileobjdata_filterExFileObjectcalc_chksumsLENGTH_PREFIXREGULAR_TYPESEOFHeaderErrorGNUTYPE_SPARSEPAX_NAME_FIELDSSOLARIS_XHDTYPESUPPORTED_TYPESEmptyHeaderErrorGNUTYPE_LONGLINKrf  SpecialFileErrorAbsoluteLinkErrorAbsolutePathErrorr  symlink_exceptionInvalidHeaderErrorTruncatedHeaderErrorfully_trusted_filterSubsequentHeaderErrorOutsideDestinationErrorLinkOutsideDestinationError)not_exported)r   check__all__r%   )r   rW  s     r   test__all__zMiscTest.test__all__	  s3      " 	T7FFFFFFr   c                 ,   t           j                            t           j                            t                    d          }|                     t          j                  5 }t          j        d          f}t          j
        j                            t          j        d|          5  t          j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     dt!          |j                             d S )Nr   zlzma module is not availabler=   )r  z?
- method xz: CompressionError('lzma module is not available')
)rc   rd   re   dirname__file__r  r%   r  CompressionErrorr   r  r  r  r&   r$   r   r+  	exception)r   fnameexcinfor  s       r   .test_useful_error_message_when_modules_missingz7MiscTest.test_useful_error_message_when_modules_missing	  s^   RW__X668HIIw011 	$W,-KLLME$++GOXSX+YY $ $U###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	O!""	
 	
 	
 	
 	
s7   "AC!)C
>C!
C	C!C	C!!C%(C%N)	r   r   r    r  r&  r)  r,  rY  ra  r)   r   r   r  r  S	  st             7 7 7(W W W.> > >G G G(

 

 

 

 

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d Zd Zd Zd Zd Zd Zd Zd Zd ZdS )CommandLineTestc                     t          j        ddg|R i |\  }}}|                    t          j                                        d          S )N-mr%      
)r   assert_python_okr   rc   linesepr   )r   argsr  rcr   errs         r   
tarfilecmdzCommandLineTest.tarfilecmd	  s_    $5dI @ @ @ @8>@ @C{{2:,,..666r   c                 (    t          j        ddg|R  S )Nre  r%   )r   assert_python_failure)r   ri  s     r   tarfilecmd_failurez"CommandLineTest.tarfilecmd_failure	  s    24JTJJJJr   c                 f   t          j        d          t          j        d          g}|                     t          j        |           t          j        |d          5 }|D ]6}|                    |t          j	        
                    |                     7	 d d d            d S # 1 swxY w Y   d S )Ntokenize_tests.txt9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   r  )r   r   rc  r   rd  r%   r$   r   rc   rd   r  )r   tar_namefilesr  tardatas        r   make_simple_tarfilez#CommandLineTest.make_simple_tarfile	  s   !"677! #> ? ?@ 		((333\(C(( 	CB  C Cw(8(8(A(ABBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   :B&&B*-B*c                    t          j        d          g}|                     t          j        |           t          j        |d          5 }t          j        d          }|                    |t          j
        d                     t          j        d          }|                    |t          j
        d                     d d d            d S # 1 swxY w Y   d S )Nrq  r   benignr   r  ../evil)r   r   rc  r   rd  r%   r$   r  r  r"   r   )r   rs  rt  r  rx  evils         r   make_evil_tarfilez!CommandLineTest.make_evil_tarfile	  s    !"6778	((333\(C(( 	6B_X..FJJvrz#J777?9--DJJtRZ__J555		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   A;CCCc                    |                                  \  }}}|                     |d           |                     d|                                           |                     d|                                           |                     d|                                           |                      dd          \  }}}|                     |d           |                     |                                d           d S )Nr   s   usages   errors   required-lr   )ro  rS   r   lowerr?  strip)r   rj  r   rk  s       r   test_bad_usezCommandLineTest.test_bad_use	  s    ..00Cc"""h		,,,h		,,,k399;;///..tR88Cc"""CIIKK-----r   c                 |    t           D ]3}dD ].}|                     ||          }|                     |d           /4d S )N)-tz--testr   )testtarnamesrl  rS   r   rs  optr   s       r   test_test_commandz!CommandLineTest.test_test_command	  s[    $ 	+ 	+H% + +ooc844  c****+	+ 	+r   c                     t           D ]6}dD ]1}|                     |d|d          }|                     d|           27d S )N-vz	--verboser  r  PYTHONIOENCODINGs   is a tar archive.
)r  rl  r   r  s       r   test_test_command_verbosez)CommandLineTest.test_test_command_verbose	  sj    $ 	; 	;H( ; ;ooc47> & @ @4c::::;	; 	;r   c                 p   t          j        d          }|                     d|          \  }}}|                     d|           |                     |d           |                     |d           t
          D ]<}|                     |          5  t          |d          5 }|                                }d d d            n# 1 swxY w Y   	 t          t          d          5 }|
                    |d d	                    d d d            n# 1 swxY w Y   |                     dt                    \  }}}|                     |d           |                     |d           t          j        t                     n# t          j        t                     w xY w	 d d d            n# 1 swxY w Y   >d S )
N
zipdir.zipr      is not a tar archive.r   rr   )rs  rq   r   rr  )r   r   ro  r   rS   r  subTestr$   rR   r   r  r   rd  )r   zipnamerj  r   rk  rs  rJ  r   s           r   test_test_command_invalid_filez.CommandLineTest.test_test_command_invalid_file	  sV   "<00..tW==C/555c"""Q$ 	. 	.Hx00 
. 
.(D)) $Q6688D$ $ $ $ $ $ $ $ $ $ $ $ $ $ $.gt,, ,TcT
+++, , , , , , , , , , , , , , ,#'#:#:4#I#ILBS$$S#...$$R+++$W----I$W-----
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
.	. 	.ss   F)"C7F)CF)
CF)E>$DE>DE>DAE>$F)>FF))F-	0F-	c                    t           D ]}t          j                    5 }t          j        |d          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                                    dd          }dD ]0}|                     ||d          }| 	                    ||           1d S )Nr^   Fr   r   r   )r}  z--listr  
r  r   captured_stdoutr%   r$   rn   r   r   rl  rS   r   rs  r  r  expectedr  r   s          r   test_list_commandz!CommandLineTest.test_list_command	  sb   $ 	0 	0H(** +a\(C00 +BGGEG***+ + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + zz||**74FGGH% 0 0ooc87> & @ @  h////0	0 	04   A-A
A-AA-AA--A1	4A1	c                    t           D ]}t          j                    5 }t          j        |d          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                                    dd          }dD ]1}|                     |d|d          }| 	                    ||           2d S )	Nr^   Tr   r   r   r  r}  r  r  r  s          r   test_list_command_verbosez)CommandLineTest.test_list_command_verbose
  sd   $ 	0 	0H(** *a\(C00 *BGGDG)))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * zz||**74FGGH( 0 0ooc47> & @ @  h////0	0 	0r  c                     t          j        d          }|                     d|          \  }}}|                     d|           |                     |d           |                     |d           d S )Nr  r}  r  r   rr   )r   r   ro  r   rS   r   r  rj  r   rk  s        r   test_list_command_invalid_filez.CommandLineTest.test_list_command_invalid_file
  st    "<00..tW==C/555c"""Qr   c                    t          j        d          t          j        d          g}dD ]}	  | j        |t          g|R  }|                     |d           t          j        t                    5 }|                                 d d d            n# 1 swxY w Y   t          j	        t                     # t          j	        t                     w xY wd S )Nrq  rr  )-cz--creater   )
r   r   rl  r   rS   r%   r$   r   r   rd  r   rt  r  r   rF   s        r   test_create_commandz#CommandLineTest.test_create_command
  s   !"677! #> ? ?@ $ 	* 	*C*%doc7;U;;;  c***\'** %cNN$$$% % % % % % % % % % % % % % %  ))))	 ))))	* 	*s0   AB71BB7B	B7B	B77Cc                    t          j        d          t          j        d          g}dD ]}	  | j        |dt          g|R ddi}|                     d|           t          j        t                    5 }|                                 d d d            n# 1 swxY w Y   t          j	        t                     # t          j	        t                     w xY wd S )Nrq  rr  r  r  r  r  s    file created.)
r   r   rl  r   r   r%   r$   r   r   rd  r  s        r   test_create_command_verbosez+CommandLineTest.test_create_command_verbose&
  s:   !"677! #> ? ?@ % 	* 	*C*%doc4 @5 @ @ @7>@ @/555\'** %cNN$$$% % % % % % % % % % % % % % %  ))))	 ))))	* 	*s0   AB;5B
B;B	B;B	B;;Cc                 ~   t          j        d          g}	  | j        dt          g|R  }|                     |d           t          j        t                    5 }|                                 d d d            n# 1 swxY w Y   t          j	        t                     d S # t          j	        t                     w xY w)Nrq  r  r   )
r   r   rl  dotlessnamerS   r%   r$   r   r   rd  )r   rt  r   rF   s       r   $test_create_command_dotless_filenamez4CommandLineTest.test_create_command_dotless_filename4
  s    !"6778	*!$/$<e<<<CS#&&&k** !c   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [)))))I[))))s0   AB! A;/B! ;A??B! A?B! !B<c                    t           j                            t          d          }t	          j        d          g}	  | j        d|g|R  }|                     |d           t          j	        |          5 }|
                                 d d d            n# 1 swxY w Y   t          j        |           d S # t          j        |           w xY w)Nz.testtarrq  r  r   )rc   rd   re   rb   r   r   rl  rS   r%   r$   r   r   rd  )r   rs  rt  r   rF   s        r   (test_create_command_dot_started_filenamez8CommandLineTest.test_create_command_dot_started_filename>
  s   7<<44!"6778	'!$/$95999CS#&&&h'' !3   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! X&&&&&IX&&&&s/   9B7 5B
B7 BB7 BB7 7Cc                    t          j        d          t          j        d          g}t          t          t          fD ]}|j        s
	 t          dz   |j        z   } | j        d|g|R  }|	                    |          5 }|
                                 d d d            n# 1 swxY w Y   t          j        |           # t          j        |           w xY wd S )Nrq  rr  r  r  )r   r   r+   r2   r8   r$   r   r   rl  r'   r   r   rd  )r   rt  filetypers  r   rF   s         r   test_create_command_compressedz.CommandLineTest.test_create_command_compressedI
  s0   !"677! #> ? ?@ "7H5 		+ 		+H= +"S=8?:%dodH=u===%%h// %3NN$$$% % % % % % % % % % % % % % %  ****	 ****		+ 		+s0   6B?>BB?B#	#B?&B#	'B??Cc                 x   |                      t                     dD ]}	 t          j        t                    5  |                     |t                    }d d d            n# 1 swxY w Y   |                     |d           t          j        t                     # t          j        t                     w xY wd S )N)-ez	--extractr   rv  r   r   r   	tarextdirrl  rS   r|  r   r  r   s      r   test_extract_commandz$CommandLineTest.test_extract_commandX
  s      )))$ 	, 	,C,'	22 8 8//#w77C8 8 8 8 8 8 8 8 8 8 8 8 8 8 8  c*** ++++	 ++++	, 	,s.   BA!B!A%	%B(A%	)BB7c                 ~   |                      t                     dD ]}	 t          j        t                    5  |                     |dt          d          }d d d            n# 1 swxY w Y   |                     d|           t          j        t                     # t          j        t                     w xY wd S )Nr  r  r  r      file is extracted.)rv  r   r   r   r  rl  r   r|  r  s      r   test_extract_command_verbosez,CommandLineTest.test_extract_command_verboseb
  s     )))$ 	, 	,C,'	22 D D//#tW;B * D DCD D D D D D D D D D D D D D D 4c::: ++++	 ++++	, 	,s.   BA$B$A(	(B+A(	,BB:c           	      &   |                      t                     t          j                            t
          d          }t          j        t
                     	 t          j        |          5  | 	                    dt          ddd           | 
                    dt          dddd          }|                     d	|           d d d            n# 1 swxY w Y   t          j        t
                     d S # t          j        t
                     w xY w)
Ndestr  r  z--filterr   rp  r  r  r  )r{  r   rc   rd   re   r  r   r   r   ro  rl  r   r|  )r   destdirr   s      r   test_extract_command_filterz+CommandLineTest.test_extract_command_filterm
  s>   w''' ',,y&11
	(#G,, ; ;''g(,(2F< < < oodG&*&0/7> & @ @ 4c:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Y'''''IY''''s1   C5 .ACC5 CC5 CC5 5Dc                 p   |                      t                     	 t          j        t                    5  |                     dt          d          }d d d            n# 1 swxY w Y   |                     |d           t          j        t                     d S # 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'''''IY''''s.   B AB A""B %A"&B B5c                 H   t          j        d          }t          j        t                    5  |                     d|          \  }}}d d d            n# 1 swxY w Y   |                     d|           |                     |d           |                     |d           d S )Nr  r  r  r   rr   )r   r   r   r   r  ro  r   rS   r  s        r   !test_extract_command_invalid_filez1CommandLineTest.test_extract_command_invalid_file
  s    "<00	** 	B 	B224AALBS	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B/555c"""Qs   AAAN)r   r   r    rl  ro  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r   r   rc  rc  	  sU       7 7 7
K K KC C C6 6 6. . .+ + +; ; ;. . .(	0 	0 	0	0 	0 	0     * * ** * ** * *	' 	' 	'+ + +, , ,	, 	, 	,( ( (&( ( (         r   rc  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ContextManagerTestc                     t          j        t                    5 }|                     |j        d           d d d            n# 1 swxY w Y   |                     |j        d           d S )Nzclosed inside runtime contextcontext manager failed)r%   r$   r!   r   r  r   r  s     r   
test_basiczContextManagerTest.test_basic
  s    \'"" 	JcSZ)HIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J
$<=====s   AA	Ac                     t          j        t                    }|                                 |                     t
                    5  |5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   )r%   r$   r!   rI   r  r  r  s     r   test_closedzContextManagerTest.test_closed
  s     l7##		w'' 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   A1AA1A	A1 A	!A11A58A5c                 <   |                      t                    5 }t          j        t                    5 }t
          # 1 swxY w Y   	 d d d            n# 1 swxY w Y   |                     |j        t
          d           |                     |j	        d           d S )Nz)wrong exception raised in context managerr  )
r  	Exceptionr%   r$   r!   r  r*  r^  r   r  )r   r  rF   s      r   test_exceptionz!ContextManagerTest.test_exception
  s    y)) 	Sg&& #        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	cmWI	K 	K 	K
$<=====s,   A=A	AA	AAAc                    	 t          j        t          d          5 }t          # 1 swxY w Y   n#  Y nxY w|                     t
          j                            t                    dd           |                     |j	        d           d S )Nr   r   z-context manager wrote an end-of-archive blockr  )
r%   r$   r   r  rS   rc   rd   r  r   r  r  s     r   test_no_eofzContextManagerTest.test_no_eof
  s    	gs++  s                 	D111?	A 	A 	A
$<=====s   0 $(0 (0 4c                     t          j        t          d          5  	 d d d            n# 1 swxY w Y   |                     t          j                            t                    dd           d S )Nr   r   z-context manager wrote no end-of-archive block)r%   r$   r   r?  rc   rd   r  r   s    r   test_eofzContextManagerTest.test_eof
  s     \'3'' 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	BGOOG44a?	A 	A 	A 	A 	As   )--c                 2   t          t          d          5 }	 t          j         |d          5 }t          # 1 swxY w Y   n#  Y nxY w|                     |j        d           |                     |j        d           d d d            d S # 1 swxY w Y   d S )Nr   r   r(  zexternal file object was closedr  )r$   r   r%   r  r   r  r   r-  s      r   r  zContextManagerTest.test_fileobj
  s    '4   	BD\$S999 $S#O$ $ $ $ $ $ $ $ $T[*KLLLOOCJ(@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs>   BA6:	A:	ABA;BBBN)	r   r   r    r  r  r  r  r  r  r)   r   r   r  r  
  sv        > > >
  > > >
> 
> 
>A A A
B 
B 
B 
B 
Br   r  zrequires os.link to be missingc                   H   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d
S )LinkEmulationTestc                 X   | j                             |t          d           t          t          j                            t          |          d          5 }|                                }d d d            n# 1 swxY w Y   |                     t          |          t                     d S )Nrp  r\   rq   )rF   ra   rb   r$   rc   rd   re   rR   rS   r   rV   )r   r   rJ  r   s       r   _test_link_extractionz'LinkEmulationTest._test_link_extraction
  s    w???"',,w--t44 	6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4.99999s   A77A;>A;islinkz3Skip emulation - has os.path.islink but not os.linkc                 0    |                      d           d S )Nr   r  r   s    r   test_hardlink_extraction1z+LinkEmulationTest.test_hardlink_extraction1
       	""?33333r   c                 0    |                      d           d S )Nr   r  r   s    r   test_hardlink_extraction2z+LinkEmulationTest.test_hardlink_extraction2
       	""#>?????r   r  z Skip emulation if symlink existsc                 0    |                      d           d S )Nr   r  r   s    r   test_symlink_extraction1z*LinkEmulationTest.test_symlink_extraction1
  r  r   c                 0    |                      d           d S )Nr   r  r   s    r   test_symlink_extraction2z*LinkEmulationTest.test_symlink_extraction2
  r  r   N)r   r   r    r  r   r  r   rc   rd   r  r  r  r  r)   r   r   r  r  
  s+       : : : X_WWRWh//JL L4 4L L4 X_WWRWh//JL L@ @L L@ X_WWR++79 94 49 94 X_WWR++79 9@ @9 9@ @ @r   r  c                        e Zd Zd Zd Zd ZdS )Bz2PartialReadTestc                 j    G fddt           j                  t          j        t	          j        d                                                    }t          t          |          dz             D ]?}	 t	          j	         |d |                   |           +# t          j
        $ r Y <w xY wd S )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          |                                 t          |                                           k    | _         t          |                               |          S )Nz(infinite loop detected in tarfile.open())hit_eofAssertionErrorrx   rT   r   superrR   )r   r}  	MyBytesIO	__class__s     r   rR   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.read
  sf    < ;( *: ; ; ;#yy{{c$--//.B.BBY--221555r   c                 B    d| _          t          |           j        | S r  )r  r  rw   )r   ri  r  r  s     r   rw   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek
  s$    $2uY--2D99r   )r   r   r    r  rR   rw   __classcell__)r  r  s   @r   r  r  
  sa        G6 6 6 6 6 6: : : : : : : : : :r   r  r  rr   r(  )r"   r   r3   compressr%   r  r  rangerT   r$   r  )r   r   r   rO  r  s       @r   _test_partial_inputz&Bz2PartialReadTest._test_partial_input
  s    
	: 
	: 
	: 
	: 
	: 
	: 
	:
 
	: 
	: 
	: |GOE2288::;;s4yy1}%% 	 	AYYtBQBx%8%8tDDDDD$   	 	s   6'BB0/B0c                 0    |                      d           d S )Nr^   r  r   s    r   test_partial_inputz%Bz2PartialReadTest.test_partial_input  s      %%%%%r   c                 0    |                      d           d S )Nrd  r  r   s    r   test_partial_input_bz2z)Bz2PartialReadTest.test_partial_input_bz2	  s      )))))r   N)r   r   r    r  r  r  r)   r   r   r  r  
  sA          (& & &* * * * *r   r  c                      	 dd l } dd l}n# t          $ r Y dS w xY w|                     d          d         dk    rdS |                    d          d         dk    rdS dS )Nr   FrootT)r0  r/  ImportErrorgetpwuidgetgrgid)r0  r/  s     r   root_is_uid_gid_0r    s       uu
||AqV##u
||AqV##u4s    
chownzmissing os.chowngeteuidzmissing os.geteuidc                       e Zd Zed             Zeed                         Zej        	                    d          ej        	                    d          ej        	                    d          d                                     Z
ej        	                    d          ej        	                    d          ej        	                    d          d                                     Z ej         e            d          ej        	                    d          ej        	                    d          ej        	                    d          d	                                                 Zej        	                    d          d
             ZdS )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 ]U\  }}}}	}
t          j        |          }||_        ||_	        d	|_
        d	|_        |	|_        |                    ||
           V	 d d d            n# 1 swxY w Y   t          S )
Ns   contentc   b   M   L   X   W   r   r  )r"   r   r%   r-  rP  r$   r   r  r   r   rZ  r  rO  r  )
filename_1	dirname_1
filename_2rY   r  tarflr   r   r   typcontentsr  s               r   _make_test_archivez#NumericOwnerTest._make_test_archive"  s!    z*%% b"got<b"got<b"got< \'3'' 	+516 + +-c3XOD))  a****+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ s   !ACCCc              #   
  K   d| _         d}d}|}|}t          j                            ||          }t                              |||          }t          j        |          5 }||||fV  d d d            d S # 1 swxY w Y   d S )Nr   znumeric-owner-testfiler  )r  rc   rd   re   r  r
  r%   r$   )mock_geteuidr_  r[  r  r  r  tar_filenamer  s           r   _setup_testzNumericOwnerTest._setup_test:  s       %&!( 
	W\\'511
 (:::;D;EG G \,'' 	;5Y
::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   "	A88A<?A<zos.chownzos.chmodz
os.geteuidc                 $   |                      |          5 \  }}}}|                    |t          dd           |                    |t          dd           d d d            n# 1 swxY w Y   t          j                            t          |          }t          j                            t          |          }	|                    t          j        	                    |dd          t          j        	                    |	dd          gd           d S )	NTrp  numeric_ownerr]   r  r  r  r  	any_order)
r  ra   rb   rc   rd   re   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_ownerP  sH   
 l++ 	2 0<z10:MM*gT!0  2 2 2MM*wd!0  2 2 2		2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 w||GZ88w||GZ88##X]%7%7b"%M%M%-]%7%7b"%M%M%' /3 	$ 	4 	4 	4 	4 	4s   AA$$A(+A(c           	      p   |                      |          5 \  }}}}|                    t          dd           d d d            n# 1 swxY w Y   t          j                            t          |          }t          j                            t          |          }	t          j                            t          |          }
|                    t          j        	                    |dd          t          j        	                    |	dd          t          j        	                    |
dd	          gd
           d S )NTrp  r  r  r  r   r  r  r  r  )
r  rh  rb   rc   rd   re   r  r   r  r  )r   r  r  r  r  r  r  r  r  f_dirname_1r  s              r   "test_extractall_with_numeric_ownerz3NumericOwnerTest.test_extractall_with_numeric_ownere  sP   
 l++ 	5 0<z90:WD$3  5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 w||GZ88w||GY77w||GZ88##X]%7%7b"%M%M%-]%7%7R%L%L%-]%7%7b"%M%M%' /3	 	$ 	4 	4 	4 	4 	4s   #AA	A	z uid=0,gid=0 must be named "root"c                    |                      |          5 \  }}}}|                    |t          dd           d d d            n# 1 swxY w Y   t          j                            t          |          }|                    |dd           d S )NFrp  r  r   )r  ra   rb   rc   rd   re   assert_called_with)r   r  r  r  r  r  r  r  s           r   "test_extract_without_numeric_ownerz3NumericOwnerTest.test_extract_without_numeric_owner~  s     l++ 	2/Hz1aMM*gU!0  2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 w||GZ88%%lAq99999s   $AA
A
c           	          |                      |          5 \  }}}}|                     t          |j        |t          dd           d d d            d S # 1 swxY w Y   d S )NFT)r  r  r  ra   rb   )r   r  r  r  r  s        r   test_keyword_onlyz"NumericOwnerTest.test_keyword_only  s    l++ 	O/Hz1ai#mZ%O O O	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   /AAAN)r   r   r    rh  r
  r   r  r   r  r  r  r  r   r  r!  r#  r)   r   r   r  r    s          \. ; ; ^ \;( ]$$]$$]&&4 4 '& %$ %$4$ ]$$]$$]&&4 4 '& %$ %$4, X**,,;= =]$$]$$]&&	: 	: '& %$ %$= =
	: ]&&O O '&O O Or   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )ReplaceTestsc                 8   | j                             d          }|                    d          }|                     |j        d           |                     |j        d           |                     | j                             d          j        d           d S )NrN   z
misc/otherr*  )rF   rP   r   rS   r   r   r
  replaceds      r   test_replace_namezReplaceTests.test_replace_name  s    ##O44>>|>44555o666++O<<A(	* 	* 	* 	* 	*r   c                 *   | j                             d          }|                                }d|j        d<   |                     |j        d         d           |                     | j                             d          j        d         d           d S )Nrm  not-barr  r   rF   rP   r   rn  rS   r'  s      r   test_replace_deepzReplaceTests.test_replace_deep  s    ##N33>>##(1W%+G4e<<<H~..:7CU	L 	L 	L 	L 	Lr   c                 .   | j                             d          }|                    d          }d|j        d<   |                     |j        d         d           |                     | j                             d          j        d         d           d S )Nrm  F)deepr+  r  r,  r'  s      r   test_replace_shallowz!ReplaceTests.test_replace_shallow  s    ##N33>>u>--(1W%+G4i@@@H~..:7CY	P 	P 	P 	P 	Pr   c                 N   | j                             d          }dD ]}|                     |          5   |j        di |d i}|                     t          ||          d            |                     t          ||          d            d d d            n# 1 swxY w Y   d S )NrN   )r   rX  r   r  r   r   rZ  r  	attr_namer)   )rF   rP   r  r   rS   r0  r?  )r   r
  r3  r(  s       r   test_replace_allzReplaceTests.test_replace_all  s   ##O44: 	F 	FI	22 F F)6>>>Y,=>>  9!=!=tDDD##GFI$>$>EEEF F F F F F F F F F F F F F F	F 	Fs   ABB	 B	c                     | j                             d          }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )NrN   i[)rI  )rF   rP   r  r  r   )r   r
  s     r   test_replace_internalz"ReplaceTests.test_replace_internal  s    ##O44y)) 	- 	-NN)N,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   AA AN)r   r   r    r)  r-  r0  r4  r6  r)   r   r   r%  r%    sh        * * *L L LP P PF F F- - - - -r   r%  c                       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dS )NoneInfoExtractTestsNc                     t          j        t          dd          }t          j        t
                    dz   _        d|_        |                     j         j	                   |
                                 t           fdt          j         j                                      d          D                        _        d S )	Nr^   rB   rC   extractall_ctrlr   r\   c              3   L   K   | ]}|                     j                  V  d S r   )relative_tocontrol_dir)rm  pr?  s     r   	<genexpr>z2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>  sM        A  A MM#/** A  A  A  A  A  Ar   **/*)r%   r$   r!   r   r   rb   r=  rb  rh  extraction_filterrI   setglobcontrol_paths)r?  rF   s   ` r   r@  zNoneInfoExtractTests.setUpClass  s    l7{CCC!,w//2CCss/DEEE		  A  A  A  A\#/2277?? A  A  A A Ar   c                 8    t          j        | j                   d S r   )shutilr|  r=  rB  s    r   rC  z"NoneInfoExtractTests.tearDownClass  s    co&&&&&r   c                     t          fdt          j                                      d          D                       }|                     | j        |           d S )Nc              3   B   K   | ]}|                               V  d S r   )r<  )rm  r>  r  s     r   r?  z;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>  sC       ; ; MM)$$; ; ; ; ; ;r   r@  )rB  r   r   rC  rS   rD  )r   r  	got_pathss    ` r   check_files_presentz(NoneInfoExtractTests.check_files_present  sq     ; ; ; ;\),,11&99; ; ; ; ;	 	+Y77777r   c              '     K   t          j        t                    dz  }d| j        _        | j                                        D ]}|D ]}t          ||d            t          j        |          5  | j        	                    |d           | 
                    |           |V  d d d            d S # 1 swxY w Y   d S )Nextractall_noner   rp  r\   )r   r   rb   rF   rb  r   setattrr   r  rh  rJ  )r   
attr_namesr}  r
  r3  s        r   extract_with_nonez&NoneInfoExtractTests.extract_with_none  s     l7##&77h))++ 	1 	1F' 1 1		400001$$ 	 	HO<<<$$S)))III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   16B44B8;B8c                 N   t          j        t                                                    j        }|                     d          5 }t          j        |                              d          D ]}|                     |          5  	 |                                j        }|                     |                                j        |           n%# t          $ r |
                                s Y nw xY wd d d            n# 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )NrX  r@  rd   )r   r   rb   ry  st_mtimerO  rC  r  assertGreaterEqualr  
is_symlink)r   nowr}  rd   rX  s        r   test_extractall_none_mtimez/NoneInfoExtractTests.test_extractall_none_mtime  s    l7##((**3##G,, 
	KS))..v66 	K 	K\\t\,, K KK $		 4 //		0DcJJJJ # " " "#00 "!" ""K K K K K K K K K K K K K K K	K
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	Ks[   A DD C!.D C1	.D 0C1	1D 4D DDDDD!Dc                    t          j        t                                                    j        }t          j        t                    dz  }|                    d           |                                j        }|                     d          5 }t          j        |                              d          D ]}|                     |          5  |	                                r.| 
                    |                                j        |           nA|                                r-| 
                    |                                j        |           d d d            n# 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )Nregular_filer   r   r@  rQ  )r   r   rb   ry  rz  
write_textrO  rC  r  is_dirrS   is_file)r   dir_moderX  regular_file_moder}  rd   s         r   test_extractall_none_modez.NoneInfoExtractTests.test_extractall_none_mode  s    <((--//7|G,,~=###(--//7##F++ 	<sS))..v66 < <\\t\,, < <{{}} <(()<hGGGG <(()<):< < <	< < < < < < < < < < < < < < <<	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s8   A E:BE E: E$$E:'E$(E::E>E>c                 d    |                      d          5  	 d d d            d S # 1 swxY w Y   d S )Nr   rO  r   s    r   test_extractall_none_uidz-NoneInfoExtractTests.test_extractall_none_uid  }    ##E** 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   %))c                 d    |                      d          5  	 d d d            d S # 1 swxY w Y   d S )Nr   r`  r   s    r   test_extractall_none_gidz-NoneInfoExtractTests.test_extractall_none_gid  rb  rc  c                 d    |                      d          5  	 d d d            d S # 1 swxY w Y   d S )NrZ  r`  r   s    r   test_extractall_none_unamez/NoneInfoExtractTests.test_extractall_none_uname  }    ##G,, 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rc  c                 d    |                      d          5  	 d d d            d S # 1 swxY w Y   d S )Nr  r`  r   s    r   test_extractall_none_gnamez/NoneInfoExtractTests.test_extractall_none_gname  rh  rc  c                 j    |                      dddd          5  	 d d d            d S # 1 swxY w Y   d S )Nr   r   rZ  r  r`  r   s    r   test_extractall_none_ownershipz3NoneInfoExtractTests.test_extractall_none_ownership  s    ##E5'7CC 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (,,)r   r   r    rA  rW  r@  rC  rJ  r   rO  rV  r^  ra  re  rg  rj  rl  r)   r   r   r8  r8    s         A A [A ' ' ['8 8 8 	 	 ^	K K K < < <             r   r8  c                       e Zd ZdZdS )NoneInfoExtractTests_Datar   Nr   r   r    rA  r)   r   r   rn  rn    s        r   rn  c                       e Zd ZdZdS )!NoneInfoExtractTests_FullyTrustedrp  Nro  r)   r   r   rq  rq    s        'r   rq  c                       e Zd ZdZdS )NoneInfoExtractTests_TarrF   Nro  r)   r   r   rs  rs  "  s        r   rs  c                       e Zd ZdZdS )NoneInfoExtractTests_DefaultNro  r)   r   r   ru  ru  %  s        r   ru  c                       e Zd Zd Zd ZdS )NoneInfoTests_Miscc           
         t          j                    }t          j        t          j        t          j        fD ]&}|                     |          5  t          j        |d|          }|                    t                    }	 |
                    |           dD ]}|                     |          5   |j        di |d i}|                     t          |           5  |
                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n"# t          $ r |t          j        k    rn Y nw xY wd d d            n# 1 swxY w Y   (d S )N)	tarformatr   )r)  r   r   )rX  r   r   r   rZ  r  r2  r)   )r"   r   r%   r   rg  rx  r  r$   r  r!   r  r   r  rE  r  )r   biory  rF   rX   r3  r(  s          r   test_addzNoneInfoTests_Misc.test_add*  s=   jll!.0B!,. 	6 	6I	22 6 6l3SKKK..116KK(((&6 6 6	!\\I\>> 6 6'6w'K'K)T9J'K'KH!%!7!7
;D"H "H 6 6 #H 5 5 56 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 66 !    G$888  	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s~   2ED$E2,D	D 4D	 DD	DD	EDEDE$E EEEE	E	c           
      4   dhdhdhdhdhdhddhddhfD ]}|                      |          5  t          j        t          d	          5 }t	          j        t	          j                    d
d          }t          j        t          d|          5  |
                                 d d d            n# 1 swxY w Y   |                                D ]}|D ]}t          ||d            t	          j        t	          j                    d
d          }t          j        t          d|          5  |
                                 d d d            n# 1 swxY w Y   t          |                                                                                                |                                                                                                          D ]\  }}|dhk    r,t#          j        d|          r|                     |d           9|dhk    r,t#          j        d|          r|                     |d           l|dhk    r,t#          j        d|          r|                     |d           |dhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||
           |                     |d           |dhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||	           |                     |d           |dhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||
           |                     |d           |dhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||	           |                     |d           |ddhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||
           |                     |d           |ddhk    rs|                    d          r^|                    d          \  }	}
|                    d          \  }}|                     ||	           |                     |d           }|                     ||           	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )NrX  r   r   r   rZ  r  )rN  rB   rg  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"   rg   r   r   r   r   rn   r   rM  r  r   r   r  rematchrS   rY  r   endswith)r   rN  rF   tio_prevr
  r3  tio_newr  gotexp_user	exp_groupgot_user	got_groups                r   r   zNoneInfoTests_Misc.test_listD  s   
 $9vh%#9wi!7+eW-=? <	8 <	8J ,,*,55 98 98,w===98AD+BJLL'4PPP&sHh??  HHJJJ              !nn.. 9 9F%/ 9 9		488889*2:<<$OOO&sHg>>  HHJJJ              %():):)C)C)E)E)K)K)M)M)0)9)9)B)B)D)D)J)J)L)L&N &N .8 .8MHc!gY..28<Lh3W3W.((m<<<<#y00RX>PRZ5[5[0((k::::#x//BH2H5> 5>/((m<<<<#y00X5H5H<6> 6>0.6nnT.B.B+).1iioo+)((I>>>((9====#y00X5F5F=6? 6?0.6nnT.B.B+).1iioo+)((8<<<((I>>>>#w..83F3F%4( 4(..6nnT.B.B+).1iioo+)((I>>>((7;;;;#w..83D3Dg3O3O..6nnT.B.B+).1iioo+)((8<<<((G<<<<#w'777H<O<OF=H =H7.6nnT.B.B+).1iioo+)((I>>>((7;;;;#'777H<M<MF=H =H7.6nnT.B.B+).1iioo+)((8<<<((G<<<< ((37777].898 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98<	8 <	8s   V
AU4B/	#U4/B33U46B37A3U4*E	?U4EU4EPU4(V4U88V;U8<VV	V	N)r   r   r    r{  r   r)   r   r   rw  rw  )  s7        6 6 64A8 A8 A8 A8 A8r   rw  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.
    rr   Nr   )r^   -)r   r  )rO  r  r{   Sru   r        r+     )rO  r  r  Tr  )ry  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_   
 ABBxH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dS )	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                    | _        d S r   )r"   r   rz  r   s    r   r  zArchiveMaker.__init__  s    :<<r   c                 F    t          j        d| j                  | _        | S )Nr   rH  )r%   r&   rz  tar_wr   s    r   	__enter__zArchiveMaker.__enter__  s    _#tx@@@
r   c                     | j                                          | j                                        | _        d | _        d S r   )r  rI   rz  r   r	  )r   r  s     r   __exit__zArchiveMaker.__exit__  s6    
))++r   N)rO  
symlink_tohardlink_tor   rU   c                0   t          |          } t          j        |          j        di |}|||_        |rt          |          |_        | t          j        }t          |          |_        | t          j	        }t          |          |_        |
                    d          r|t          j        }|||_        |                                r't          j        t!          |j                            }	nd}	| j                            ||	           dS )z5Add a member to the test archive. Call within `with`.Nr   r)   )r+  r%   r  r   rU   r  r   r3  r  r	  r  rP  rO  r  r"   r   r=  r  r  )
r   r   rO  r  r  r   rU   r  rX   r)  s
             r   r   zArchiveMaker.add  s    4yy/'/$''/99&99GL 	2+D11GL!?D":G"?D";//G== 	#$,?DGL==?? 	jw|!4!455GGG
7G,,,,,r   c                 Z    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  rz  s      r   r$   zArchiveMaker.open  s.    j''|22C26222r   )	r   r   r    r  r  r  r  r   r$   r)   r   r   r  r    s        	 	         
 !%4D- - - - -23 3 3 3 3r   r  c                 <     t          j        d          |           S )NzWASI: Skip symlink test for now)r   skiprJ  s    r   symlink_testr    s    ?x}>??BBBr   c                     | S r   r)   r  s    r   r  r    s    r   c                   n   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%dS )#TestExtractionFiltersouterdirr  c              #     K   t          j        | j                  5  	 |                    | j        |           d| _        t          | j                            d                    | _        | j        	                    | j                   n1# t          $ r$}|| _        t                      | _        Y d}~nd}~ww xY w	 dV  |                                 n# |                                 w xY w| j        r| j        |                     | j        t                                 ddd           dS # 1 swxY w Y   dS )a}  Extracts `tar` to `self.destdir` and allows checking the result

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

        Otherwise, all resulting files must be checked using `expect_file`,
        except the destination directory itself and parent directories of
        other files.
        When checking directories, do so before their contents.
        r\   Nr@  )r   r  r  rh  r  raised_exceptionrB  rC  expected_pathsdiscardr  rI   rS   )r   rF   r]   r  s       r   check_contextz#TestExtractionFilters.check_context  s      .. 	9 	9:t|F;;;
 )-%&)$-*<*<V*D*D&E&E##++DL9999  , , ,(+%&)ee######,				$ ,++T0#%%888!	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sR   D3BAD3
B;B61D36B;;D3?CD3C..8D33D7:D7Nc                    | j         r| j         t          j        t          j                            | j        |z                      }|                     || j                   | j        	                    |           |ft          j                    rSt          j        t          j        |                                j                            }|                     ||           |6t#          |t$                    r!|                    d          rt(          j        }|_| j        |z                                  }t          j        |          }||k    r(|                     |                    |                     n|t(          j        k    s|(|                     |                                           n|t(          j        k    r(|                     |                                           nG|t(          j        k    r(|                     |                                           nt=          |          |-|                     |                                j        |           |j         D ]}	| j        !                    |	           dS )z'Check a single file. See check_context.Nr   )"r  r   r   rc   rd   normpathr  r   r  remover   	can_chmodry  r9  S_IMODErz  rS   rt  r+  r  r%   rP  readlinkr   samefiler-  r[  rZ  r8  is_fifoNotImplementedErrorrW  parentsr  )
r   r   rO  r  r   rU   rd   r  r  parents
             r   expect_filez!TestExtractionFilters.expect_file  s(      	(''|BG,,T\D-@AABBdD/000""4(((	 3 5 5-TYY[[-@ A ABBCS$'''<JtS11<dmmC6H6H<?D!<$&0022C|J//H 3X 6 6777W_$$OODLLNN++++W_$$OODKKMM****W%%%OODLLNN++++%d+++TYY[[0$777l 	0 	0F''////	0 	0r   r  c                     |                      ||          5  | j        | j        	 d d d            n# 1 swxY w Y   d | _        d S r   )r  r  )r   exc_type
message_res      r   expect_exceptionz&TestExtractionFilters.expect_exception/  s    ##Hj99 	, 	,$0++ 1	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, !%s   377c                 0   t                      5 }|                    d           d d d            n# 1 swxY w Y   dD ]W}|                     |                                |          5  |                     d           d d d            n# 1 swxY w Y   Xd S )Nz
benign.txt)rp  rF   r   r  r   r  r$   r  r   arcr]   s      r   test_benign_filez&TestExtractionFilters.test_benign_file5  s   ^^ 	"sGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"4 	/ 	/F##CHHJJ77 / /  .../ / / / / / / / / / / / / / /	/ 	/s   155(B

B	B	c                    t                      5 }|                    | j        dz             d d d            n# 1 swxY w Y   |                     |                                d          5  |                     d           d d d            n# 1 swxY w Y   dD ]}|                     |                                |          5  t          | j                                      d          r@t          | j                                      d          }|                     | d           n | 	                    t          j        d           d d d            n# 1 swxY w Y   d S )Nzescaped.evilrp  z../escaped.evilrF   r   r   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r  r   r  r  r$   r  r+  rY  lstripr  r%   rO  )r   r  r]   outerdir_strippeds       r   test_absolutez#TestExtractionFilters.test_absolute<  s/    ^^ 	4sGGDMN2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 

O<< 	0 	0.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 $ 	K 	KF##CHHJJ77 K Kt}%%0055 K ),DM(:(:(A(A#(F(F%$$(9%H%H%HIIII ))1IK K KK K K K K K K K K K K K K K K	K 	Ks2   9= =,BBBBEE	 E	c                    t                      5 }|                    dd           |                    dd           |                    d           d d d            n# 1 swxY w Y   t          j                    rv|                     |                                d          5  | j        (|                     t                     	 d d d            d S | 	                    dd           | 	                    dd           | 	                    d           	 d d d            n# 1 swxY w Y   |                     |                                d	          5  |                     t          j        d
           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t          j        d           d d d            d S # 1 swxY w Y   d S |                     |                                d          5  | 	                    d           d d d            n# 1 swxY w Y   |                     |                                d	          5  | 	                    d           d d d            n# 1 swxY w Y   |                     |                                d          5  | 	                    d           d d d            d S # 1 swxY w Y   d S )Ncurrentr  r  r  z
current/..parent/evilrp  ry  rF   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  rK  r  r%   rU  rV  r   r  s     r   test_parent_symlinkz)TestExtractionFilters.test_parent_symlinkU  s    ^^ 
	#s
 GGI#G... GGHG666GGM"""
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	#  "" !	0##CHHJJ@@ 0 0(4 ))/::: 0 0 0 0 0 0 0 0 $$Y3$???$$X,$GGG$$Y////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ##CHHJJ66 : :%%39: : :: : : : : : : : : : : : : : : ##CHHJJ77 : :%%79: : :: : : : : : : : : : : : : : : : : : ##CHHJJ@@ 0 0  ///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0##CHHJJ66 0 0  ///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0##CHHJJ77 0 0  ///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AAA#&A#&#D&AD&&D*-D*!FF
F
9!G''G+.G+H>>II1JJJK))K-0K-c                    t          j                    rEt          j                            t
          d          }t          j        |           t          j        dt          j                            |d                     t          t          j                            |ddd          d          5  	 d d d            n# 1 swxY w Y   t          j        	                    t          j                            |d                    rd}nPt          j        	                    t          j                            |dd                    rd}nt          d	          t                      5 }|                    dd
           |                    dd
           |                    d           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j                    rD|                     dd
           |                     dd
           |                     d           n*|                     d           |                     d           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j                    r!|                     t           j        d           n*|                     d           |                     d           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j                    rD|r!|                     t           j        d           nK|                     t           j        d           n*|                     d           |                     d           d d d            d S # 1 swxY w Y   d S )Nresolution_testr  r  r  r  r   TFz#Could not determine link resolutionr  zcurrent/parentr  rp  r  ry  zcurrent/rF   r  r   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r   r  rc   rd   re   rb   r   r  r$   r  r  r  r   r  r  r  r%   rU  rV  )r   testpathdotdot_resolves_earlyr  s       r   test_parent_symlink2z*TestExtractionFilters.test_parent_symlink2  s     "" 	Lw||G->??HHX JsBGLL9==>>> bgll8YfEEsKK                 w~~bgll8V<<== 	L )-%%XtV D DEE L ).%%$%JKKK^^ 
	#s GGI#G... GG$G666GGM"""
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 

O<< 	0 	0$&& 0  s ;;;  d ;;;  ++++  ,,,  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 

E22 
	0 
	0$&& 	0%%7,- - - -   ,,,  ///
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 
	0 

F33 	0 	0$&& 0( 1))#;01 1 1 1 ))#?01 1 1 1   ,,,  ///%	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s^   1B??CC(AF88F<?F<+BI99I= I=,ALLL
BOO Oc                    t                      5 }|                    d| j                   |                    d           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j                    r2|                     d| j                   |                     d           n|                     d           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j                    r!|                     t          j
        d           n|                     d           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t          j        d	           d d d            d S # 1 swxY w Y   d S )
Nr  r  r  rp  ry  rF   r  r   &'parent' is a link to an absolute path)r  r   r  r  r$   r   r  r  r  r%   rU  rN  r  s     r   test_absolute_symlinkz+TestExtractionFilters.test_absolute_symlink  s    ^^ 	#sGGHG777GGM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 

O<< 	0 	0$&& 0  dm DDD  ++++  ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 

E22 	0 	0$&& 0%%7,- - - -   ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 

F33 	: 	:!!)8: : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sI   2AAA AC''C+.C+A
E00E47E4#!GGGc                    t                      5 }|                    d| j        dz             d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t          d           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t          d           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t          j        d           d d d            d S # 1 swxY w Y   d S )	Nr  r  r  rp  z.*foo. not foundrF   r   r  )	r  r   r  r  r$   r  rT  r%   rN  r  s     r   test_absolute_hardlinkz,TestExtractionFilters.test_absolute_hardlink  sl    ^^ 	AsGGH$-%*?G@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 

O<< 	@ 	@!!(,>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 

E22 	@ 	@!!(,>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 

F33 	: 	:!!)8: : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sC    ;??.BBB	C11C58C5$!EEEc                    t                      5 }|                    dd           d d d            n# 1 swxY w Y   	 |                     |                                d          5  t	          j                    rMt          | j        t                    r| 	                    t                     n| 
                    dd           n	 d d d            n# 1 swxY w Y   n# t          $ r Y nw xY wdD ]b}|                     |                                |          5  | 	                    t          j        d           d d d            n# 1 swxY w Y   cd S )N../mooz..//tmp/moor  rp  r\   r  zH'../moo' would be extracted to '.*moo', which is outside the destination)r  r   r  r$   r   r  rt  r  rK  r  r  r%   rU  r  s      r   test_sly_relative0z(TestExtractionFilters.test_sly_relative0  s'    ^^ 	8sGGHG777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8	##CHHJJ#GG  (** !$"7II 
M --o>>>>((m(LLLL                  	 	 	D	 $ 	- 	-F##CHHJJ77 - -%%7,- - -- - - - - - - - - - - - - - -	- 	-sT   377)C" (A"C
C" CC" CC" "
C/.C/!EE	E	c                    t                      5 }|                    d           |                    dd           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     dt
          j                   t          j                    r|                     dd	           d d d            n# 1 swxY w Y   d
D ]b}|                     |                                |          5  | 	                    t
          j
        d           d d d            n# 1 swxY w Y   cd S )Nztmp/ztmp/../../mooztmp/../..//tmp/moor  rp  tmprO  r  ztmp/../../tmp/moor  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r  r   r  r$   r  r%   rP  r   r  r  rU  r  s      r   test_sly_relative2z(TestExtractionFilters.test_sly_relative21  s    ^^ 	FsGGFOOOGGO0DGEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 

O<< 	K 	KU999$&& K  6I JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K
 $ 	% 	%F##CHHJJ77 % %%%3$% % %% % % % % % % % % % % % % % %	% 	%s6   -AAA;ACCC
!D77D;	>D;	c           	         t                      5 }|                    dd           |                    dt          j                            dd                     |                    dt          j                            d	dd          
           d d d            n# 1 swxY w Y   dD ]}|                     |                                |          5  |                     dd           |                     dd           t          j	                    r|                     ddd           n|                     dd           d d d            n# 1 swxY w Y   d S )Ntargetdir/targetr  r  linkdir/hardlink	targetdirr  r  linkdir/symlinkr  r  rF   r   rp  z../targetdir/targetrU   r  
r  r   rc   rd   re   r  r$   r  r   r  r  s      r   test_deep_symlinkz'TestExtractionFilters.test_deep_symlinkE  s   
 ^^ 	.sGG&QG///GG&BGLLX5' 5'G ( ( ( GG%"',,k83- 3-G . . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 5 	@ 	@F##CHHJJ77 @ @  !3! <<<  !3! <<<(** @$$%6Q0E % G G G G $$%6Q$???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s%   BBB"%B"A2EE	E	c                 l   t                      5 }|                    dd           |                    dt          j                            dd                     |                    dd	           |                    d
d           |                    dd           d d d            n# 1 swxY w Y   dD ]}|                     |                                |          5  |                     dd	           |                     d
d	           |                     dd	           t          j	                    r1|                     ddd           |                     ddd           n.|                     dd	           |                     dd	           d d d            n# 1 swxY w Y   d S )Nr  hardlinkr  symlink2linkdir	hardlink2r  r  r  r  r  zlinkdir/hardlink2r  r  r  r  s      r   test_chainsz!TestExtractionFilters.test_chains]  st    ^^ 	HsGG%*G===GGJ27<<;,( ,(G ) ) )GG&QG///GG&4FGGGGGG'5FGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 5 	9 	9F##CHHJJ77 9 9  !3! <<<  !3! <<<  !41 ===(** 9$$%6Q0: % < < <$$Za0C % E E E E $$%6Q$???$$Za$8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9s%   BB--B14B1$B8F((F,	/F,	c                 	   t                      5 }|                    dd           |                    dd           |                    dd           |                    dd	           |                    d
d           |                    dd           d d d            n# 1 swxY w Y   t          j                            t
          d          }t          |d          5  	 d d d            n# 1 swxY w Y   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        |           |                     |                                d          5  |r|                     dd           n|                     dd           |                     dd           |                     dd           |                     dd	           |                     d
d           |r|                     dd           n|                     dd           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     dd           |                     dd           |                     dd           |                     dd	           |                     d
d           |                     dd           d d d            n# 1 swxY w Y   |                     |                                d          5  t          j        t          j        | j                                        j	                            }|                     dd           |                     dd           |                     dd           |                     dd           |                     d
d           |                     d|           d d d            d S # 1 swxY w Y   d S )Nall_bitsz
?rwsrwsrwtr   	perm_bitsz
?rwxrwxrwxexec_group_otherz
?rw-rwxrwxread_group_onlyz
?---r-----no_bitsz
?---------zdir/z
?---rwsrwtztmp.filer   rp  z
?rwsrwsrwxz
?---rwsrwxrF   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr   z
?rw-r--r--z
?rw-r-----z
?rw-------)r  r   rc   rd   re   rb   r$   chmodry  rz  r  rd  r   r   r  r  r9  r  r  )r   r  tmp_filenamehave_sticky_fileshave_sticky_dirsnormal_dir_modes         r   
test_modesz TestExtractionFilters.test_modesw  s    ^^ 	/sGGJ\G222GGKlG333GG&\G:::GG%LG999GGILG111GGFG...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ w||GZ88,$$ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
rw|44<t|KLLLW\22:T\I
	,

rw|44<t|KLLLGL119DLH


O<< 	< 	<  @  , ????  , ???[|<<</lCCC.\BBBY\::: <  l ;;;;  l ;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 

E22 	8 	8Zl;;;[|<<</lCCC.\BBBY\:::V,777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 

F33 	; 	;"mDL""$$,-. -. / /OZl;;;[|<<</lCCC.\BBBY\:::V/:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s]   BB&&B*-B*&C44C8;C8!B?K,,K03K0BN66N:=N:)CSS
Sc                 P   t                      5 }|                    dt          j                   d d d            n# 1 swxY w Y   dD ]z}|                     |                                |          5  t          t          d          r"|                     dt          j                   n	 d d d            n# 1 swxY w Y   {|                     |                                d          5  | 	                    t          j
        d           d d d            d S # 1 swxY w Y   d S )Nr  r  )rp  rF   mkfifor   z'foo' is a special file)r  r   r%   r8  r  r$   r   rc   r  r  rM  r  s      r   	test_pipezTestExtractionFilters.test_pipe  s   ^^ 	2sGGE 0G111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 - 	 	F##CHHJJ77  2x(( $$U1A$BBBB                

F33 	+ 	+!!()+ + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s3   "=AA49B99B=	 B=	-!DD"Dc                 x   t           j        t           j        t           j        fD ]}t          j        d          }||_        t          j        |d          }|                     ||           t          j        |d          }| 	                    |j        |           | 
                    t           j                  5 }t          j        |d           d d d            n# 1 swxY w Y   |                     |j        j        t           j                   | 	                    |j        j        j        d           d S )Nr  r   )r%   r8  r2  r,  r  rO  rS  r  r=  rS   r  rM  rA  r*  r^  rX   r   )r   special_typerX   trustedrF   cms         r   test_special_filesz(TestExtractionFilters.test_special_files  sK    $,gowN 
	? 
	?Loe,,G'GL27B??GMM'7+++$Wb11CSX|444""7#;<< 1#GR0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1!!","6HHHR\16>>>>
	? 
	?s   <CC"	%C"	c                    t           j                            t                    5 }|                                D ]-}t          j        |d          }|                     ||           .	 d d d            d S # 1 swxY w Y   d S Nr   )r%   r&   r$   r!   r   rS  r  r   rF   rX   filtereds       r   test_fully_trusted_filterz/TestExtractionFilters.test_fully_trusted_filter  s    _!!'** 	1c>>++ 1 1"7DDh00001	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AA66A:=A:c                 Z   t           j                            t                    5 }|                                D ]W}t          j        |d          }|                     |j        |j                   |                     |j        |j                   X	 d d d            d S # 1 swxY w Y   d S r  )	r%   r&   r$   r!   r   r=  r  r   rO  r  s       r   test_tar_filterz%TestExtractionFilters.test_tar_filter  s     _!!'** 	;c>>++ ; ;"-gr::hmW\:::hmW\::::;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   A-B  B$'B$c                    t           j                            t                    5 }|                                D ]n}	 t          j        |d          }n# t           j        $ r Y *w xY w|                     |j        |j                   |                     |j	        |j	                   o	 d d d            d S # 1 swxY w Y   d S r  )
r%   r&   r$   r!   r   rA  r>  r  r   rO  r  s       r   test_data_filterz&TestExtractionFilters.test_data_filter  s    _!!'** 	;c>>++ ; ;&27B??HH*   HhmW\:::hmW\::::;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s5   B7AB7A%"B7$A%%AB77B;>B;c                    t                      5 }|                    d           ddd           n# 1 swxY w Y   t          j        |           5  |                     |                                d          5  |                     d           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z6Ensure the default filter does not warn (like in 3.12)r  N)r  r   r	   check_no_warningsr  r$   r  r  s     r   test_default_filter_warns_notz3TestExtractionFilters.test_default_filter_warns_not  si   ^^ 	sGGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.t44 	( 	(##CHHJJ55 ( (  '''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(sB   155)B39BB3B	B3"B	#B33B7:B7c                     t          j        t          d          }d }||_        |                     |d           5  |                     d           d d d            d S # 1 swxY w Y   d S )Nr^   c                      | j         dk    r| S d S NrN   r*  rX   rd   s     r   strict_filterzSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filter      |..tr   rN   )r%   r&   r!   rA  r  r  )r   rF   r&  s      r   &test_change_default_filter_on_instancez<TestExtractionFilters.test_change_default_filter_on_instance  s    ogs++	 	 	
 !.T** 	. 	._---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AA"%A"c                 R   d }t          j        t          d          }t          j        t           j        dt          |                    5  |                     |d           5  |                     d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                      | j         dk    r| S d S r$  r*  r%  s     r   r&  zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filter  r'  r   r^   rA  rN   )r%   r&   r!   r   r   rh  r  r  )r   r&  rF   s      r   #test_change_default_filter_on_classz9TestExtractionFilters.test_change_default_filter_on_class  s,   	 	 	
 ogs++w0C+M::< < 	2 	2##C.. 2 2  1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s6   B"B8BB	BB	BB #B c                      G d dt           j                  } |t          d          }|                     |d           5  |                     d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )QTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclassc                      |j         dk    r|S d S r$  r*  r   rX   rd   s      r   rA  zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filter  s    <?22"N4r   Nro  r)   r   r   TarSubclassr.    s#                 r   r1  r^   rN   )r%   r&   r!   r  r  )r   r1  rF   s      r   &test_change_default_filter_on_subclassz<TestExtractionFilters.test_change_default_filter_on_subclass  s    	  	  	  	  	 '/ 	  	  	  k'3''T** 	. 	._---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s    A##A'*A'c                     t          j        t          d          }d|_        |                     |d           5  |                     t                     d d d            d S # 1 swxY w Y   d S )Nr^   r   )r%   r&   r!   rA  r  r  r  r  s     r   $test_change_default_filter_to_stringz:TestExtractionFilters.test_change_default_filter_to_string  s    ogs++ &T** 	- 	-!!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A  A$'A$c                      fd}t                      5 }|                    d           |                    d           |                    d           d d d            n# 1 swxY w Y                        |                                |          5                       d                                d           d d d            d S # 1 swxY w Y   d S )Nc                                          |j                   | j        dk    r|                     d          S | j        dk    rd S | S )N	move_thismovedr*  ignore_this)r  r  r   r   )rX   rd   r   s     r   custom_filterz?TestExtractionFilters.test_custom_filter.<locals>.custom_filter   sQ    MM$---|{**G444|},,tNr   r7  r9  keepr8  r  )r   r:  r  s   `  r   test_custom_filterz(TestExtractionFilters.test_custom_filter  sY   	 	 	 	 	 ^^ 	sGGK   GGM"""GGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 

M:: 	% 	%W%%%V$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s$   A A!!A%(A%+CCCc                 2   t                      5 }|                    d           d d d            n# 1 swxY w Y   |                     |                                d          5  |                     t
                     d d d            d S # 1 swxY w Y   d S )Nr  zbad filter name)r  r   r  r$   r  rE  r  s     r   test_bad_filter_namez*TestExtractionFilters.test_bad_filter_name0  s   ^^ 	sGGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	

,=>> 	. 	.!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   155$BBBc                 H    G d d          }t                      5 }|                    d           |                    dd           |                    d           d d d            n# 1 swxY w Y    |            5 }|                     |                                |          5  |                     d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        d           |                     |j        d           d S )	Nc                        e Zd Zd Zd Zd ZdS )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        ||          }n# t           j        $ r Y d S w xY w| xj        dz  c_        |S )Nrr   )r%   rA  r>  rC  r0  s      r   __call__zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__?  sY     %1'4@@GG*      44 ((A-((s    ++c                     d| _         d S )NT)done)r   exc_infos     r   r  zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__G  s     			r   N)r   r   r    r  rE  r  r)   r   r   StatefulFilterrA  :  sA            ! ! ! ! !r   rI  goodbadr   r  ru   T)r  r   r  r$   r  rS   rC  rG  )r   rI  r  r:  s       r   test_stateful_filterz*TestExtractionFilters.test_stateful_filter6  s   	! 	! 	! 	! 	! 	! 	! 	!  ^^ 	sGGFOOOGGEcG***GGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ^ 	)##CHHJJ>> ) )  ((() ) ) ) ) ) ) ) ) ) ) ) ) ) )	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	:A>>>+T22222sH   AA**A.1A.?)C!(C
>C!
C	C!C	C!!C%(C%c                 0   d }d }d }d }d }t                      5 }|                    d           d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     d           d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     d           d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     d           d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     t          j                   d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     t                     d d d            n# 1 swxY w Y   |                     |                    d	          |          5  |                     d           d d d            n# 1 swxY w Y   |                     |                    d	          |          5  |                     t          j	                   d d d            n# 1 swxY w Y   |                     |                    d	          |          5  |                     t                     d d d            n# 1 swxY w Y   |                     |                    d	          |          5  |                     t          j                   d d d            n# 1 swxY w Y   |                     |                    d	          |          5  |                     t                     d d d            n# 1 swxY w Y   |                     |                    d
          |          5  |                     t          j                   d d d            n# 1 swxY w Y   |                     |                    d
          |          5  |                     t          j	                   d d d            n# 1 swxY w Y   |                     |                    d
          |          5  |                     t                     d d d            n# 1 swxY w Y   |                     |                    d
          |          5  |                     t          j                   d d d            n# 1 swxY w Y   |                     |                    d
          |          5  |                     t                     d d d            n# 1 swxY w Y   |                     |                    d          |          5  |                     t                     d d d            d S # 1 swxY w Y   d S )Nc                 *    t          j        d          )Nzfailed with ExtractError)r%   ExtractErrorr%  s     r   extracterror_filterzBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filterU  s    &'ABBBr   c                 *    t          j        d          )Nzfailed with FilterError)r%   r>  r%  s     r   filtererror_filterzATestExtractionFilters.test_errorlevel.<locals>.filtererror_filterW  s    %&?@@@r   c                      t          d          )Nzfailed with OSError)r  r%  s     r   oserror_filterz=TestExtractionFilters.test_errorlevel.<locals>.oserror_filterY  s    /000r   c                 *    t          j        d          )Nzfailed with base TarError)r%   TarErrorr%  s     r   tarerror_filterz>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filter[  s    "#>???r   c                      t          d          )Nzfailed with ValueError)rE  r%  s     r   valueerror_filterz@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filter]  s    5666r   r  r   r  rr   ru   zboo!)r  r   r  r$   r  r  r%   rV  rE  r>  r  rO  r  )r   rP  rR  rT  rW  rY  r  s          r   test_errorlevelz%TestExtractionFilters.test_errorlevelT  s	   	C 	C 	C	A 	A 	A	1 	1 	1	@ 	@ 	@	7 	7 	7 ^^ 	sGGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 A 6 68KLL 	% 	%V$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% A 6 68JKK 	% 	%V$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% A 6 6GG 	% 	%V$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% A 6 6HH 	4 	4!!'"2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 A 6 68IJJ 	. 	.!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 A 6 68KLL 	% 	%V$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% A 6 68JKK 	7 	7!!'"5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 A 6 6GG 	+ 	+!!'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ A 6 6HH 	4 	4!!'"2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 A 6 68IJJ 	. 	.!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 A 6 68KLL 	8 	8!!'"6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 A 6 68JKK 	7 	7!!'"5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 A 6 6GG 	+ 	+!!'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ A 6 6HH 	4 	4!!'"2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 A 6 68IJJ 	. 	.!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 F ; ;=OPP 	- 	-!!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s1  A  AA5BBBC..C25C2#EE	E	: F&&F*-F*HH	H7II I J::J>J>/LLL M77M;>M;,OOO P44P8;P8) RRR
S11S58S5& UUUV..V25V2#XXX)NNNN)r  )&r   r   r    r   r   rb   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+  r2  r4  r<  r>  rL  rZ  r)   r   r   r  r    sa       
 w|G$$z1H G9 9 ^98 BF!0 !0 !0 !0F% % % %/ / /K K K2 00 00 \00d T0 T0 \T0l : : \::: : :"  -  - \ -D % % \%& @ @ \@. 9 9 \927; 7; 7;r+ + +$? ? ?1 1 1; ; ;
; 
; 
;( ( (	. 	. 	.
2 
2 
2
. 
. 
.- - -% % %". . .3 3 3<E- E- E- E- E-r   r  c                  8   t          j        t                     t          j        t                     t
          gat          t
          d          5 } |                                 }d d d            n# 1 swxY w Y   t          t          t          fD ]}|j        rt          j        |j                   t                              |j                   |                    |j        d          5 }|                    |           d d d            n# 1 swxY w Y   d S )Nrq   r   )r   rd  rb   rc   makedirsr!   r  r$   rR   r+   r2   r8   r  r  )rY   r   crF   s       r   setUpModuler^    sh   WK 9L	gt		 yy{{               w(    6 	 QY'''	***	4((  C		$                             	   s$   A11A58A5,DD	D	c                      t           j                            t                    rt	          j        t                     d S d S r   )rc   rd   r  rb   r   r|  r)   r   r   tearDownModuler`    s9    	w~~g "!!!!!" "r   __main__)r   rc   r"   hashlibr   
contextlibr   randomr   r   rF  r  warningsry  r   unittest.mockr%   r  r   test.supportr   r   r	   r.   r  r  r3   r;   r   rd   r,  TESTFNrb   r  r   r!   re   r-   r4   r:   r   r  rV   r"  r   requires_gzipr+   requires_bz2r2   requires_lzmar8   r?   TestCaserL   r   r   r   r   r   r   r   r   r#  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r:  rQ  rj  rz  r  r  r  r  r  r  r  r  r   r&  r:  rY  rb  rf  rk  r   r   rm  ry  r  r  r  r  r  r  r  r  r  r  r  rc  r  r  r  r  r  r  r%  r8  rn  rq  rs  ru  rw  r  r  r  r  r  r^  r`  r   r1  r)   r   r   <module>rm     s&   



 				 				       % % % % % %         				               " " " " " " & & & & & & ( ( ( ( ( (KKKK   DDDKKKK   DDDJJJJ   
CCCKKKK   DDD$ $ $ '//)*
+
+i
7o%	
'
=
)
)7<<!122
',,w 1
2
2	g/	0	0
',,w	
*
*gll7I.. G  G 
) ) ) ) ) ) ) ) % % % % % % % % & & & & & & & & % % % % % % % %	 	 	 	 	w 	 	 	U U U U UHh/ U U Un	 	 	 	 	- 	 	 		 	 	 	 	w 	 	 		 	 	 	 	- 	 	 	M1 M1 M1 M1 M1x* M1 M1 M1`	 	 	 	 	8X 	 	 		 	 	 	 	'8 	 	 		 	 	 	 	8X 	 	 	A A A A AX A A AFQ. Q. Q. Q. Q.~ Q. Q. Q.f    #X%6   	 	 	 	 	x!183D 	 	 	8 8 8 8 8g/1B 8 8 89 9 9 9 9x!183D 9 9 9
; ; ; ; ;^X%6 ; ; ;z	 	 	 	 	> 	 	 		 	 	 	 	 	 	 		 	 	 	 	> 	 	 	&1 &1 &1 &1 &1Wh/ &1 &1 &1P	 	 	 	 	> 	 	 	, , , , , , , ,	 	 	 	 	> 	 	 	1 1 1 1 1x1B 1 1 1"^E ^E ^E ^E ^EXx0 ^E ^E ^EB6O 6O 6O 6O 6O 6O 6O 6Op9 9 9 9 9,(*; 9 9 9x* * * * *,(*; * * *ZG G G G GG G G G<u' u' u' u' u'x0 u' u' u'p		 	 	 	 	Hi 	 	 		 	 	 	 	7I 	 	 		 	 	 	 	Hi 	 	 	(% (% (% (% (%mX%6 (% (% (%V7 7 7 7 7(O 7 7 78 8 8 8 8/ 8 8 8; ; ; ; ;(O ; ; ;O5 O5 O5 O5 O58$ O5 O5 O5d+& +& +& +& +&}h&7 +& +& +&\W. W. W. W. W. 1 W. W. W.t    Xz       GZ   % % % % %Xz % % %( ( ( ( (* ( ( ( WWR((*KLL'1 '1 '1 '1 '18$ '1 '1 ML'1TH8 H8 H8 H8 H8< H8 H8 H8VN N N N N N N NbL L L L L{H$5 L L L^G G G G G[("3 G G G$K K K K K[("3 K K K(I I I I I I I I(>% >% >% >% >%!2 >% >% >%@	 	 	 	 	X~x/@ 	 	 		 	 	 	 	G^X-> 	 	 		 	 	 	 	X~x/@ 	 	 	8* 8* 8* 8* 8*" 8* 8* 8*v_
 _
 _
 _
 _
x  _
 _
 _
DZ  Z  Z  Z  Z h' Z  Z  Z z7B 7B 7B 7B 7B* 7B 7B 7Bt V$$&FGG@ @ @ @ @("3 @ @ HG@B* * * * *("3 * * *>	 	 	 WWR))+=>>WWR++-ABBwO wO wO wO wOx( wO wO CB ?>wOt%- %- %- %- %-8X. %- %- %-P\ \ \ \ \8 \ \ \|     4h6G   ( ( ( ( ((<(0(9( ( (    3X5F       #7#+#4  \8 \8 \8 \8 \8* \8 \8 \8|  833 33 33 33 33 33 33 33t ? C C C C  t
- t
- t
- t
- t
-H- t
- t
- t
-n     "" " " zHMOOOOO sH   A A'&A'+A0 0A:9A:>B BBB B B 