
    0hh                       S SK r S SKrS SKrS SKrS SKJr  S SKJrJr  S SK	J
r
  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S S	KJr   S SKr S SKr S SKr S SKrS
 r\R@                  RC                  \RD                  5      S-   r#\#S-   r$\RJ                  " SSS9r&\R@                  RO                  \#S5      r(\R@                  RO                  \#S5      r)\R@                  RO                  \#S5      r*\R@                  RO                  \#S5      r+\R@                  RO                  \#S5      r,Sr-Sr.Sr/ " S S5      r0\Rb                  " 5        " S S5      5       r2\Rf                  " 5        " S S5      5       r4\Rj                  " 5        " S S5      5       r6 " S  S!\05      r7 " S" S#\75      r8 " S$ S%\7\Rr                  5      r: " S& S'\2\:5      r; " S( S)\4\:5      r< " S* S+\6\:5      r= " S, S-\7\Rr                  5      r> " S. S/\2\>5      r? " S0 S1\4\>5      r@ " S2 S3\6\>5      rA " S4 S5\75      rB " S6 S7\B5      rC " S8 S9\C\Rr                  5      rD " S: S;\2\C\Rr                  5      rE " S< S=\4\C\Rr                  5      rF " S> S?\6\C\Rr                  5      rG " S@ SA\B\Rr                  5      rH " SB SC\2\H5      rI " SD SE\4\H5      rJ " SF SG\6\H5      rK " SH SI\8\Rr                  5      rL " SJ SK\2\L5      rM " SL SM\4\L5      rN " SN SO\6\L5      rO " SP SQ\0\Rr                  5      rP " SR SS\2\P5      rQ " ST SU\4\P5      rR " SV SW\6\P5      rS " SX SY\2\Rr                  5      rT " SZ S[\7\Rr                  5      rU " S\ S]5      rV " S^ S_\V\7\Rr                  5      rW " S` Sa\V\7\Rr                  5      rX " Sb Sc\05      rY " Sd Se\Y\Rr                  5      rZ " Sf Sg\2\Z5      r[ " Sh Si\4\Z5      r\ " Sj Sk\6\Z5      r] " Sl Sm\Y\Rr                  5      r^ " Sn So\2\^5      r_ " Sp Sq\4\^5      r` " Sr Ss\6\^5      ra " St Su\05      rb " Sv Sw\4\b\Rr                  5      rc " Sx Sy\4\b\Rr                  5      rd " Sz S{\2\b\Rr                  5      re " S| S}\2\b\Rr                  5      rf " S~ S\Rr                  5      rg " S S\Rr                  5      rh " S S\Y\Rr                  5      ri " S S\Y\Rr                  5      rj " S S\2\j5      rk " S S\4\j5      rl " S S\6\j5      rm " S S\j5      rn\R                  " \p" \S5      S5       " S S\Rr                  5      5       rq " S S\h5      rr " S S5      rs " S S\s\Rr                  5      rt " S S\s\Rr                  5      ru " S S\s\Rr                  5      rv " S S5      rw " S S\w\Rr                  5      rx " S S\2\w\Rr                  5      ry " S S\4\w\Rr                  5      rz " S S\6\w\Rr                  5      r{ " S S\Rr                  5      r| " S S\Rr                  5      r} " S S\Rr                  5      r~ " S S\Rr                  5      r\GR                   " \p" \S5      S5       " S S\7\Rr                  5      5       r " S S\4\Rr                  5      rS r\R                  " \p" \S5      S5      \R                  " \p" \S5      S5       " S S\Rr                  5      5       5       r " S S\7\Rr                  5      r " S S\75      r " S S\\Rr                  5      r " S S\\Rr                  5      r " S S\\Rr                  5      r " S S\\Rr                  5      r " S S\Rr                  5      rS r " S S5      r\GR                  (       a  S rOS r " S S\Rr                  5      r " S S\GR"                  \Rr                  5      r " S S\Rr                  5      rS rS r\S:X  a  \GR,                  " 5         gg! \ a    Sr GNf = f! \ a    Sr GNf = f! \ a    Sr GNf = f! \ a    Sr GNf = f)    N)sha256)contextmanager	ExitStack)Random)archiver_tests)support)	os_helper)script_helper)warnings_helperc                 4    [        U 5      R                  5       $ N)r   	hexdigest)datas    :/opt/python-3.13.8/usr/lib/python3.13/test/test_tarfile.py	sha256sumr   *   s    $<!!##    z-tardirz-extract-testztesttar.tararchivetestdatasubdirztesttar.tar.gzztesttar.tar.bz2testtar.tar.xzztmp.tartesttar    @e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ce@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc                   p    \ rS rSr\rSr\R                  r\	R                  R                  r\S 5       rSrg)TarTest?    c                 4    U R                   U R                  -   $ r   )prefixsuffixselfs    r   modeTarTest.modeE   s    {{T[[((r    N)__name__
__module____qualname____firstlineno__tarnamer!   ioFileIOopentarfileTarFiletaropenpropertyr$   __static_attributes__r&   r   r   r   r   ?   s6    GF99Doo%%G) )r   r   c                   r    \ rS rSr\rSr\(       a  \R                  OSr	\
R                  R                  rSrg)GzipTestI   gzNr&   )r'   r(   r)   r*   gzipnamer+   r!   gzipGzipFiler.   r/   r0   gzopenr1   r3   r&   r   r   r5   r5   I   s(    GF 4==dDoo$$Gr   r5   c                   r    \ rS rSr\rSr\(       a  \R                  OSr	\
R                  R                  rSrg)Bz2TestP   bz2Nr&   )r'   r(   r)   r*   bz2namer+   r!   r?   BZ2Filer.   r/   r0   bz2openr1   r3   r&   r   r   r=   r=   P   s(    GF3;;4Doo%%Gr   r=   c                   r    \ rS rSr\rSr\(       a  \R                  OSr	\
R                  R                  rSrg)LzmaTestW   xzNr&   )r'   r(   r)   r*   xznamer+   r!   lzmaLZMAFiler.   r/   r0   xzopenr1   r3   r&   r   r   rD   rD   W   s(    GF 4==dDoo$$Gr   rD   c                   $    \ rS rSrSrS rS rSrg)ReadTest_   r:c                 b    [         R                  " U R                  U R                  SS9U l        g )N	iso8859-1r$   encodingr/   r.   r+   r$   tarr"   s    r   setUpReadTest.setUpc   s!    <<499)46r   c                 8    U R                   R                  5         g r   )rT   closer"   s    r   tearDownReadTest.tearDowng   s    r   rT   N)r'   r(   r)   r*   r    rU   rY   r3   r&   r   r   rL   rL   _   s    F6r   rL   c                       \ rS rSrS rSrg)StreamModeTestj   c                 d    [         R                  " U R                  U R                  SSS9U l        g )NrP   T)r$   rR   streamrS   r"   s    r   rU   StreamModeTest.setUpn   s$    <<499)4'+-r   r[   N)r'   r(   r)   r*   rU   r3   r&   r   r   r]   r]   j   s    -r   r]   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  " \" \S5      =(       a	    \" \S5      S5      S 5       rSrg)UstarReadTests   c                 P   U R                   R                  S5      nU R                   R                  U5       nUR                  5       nU R	                  [        U5      UR                  S5        U R	                  [        U5      [        S5        S S S 5        g ! , (       d  f       g = f)Nustar/regtyperegular file extraction failed)	rT   	getmemberextractfilereadassertEquallensizer   sha256_regtyper#   tarinfofobjr   s       r   test_fileobj_regular_file'UstarReadTest.test_fileobj_regular_fileu   sw    (($$_5XX!!'*d99;DSY46Yt_n46	 +**s   AB
B%c                 h   U R                   R                  S[        SS9  U R                   R                  S5      n[	        [
        R                  R                  [        S5      S5       nUR                  5       nS S S 5        U R                   R                  U5       n[        R                  " U5      nUR                  5       nU R                  WUS5        U R                  [        U5      SS5        U R                  US   SS5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nrf   r   filterrzfileobj.readlines() failedr   S   zOI will gladly admit that Python is not the fastest running scripting language.
)rT   extractTEMPDIRrh   r.   ospathjoin	readlinesri   r,   TextIOWrapperrk   rl   )r#   rp   fobj1lines1rq   fobj2lines2s          r   test_fileobj_readlines$UstarReadTest.test_fileobj_readlines~   s    '&A(($$_5"'',,w8#>%__&F ? XX!!'*d$$T*E__&FVV02S[#02VBZ402 +* ?> +*s   )DA,D#
D #
D1c                    U R                   R                  S[        SS9  U R                   R                  S5      n[	        [
        R                  R                  [        S5      S5       nUR                  5       nS S S 5        U R                   R                  U5       n[        [        R                  " U5      5      nU R                  WUS5        S S S 5        g ! , (       d  f       Ne= f! , (       d  f       g = f)Nrf   r   ru   rw   zfileobj.__iter__() failed)rT   rz   r{   rh   r.   r|   r}   r~   r   ri   listr,   r   rk   )r#   rp   r   r   r   r   s         r   test_fileobj_iterUstarReadTest.test_fileobj_iter   s    '&A(($$_5"'',,w8#>%__&F ?XX!!'*e"**512FVV/1 +* ?>**s   )C3C*
C'*
C8c                 >   U R                   R                  S[        SS9  [        [        R
                  R                  [        S5      S5       nUR                  5       nS S S 5        U R                   R                  S5      nU R                   R                  U5       nUR                  5       nUR                  S5        U R                  SUR                  5       S5        UR                  SS5        U R                  SUR                  5       S5        UR                  S	S
5        U R                  SUR                  5       S5        UR                  SS
5        U R                  SUR                  5       S5        UR                  S5      nU R                  UWSS S5        UR                  SS5        U R                  UR                  UR                  5       S5        U R                  UR                  5       SS5        UR                  UR                  * S5        U R                  SUR                  5       S5        UR                  S5        UR                  5       nUR                  S5        UR                  5       nU R                  XgS5        UR                  S5        U R                  [        UR!                  5       5      UR                  5       S5        UR                  S5        U R                  [        UR!                  5       5      S-   UR                  5       S5        UR                  S5        UR!                  5       nU R                  UR                  5       U[        U5      S  S5        S S S 5        g ! , (       d  f       GN$= f! , (       d  f       g = f)Nrf   r   ru   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)rT   rz   r{   r.   r|   r}   r~   rj   rh   ri   seekrk   tellrm   r   rl   readline)	r#   rq   r   rp   textss1s2lines	            r   test_fileobj_seekUstarReadTest.test_fileobj_seek   s   ' & 	 	("'',,w8$?499;D @ (($$_5XX!!'*d99;DIIaLQ		8:IIdAT499;=?IIeQT499;FHIIdAT499;FH		"AQT$35IIaOW\\499;68TYY[#KMIIw||mQ'Q		?AIIcN!BIIcN!BR8:IIaLS1499;9;IIcNS1C7DFIIaL==?DTYY[$s4yz*:9;O +*	 @? +*s   M<KN<
N
Nc                 |   U R                   R                  S5       n[        R                  " U5      nUR	                  5       R                  S5      nU R                  [        U5      [        5         UR                  S5        S S S 5        g ! [         a    U R                  S5         N&f = f! , (       d  f       g = f)Nrf   rP   d   zseeking failed in text mode)rT   ri   r,   r   rj   encoderk   r   rn   r   AttributeErrorfailr#   rq   r   s      r   test_fileobj_textUstarReadTest.test_fileobj_text   s    XX!!/2d##D)D99;%%k2DYt_n=9		# 32 " 9 		789 32s*   AB-2BB*'B-)B**B--
B;c                 $   U R                   R                  U5       nU R                   R                  U5       nU R                  UR                  UR                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )rT   ri   rk   name)r#   lnktyperegtypeabs        r   _test_fileobj_link UstarReadTest._test_fileobj_link   s_    XX!!'*aXX!!'*aQVVQVV, + +*** +*s"   B'A0B0
A>	:B
Bc                 (    U R                  SS5        g )Nustar/lnktyperf   r   r"   s    r   test_fileobj_link1 UstarReadTest.test_fileobj_link1       Ar   c                 (    U R                  SS5        g )N./ustar/linktest2/lnktypeustar/linktest1/regtyper   r"   s    r   test_fileobj_link2 UstarReadTest.test_fileobj_link2        ; 9	;r   c                 (    U R                  SS5        g )Nustar/symtyperf   r   r"   s    r   test_fileobj_symlink1#UstarReadTest.test_fileobj_symlink1   r   r   c                 (    U R                  SS5        g )N./ustar/linktest2/symtyper   r   r"   s    r   test_fileobj_symlink2#UstarReadTest.test_fileobj_symlink2   r   r   c                 (    U R                  SS5        g )Nsymtype2rf   r   r"   s    r   test_issue14160UstarReadTest.test_issue14160   s    
O<r   c                 H    U R                  S5        U R                  S5        g )Nbareaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)add_dir_and_getmemberr"   s    r   test_add_dir_getmember$UstarReadTest.test_add_dir_getmember   s    ""5)""7+r   getuidgetgidz'Missing getuid or getgid implementationc           	      z   S n[         R                  " 5          [        R                  " [        S5       n[        R
                  Ul         [        R                  " U5        UR                  XS9  [        R                  " U5         S S S 5        [        R                  " [        5       nU R                  UR                  U5      UR                  US-   5      5        S S S 5        S S S 5        g ! [        R                  " U5        f = f! , (       d  f       N= f! , (       d  f       NC= f! , (       d  f       g = f)Nc                 "    S=U l         U l        U $ )Nr   )uidgidrp   s    r   rv   3UstarReadTest.add_dir_and_getmember.<locals>.filter   s    (++GK'+Nr   wru   /)r	   temp_cwdr/   r.   tmpnameUSTAR_FORMATformatr|   mkdiraddrmdirrk   rh   )r#   r   rv   rT   s       r   r   #UstarReadTest.add_dir_and_getmember   s    	 !gs+s$11
#HHTNGGDG0HHTN , g&#  MM$'MM$*- ' "! HHTN ,+ '& "!sR   D,D
%C/1D
"D,*4DD,/DD


D	D,
D)	%D,,
D:r&   N)r'   r(   r)   r*   rr   r   r   r   r   r   r   r   r   r   r   r   unittest
skipUnlesshasattrr|   r   r3   r&   r   r   rc   rc   s   sz    62$1/;b
9-
B;B;=,
 X.H72x3HBDDr   rc   c                       \ rS rSrSrg)GzipUstarReadTesti
  r&   Nr'   r(   r)   r*   r3   r&   r   r   r   r   
      r   r   c                       \ rS rSrSrg)Bz2UstarReadTesti  r&   Nr   r&   r   r   r   r     r   r   r   c                       \ rS rSrSrg)LzmaUstarReadTesti  r&   Nr   r&   r   r   r   r     r   r   r   c                   ,    \ rS rSrS rS rS rS rSrg)ListTesti  c                 `    [         R                  " U R                  U R                  S9U l        g )Nr$   rS   r"   s    r   rU   ListTest.setUp  s    <<499=r   c                   ^  [         R                  " [         R                  " 5       SSS9n[        R                  " [
        SU5         T R                  R                  SS9  S S S 5        UR                  5       R                  5       nT R                  SU5        T R                  SU5        T R                  S	U5        T R                  S
U5        T R                  SU5        T R                  SU5        T R                  SU5        T R                  SU5        U 4S jnT R                  U" S5      U5        T R                  U" S5      U5        T R                  U" S5      U5        T R                  U" S5      U5        T R                  U" S5      U5        T R                  US5        T R                  SU5        T R                  SU5        g ! , (       d  f       GNr= f)Nascii
newlinestdoutFverbose   ustar/conttype   ustar/regtypes   ustar/lnktypes   ustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longnames   ./ustar/linktest2/symtypes   ./ustar/linktest2/lnktypes   ustar/dirtype/s   ustar/dirtype-with-size/c                 t   > U R                  TR                  R                  S5      nUR                  SS5      $ )Nsurrogateescaper   backslashreplace)decoderT   rR   r   )r   r   r#   s     r   conv ListTest.test_list.<locals>.conv)  s0    **,=>A88G%788r   s   ustar/umlauts-s'   misc/regtype-hpux-signed-chksum-s)   misc/regtype-old-v7-signed-chksum-s   pax/bad-pax-s   pax/hdrcharset-s)   ustar/conttype ?\r?\nustar/regtype ?\r?\ns   link tos   ->)r,   r   BytesIOr   	swap_attrsysrT   r   detachgetvalueassertInassertRegexassertNotIn)r#   tiooutr   s   `   r   	test_listListTest.test_list  s   rzz|WdCsHc2HHMM%M( 3jjl##%'-&,&,BCH2C82C8'-137	9 	dHI3Od ; <=@	Bd ; <=@	Bd67=d9:C@ 	 7 	8 	S)$C 32s   G
Gc                 |   [         R                  " [         R                  " 5       SSS9n[        R                  " [
        SU5         U R                  R                  SS9  S S S 5        UR                  5       R                  5       nSnU R                  USR                  U VVVs/ s H  u  pEnUS	XV4-  S
-   -   PM     snnn5      5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        g ! , (       d  f       N= fs  snnnf )Nr   r   r   r   Tr   )	)   \?	   rw-r--r--   7011)   -r
  r  )   d	   rwxr-xr-x   0)r  r  s   255)r	  r
  r  )   ls	   rwxrwxrwxr  )   bs	   rw-rw----s   3,0)   cs	   rw-rw-rw-s   1,3)   pr
  r  r   s   %s tarfile/tarfile\s+%s s;   \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type[/>\sa-z-]*\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,   r   r   r   r   r   rT   r   r   r   r  r~   r  )r#   r  r  type_perm_lengthstppermlns          r   test_list_verboseListTest.test_list_verbose?  s)   rzz|WdCsHc2HHMM$M' 3jjl##%( 	chh "# " :F2 0D:=33 4 "#$ 	% 	137JCP 347	9 569	; 569	;? 32(#s   D&%D7&
D4c                    [         R                  " [         R                  " 5       SSS9nS n[        R                  " [
        SU5         U R                  R                  SU" U R                  5      S9  S S S 5        UR                  5       R                  5       nU R                  SU5        U R                  S	U5        g ! , (       d  f       NQ= f)
Nr   r   r   c              3   f   #    U R                  5        H  nSUR                  ;   d  M  Uv   M     g 7f)Nreg)
getmembersr   )rT   rp   s     r   members+ListTest.test_list_members.<locals>.memberse  s'     >>+GLL(!M ,s   "1	1r   F)r   r  r   r   )r,   r   r   r   r   r   rT   r   r   r   r  r  )r#   r  r  r  s       r   test_list_membersListTest.test_list_membersc  s    rzz|WdC	" sHc2HHMM%1BMC 3jjl##%&,*C0	 32s   	+B??
Cr[   N)	r'   r(   r)   r*   rU   r  r  r   r3   r&   r   r   r   r     s    >#%J";H
1r   r   c                       \ rS rSrSrg)GzipListTestip  r&   Nr   r&   r   r   r#  r#  p  r   r   r#  c                       \ rS rSrSrg)Bz2ListTestit  r&   Nr   r&   r   r   r%  r%  t  r   r   r%  c                       \ rS rSrSrg)LzmaListTestix  r&   Nr   r&   r   r   r'  r'  x  r   r   r'  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)CommonReadTesti|  c                 6   [        [        S5          S S S 5        U R                  [        R                  " [        5      5        U R                  [        R                  " [
        R                  " [        5      5      5        [        [        S5       nU R                  [        R                  " U5      5        S S S 5        U R                  [        R                  " [        R                  " S5      5      5        g ! , (       d  f       N= f! , (       d  f       NY= f)Nwbr   s   invalid)	r.   r   assertFalser/   
is_tarfiler	   FakePathr,   r   r#   rq   s     r   test_is_tarfile_erroneous(CommonReadTest.test_is_tarfile_erroneous~  s    '4  ! 	++G45 	++I,>,>w,GHI '4 DW//56 ! 	++BJJz,BCD !  ! s   C9&D
9
D

Dc           	         U R                  [        R                  " U R                  5      5        U R                  [        R                  " [        R
                  " U R                  5      5      5        [        U R                  S5       nU R                  [        R                  " U5      5        S S S 5        [        U R                  S5       nU R                  [        R                  " [        R                  " UR                  5       5      5      5        S S S 5        g ! , (       d  f       Nu= f! , (       d  f       g = f)Nr   )

assertTruer/   r-  r+   r	   r.  r.   r,   r   rj   r/  s     r   test_is_tarfile_valid$CommonReadTest.test_is_tarfile_valid  s    **4<<89 	**9+=+=dll+KLM $,,%OOG..t45 & $,,%OOG..rzz$))+/FGH &%	 &% &%s   	&DAD/
D,/
D=c                    [        U R                  S5       n[        R                  " U5        U R	                  UR                  5       S5        S S S 5        [        U R                  S5       n[        R                  " UR                  5       5      n[        R                  " U5        U R	                  UR                  5       S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   )	r.   r+   r/   r-  rk   r   r,   r   rj   )r#   rq   	file_likes      r   test_is_tarfile_keeps_position-CommonReadTest.test_is_tarfile_keeps_position  s     $,,%t$TYY[!, & $,,%

499;/Iy)Y^^-q1 &%	 &% &%s   7C,AC!
C!
C/c                    [         R                  " [        U R                  R	                  SS5      5          S S S 5         [         R                  " [        U R                  5      nUR                  5         U R                  UR                  5       / 5        WR                  5         g ! , (       d  f       Nu= f! [         R                   a    U R                  S5         NIf = f! WR                  5         f = f)Nrw   r   z&tarfile.open() failed on empty archive)r/   r.   r   r$   replacegetnamesassertListEqualr  	ReadErrorr   rX   r#   rT   s     r   test_empty_tarfile!CommonReadTest.test_empty_tarfile  s    
 \\'499#4#4S##>? @	,,w		2CLLN   !126IIK @?
    	@II>?	@
 IIKs5   B'5B8 6 C# '
B58%C C# C  C# #C5c                     U R                  [        S5         [        R                  " SU R                  5        S S S 5        g ! , (       d  f       g = f)Nxxx)assertRaisesRegexFileNotFoundErrorr/   r.   r$   r"   s    r   test_non_existent_tarfile(CommonReadTest.test_non_existent_tarfile  s3     ##$5u=LL		* >==s   "A
Ac                 <   [        [        S5          S S S 5        U R                  [        R                  [        R                   [        U R
                  5        U R                  [        R                  [        R                   [        5        g ! , (       d  f       N= fNr+  )r.   r   assertRaisesr/   r>  r$   r"   s    r   test_null_tarfile CommonReadTest.test_null_tarfile  s]     '4  !'++W\\7DIIN'++W\\7C ! s   B
Bc                 H   [        S5      R                  S5      nS H  nU R                  [        S5       nUR	                  US-  5        [
        R                  " S5      n[        U5      Ul        UR	                  UR                  5       5        UR	                  U5        S S S 5        [
        R                  " [        SSS	9n U R                  UR                  5       S/S
U-  5        UR                  5         M     g ! , (       d  f       Nc= f! UR                  5         f = f)Nr   r   )       ar   r   foorw   T)r$   ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   	randbytesr.   r   writer/   TarInforl   rm   tobufr=  r<  rX   )r#   r   charrq   rp   rT   s         r   test_ignore_zeros CommonReadTest.test_ignore_zeros  s     ay""3'!D 7C(D

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

7==?+

4  ) ,,wStDC$$S\\^eWI 		! " )( 		s   A+C>%D>
D	D!c           	      P   S GH  n[         R                  " [        S5       n[         R                  " S5      nSUl        UR                  U[        R                  " S5      5        S S S 5        [        [        S5       nUR                  U5        S S S 5        [         R                  " [        5       nU R                  [         R                  S5         U H  nM     S S S 5        S S S 5        [         R                  " [        5       nUR                  5       nU R                  [         R                  S5         UR                  U[        SS	9  S S S 5        U R                  [         R                  S5         UR                  U5      R                  5         S S S 5        S S S 5        GM     g ! , (       d  f       GNM= f! , (       d  f       GN5= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Nt= f! , (       d  f       GM"  = f)
N)r   iX  r   i  w:rP  r   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of datar   ru   )r/   r.   r   rT  rm   addfiler,   r   truncaterD  r>  nextrz   r{   ri   rj   )r#   rm   rT   trq   s        r   test_premature_end_of_archive,CommonReadTest.test_premature_end_of_archive  sq   *Dgt,OOE*Arzz+67 -
 gu%d# & g&#++G,=,=?WX  ! Y '
 g&#HHJ++G,=,=?WXKK76K: Y ++G,=,=?WXOOA&++- Y '& +,,
 &% YX '& YX YX '&sx   AF,>F>2!G!
GG!1H8G3(H6 HH,
F;	>
G	
GG!!
G0	3
H=H
HH
H%	c                     U R                  [        R                  S5         [        R                  " [        R
                  " SSS95          S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N%file could not be opened successfullyzrecursion.tarr   r   )rD  r/   r>  r.   r   findfiler"   s    r   test_length_zero_header&CommonReadTest.test_length_zero_header  sX     ##G$5$57^_g..GXYZ [ `_ZZ `_s#   *A/AA/
A,	(A//
A=c                    U R                   R                  S5      nU R                   R                  U5       nU R                  UR                  S5        U R                  [        UR                  5        U R                  UR                  S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  (       a!  U R                  [        UR                  5        O U R                  UR                  5       S5        U R                  UR                  S5        S S S 5        U R                  WR                  S5        U R                  UR                  S5        U R                  [        UR                  5        U R                  UR                  S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  (       a!  U R                  [        UR                  5        g U R                  UR                  5       S5        g ! , (       d  f       GN= f)Nrf   r   TF)rT   rh   ri   rk   r   rJ  r   filenor$   assertIsreadablewritable	is_streamseekableclosed)r#   filerq   s      r   test_extractfile_attrs%CommonReadTest.test_extractfile_attrs  s   xx!!/2XX!!$'4TYY8ndkk:TYY-MM$--/40MM$--/51~~!!.$--@dmmot4MM$++u- ( 	dkk4(O4.$++6D)dmmot,dmmou->>ndmm<MM$--/40) ('s   DI
Ir&   N)r'   r(   r)   r*   r0  r4  r8  r@  rF  rK  rW  r_  rd  ro  r3   r&   r   r   r)  r)  |  s7    E"I
2"+D,.01r   r)  c                   v   \ rS rSrSrS rS rS rS rS r	S!S	 jr
S
 rS rS rS rS rS rS rS r\R(                  " \" \S5      S5      \R0                  S 5       5       r\R4                  S 5       r\R4                  S 5       rS rS rS rS r S r!S r"\RF                  " \$SL S5      S 5       r%S r&S r'g)"MiscReadTestBasei  Fc                    [        U R                  S5       nU R                  UR                  [        5        [
        R                   " XR                  S9 nU R                  UR                  [        5        U R                  UR                  [        R                  R                  UR                  5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fNr   fileobjr$   )r.   r+   assertIsInstancer   strr/   r$   rk   r|   r}   abspathr#   rq   rT   s      r   test_no_name_argument&MiscReadTestBase.test_no_name_argument  s    $,,%!!$))S1d;s%%chh4  277??499+EF < &%;; &%s$   ?CA$C:C
C	C
C*c                 Z   [        U R                  S5       nUR                  5       nS S S 5        [        R                  " W5      nU R                  [        [        US5        [        R                   " XR                  S9nU R                  UR                  5        g ! , (       d  f       Nz= f)Nr   r   ru  )r.   r+   rj   r,   r   rJ  r   getattrr/   r$   assertIsNoner   r#   rq   r   rT   s       r   test_no_name_attribute'MiscReadTestBase.test_no_name_attribute#  sq    $,,%99;D &zz$.'4@ll4ii8#((# &%s   B
B*c                 d   [        U R                  S5       nUR                  5       nS S S 5        [        R                  " W5      nSUl        [        R                   " XR                  S9 nU R                  UR
                  5        S S S 5        g ! , (       d  f       Nn= f! , (       d  f       g = f)Nr   r   ru  )	r.   r+   rj   r,   r   r   r/   r$   r  r  s       r   test_empty_name_attribute*MiscReadTestBase.test_empty_name_attribute+  su    $,,%99;D &zz$	\\$YY73chh' 87	 &% 87s   B+B!
B!
B/c                    [         R                  " U R                  [         R                  5      n[        US5       nU R	                  UR
                  [        5        [        R                  " X R                  S9 nU R                  UR
                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frt  )
r|   r.   r+   O_RDONLYrw  r   intr/   r$   r  )r#   fdrq   rT   s       r   test_int_name_attribute(MiscReadTestBase.test_int_name_attribute3  sz     WWT\\2;;/"d^t!!$))S1d;s!!#((+ < ^;; ^s#   ?B9;B(B9(
B6	2B99
Cc                    [         R                  " U R                  5      n[        US5       nU R	                  UR
                  [        5        [        R                  " X R                  S9 nU R	                  UR
                  [        5        U R                  UR
                  [         R                  R                  UR
                  5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frt  )r|   fsencoder+   r.   rw  r   bytesr/   r$   rk   r}   ry  )r#   r+   rq   rT   s       r   test_bytes_name_attribute*MiscReadTestBase.test_bytes_name_attribute<  s    ++dll+'4 D!!$))U3d;s%%chh6  277??499+EF < ! ;; ! s$   ?C2,A$C!C2!
C/	+C22
D Nc                 4   Uc  U R                   n[        R                  R                  U5      n[        R
                  " U5      n[        R                  " XR                  S9 nU R                  UR                  U5        S S S 5        U R                  U5       nU R                  UR                  U5        S S S 5        [        R                  R                  XR                  S9 nU R                  UR                  U5        S S S 5        U R                  S:X  a;  [        R                  " USS9 nU R                  UR                  U5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N|= f! , (       d  f       g = f)Nr   r   rw   )r+   r|   r}   ry  r	   r.  r/   r.   r$   rk   r   r1   r0   r!   )r#   r+   expectedrT   s       r   test_pathlike_name#MiscReadTestBase.test_pathlike_nameD  s   ?llG77??7+$$W-\\'		2cSXXx0 3\\'"cSXXx0 #__!!'		!:cSXXx0 ;;;"s3s  84 43  32"":: 43s0   #EE'%E8/F	
E$'
E58
F	
Fc                 b    U R                  [        R                  " U R                  5      5        g r   )r  r|   r  r+   r"   s    r   test_pathlike_bytes_name)MiscReadTestBase.test_pathlike_bytes_nameS  s    DLL 9:r   c                    [        [        S5          S S S 5        U R                  [        S5         U R	                  [        S5      nS S S 5        U R                  [        S5         U R	                  [        S5      nS S S 5        U R                  [        S5         U R	                  [        S5      nS S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g = f)Nr+  zmode must be qrwr   )r.   r   rD  
ValueErrorr1   r?  s     r   test_illegal_mode_arg&MiscReadTestBase.test_illegal_mode_argV  s    '4  !##J@,,w,C A##J@,,w-C A##J@,,w+C A@ ! @@@@@@s.   B;C&CC.;
C	
C
C+.
C<c                 V   [         R                  " U R                  U R                  S9n UR	                  5         UR	                  5       nUR
                  nUR                  nUR                  U5       nUR                  5       nS S S 5        UR                  5         U R                  U R                  5       nUR                  U5        UR                  U R                  SUS9 nUR	                  5       nU R                  UR
                  U5        UR                  5         U R                  UR                  U5      R                  5       WS5        S S S 5        S S S 5        g ! , (       d  f       N= f! UR                  5         f = f! , (       d  f       N== f! , (       d  f       g = f)Nr   rN   r$   rv  zseek back did not work)r/   r.   r+   r$   r]  r   offsetri   rj   rX   r   rk   r  )r#   rT   r^  r   r  fr   rq   s           r   test_fileobj_with_offset)MiscReadTestBase.test_fileobj_with_offset`  s2    ll4<<dii8	HHJ
A66DXXF#qvvx $ IIK YYt||$IIf $,,T4@CHHJ  .    !3!8!8!:D02 A	 %$ $# IIK A@	 %$sI   A	E4 4E#E4 8-F%A-F	F#
E1-E4 4F	
F	F
F(c                 B   U R                  [        R                  [        R                  [        U R
                  5        [        [        S5       nU R                  [        R                  [        R                  XR
                  S9  S S S 5        g ! , (       d  f       g = frt  )rJ  r/   r>  r.   r+   r$   r/  s     r   test_fail_compMiscReadTestBase.test_fail_comp|  sd    '++W\\7DIIN'4 Dg//&*  < !  s   8B
Bc                     U R                   R                  S5      nU R                  UR                  [        R
                  S5        g )Nzmisc/dirtype-old-v7zv7 dirtype failed)rT   rh   rk   typer/   DIRTYPEr#   rp   s     r   test_v7_dirtype MiscReadTestBase.test_v7_dirtype  s6     (($$%:;w#	%r   c                 ~     U R                   R                  S5        g ! [         a    U R                  S5         g f = f)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))rT   rh   KeyErrorr   r"   s    r   test_xstar_type MiscReadTestBase.test_xstar_type  s9    	MHH34 	MIIKL	Ms    <<c                 (   U R                    H  nU R                  [        UR                  5      SSUR                  -  5        UR                  R                  S5      (       d  MX  U R                  UR                  SSUR                  -  5        M     g )N鏽>zwrong mtime for %szustar/r/   zwrong uname for %s)rT   rk   r  mtimer   
startswithunamer  s     r   test_check_members#MiscReadTestBase.test_check_members  sq    xxGS/(7<<79<<**844W]]I(7<<79  r   c                 t    U R                  U R                  R                  5       S   R                  SS5        g )Nzmisc/eofzcould not find all members)rk   rT   r  r   r"   s    r   test_find_members"MiscReadTestBase.test_find_members  s/    ,,.r277,	.r   linkMissing hardlink implementationc                 R   [         R                  " [        SSS9 nUR                  S[        SS9  U R                  [        R                  [        R                  R                  [        S5      5        UR                  S[        SS9  U R                  [        R                  [        R                  R                  [        S5      5        [        [        R                  R                  [        S5      S5       nUR                  5       nS S S 5        U R                  [        W5      [        5        UR                  S	[        SS9  U R                  [        R                  [        R                  R                  [        S	5      5        [        [        R                  R                  [        S	5      S5       nUR                  5       nS S S 5        U R                  [        U5      [        5        S S S 5        g ! , (       d  f       N= f! , (       d  f       NG= f! , (       d  f       g = f)
Nr   rP   )
errorlevelrR   rf   r   ru   r   r   r   )r/   r.   r+   rz   r{   
addCleanupr	   unlinkr|   r}   r~   rj   rk   r   rn   )r#   rT   r  r   s       r   test_extract_hardlink&MiscReadTestBase.test_extract_hardlink  s\   
 \\'a+F#KKK@OOI,,bggll7O.TUKKK@OOI,,bggll7O.TUbggll7O<dCqvvx DYt_n=KKK@OOI,,bggll7O.TUbggll7O<dCqvvx DYt_n= GF DC DC GFs=   CH8G6	B,H5H'H6
H	 H
H	H
H&c                    [         R                  " [        SS9n[        R                  R                  [        S5      n[        R                  " U5         U Vs/ s H  o3R                  5       (       d  M  UPM     nnUR                  X$SS9  U H  n[        R                  R                  X%R                  5      n[        R                  S:w  aK  U R                  UR                  S-  [        R                  " U5      R                   S-  UR                  5        S n[        R                  R#                  U5      nS	R%                  U" UR&                  5      U" U5      U5      n	U R                  UR&                  X5        M     UR)                  5         [*        R,                  " U5        g s  snf ! UR)                  5         [*        R,                  " U5        f = f)
NrP   rR   
extractallfully_trustedru   win32  c                     [        U [        5      (       a  SR                  X R                  5       5      $ SR                  U 5      $ )Nz{} ({})z
{!r} (int))
isinstancefloatr   hex)r  s    r   format_mtime6MiscReadTestBase.test_extractall.<locals>.format_mtime  s7    !%//(//yy{CC+22599r   z,tar mtime {0} != file time {1} of path {2!a})r/   r.   r+   r|   r}   r~   r{   r   isdirr  r   r   platformrk   r$   statst_modegetmtimer   r  rX   r	   rmtree)
r#   rT   DIRr^  directoriesrp   r}   r  
file_mtimeerrmsgs
             r   test_extractall MiscReadTestBase.test_extractall  sU    ll7[9ggll7L1
	"&)7cWWY1cK7NN3OND&ww||C6<<7*$$W\\E%9%'WWT]%:%:U%B%,\\3:
  WW--d3
GNN / ,   
C# '& IIKS!- 8* IIKS!s%   F1 F,5F,;D
F1 ,F1 1(Gc                    Sn[         R                  R                  [        S5      n[         R                  " U5         [
        R                  " [        SS9 nUR                  U5      nUR                  XBSS9  [         R                  R                  X!5      nU R                  [         R                  R                  U5      UR                  5        [        R                  S:w  a3  U R                  [         R                  " U5      R                   S-  S	5        S S S 5        ["        R$                  " U5        g ! , (       d  f       N%= f! ["        R$                  " U5        f = f)
Nustar/dirtype
extractdirrP   r  r  r}   rv   r  r  i  )r|   r}   r~   r{   r   r/   r.   r+   rh   rz   rk   r  r  r   r  r  r  r	   r  r#   dirtyper  rT   rp   	extracteds         r   test_extract_directory'MiscReadTestBase.test_extract_directory  s    !ggll7L1
		"g<--0GoFGGLL6	  !1!1)!<gmmL<<7*$$RWWY%7%?%?%%GO = S! =< S!s$   E CD7E 7
EE E c                     [         R                  " [        5      S-  n[        R                  " U5         [
        R                  " [        SS9 nU Vs/ s H  o3R                  5       (       d  M  UPM     nnU R                  [        S5       nUR                  X5        S S S 5        U R                  WR                  [        5        S S S 5        S S S 5        g s  snf ! , (       d  f       ND= f! , (       d  f       N-= f! , (       d  f       g = f)Nr  rP   r  Use the filter argument)pathlibPathr{   r	   temp_dirr/   r.   r+   r  assertWarnsRegexDeprecationWarningr  rk   filename__file__)r#   r  rT   r^  r  cms         r   2test_deprecation_if_no_filter_passed_to_extractallCMiscReadTestBase.test_deprecation_if_no_filter_passed_to_extractall  s    ll7#l2s#LL;73&)7cWWY1cK7&&'9;TUY[s0 V R[[(3 8 $# 8UU 87 $#sS   C?C.C/C5C.C(C.C?C.
C+'C..
C<	8C??
Dc                    Sn[         R                  " [        5      S-  n[        R                  " U5         [
        R                  " [        SS9 nUR                  U5      nU R                  [        S5       nUR                  XBS9  S S S 5        U R                  WR                  [        5        S S S 5        S S S 5        g ! , (       d  f       N?= f! , (       d  f       N(= f! , (       d  f       g = f)Nr  r  rP   r  r  r}   )r  r  r{   r	   r  r/   r.   r+   rh   r  r  rz   rk   r  r  )r#   r  r  rT   rp   r  s         r   /test_deprecation_if_no_filter_passed_to_extract@MiscReadTestBase.test_deprecation_if_no_filter_passed_to_extract  s    !ll7#l2s#LL;73mmG,G&&'9;TUY[G. V R[[(3 8 $# VU 87 $#s;   C#(C8C(C0C#
CC
C 	C##
C1c                    [         R                  R                  [        S5      n[        R
                  " U5         [        R                  " [        SS9 nU Vs/ s H  o3R                  5       (       d  M  UPM     nnUR                  [        R                  " U5      USS9  U He  n[         R                  R                  XR                  5      nU R                  [         R                  R                  U5      UR                  5        Mg     S S S 5        S S S 5        g s  snf ! , (       d  f       N= f! , (       d  f       g = f)Nr  rP   r  r  ru   )r|   r}   r~   r{   r	   r  r/   r.   r+   r  r  r.  r   rk   r  r  )r#   r  rT   r^  r  rp   r}   s          r   test_extractall_pathlike_dir-MiscReadTestBase.test_extractall_pathlike_dir  s    ggll7L1$\\'K8C&)7cWWY1cK7NN9--c2KNX&ww||C6  !1!1$!7G ' 9 %$7 98 %$s<   D5D$D6D<BD$D5D$$
D2	.D55
Ec                 2   Sn[         R                  R                  [        S5      n[        R
                  " U5         [        R                  " [        SS9 nUR                  U5      nUR                  U[        R                  " U5      SS9  [         R                  R                  X!5      nU R                  [         R                  R                  U5      UR                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  r  rP   r  r  r  )r|   r}   r~   r{   r	   r  r/   r.   r+   rh   rz   r.  rk   r  r  r  s         r   test_extract_pathlike_dir*MiscReadTestBase.test_extract_pathlike_dir	  s    !ggll7L1$\\'K8CmmG,GKKi&8&8&=oKVS2IRWW--i8'--H	 9 %$88 %$s$   DBC7&D7
D	D
Dc                 (   [         R                  R                  [        S5      n[	        US5       nUR                  S5        S S S 5         [        R                  [        R                  5      n UR                  U5        U R                  S5        [         R"                  " U5        g ! , (       d  f       Nl= f! [        R                   a(    U R                  UR                  R                  5         Ncf = f! [         R"                  " U5        f = f)Nemptyr+  r   zReadError not raised)r|   r}   r~   r{   r.   rS  object__new__r/   r0   __init__r   r>  r3  rv  rm  r	   r  )r#   r  rq   rT   s       r   test_init_close_fobj%MiscReadTestBase.test_init_close_fobj  s     Wg.%$JJsO 		$..1C2U# 		01U#  $$ 4 2 234
 U#s;   B)#C9 0B: C9 )
B7:9C63C9 5C66C9 9Dc                 H   [         R                  " U R                  5       n[        X5       HY  u  p#U R	                  UR
                  UR
                  5        U R	                  UR                  5       UR                  5       5        M[     S S S 5        g ! , (       d  f       g = fr   )r/   r.   r+   ziprk   r  get_info)r#   rT   m1m2s       r   test_parallel_iteration(MiscReadTestBase.test_parallel_iteration&  sf     \\$,,'3c-  BII6  > ( (''s   A)B
B!zrequires zlibc                 R   [         R                  R                  S5       n[        R                  Ul        U R                  [        R                  5         [        R                  " U R                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nztarfile.TarInfo.fromtarfile)r   mockpatchzliberrorside_effectrJ  r/   r>  r.   r+   )r#   r
  s     r   test_zlib_error_does_not_leak.MiscReadTestBase.test_zlib_error_does_not_leak.  sh     ]]  !>?4#zzD""7#4#45T\\* 6 @?55 @?s#   5B!B6B
B	B
B&c                    [         R                  " 5       n[        R                  " USS9nUR	                  5         UR                  S5        [        R                  " USS9 nU R                  UR                  5       S 5        S S S 5        UR                  S5        [        R                  " USS9 nU R                  UR                  5       S 5        S S S 5        g ! , (       d  f       N^= f! , (       d  f       g = f)Nr   ru  r   r|rw   )r,   r   r/   r.   rX   r   rk   r]  )r#   r  tfs      r   test_next_on_empty_tarfile+MiscReadTestBase.test_next_on_empty_tarfile7  s    ZZ\\\"3/



\\"40BRWWY- 1 	
\\"3/2RWWY- 0/	 10 0/s   !!C0!C+
C(+
C9r&   r   )(r'   r(   r)   r*   rk  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r|   r	   skip_unless_symlinkr  skip_unless_working_chmodr  r  r  r  r  r  r   r  skipIfr  r  r  r3   r&   r   r   rr  rr    s   IG$(,G5;,28<%M9. V,:<""> #<>$ ((" )"> ((" )"
44HI$&? __TT\?3+ 4+.r   rr  c                       \ rS rSrSrSrg)MiscReadTestiD  Nr&   )r'   r(   r)   r*   r  r3   r&   r   r   r  r  D  s    Nr   r  c                       \ rS rSrSrg)GzipMiscReadTestiG  r&   Nr   r&   r   r   r  r  G  r   r   r  c                       \ rS rSrSrg)Bz2MiscReadTestiJ  r&   Nr   r&   r   r   r  r  J  r   r   r  c                       \ rS rSrSrg)LzmaMiscReadTestiM  r&   Nr   r&   r   r   r   r   M  r   r   r   c                   4    \ rS rSrSrSrS rS rS rS r	Sr
g	)
StreamReadTestiQ  r  Tc                 T   U R                    H[  nUR                  5       (       d  M  U R                   R                  U5       n  UR                  S5      nW(       d  OM  S S S 5        M]     g ! [        R
                   a    U R                  S5         N>f = f! , (       d  f       M  = f)Nr   z6simple read-through using TarFile.extractfile() failed)rT   isregri   rj   r/   StreamErrorr   )r#   rp   rq   bufs       r   test_read_through StreamReadTest.test_read_throughV  s     xxG==??%%g.$B"iin   /.   #.. B		 #A BB	 /.s0   BA-
B-%BBBB
B'	c                 N   U R                   R                  5       nU R                   R                  U5       nUR                  5       nS S S 5        U R	                  [        W5      UR                  S5        U R	                  [        U5      [        S5        g ! , (       d  f       NU= f)Nrg   )	rT   r]  ri   rj   rk   rl   rm   r   rn   ro   s       r   rr   (StreamReadTest.test_fileobj_regular_filef  st    ((--/XX!!'*d99;D +TGLL0	24.0	2	 +*s   B
B$c                     U R                   R                  5       nU R                   R                  US   5       nU R                  [        R
                  UR                  5        S S S 5        g ! , (       d  f       g = fNr   )rT   r  ri   rJ  r/   r%  rj   )r#   tarinfosr  s      r   test_provoke_stream_error(StreamReadTest.test_provoke_stream_erroro  sR    88&&(XX!!(1+.!g11166: /..s   +A--
A;c                    [         R                  " [        SS9n U R                  n UR	                  5       nUR	                  5       nUc  OU R                  US5        UR                  5       (       d  UR                  5       (       a;  U R                  [         R                  5         UR                  U5        S S S 5        M  UR                  U5      nUR                  U5      nUc  M  U R                  US5        U R                  UR                  5       UR                  5       S5        GM  UR                  5         g ! , (       d  f       N= f! UR                  5         f = f)NrP   r  zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r/   r.   r+   rT   r]  assertIsNotNoneislnkissymrJ  r%  ri   rk   rj   rX   )r#   tar1tar2t1t2v1v2s          r   test_compare_members#StreamReadTest.test_compare_memberst  s   ||Gk:	88DYY[YY[:$$R)@A88::**7+>+>?((, @%%b)%%b):$$R)FG  BGGI24# ( JJL @? JJLs%   BE 'D?9A5E ?
E	E E"r&   N)r'   r(   r)   r*   r    rk  r'  rr   r.  r:  r3   r&   r   r   r"  r"  Q  s     FI 2;
r   r"  c                       \ rS rSrSrg)GzipStreamReadTesti  r&   Nr   r&   r   r   r=  r=    r   r   r=  c                       \ rS rSrSrg)Bz2StreamReadTesti  r&   Nr   r&   r   r   r?  r?    r   r   r?  c                       \ rS rSrSrg)LzmaStreamReadTesti  r&   Nr   r&   r   r   rA  rA    r   r   rA  c                       \ rS rSrS rSrg)TarStreamModeReadTesti  c                 v    U R                    H  nM     U R                  U R                   R                  / 5        g r   )rT   rk   r  )r#   _s     r   test_stream_mode_no_cache/TarStreamModeReadTest.test_stream_mode_no_cache  s-    A ))2.r   r&   N)r'   r(   r)   r*   rF  r3   r&   r   r   rC  rC    s    /r   rC  c                       \ rS rSrSrg)GzipStreamModeReadTesti  r&   Nr   r&   r   r   rI  rI    r   r   rI  c                       \ rS rSrSrg)Bz2StreamModeReadTesti  r&   Nr   r&   r   r   rK  rK    r   r   rK  c                       \ rS rSrSrg)LzmaStreamModeReadTesti  r&   Nr   r&   r   r   rM  rM    r   r   rM  c                   2    \ rS rSrS rS rS rS rS rSr	g)	DetectReadTesti  c                      [         R                  " X5      nUR                  5         g ! [         R                   a  nU R	                  5          S nAg S nAff = fr   )r/   r.   rX   r>  r   )r#   r   r$   rT   es        r   _testfunc_fileDetectReadTest._testfunc_file  sC    	,,t*C IIK    	IIKK	s   ) AAAc                      [        US5       n[        R                   " XUS9nS S S 5        WR                  5         g ! , (       d  f       N= f! [        R                   a  nU R	                  5          S nAg S nAff = f)Nr   rv  )r.   r/   rX   r>  r   )r#   r   r$   r  rT   rQ  s         r   _testfunc_fileobj DetectReadTest._testfunc_fileobj  s\    	dD!Qll4q9 "
 IIK "!   	IIKK	s+   A =A 
AA A<"A77A<c                    U R                   (       Ga*  U R                  [        R                  5         [        R                  " [
        SU R                   -   S9  S S S 5        U R                  [        R                  5         [        R                  " [
        SU R                   -   S9  S S S 5        U R                  [        R                  5         [        R                  " U R
                  SS9  S S S 5        U R                  [        R                  5         [        R                  " U R
                  SS9  S S S 5        U" U R
                  S5        U" U R
                  SU R                   -   5        U" U R
                  S5        U" U R
                  SU R                   -   5        U" U R
                  S5        g ! , (       d  f       GNe= f! , (       d  f       GN)= f! , (       d  f       N= f! , (       d  f       N= f)NrN   r   r  rw   zr:*r|*)r!   rJ  r/   r>  r.   r+   )r#   testfuncs     r   _test_modesDetectReadTest._test_modes  s7   ;;;""7#4#45W4$+++=> 6""7#4#45W4$+++=> 6""7#4#45T\\5 6""7#4#45T\\5 6s#tdkk12u%tdkk12u% 65555555s/   'F7 'G	 G G,7
G	
G
G),
G:c                 :    U R                  U R                  5        g r   )r[  rR  r"   s    r   test_detect_fileDetectReadTest.test_detect_file  s    ,,-r   c                 :    U R                  U R                  5        g r   )r[  rV  r"   s    r   test_detect_fileobj"DetectReadTest.test_detect_fileobj  s    //0r   r&   N)
r'   r(   r)   r*   rR  rV  r[  r^  ra  r3   r&   r   r   rO  rO    s    & .1r   rO  c                       \ rS rSrSrg)GzipDetectReadTesti  r&   Nr   r&   r   r   rd  rd    r   r   rd  c                       \ rS rSrS rSrg)Bz2DetectReadTesti  c                 .   [        [        S5       nUR                  5       nS S S 5        [        R                  " [
        SSS9 nUR                  W5        S S S 5        U R                  [
        S5        g ! , (       d  f       NY= f! , (       d  f       N6= f)Nr   r+  r   compresslevelrY  )r.   r+   rj   r?   rA   r   rS  rR  r   s      r   test_detect_stream_bz2(Bz2DetectReadTest.test_detect_stream_bz2  si    
 '4 D99;D ! [[$a8DJJt 9 	GU+ !  98s   A5B5
B
Br&   N)r'   r(   r)   r*   rj  r3   r&   r   r   rf  rf    s    ,r   rf  c                       \ rS rSrSrg)LzmaDetectReadTesti  r&   Nr   r&   r   r   rm  rm    r   r   rm  c                       \ rS rSrS rSrg) GzipBrokenHeaderCorrectExceptioni  c                     [         R                  " S5      nU R                  [        R                  5         [        R
                  " USS9  S S S 5        g ! , (       d  f       g = f)Ns               zr|gzru  )r,   r   rJ  r/   r>  r.   )r#   r  s     r   runTest(GzipBrokenHeaderCorrectException.runTest  sE    JJ
 w001LL0 211s   A
A#r&   N)r'   r(   r)   r*   rq  r3   r&   r   r   ro  ro    s    
1r   ro  c                       \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rSrg)MemberReadTesti  Nc           	         Ub[  U R                   R                  U5       nU R                  [        UR	                  5       5      USUR
                  -  5        S S S 5        SUS'   SUS'   SUS'   SUR
                  ;  a
  S	US
'   S	US'   UR                  5        H3  u  pVU R                  [        X5      USU< SUR
                  < 35        M5     g ! , (       d  f       N= f)Nwrong sha256sum for %sr  r    r   r   r   zold-v7r/   r  gnamezwrong value in z
 field of )rT   ri   rk   r   rj   r   itemsr~  )r#   rp   chksumkwargsr  kvs          r   _test_memberMemberReadTest._test_member  s    %%g.!  1668!4f07<<?A / 'wuu7<<''F7O'F7OLLNDAWW0!78',,GI # /.s   8C
Cc                 d    U R                   R                  S5      nU R                  US[        S9  g )Nrf   c  rm   rz  rT   rh   r~  rn   r  s     r   test_find_regtype MemberReadTest.test_find_regtype
  s+    (($$_5'^Dr   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Nzustar/conttyper  r  r  r  s     r   test_find_conttype!MemberReadTest.test_find_conttype  s,    (($$%56'^Dr   c                 Z    U R                   R                  S5      nU R                  USS9  g )Nr  r   rm   rT   rh   r~  r  s     r   test_find_dirtype MemberReadTest.test_find_dirtype  s)    (($$_5'*r   c                 Z    U R                   R                  S5      nU R                  USS9  g )Nzustar/dirtype-with-size   r  r  r  s     r   test_find_dirtype_with_size*MemberReadTest.test_find_dirtype_with_size  s*    (($$%>?',r   c                 \    U R                   R                  S5      nU R                  USSS9  g )Nr   r   rf   rm   linknamer  r  s     r   test_find_lnktype MemberReadTest.test_find_lnktype  s+    (($$_5'ODr   c                 \    U R                   R                  S5      nU R                  USSS9  g )Nr   r   r   r  r  r  s     r   test_find_symtype MemberReadTest.test_find_symtype  s+    (($$_5'I>r   c                 ^    U R                   R                  S5      nU R                  USSSS9  g )Nustar/blktyper      rm   devmajordevminorr  r  s     r   test_find_blktype MemberReadTest.test_find_blktype"  -    (($$_5'ABr   c                 ^    U R                   R                  S5      nU R                  USSSS9  g )Nustar/chrtyper   r   r  r  r  r  s     r   test_find_chrtype MemberReadTest.test_find_chrtype&  r  r   c                 Z    U R                   R                  S5      nU R                  USS9  g )Nustar/fifotyper   r  r  r  s     r   test_find_fifotype!MemberReadTest.test_find_fifotype*  s*    (($$%56'*r   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Nzustar/sparse P r  rT   rh   r~  sha256_sparser  s     r   test_find_sparseMemberReadTest.test_find_sparse.  s+    (($$^4'mDr   c                 d    U R                   R                  S5      nU R                  US[        S9  g )N
gnu/sparser  r  r  r  s     r   test_find_gnusparse"MemberReadTest.test_find_gnusparse2  s+    (($$\2'mDr   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Ngnu/sparse-0.0r  r  r  r  s     r   test_find_gnusparse_00%MemberReadTest.test_find_gnusparse_006  ,    (($$%56'mDr   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Ngnu/sparse-0.1r  r  r  r  s     r   test_find_gnusparse_01%MemberReadTest.test_find_gnusparse_01:  r  r   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Ngnu/sparse-1.0r  r  r  r  s     r   test_find_gnusparse_10%MemberReadTest.test_find_gnusparse_10>  r  r   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Nu   ustar/umlauts-ÄÖÜäöüßr  r  r  r  s     r   test_find_umlauts MemberReadTest.test_find_umlautsB  s2    (($$ &D E'^Dr   c                 Z    SnU R                  XR                  R                  5       5        g )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  rT   r<  )r#   r   s     r   test_find_ustar_longname'MemberReadTest.test_find_ustar_longnameG  s     <dHH--/0r   c                 d    U R                   R                  S5      nU R                  US[        S9  g )Nzmisc/regtype-old-v7r  r  r  r  s     r   test_find_regtype_oldv7&MemberReadTest.test_find_regtype_oldv7K  s,    (($$%:;'^Dr   c                     U R                   R                  5         [        R                  " U R                  U R
                  SS9U l         U R                   R                  S5      nU R                  US[        S9  g )NrP   rQ   u   pax/umlauts-ÄÖÜäöüßr  r  )	rT   rX   r/   r.   r+   r$   rh   r~  rn   r  s     r   test_find_pax_umlauts$MemberReadTest.test_find_pax_umlautsO  s_    <<499)46(($$ &D E'^Dr   r[   r   )r'   r(   r)   r*   r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r3   r&   r   r   rt  rt    so    I"EE+-E?CC+EEEEEE
1EEr   rt  c                   2    \ rS rSrS rS rS rS rS rSr	g)	LongnameTestiX  c                     U R                   S-   S-   S-   n U R                  R                  U5      nU R                  WR                  [        R                  S5        g ! [         a    U R	                  S5         NIf = f)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)	r   rT   rh   r  r   assertNotEqualr  r/   r  )r#   r  rp   s      r   test_read_longnameLongnameTest.test_read_longnameZ  sp    ;;$|3j@	,hh((2G 	GLL'//*	,  	,II*+	,s   A A<;A<c                    U R                   S-   S-   S-   nU R                   S-   S-   S-   n U R                  R                  U5      nU R                  WR                  US5        g ! [         a    U R	                  S5         N;f = f)Nr   r  r  longlinkzlonglink not foundzlinkname wrong)r   rT   rh   r  r   rk   r  )r#   r  r  rp   s       r   test_read_longlinkLongnameTest.test_read_longlinkd  s    ;;$|3j@;;$|3j@	,hh((2G 	))85EF  	,II*+	,s   A% %BBc                    U R                   S-   S-   S-   nU R                  R                  U5      nUR                  nU R                  R                  R                  U5        [        R                  " U R                  R                  R                  S5      5      nU R                  [        R                  5         [        R                  " SUS9  S S S 5        g ! , (       d  f       g = f)Nr   r  r  i   zfoo.tar)r   rv  )r   rT   rh   r  rv  r   r,   r   rj   rJ  r/   r>  r.   )r#   r  rp   r  rq   s        r   test_truncated_longname$LongnameTest.test_truncated_longnamem  s    ;;$|3j@(($$X.f%zz$((**//89w001LLi6 211s   :C
C'c                    U R                   S-   S-   S-   nU R                  R                  U5      R                  n[	        [
        S5       nUR                  U5        [        R                  R                  UR                  S5      SS5      nU R                  UR                  U R                  5        S S S 5        g ! , (       d  f       g = f)Nr   r  r  r   r   rP   strict)r   rT   rh   r  r.   r+   r   r/   rT  frombufrj   rk   r  longnametype)r#   r  r  rq   rp   s        r   test_header_offsetLongnameTest.test_header_offsetv  s     ;;$|3j@##H-44'4 DIIfoo--diin.98EGW\\4+<+<=	 !  s   A(B<<
C
c           	         Sn[         R                  " 5          [        R                  " [        S5       nU R
                  Ul         [        R                  " U5        UR                  U5        [        R                  " UR                  S5      5         S S S 5        [        R                  " [        5       nU R                  UR                  U5      5        U R                  UR                  UR                  S5      5      5        S S S 5        S S S 5        g ! [        R                  " UR                  S5      5        f = f! , (       d  f       N= f! , (       d  f       NR= f! , (       d  f       g = f)Nzfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/r   r   )r	   r   r/   r.   r   r   r|   r   r   r   rstripr1  rh   removesuffix)r#   longdirrT   s      r   test_longname_directory$LongnameTest.test_longname_directory  s    #!gs+s![[
2HHW%GGG$HHW^^C01 , g&#$$S]]7%;<$$S]]73G3G3L%MN ' "! HHW^^C01 ,+ '& "!sS   E#E'D.%E"E#6AEE#'D>>E
E	E#
E 	E##
E1r&   N)
r'   r(   r)   r*   r  r  r  r  r  r3   r&   r   r   r  r  X  s    ,G7	>Or   r  c                   v    \ rS rSrSr\R                  r\R                  r	S r
S rS rS rS r\S 5       rS	rg
)GNUReadTesti  gnuc                    U R                   R                  U[        SS9  [        R                  R                  [        U5      n[        US5       nUR                  5       nS S S 5        U R                  [        W5      [        SU-  5        U R                  5       (       a@  [        R                  " U5      nU R                  UR                  S-  UR                  5        g g ! , (       d  f       N= f)Nr   ru   r   rv  r   )rT   rz   r{   r|   r}   r~   r.   rj   rk   r   r  _fs_supports_holesr  
assertLess	st_blocksst_size)r#   r   r  rq   r   r   s         r   _test_sparse_fileGNUReadTest._test_sparse_file  s    wv677<<.(D!T99;D "4-(4/	1 ""$$!AOOAKK#-qyy9 % "!s   C""
C0c                 &    U R                  S5        g )Nr  r  r"   s    r   test_sparse_file_old GNUReadTest.test_sparse_file_old  s    |,r   c                 &    U R                  S5        g )Nr  r  r"   s    r   test_sparse_file_00GNUReadTest.test_sparse_file_00      /0r   c                 &    U R                  S5        g )Nr  r  r"   s    r   test_sparse_file_01GNUReadTest.test_sparse_file_01  r  r   c                 &    U R                  S5        g )Nr  r  r"   s    r   test_sparse_file_10GNUReadTest.test_sparse_file_10  r  r   c                     [         R                  R                  S5      (       a  [        R                  R                  [        S5      n [        U S5       nUR                  S5        UR                  S5        UR                  5         S S S 5        [        R                  " U 5      n[        R                  " U 5        UR                  S-  UR                  :  $ g! , (       d  f       NW= f)N)linuxandroidzsparse-testr+  i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   F)r   r  r  r|   r}   r~   r{   r.   r   rS  r\  r  r	   r  r  r  )r   rq   r   s      r   r  GNUReadTest._fs_supports_holes  s     <<""#78877<<7DdD!T		$

;'	 "
 AT"KK#%		12 "!s   3C
C'r&   N)r'   r(   r)   r*   r   r/   GNUTYPE_LONGNAMEr  
GNU_FORMATr   r  r  r  r  r  staticmethodr  r3   r&   r   r   r  r    sJ    F++LF
:-111  r   r  c                   Z    \ rS rSrSr\R                  r\R                  r	S r
S rS rSrg)PaxReadTesti  paxc                 :   [         R                  " [        SS9n UR                  S5      nU R	                  UR
                  S5        U R	                  UR                  S5        U R	                  UR                  R                  S5      S5        UR                  S5      nU R	                  UR
                  S	5        U R	                  UR                  S5        U R	                  UR                  R                  S5      S5        UR                  S
5      nU R	                  UR
                  S5        U R	                  UR                  S5        U R	                  UR                  R                  S5      S5        UR                  5         g ! UR                  5         f = f)NrP   r  pax/regtype1rP  r   zVENDOR.umlautsu   ÄÖÜäöüßzpax/regtype2r   zpax/regtype3r/   )
r/   r.   r+   rh   rk   r  rx  pax_headersgetrX   r#   rT   rp   s      r   test_pax_global_headers#PaxReadTest.test_pax_global_headers  sA   ll7[9	mmN3GW]]E2W]]E2W00445EF;= mmN3GW]]B/W]]E2W00445EF;= mmN3GW]]I6W]]I6W00445EF;= IIKCIIKs   EF Fc                 v   [         R                  " [        SS9n UR                  S5      nU R	                  UR
                  S5        U R	                  UR                  S5        U R	                  UR                  S5        U R	                  UR                  S5        U R	                  [        UR                  5      [        5        U R	                  [        UR                  S   5      S5        U R	                  [        UR                  S   5      S5        UR                  5         g ! UR                  5         f = f)	NrP   r  zpax/regtype4r  {   g  ^Aatimectime)r/   r.   r+   rh   rk   rm   r   r   r  r  r  r  rX   r  s      r   test_pax_number_fields"PaxReadTest.test_pax_number_fields  s    ll7[9
	mmN3GW\\40W[[#.W[[#.W]]L9T'--0%8U7#6#6w#?@,OU7#6#6w#?@,OIIKCIIKs   C:D& &D8c           	         SnSS0nU GHY  nU R                  US9   [        R                  " [        S[        R                  SS9n [        R
                  " 5       nSUl        S	Ul        X%l        UR                  U5        UR                  5         [        [        S
5       nUR                  5       nU R                  SU5        UR                  SU5      nS S S 5        [        [        S5       nUR                  5         UR                  W5        S S S 5        U R!                  [        R"                  S5         [        R                  " [        SS9  S S S 5        S S S 5        GM\     g ! UR                  5         f = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NS= f! , (       d  f       GM  = f)N)
s	    foo=bar
s   0 
s   1 
s   2 
s   3 =
s   4 =a
s   1000000 foo=bar
s
   0 foo=bar
s   -12 foo=bar
s$   000000000000000000000000036 foo=bar
rP  r   )headerr   rP   r   rR   r
  r   r   s   11 foo=bar
r+  z)method tar: ReadError\('invalid header'\)r  )subTestr/   r.   r   
PAX_FORMATrT  r   r   r  r[  rX   rj   r  r;  r\  rS  rD  r>  )r#   pax_header_replacementsr  replacementrT   r^  r  r   s           r   test_pax_header_bad_formats'PaxReadTest.test_pax_header_bad_formats  sH   #
 en2K[1ll7C8J8J,79 )A"AFAE$/MKKNIIK'4(A668DMM/48<<ED )
 '4(AJJLGGDM ) ++G,=,=?klLL;? m+ 21 3 IIK((
 )( ml+ 21sk   *F0:E( F0!5E=F0."F(F08FF0(E::F0=
FF0
FF0
F-)F00
G 	r&   N)r'   r(   r)   r*   r   r/   XHDTYPEr  r  r   r  r  r  r3   r&   r   r   r	  r	    s+    F??LF.(@r   r	  c                        \ rS rSrS rS rSrg)WriteTestBasei#  c                    [         R                  " 5       n[        R                  " XR                  S9 nUR                  [        R                  " S5      5        S S S 5        U R                  UR                  S5        UR                  5       nA[        R                  " 5         U R                  UR                  5        U R                  X1R                  5       5        g ! , (       d  f       N= f)Nru  rP  z#external fileobjs must never closed)r,   r   r/   r.   r$   r[  rT  r,  rm  r   r   
gc_collectrk   )r#   rq   rT   r   s       r   test_fileobj_no_close#WriteTestBase.test_fileobj_no_close'  s    zz|\\$YY73KK./ 8&KL}}%}}/ 87s   &C
C-c                 4   [         R                  " [        U R                  5       n[         R                  " S5      n[         R
                  [         R                  -
  Ul        UR                  U[        R                  " SUR                  -  5      5        S S S 5        U R                  [        S5       nU R                  [        UR                  5       5      [         R
                  S-  5        S S S 5        g ! , (       d  f       Nh= f! , (       d  f       g = f)NrP  rO  r   r   )r/   r.   r   r$   rT  
RECORDSIZE	BLOCKSIZErm   r[  r,   r   rk   rl   rj   )r#   rT   r^  rq   s       r   test_eof_markerWriteTestBase.test_eof_marker3  s    
 \\'499-&A'''*;*;;AFKK2::dQVVm45 .
 YYw%S-w/A/AA/EF &% .-
 &%s   A0C84;D	8
D	
Dr&   N)r'   r(   r)   r*   r&  r+  r3   r&   r   r   r#  r#  #  s    
0Gr   r#  c                       \ rS rSrSrS rS rS rS rS r	S r
\R                  " \" \S	5      S
5      S 5       r\R"                  S 5       rS rS rSS jr\R"                  S 5       rS rS rS rS rS rSrg)	WriteTestiA  rZ  c                    Sn[         R                  " [        U R                  5      n [         R                  " U5      nUR                  U5        UR                  5         [         R                  " [        5      n U R                  UR                  5       S   US5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)Nd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r/   r.   r   r$   rT  r[  rX   rk   r<  )r#   r   rT   r^  s       r   test_100_char_nameWriteTest.test_100_char_nameE  s    
 !ll7DII.	%AKKNIIKll7#	S\\^A.79 IIK IIK IIKs   'B0 ;$C 0CCc                    [         R                  " [        U R                  5      n [        R
                  R                  [        S5      n[        US5       nUR                  S5        S S S 5        UR                  U5        UR                  5         U R                  [        R
                  R                  [        5      SS5        g ! , (       d  f       Nd= f! UR                  5         f = f)Nrn  r+     aaar   ztarfile is empty)r/   r.   r   r$   r|   r}   r~   r{   rS  r   rX   assertGreatergetsize)r#   rT   r}   rq   s       r   test_tar_sizeWriteTest.test_tar_sizeY  s    ll7DII.	77<<0DdD!T

6" "GGDMIIK277??73Q"	$ "! IIKs#   0C C)C 
CC C*c                 R   [         R                  " [        U R                  5      n [        R
                  R                  [        S5      n[        US5          S S S 5        UR                  U5      nU R                  UR                  S5        [        US5       nUR                  S5        S S S 5        UR                  U5      nU R                  UR                  S5        UR                  5         g ! , (       d  f       N= f! , (       d  f       N]= f! UR                  5         f = f)Nrn  r+  r   r4  r  )r/   r.   r   r$   r|   r}   r~   r{   
gettarinfork   rm   rS  rX   )r#   rT   r}   rp   rq   s        r   test_file_sizeWriteTest.test_file_sizeg  s    ll7DII.	77<<0DdD! "nnT*GW\\1-dD!T

6" "nnT*GW\\1-IIK "!
 "!
 IIKs<   0D C2AD D,5D 2
D <D 
DD D&c                    [         R                  R                  [        S5      n[         R                  " U5         [
        R                  " [        U R                  5      n UR                  U5      nU R                  UR                  S5        UR                  5          [        R                  " U5        g ! UR                  5         f = f! [        R                  " U5        f = f)N	directoryr   )r|   r}   r~   r{   r   r/   r.   r   r$   r:  rk   rm   rX   r	   r   r#   r}   rT   rp   s       r   test_directory_sizeWriteTest.test_directory_sizew  s    ww||G[1
	",,w		2C...  q1		OOD! 		OOD!s#   %C "-B7 C 7C		C C$c                 l   [         R                  R                  [        S5      n[         R                  " U5        [        [         R                  R                  US5      S5      R                  5         [        [         R                  R                  US5      S5      R                  5          [        R
                  " [        U R                  5      n [        R                  R                  S5       nSS/Ul        UR                  U5        S S S 5        / nUR                  5        H>  nUR!                  [         R                  R#                  UR$                  5      S   5        M@     U R'                  U/ SQ5        UR                  5          [(        R*                  " [         R                  R                  US5      5        [(        R*                  " [         R                  R                  US5      5        [(        R,                  " U5        g ! , (       d  f       GN= f! UR                  5         f = f! [(        R*                  " [         R                  R                  US5      5        [(        R*                  " [         R                  R                  US5      5        [(        R,                  " U5        f = f)Nr>  1r   2z
os.listdirr  )r>  rC  rD  )r|   r}   r~   r{   r   r.   rX   r/   r   r$   r   r
  r  return_valuer   r  appendsplitr   rk   r	   r  r   )r#   r}   rT   mock_listdirpathsms         r   test_ordered_recursion WriteTest.test_ordered_recursion  s   ww||G[1
RWW\\$$c*002RWW\\$$c*002	",,w		2C	]]((6,14c
L-GGDM 7 )ALLqvv!6r!:; *  (?@		RWW\\$45RWW\\$45OOD! 76 		RWW\\$45RWW\\$45OOD!s>   ,%H3 H 1HA0H <H3 
HH H00H3 3B J3c                 h   [         R                  " [        U R                  5       n[        R
                  R                  [        S5      n[        US5       nUR                  S5        S S S 5        UR                  [        R                  " U5      5      nUR                  U5      nU R                  UR                  [        5        U R                  UR                  UR                  5        U R                  UR                   S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrn  r+  r4  r  )r/   r.   r   r$   r|   r}   r~   r{   rS  r:  r	   r.  rw  r   rx  rk   rm   )r#   rT   r}   rq   rp   tarinfo2s         r   test_gettarinfo_pathlike_name'WriteTest.test_gettarinfo_pathlike_name  s    \\'499-77<<0DdD!T

6" "nnY%7%7%=>G~~d+H!!',,4W\\8==9W\\1- .-!! .-s$   1D#D)B D#
D 	D##
D1r  r  c                 V   [         R                  R                  [        S5      n[         R                  R                  [        S5      n[	        US5       nUR                  S5        S S S 5         [         R                  " X!5         [        R                  " [        U R                  5      n UR                  U5        UR                  U5      nU R                  UR                  S5        UR                  5          [         R"                  " U5        [         R"                  " U5        g ! , (       d  f       N= f! [         a  nU R                  SU-  5         S nANS nAff = f! UR                  5         f = f! [         R"                  " U5        [         R"                  " U5        f = f)Nr  link_targetr+  r4  os.link(): %sr   )r|   r}   r~   r{   r.   rS  r  PermissionErrorskipTestr/   r   r$   r:  rk   rm   rX   r	   r  )r#   r  targetrq   rQ  rT   rp   s          r   test_link_sizeWriteTest.test_link_size  s"    ww||GV,g}5&$4JJv  	/GGF!	#,,w		2Cv&...  q1		V$T"#    	/MM/A-..	/ 		V$T"sH   D)0D: %E: ->E% +E: )
D7:
E"EE"%E77E: :.F(c                    [         R                  R                  [        S5      n[         R                  " SU5         [
        R                  " [        U R                  5      n UR                  U5      nU R                  UR                  S5        UR                  5          [        R                  " U5        g ! UR                  5         f = f! [        R                  " U5        f = f)NsymlinkrR  r   )r|   r}   r~   r{   rZ  r/   r.   r   r$   r:  rk   rm   rX   r	   r  r?  s       r   test_symlink_sizeWriteTest.test_symlink_size  s    ww||GY/


=$'	#,,w		2C...  q1		T" 		T"s#   %C #-B8 C 8C

C C%c                 J   [         R                  R                  [        5      n[        R
                  " [        U R                  5      n U R                  UR                  US5        UR                  U5        U R                  UR                  5       / S5        [        R                  " [        5         UR                  U5        S S S 5        U R                  UR                  5       / S5        UR                  5         g ! , (       d  f       N@= f! UR                  5         f = f)Nzarchive name must be absolutezadded the archive to itself)r|   r}   ry  r   r/   r.   r$   rk   r   r   r<  r	   
change_cwdr{   rX   )r#   dstnamerT   s      r   test_add_selfWriteTest.test_add_self  s    ''//'*ll7DII.	SXXw35GGGS\\^R13 %%g.  /S\\^R13 IIK /.
 IIKs%   
A)D 3C?)D ?
D	D D"c                    [         R                  R                  [        S5      n[         R                  " U5         S H8  n[         R                  R                  X5      n[
        R                  " U5        M:     S n[        R                  " [        U R                  SS9n UR                  USUS9  UR                  5         U R                  [        5         UR                  USSS U5        S S S 5        [        R                  " [        S	5      n U H;  nU R                  UR                   S
5        U R                  UR"                  S5        M=     U R                  [%        UR'                  5       5      S5        UR                  5          [
        R(                  " U5        g ! UR                  5         f = f! , (       d  f       N= f! UR                  5         f = f! [
        R(                  " U5        f = f)Nrv   )rP  r   bazc                 ~    [         R                  R                  U R                  5      S:X  a  g SU l        SU l        U $ )Nr   r  rP  )r|   r}   basenamer   r   r  r   s    r   rv   %WriteTest.test_filter.<locals>.filter  s3    77##GLL1U:! %r   rP   r  	empty_dir)arcnamerv   Trw   r  rP  r  )r|   r}   r~   r{   r   r	   create_empty_filer/   r.   r   r$   r   rX   rJ  	TypeErrorrk   r   r  rl   r  r  )r#   tempdirr   rv   rT   rp   s         r   test_filterWriteTest.test_filter  sf   '',,w1
	&-ww||G2++D1 . ,,w		KHCVD		 ""9-dD&A . ,,w,C"G$$W[[#6$$W]]E:  #   S^^%5!6:		W% 		 .- 		W%sU   A%G "F$ 3%G F9.#G A*G
 <G $F66G 9
GG 
GG G7Nc                    [         R                  R                  [        S5      nU(       d  [        R
                  " U5        O[         R                  " U5        [        R                  " [        U R                  5      n UR                  XAS9  UR                  5         [        R                  " [        S5      n UR                  5       nUR                  5         U(       d  [        R                  " U5        O[        R                  " U5        U R!                  UR"                  U=(       d     UR%                  [         R&                  S5      5        g ! UR                  5         f = f! UR                  5         f = f)NrP  rh  rw   r   )r|   r}   r~   r{   r	   ri  r   r/   r.   r   r$   r   rX   r]  r  r   rk   r   r;  sep)r#   r}   cmp_pathdirrP  rT   r^  s          r   _test_pathnameWriteTest._test_pathname  s     ggll7E*'',HHSMll7DII.	GGCG&IIKll7C(	
AIIKS!OOC !FT\\"&&#-FG IIK IIKs   ?E :E' E$'E9c                    [         R                  R                  [        S5      n[         R                  R                  [        S5      n[         R                  " U5         [         R                  R                  US5      n[         R                  R                  US5      n[        US5       nUR                  S5        S S S 5        [         R                  " X45        [        R
                  " US5       nUR                  USS9  UR                  USS9  S S S 5        [        R
                  " USS	9 n UR                  US
S9  S S S 5        [        R                  " U5        [        R                  " U5        g ! , (       d  f       N= f! , (       d  f       N{= f! [         a    U R                  S5         Ntf = f! , (       d  f       N~= f! [        R                  " U5        [        R                  " U5        f = f)Ntestsymlinksztestsymlinks.tarsourcerZ  r   z
something
ro  r   r  r  r  z&extractall failed with symlinked files)r|   r}   r~   r{   r   r.   rS  rZ  r/   r   r  OSErrorr   r	   r  r  )r#   rk  temparchivesource_filetarget_filer  rT   s          r   test_extractall_symlinks"WriteTest.test_extractall_symlinks$  sn    '',,w7ggll7,>?
	&'',,wx8K'',,wy9Kk#&!& 'JJ{0k3/3X6Y7 0 ka8CHNN*9 # ; 9 [)W%! '& 0/  HIIFGH 98 [)W%ss    AG ,E8>5G 3!F	G 1F;3FG 8
FG 	
FG F85F;7F88F;;
G	G .G:c                    U R                  S5        U R                  [        R                  R                  SSS5      5        U R                  [        R                  R                  SSS5      5        U R                  [        R                  R                  SS5      5        U R                  [        R                  R                  SSS5      5        U R                  [        R                  R                  SSSS5      5        U R                  [        R                  R                  SSSS5      5        U R                  [        R                  R                  SSSS5      5        U R                  [        R                  R                  SS5      5        U R                  [        R                  R                  SSS5      5        U R                  [        R                  R                  SSSS5      5        U R                  [        R                  R                  SSSS5      5        U R                  S[        R                  -   [        R                  -   S-   5        U R                  S[        R                  -   [        R                  -   SSS9  g )NrP  .r   ..T)rr  )rs  r|   r}   r~   rp  r"   s    r   test_pathnamesWriteTest.test_pathnames?  s   E"BGGLLU;<BGGLLe<=BGGLLe45BGGLLeS9:BGGLLeS%@ABGGLLeT5ABBGGLLeT5ABBGGLLu56BGGLLud;<BGGLLuc5ABBGGLLudEBCEBFFNRVV3e;<EBFFNRVV3UEr   c                     [         R                  S:X  a  U R                  SS5        g U R                  SS5        U R                  SS5        g )Nr  zC:\foorP  z/fooz///foo)r   r  rs  r"   s    r   test_abs_pathnamesWriteTest.test_abs_pathnamesP  s>    <<7"	51.%0r   c                 H   [         R                  " [        5         [        R                  " [
        U R                  5      n UR                  S5        UR                  5         [        R                  " [
        S5      n U HJ  nUR                  S:w  d  M  U R                  UR                  R                  S5      UR                  5        ML     UR                  5          S S S 5        g ! UR                  5         f = f! UR                  5         f = f! , (       d  f       g = f)Nr  rw   ./)r	   r^  r{   r/   r.   r   r$   r   rX   r   r3  r  r#   rT   r^  s      r   test_cwdWriteTest.test_cwdW  s    !!'*,,w		2C		,,w,CAvv}(9(9$(?H  		 +*
 		 		 +*sA   &DC)+D?C>9C>D)C;;D>DD
D!c                   ^ [         [        [        4 H  m " U4S jS[        R                  5      nU" 5       n[
        R                  " U 5         U R                  T5         [        R                  " [        U R                  U[        R                  SS0S9  S S S 5        S S S 5        U R                  UR                  5        M     g ! , (       d  f       N6= f! , (       d  f       N?= f)Nc                   &   > \ rS rSrSrU 4S jrSrg)8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileij  Tc                 :   > U R                   (       a	  SU l         Teg NFfirst)r#   r   exctypes     r   rS  >WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writel  s    zz%*
% "r   r  N)r'   r(   r)   r*   r  rS  r3   )r  s   r   BadFiler  j  s    & &r   r  nonr  )rv  r   r  )ry  EOFErrorRuntimeErrorr,   r   r   check_no_resource_warningrJ  r/   r.   r   r$   r  r,  rm  )r#   r  r  r  s      @r   test_open_nonwritable_fileobj'WriteTest.test_open_nonwritable_fileobjh  s    ,6G&"** & 	A99$?!!'*Wdii$+$6$6*/)9; + @ QXX&! 7 +* @?s$   C!7CC
CC
C'	c                 ,   [         R                  " [        U R                  5       nUR	                  [
        5      nU R                  [        5         UR                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )	r/   r.   r   r$   r:  r+   rJ  r  r[  r  s      r   test_missing_fileobjWriteTest.test_missing_fileobj{  s[    \\'499-nnW-G"":.G$ / .-.. .-s#   +BA4#B4
B	>B
Br&   r  )r'   r(   r)   r*   r    r1  r7  r;  r@  rK  rO  r   r   r   r|   rW  r	   r  r[  r`  rl  rs  r}  r  r  r  r  r  r3   r&   r   r   r.  r.  A  s    F($ "",	. V,:<#<#, ""# ##$"&PH: ""& #&4F"1"'&%r   r.  c                       \ rS rSrSrg)GzipWriteTesti  r&   Nr   r&   r   r   r  r    r   r   r  c                       \ rS rSrSrg)Bz2WriteTesti  r&   Nr   r&   r   r   r  r    r   r   r  c                       \ rS rSrSrg)LzmaWriteTesti  r&   Nr   r&   r   r   r  r    r   r   r  c                       \ rS rSrSrSrS r\R                  " \	R                  S:g  =(       a	    \" \S5      S5      \R                  " \R                  =(       d    \R                   S5      S	 5       5       rS
 rSrg)StreamWriteTesti  w|Nc                 ^   [         R                  " [        U R                  5      nUR	                  5         U R
                  (       ag  U R                  5       n[        [        S5       nUR                  5       nS S S 5        UR                  W5      nU R                  UR                  S5        O.U R                  [        5       nUR                  5       nS S S 5        U R                  WR                  S5      [         R                  S5        g ! , (       d  f       N= f! , (       d  f       NP= f)Nr   zfound trailing datarN  zincorrect zero padding)r/   r.   r   r$   rX   decompressorrj   
decompressr,  unused_datark   countr)  )r#   rT   decrq   r   s        r   test_stream_padding#StreamWriteTest.test_stream_padding  s    ll7DII.		##%Cgt$yy{ %>>$'DS__.CD7#tyy{ $E*G,>,>0	2 %$
 $#s   'DD
D
D,r  umaskzMissing umask implementationz$Emscripten's/WASI's umask is a stub.c                    [         R                  R                  [        5      (       a  [        R
                  " [        5        [         R                  " S5      n [        R                  " [        U R                  5      nUR                  5         [         R                  " [        5      R                  S-  nU R                  USS5        [         R                  " U5        g ! [         R                  " U5        f = f)N   r  i  zwrong file permissions)r|   r}   existsr   r	   r  r  r/   r.   r$   rX   r  r  rk   )r#   original_umaskrT   r$   s       r   test_file_modeStreamWriteTest.test_file_mode  s     77>>'""W%%	%,,w		2CIIK777#++e3DT5*BCHH^$BHH^$s   A/C   C8c                    [         R                  R                  [        5      n[        R
                  " [        5      n[        R                  [        R                  R                  4 Hm  nU R                  5          U" X R                  5       nU R                  UR                  U5        S S S 5        [        R                  " [        5        S S S 5        Mo     g ! , (       d  f       N5= f! , (       d  f       M  = fr   )r|   r}   ry  r   r	   r.  r/   r.   r0   r  r$   rk   r   r  )r#   expected_nametarpathfuncrT   s        r   r  "StreamWriteTest.test_pathlike_name  s    0$$W-\\7??#7#78D'99-$$SXX}= .  )   9--  s$   ;C+C+"C+
C($C++
C:	r&   )r'   r(   r)   r*   r    r  r  r   r   r   r  r   r|   r  r   is_emscriptenis_wasir  r  r3   r&   r   r   r  r    su    FL2  0IWR5I79__0.%	9%*r   r  c                       \ rS rSrS rSrg)GzipStreamWriteTesti  c                     [         R                  " [        U R                  5      R	                  5         [
        R                  " [        5      R                  SS9ng )Nzlatin-1r  )r/   r.   r   r$   rX   r  r  	read_text)r#   payloads     r    test_source_directory_not_leaked4GzipStreamWriteTest.test_source_directory_not_leaked  s;    
 	Wdii(..0,,w'1191Er   r&   N)r'   r(   r)   r*   r  r3   r&   r   r   r  r    s    7r   r  c                   >    \ rS rSr\(       a  \R
                  OSrSrg)Bz2StreamWriteTesti  Nr&   )r'   r(   r)   r*   r?   BZ2Decompressorr  r3   r&   r   r   r  r    s    *-3&&4Lr   r  c                   >    \ rS rSr\(       a  \R
                  OSrSrg)LzmaStreamWriteTesti  Nr&   )r'   r(   r)   r*   rH   LZMADecompressorr  r3   r&   r   r   r  r    s    ,04((dLr   r  c                   *    \ rS rSrSrS rS rS rSrg)_CompressedWriteTesti  sF   And we move to Bristol where they have a special, Very Silly candidatec                 8   [         R                  " 5       n[        R                  " [        U R
                  UUS9 nUR                  [        R                  " S5      [         R                  " U R                  5      5        S S S 5        U$ ! , (       d  f       U$ = f)Nrh  rP  )	r,   r   r/   r.   r   r$   r[  rT  rw  )r#   ri  rq   tarfls       r   _compressed_tar$_CompressedWriteTest._compressed_tar  sk    zz|\\'499d(57:?MM'//%0"**T[[2IJ7 7 7 s   AB


Bc                 r    U R                  U5      nU R                  UR                  5       SS SU-  5        g )Nr   r   s   BZh%d1AY&SYr  rk   r   r#   ri  rq   s      r   _test_bz2_header%_CompressedWriteTest._test_bz2_header  s7    ##M22.'-7	9r   c                 l    U R                  U5      nU R                  UR                  5       S S S5        g )Nr  s   r  r  s      r   _test_gz_header$_CompressedWriteTest._test_gz_header  s/    ##M2!,o>r   r&   N)	r'   r(   r)   r*   rw  r  r  r  r3   r&   r   r   r  r    s    &F9
?r   r  c                       \ rS rSrSrS rSrg)Bz2CompressWriteTesti  rZ  c                 j    U R                  S5        U R                  S5        U R                  S5        g Nr      	   r  r"   s    r   test_compression_levels,Bz2CompressWriteTest.test_compression_levels  ,    a a a r   r&   Nr'   r(   r)   r*   r    r  r3   r&   r   r   r  r    s    F!r   r  c                       \ rS rSrSrS rSrg)Bz2CompressStreamWriteTesti  r  c                 j    U R                  S5        U R                  S5        U R                  S5        g r  r  r"   s    r   r  2Bz2CompressStreamWriteTest.test_compression_levels  r  r   r&   Nr  r&   r   r   r  r    s    F!r   r  c                       \ rS rSrSrS rSrg)GzCompressWriteTesti  rZ  c                 j    U R                  S5        U R                  S5        U R                  S5        g r  r  r"   s    r   r  +GzCompressWriteTest.test_compression_levels  ,    QQQr   r&   Nr  r&   r   r   r  r    s    F r   r  c                       \ rS rSrSrS rSrg)GzCompressStreamWriteTesti   r  c                 j    U R                  S5        U R                  S5        U R                  S5        g r  r  r"   s    r   r  1GzCompressStreamWriteTest.test_compression_levels  r  r   r&   Nr  r&   r   r   r  r     s    F r   r  c                   H    \ rS rSrS r\R                  " 5       S 5       rSrg)CompressLevelRaisesi  c                     Sn[         R                  " 5       nU R                  [        5         [        R
                  " [        SX!S9  S S S 5        g ! , (       d  f       g = f)Nr  rZ  rh  )r,   r   rJ  rj  r/   r.   r   r  s      r   test_compresslevel_wrong_modes2CompressLevelRaises.test_compresslevel_wrong_modes	  s<    zz|y)LL$J *))s   A
Ac                    [         R                  " 5       nU R                  [        5         [        R
                  " [        SUSS9  S S S 5        U R                  [        5         [        R
                  " [        SUSS9  S S S 5        U R                  [        5         [        R
                  " [        SUSS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       NY= f! , (       d  f       g = f)Nzw:bz2r   rh  r   zw|bz2)r,   r   rJ  r  r/   r.   r   r/  s     r   test_wrong_compresslevels-CompressLevelRaises.test_wrong_compresslevels  s     zz|z*LL'4qA +z*LL'4rB +z*LL'4rB +*	 +*****s#   C$CC$
C
C!$
C2r&   N)	r'   r(   r)   r*   r  r   requires_bz2r  r3   r&   r   r   r  r    s'    K C Cr   r  c                   d    \ rS rSrS rSS jrSS jrS rS rS r	S	 r
S
 rS rS rS rS rSrg)GNUWriteTesti  c                 .    [        U5      S-  S-   nUS-  $ )Nr   r   )rl   )r#   r   blockss      r   _lengthGNUWriteTest._length  s    Q3"|r   Nc                     Sn[        U5      [        R                  :  a  US-  nX0R                  U5      -  nUb5  [        U5      [        R                  :  a  US-  nX0R                  U5      -  nU$ )Nr   )rl   r/   LENGTH_NAMEr  LENGTH_LINK)r#   r   r  r  s       r   
_calc_sizeGNUWriteTest._calc_size"  si    t9w***SLE\\$''ED	G,?,? ?SLE\\$''Er   c                     [         R                  " U5      nU(       a  X#l        [         R                  Ul        [         R
                  " [        S5      n [         R                  Ul        UR                  U5        U R                  X5      nUR                  nU R                  XVS5        UR                  5         [         R
                  " [        5      n UR                  5       nU R                  US5        U R                  UR                   UR                   S5        U R                  UR                  UR                  S5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)Nr   z%GNU longname/longlink creation failedzunable to read longname member)r/   rT  r  LNKTYPEr  r.   r   r  r   r[  r  r  rk   rX   r]  r1  r   )r#   r   r  rp   rT   r8  r9  members           r   _testGNUWriteTest._test0  s   //$'#"??GLll7C(	 ++CJKK ,BBR%LMIIKll7#		XXZF  46W\\6;;46W--v46 IIK IIK IIKs   AE A0E+ E(+E=c                 &    U R                  S5        g )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_1023GNUWriteTest.test_longname_1023M  s    

12r   c                 &    U R                  S5        g )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_1024GNUWriteTest.test_longname_1024P  s    

23r   c                 &    U R                  S5        g )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_1025GNUWriteTest.test_longname_1025S  s    

34r   c                 (    U R                  SS5        g )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_1023GNUWriteTest.test_longlink_1023V  s    

69:r   c                 (    U R                  SS5        g )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_1024GNUWriteTest.test_longlink_1024Y  s    

6:;r   c                 (    U R                  SS5        g )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_1025GNUWriteTest.test_longlink_1025\  s    

6;<r   c                 (    U R                  SS5        g )Nr  r  r  r"   s    r   test_longnamelink_1023#GNUWriteTest.test_longnamelink_1023_  s    

11	3r   c                 (    U R                  SS5        g )Nr  r  r  r"   s    r   test_longnamelink_1024#GNUWriteTest.test_longnamelink_1024c  s    

22	4r   c                 (    U R                  SS5        g )Nr  r!  r  r"   s    r   test_longnamelink_1025#GNUWriteTest.test_longnamelink_1025g  s    

33	5r   r&   r   )r'   r(   r)   r*   r  r  r	  r  r  r  r  r  r"  r%  r(  r+  r3   r&   r   r   r  r    s>    :345;<=345r   r  c                       \ rS rSrSrS rSrg)DeviceHeaderTestil  rZ  c                 >   [         R                  R                  [        S5      n[         R                  " U5         [
        R                  " [        U R                  5      n [
        R                  " SS9n[
        R                  " SS9n[
        R                  Ul        [
        R                  Ul        UR                  U5        UR                  U5        UR                  5         [
        R                  " [        S5      n UR                  S5      nUR                  S5      nUR                  5         U R!                  UR"                  S5        U R!                  UR$                  S5        U R!                  UR"                  S5        U R!                  UR$                  S5        [        [        S5       nUR'                  5       nS S S 5        WUR(                  UR*                   n	XR(                  UR*                   n
[-        SS	5      nU R!                  X   S
5        U R!                  X   S5        [.        R0                  " U5        g ! UR                  5         f = f! UR                  5         f = f! , (       d  f       N= f! [.        R0                  " U5        f = f)Ndevice_header_testmy_block_devicer   my_regular_filerw   r   r   iI  iY  s   0000000 0000000 s                   )r|   r}   r~   r{   r   r/   r.   r   r$   rT  BLKTYPEr  REGTYPEr[  rX   rh   rk   r  r  rj   r  offset_dataslicer	   r  )r#   rk  rT   	input_blk	input_reg
output_blk
output_reginfiler&  buf_blkbuf_regdevice_headerss               r   *test_headers_written_only_for_device_files;DeviceHeaderTest.test_headers_written_only_for_device_filesp  s   '',,w(<=
#	&,,w		2C#OO1BC	#OO1BC	!(	!(	I&I&		 ,,w,C ]]+<=
 ]]+<=
		Z00!4Z00!4Z00!4Z00!4 gt$kkm %*++J,B,BCG++J,B,BCG #31NW46FGW4jAW%3 		 		 %$ W%sV   %J "A4I	 +J "I $BJ 4I3A-J 	IJ I00J 3
J=J Jr&   N)r'   r(   r)   r*   r    r@  r3   r&   r   r   r.  r.  l  s    F'&r   r.  c                       \ rS rSrSr\R                  R                  \S5      r	S r
\S 5       r\S 5       rS rS rS	 rS
 rS rS rSrg)
CreateTesti  zx:
spameggs42c                 8    [         R                  " [        5        g r   )r	   r  r   r"   s    r   rU   CreateTest.setUp  s    !r   c                     [        U R                  S5       nUR                  S5        S S S 5        g ! , (       d  f       g = f)Nr+  r4  )r.   	file_pathrS  )clsrq   s     r   
setUpClassCreateTest.setUpClass  s*    #--&$JJv '&&	   2
A c                 D    [         R                  " U R                  5        g r   )r	   r  rH  rI  s    r   tearDownClassCreateTest.tearDownClass  s    'r   c                    [         R                  " [        U R                  5       nUR	                  U R
                  5        S S S 5        U R                  [        5       nUR                  5       nS S S 5        U R                  [        W5      S5        U R                  SUS   5        g ! , (       d  f       Nm= f! , (       d  f       NP= fNr   rD  r   )r/   r.   r   r$   r   rH  r1   r<  rk   rl   r  r#   tobjnamess      r   test_createCreateTest.test_create  s    \\'499-HHT^^$ . \\'"dMMOE #UQ'lE!H- .- #"s   B)B:)
B7:
Cc                 >   [         R                  " [        U R                  5       nUR	                  U R
                  5        S S S 5        U R                  [        5         [         R                  " [        U R                  5      nS S S 5        U R                  [        5       nUR                  5       nS S S 5        U R                  [        W5      S5        U R                  SUS   5        g ! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       Na= frR  )r/   r.   r   r$   r   rH  rJ  FileExistsErrorr1   r<  rk   rl   r  rS  s      r   test_create_existingCreateTest.test_create_existing  s    \\'499-HHT^^$ . /<<3D 0 \\'"dMMOE #UQ'lE!H- .- 0/ #"s#   C,&C="D,
C:=
D
Dc                 x   U R                  [        S5       nUR                  U R                  5        S S S 5        U R                  [        5       nUR	                  5       nS S S 5        U R                  [        W5      S5        U R                  SUS   5        g ! , (       d  f       Nm= f! , (       d  f       NP= fNxr   rD  r   )r1   r   r   rH  r<  rk   rl   r  rS  s      r   test_create_taropenCreateTest.test_create_taropen  s    \\'3'4HHT^^$ ( \\'"dMMOE #UQ'lE!H- (' #"s   BB+
B(+
B9c                 8   U R                  [        S5       nUR                  U R                  5        S S S 5        U R	                  [
        5         U R                  [        S5          S S S 5        S S S 5        U R                  [        5       nUR                  5       nS S S 5        U R                  [        W5      S5        U R                  SUS   5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nr= fr]  )
r1   r   r   rH  rJ  rY  r<  rk   rl   r  rS  s      r   test_create_existing_taropen'CreateTest.test_create_existing_taropen  s    \\'3'4HHT^^$ ( /gs+ , 0 \\'"dMMOE #UQ'lE!H- (' ,+ 0/ #"s;   CC:'C))C:D
C&)
C7	3C::
D
Dc                     [         R                  " [        R                  " [        5      U R
                  5       nU R                  UR                  [        5        U R                  UR                  [        R                  R                  [        5      5        UR                  [        R                  " U R                  5      5        UR                  5       nS S S 5        U R                  [!        W5      S5        U R#                  SUS   5        U R%                  [        5       nUR                  5       nS S S 5        U R                  [!        U5      S5        U R#                  SUS   5        g ! , (       d  f       N= f! , (       d  f       NP= frR  )r/   r.   r	   r.  r   r$   rw  r   rx  rk   r|   r}   ry  r   rH  r<  rl   r  r1   rS  s      r   test_create_pathlike_name$CreateTest.test_create_pathlike_name  s   \\),,W5tyyAT!!$))S1TYY(@AHHY''78MMOE	 B
 	UQ'lE!H-\\'"dMMOE #UQ'lE!H- BA #"s   BE.$E?.
E<?
Fc                    U R                  [        R                  " [        5      S5       nU R	                  UR
                  [        5        U R                  UR
                  [        R                  R                  [        5      5        UR                  [        R                  " U R                  5      5        UR                  5       nS S S 5        U R                  [        W5      S5        U R                  SUS   5        U R                  [        5       nUR                  5       nS S S 5        U R                  [        U5      S5        U R                  SUS   5        g ! , (       d  f       N= f! , (       d  f       NP= fr]  )r1   r	   r.  r   rw  r   rx  rk   r|   r}   ry  r   rH  r<  rl   r  rS  s      r   !test_create_taropen_pathlike_name,CreateTest.test_create_taropen_pathlike_name  s    \\),,W5s;t!!$))S1TYY(@AHHY''78MMOE	 <
 	UQ'lE!H-\\'"dMMOE #UQ'lE!H- <; #"s   BEE0
E-0
E>r&   N)r'   r(   r)   r*   r    r|   r}   r~   r{   rH  rU   classmethodrJ  rO  rV  rZ  r_  rb  re  rh  r3   r&   r   r   rC  rC    sf    FWl3I"   ( (.
.....r   rC  c                       \ rS rSrS rSrg)GzipCreateTesti  c                     [         R                  " [        U R                  SS9 nUR	                  U R
                  5        S S S 5        [         R                  " [        SSS9 n S S S 5        g ! , (       d  f       N3= f! , (       d  f       g = f)Nr   rh  zr:gzr/   r.   r   r$   r   rH  r#   rT  s     r   test_create_with_compresslevel-GzipCreateTest.test_create_with_compresslevel  sZ    \\'499A>$HHT^^$ ?\\'6;t <; ?>;;   A.#A?.
A<?
Br&   Nr'   r(   r)   r*   rp  r3   r&   r   r   rl  rl        r   rl  c                       \ rS rSrS rSrg)Bz2CreateTesti  c                     [         R                  " [        U R                  SS9 nUR	                  U R
                  5        S S S 5        [         R                  " [        SSS9 n S S S 5        g ! , (       d  f       N3= f! , (       d  f       g = f)Nr   rh  r:bz2rn  ro  s     r   rp  ,Bz2CreateTest.test_create_with_compresslevel  sZ    \\'499A>$HHT^^$ ?\\'7!< =< ?><<rr  r&   Nrs  r&   r   r   rv  rv    rt  r   rv  c                       \ rS rSrS rSrg)LzmaCreateTesti  c                     [         R                  " [        U R                  SS9 nUR	                  U R
                  5        S S S 5        g ! , (       d  f       g = f)Nr   )presetrn  ro  s     r   test_create_with_preset&LzmaCreateTest.test_create_with_preset
  s4    \\'499Q74HHT^^$ 877s   A


Ar&   N)r'   r(   r)   r*   r~  r3   r&   r   r   r{  r{    s    %r   r{  c                        \ rS rSrSrSrSrSrg)CreateWithXModeTesti  r^  Nr&   )r'   r(   r)   r*   r    r_  rb  r3   r&   r   r   r  r    s    F#' r   r  r  r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	HardlinkTesti  c                 b   [         R                  R                  [        S5      U l        [         R                  R                  [        S5      U l        [        U R                  S5       nUR                  S5        S S S 5         [         R                  " U R                  U R
                  5        [        R                  " [        S5      U l        U R                  R                  U R                  5        g ! , (       d  f       N= f! [         a  nU R                  SU-  5         S nANzS nAff = f)NrP  r   r+     foorS  r   )r|   r}   r~   r{   rP  r   r.   rS  r  rT  rU  r/   r   rT   r   )r#   rq   rQ  s      r   rU   HardlinkTest.setUp  s    77<</77<</$((D!TJJv "	/GGDHHdhh' <<-TXX "!
  	/MM/A-..	/s$   )C5+D 5
D
D.D))D.c                     U R                   R                  5         [        R                  " U R                  5        [        R                  " U R
                  5        g r   )rT   rX   r	   r  rP  r   r"   s    r   rY   HardlinkTest.tearDown*  s4    ""r   c                     U R                   R                  U R                  5      nU R                  UR                  [
        R                  S5        g )Nzadd file as regular failed)rT   r:  rP  rk   r  r/   r5  r  s     r   test_add_twiceHardlinkTest.test_add_twice/  s9     ((%%dhh/w,	.r   c                     U R                   R                  U R                  5      nU R                  UR                  [
        R                  S5        g )Nzadd file as hardlink failed)rT   r:  r   rk   r  r/   r  r  s     r   test_add_hardlinkHardlinkTest.test_add_hardlink6  s7    ((%%dhh/w-	/r   c                     SU R                   l        U R                   R                  U R                  5      nU R	                  UR
                  [        R                  S5        g )NTzdereferencing hardlink failed)rT   dereferencer:  r   rk   r  r/   r5  r  s     r   test_dereference_hardlink&HardlinkTest.test_dereference_hardlink;  sC    #((%%dhh/w/	1r   )r   rP  rT   N)
r'   r(   r)   r*   rU   rY   r  r  r  r3   r&   r   r   r  r    s    #
./
1r   r  c                   0    \ rS rSrSS jrS rS rS rSrg)	PaxWriteTestiB  Nc                 ~   [         R                  " U5      nU(       a  X#l        [         R                  Ul        [         R
                  " [        S[         R                  S9n UR                  U5        UR                  5         [         R
                  " [        5      n U(       a0  UR                  5       S   R                  nU R                  X%S5        O/UR                  5       S   R                  nU R                  XS5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)Nr   r   r   zPAX longlink creation failedzPAX longname creation failed)r/   rT  r  r  r  r.   r   r  r[  rX   r  rk   r   )r#   r   r  rp   rT   lns          r   r	  PaxWriteTest._testD  s    //$'#"??GLll7C0B0BC	KK IIKll7#	NN$Q'00  *HINN$Q',,  *HIIIK IIK IIKs   "D A&D* D'*D<c                 ~   SSSSSS.n[         R                  " [        S[         R                  US9n UR	                  [         R
                  " S5      5        UR                  5         [         R                  " [        S	S
9n U R                  UR                  U5        U R                  UR                  5       S   R                  U5        UR                  R                  5        Hs  u  p4U R                  [        U5      [        5        U R                  [        U5      [        5        U[         R                  ;   d  MY   [         R                  U   " U5        Mu     UR                  5         g ! UR                  5         f = f! [        [         4 a    U R#                  S5         M  f = f! UR                  5         f = f)Nr   0z1.23   äöütest)rP  r   r  r  r  r   )r   r  rP   r  r   z"unable to convert pax header field)r/   r.   r   r  r[  rT  rX   rk   r  r  ry  assertIsNotr  r  PAX_NUMBER_FIELDSrj  r  r   )r#   r  rT   keyvals        r   test_pax_global_header#PaxWriteTest.test_pax_global_header\  sW   & &( ll7C0B0B')	KK/0IIK ll7[9	S__k:S^^-a0<<kJOO113  cE2  cE2'333H11#6s; 4 IIK# IIK &z2 H		"FGH IIKs<   %E- B8F* ?FF* -E?!F'#F* &F''F* *F<c                 l   SSS.n[         R                  " [        S[         R                  SS9n [         R                  " 5       nSUl        SUl        Xl        UR                  U5        UR                  5         [         R                  " [        SS	9n UR                  5       S
   nU R                  UR                  U5        U R                  UR
                  S5        U R                  UR                  S5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)NrP  123)r}   r   r   rP   r  r     r  r   r  )r/   r.   r   r  rT  r   r   r  r[  rX   r  rk   )r#   r  rT   r^  s       r   test_pax_extended_header%PaxWriteTest.test_pax_extended_header|  s      %U3ll7C0B0B$/1	!A#AFAE'MKKNIIKll7[9	 #AQ]]K8QVVU+QUUC(IIK IIK IIKs   :D A'D! D!D3c                 &   [         R                  " 5       nSUl        SUl        SUl        SUl        SUl        UR                  5       nUR                  USS9nU R                  US   S5        U R                  US	   [        5        U R                  US	   S
5        U R                  US   S5        U R                  US   S5        U R                  US   S5        U R                  US[        S5      -   S-   [        S5      -   S-   [        S5      -   S-   [        S5      -   S-   [        S5      -   S-   [        S5      -   S-   [        S5      -   5        [         R                  " 5       nSUl        SUl        SUl        SUl        SUl        UR                  5       nUR                  USS9nU R                  US   S5        U R                  US	   S5        U R                  US   S5        U R                  US   S5        U R                  US   S5        U R                  US[        S5      -   S-   [        S5      -   S-   [        S5      -   S-   S-   S -   [        S!5      -   S"-   [        S#5      -   S$-   [        S5      -   S-   [        S5      -   5        g )%NrP  g@@r   r  |   rP   r  r   r  rw  rm   r   r   s   ././@PaxHeaderV   s9   0000000 0000000 0000000 00000000020 00000000000 010205  xs   ustar 00   s   16 mtime=1000.1
i  r  a   s9   0000644 0000173 0000174 00000000144 00000001750 006516  0u   foo㍴l    d(	 r  i  r   s9   0000000 0000000 0000000 00000000130 00000000000 010207  xs   15 path=foo㍴
16 uid=16777216
s$   16 gid=16777217
20 size=10000000000
s   21 mtime=10000000000
i  s   foo?`   s9   0000644 0000000 0000000 00000000000 00000000000 006540  0)r/   rT  r   r  rm   r   r   r  create_pax_headerrk   rw  r  r  )r#   r^  infor  s       r   test_create_pax_header#PaxWriteTest.test_create_pax_header  s    OOzz|$$TK$@fu-d7mS1g-fs+ec*ec*b	)\]Cj)*+0:6 ## &+3Z0 399 <A9E ]	]
 Cj
 **
 -2#J7	8 OOzz|$$TK$@f{3g*fq)ea(ea(b	)\]Cj)*,1#J7 << 8	8
 ((
 */s4
 7>>
 AFb	J ]] Cj ** -2#J7	8r   r&   r   )	r'   r(   r)   r*   r	  r  r  r  r3   r&   r   r   r  r  B  s    0@258r   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)UnicodeTesti  c                 &    U R                  S5        g )NrP   _test_unicode_filenamer"   s    r   test_iso8859_1_filename#UnicodeTest.test_iso8859_1_filename  s    ##K0r   c                 &    U R                  S5        g )Nutf7r  r"   s    r   test_utf7_filenameUnicodeTest.test_utf7_filename  s    ##F+r   c                 &    U R                  S5        g )Nutf-8r  r"   s    r   test_utf8_filenameUnicodeTest.test_utf8_filename  s    ##G,r   c                    [         R                  " [        SU R                  USS9n SnUR	                  [         R
                  " U5      5        UR                  5         [         R                  " [        US9n U R                  UR                  5       S   R                  U5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)Nr   r  r   rR   errorsr  r  r   )
r/   r.   r   r   r[  rT  rX   rk   r  r   )r#   rR   rT   r   s       r   r  "UnicodeTest._test_unicode_filename  s    ll7C$,X?	!DKK-.IIKll7X6	S^^-a055t<IIK IIK IIKs   'B7 9-C 7C	Cc                 t   [         R                  " [        SU R                  SSS9n [         R                  " 5       nSUl        U R                  [        UR                  U5        SUl        SUl	        U R                  [        UR                  U5        UR                  5         g ! UR                  5         f = f)Nr   r   r  r  r  rP  )r/   r.   r   r   rT  r   rJ  UnicodeErrorr[  r  rX   r  s      r   test_unicode_filename_error'UnicodeTest.test_unicode_filename_error  s    ll7C$+H>
	oo'G)GLlCKKA GL*GMlCKKAIIKCIIKs   A,B% %B7c                    [         R                  " [        SSSS9n U H  nU R                  [	        UR
                  5      [        5        U R                  [	        UR                  5      [        5        U R                  [	        UR                  5      [        5        U R                  [	        UR                  5      [        5        M     UR                  5         g ! UR                  5         f = f)Nrw   rP   r  rR   r  )r/   r.   r+   rh  r  r   rx  r  r  rx  rX   r  s      r   test_unicode_argument!UnicodeTest.test_unicode_argument  s    ll7C$/B	d166lC0d1::.4d177mS1d177mS1	  IIKCIIKs   B-C C-c                 4   [         R                  " S5      nSUl        SUl        [         R                  " [
        SU R                  SS9n UR                  U5        UR                  5         [         R                  " [
        SS9n UR                  S5      nU R                  UR                  S5        U R                  UR                  S5        U R                  [         R                  :w  ar  UR                  5         [         R                  " [
        SS9nUR                  S5      nU R                  UR                  S5        U R                  UR                  S5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f)	NrP  r  r   rP   )r$   r   rR   r  r   u	   )r/   rT  r  rx  r.   r   r   r[  rX   rh   rk   r  )r#   r^  rT   s      r   test_uname_unicodeUnicodeTest.test_uname_unicode	  s"   OOE"  ll7T[[$/1	KKNIIKll7[9	e$AQWWn5QWWn5{{g000		ll7W=MM%(  *>?  *>?IIK IIK IIKs   E0 CF 0FFr&   N)r'   r(   r)   r*   r  r  r  r  r  r  r  r3   r&   r   r   r  r    s%    1,-
r   r  c                   p    \ rS rSr\R
                  rS rS rS r	S r
S rS rSS	 jrS
 rS rSS jrSrg)UstarUnicodeTesti	  c                     U R                  S5        U R                  S[        5        U R                  S5        U R                  S[        5        g Nr0  e01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ_test_ustar_namer  r"   s    r   test_unicode_name1#UstarUnicodeTest.test_unicode_name1%	  B    /05zB?@@*Mr   c                 R    U R                  S5        U R                  S[        5        g Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r"   s    r   test_unicode_name2#UstarUnicodeTest.test_unicode_name2+	  "    ABBJOr   c                     U R                  S5        U R                  S[        5        U R                  S5        U R                  S[        5        g )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r"   s    r   test_unicode_longname1'UstarUnicodeTest.test_unicode_longname11	  sD    NONPZ[PQQS]^r   c                 \    U R                  S[        5        U R                  S[        5        g )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r"   s    r   test_unicode_longname2'UstarUnicodeTest.test_unicode_longname27	  s&    PR\]SU_`r   c                 ~    U R                  S[        5        U R                  S5        U R                  S[        5        g )Nu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿr  r"   s    r   test_unicode_longname3'UstarUnicodeTest.test_unicode_longname3;	  s5    TV`a^__aklr   c                 R    U R                  S5        U R                  S[        5        g )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r"   s    r   test_unicode_longname4'UstarUnicodeTest.test_unicode_longname4@	  s#    `aacmnr   Nc                    [         R                  " [        SU R                  SS9 n[         R                  " U5      nUc  UR                  U5        OU R                  X#R
                  U5        S S S 5        UcH  [         R                  " [        SSS9 nU H  nU R                  XR                  5          O   S S S 5        g g ! , (       d  f       NZ= f! , (       d  f       g = f)Nr   r  r  rw   r  )	r/   r.   r   r   rT  r[  rJ  rk   r   r#   r   excrT   r^  s        r   r  !UstarUnicodeTest._test_ustar_nameD	  s    \\'3t{{WMQT%A{A!!#{{A6 N ;gsW=A$$T662  >=  NM >=s   AC%C
C
C!c                     U R                  S5        U R                  S[        5        U R                  S5        U R                  S[        5        g r  _test_ustar_linkr  r"   s    r   test_unicode_link1#UstarUnicodeTest.test_unicode_link1S	  r  r   c                 R    U R                  S5        U R                  S[        5        g r  r  r"   s    r   test_unicode_link2#UstarUnicodeTest.test_unicode_link2Y	  r  r   c                    [         R                  " [        SU R                  SS9 n[         R                  " S5      nXl        Uc  UR                  U5        OU R                  X#R                  U5        S S S 5        UcH  [         R                  " [        SSS9 nU H  nU R                  XR
                  5          O   S S S 5        g g ! , (       d  f       NZ= f! , (       d  f       g = f)Nr   r  r  rP  rw   r  )	r/   r.   r   r   rT  r  r[  rJ  rk   r  s        r   r  !UstarUnicodeTest._test_ustar_link]	  s    \\'3t{{WMQT&AJ{A!!#{{A6 N ;gsW=A$$T::6  >=  NM >=s   AC%C
C
C'r&   r   )r'   r(   r)   r*   r/   r   r   r  r  r  r  r  r  r  r  r  r  r3   r&   r   r   r  r  	  sG    !!F
NP_am
oNPr   r  c                   2    \ rS rSr\R
                  rS rSrg)GNUUnicodeTestim	  c                     S H:  u  p[         R                  " [        USS9 n UR                  U5      nS S S 5        M<     g ! [         a    U R                  S5         N*f = f! , (       d  f       Mo  = f)N))r  u   pax/bad-pax-)rP   u   pax/bad-pax-äöür   r  z%unable to read bad GNU tar pax headerr/   r.   r+   rh   r  r   r#   rR   r   rT   r^  s        r   test_bad_pax_header"GNUUnicodeTest.test_bad_pax_headerq	  sq    <NH g%68;>Gd+A8 8<   GIIEFG	8 8(   A#AA A#A  A##
A2	r&   N)	r'   r(   r)   r*   r/   r  r   r  r3   r&   r   r   r  r  m	  s    FGr   r  c                   6    \ rS rSr\R
                  rSrS rSr	g)PAXUnicodeTesti	  Nc                     S H:  u  p[         R                  " [        USS9 n UR                  U5      nS S S 5        M<     g ! [         a    U R                  S5         N*f = f! , (       d  f       Mo  = f)N))r  u   pax/hdrcharset-)rP   u   pax/hdrcharset-äöür   r  z)unable to read POSIX.1-2008 binary headerr  r  s        r   test_binary_header!PAXUnicodeTest.test_binary_header	  sq    ?NH g%68;>Kd+A8 8?   KIIIJK	8 8r  r&   )
r'   r(   r)   r*   r/   r  r   r  r  r3   r&   r   r   r  r  	  s    F #'
Kr   r  c                   *    \ rS rSrS rSS jrS rSrg)AppendTestBasei	  c                     [         U l        [        R                  R	                  U R                  5      (       a!  [
        R                  " U R                  5        g g r   )r   r+   r|   r}   r  r	   r  r"   s    r   rU   AppendTestBase.setUp	  s7    77>>$,,''T\\* (r   c                    [         R                  " [        SS9 nUR                  S5      nSUl        UR                  U5       n[         R                  " U R                  U5       nUR                  X45        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)NrP   r  rf   rP  )r/   r.   r+   rh   r   ri   r[  )r#   r$   srcr^  r  rT   s         r   _create_testtarAppendTestBase._create_testtar	  s    \\'K8Co.AAF#q\\$,,5KK% 6 $ 98 65 $# 98s;   *B3"B"&B8B" B3
BB""
B0	,B33
Cc                     U R                  SU R                  -   5        U R                  [        R                  [        R
                  [        S5        g )NrZ  r   )r  r!   rJ  r/   r>  r.   r   r"   s    r   test_append_compressed%AppendTestBase.test_append_compressed	  s7    TDKK/0'++W\\7CHr   )r+   N)rZ  )r'   r(   r)   r*   rU   r  r  r3   r&   r   r   r  r  	  s    +
&Ir   r  c                   t    \ rS rSrSrSS jrS/S4S jrS rS rS r	S	 r
S
 rS rS rS rS rS rS rSrg)
AppendTesti	  Nc                     [         R                  " U R                  SUS9 nUR                  [         R                  " S5      5        S S S 5        g ! , (       d  f       g = f)Nr   rU  r   )r/   r.   r+   r[  rT  )r#   rv  rT   s      r   _add_testfileAppendTest._add_testfile	  s9    \\$,,W=KK./ >==s   &A
Ar   c                     [         R                  " U R                  US9 nU R                  UR	                  5       U5        S S S 5        g ! , (       d  f       g = f)NrU  )r/   r.   r+   rk   r<  )r#   rU  rv  rT   s       r   r	  AppendTest._test	  s8    \\$,,8CS\\^U3 988s   !A


Ac                 D    U R                  5         U R                  5         g r   )r  r	  r"   s    r   test_non_existingAppendTest.test_non_existing	  s    

r   c                     [         R                  " U R                  S5      R                  5         U R	                  5         U R                  5         g )NrZ  )r/   r.   r+   rX   r  r	  r"   s    r   
test_emptyAppendTest.test_empty	  s2    T\\4(..0

r   c                     [         R                  " S5      nU R                  U5        UR                  S5        U R	                  US9  g )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   rU  )r,   r   r  r   r	  r/  s     r   test_empty_fileobjAppendTest.test_empty_fileobj	  s7    zz,'4 		!

4
 r   c                 8   U R                  5         [        U R                  S5       nUR                  5       nS S S 5        [        R
                  " W5      nU R                  U5        UR                  S5        U R                  SS/US9  g ! , (       d  f       NY= f)Nr   r   rP  r   )rU  rv  )	r  r.   r+   rj   r,   r   r  r   r	  r   s      r   test_fileobjAppendTest.test_fileobj	  sr    $,,%99;D &zz$4 		!

%
6 &%s   B
Bc                 f    U R                  5         U R                  5         U R                  SS/S9  g )NrP  r   )rU  )r  r  r	  r"   s    r   test_existingAppendTest.test_existing	  s,    

%
(r   c                     [        U R                  S5       nUR                  U5        S S S 5        U R                  [        R
                  U R                  5        g ! , (       d  f       N9= frI  )r.   r+   rS  rJ  r/   r>  r  )r#   r   rq   s      r   _test_errorAppendTest._test_error	  sH    $,,%JJt &'++T-?-?@ &%s   A
A*c                 &    U R                  S5        g )Nr   r)  r"   s    r   	test_nullAppendTest.test_null	  s    r   c                 &    U R                  S5        g )N                r,  r"   s    r   test_incompleteAppendTest.test_incomplete	      $r   c                 n    [         R                  " S5      R                  5       nU R                  U5        g )NrP  r/   rT  rU  r)  r#   r   s     r   test_premature_eofAppendTest.test_premature_eof	  s'    u%++-r   c                 t    [         R                  " S5      R                  5       nU R                  US-   5        g )NrP  r0  r5  r6  s     r   test_trailing_garbage AppendTest.test_trailing_garbage	  s,    u%++-
*+r   c                 &    U R                  S5        g )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar,  r"   s    r   test_invalidAppendTest.test_invalid	  r3  r   r&   r   )r'   r(   r)   r*   r  r  r	  r  r  r   r#  r&  r)  r-  r1  r7  r:  r=  r3   r&   r   r   r  r  	  sS    !0 !'4 4
!7)A
%,%r   r  c                       \ rS rSrSrg)GzipAppendTesti	  r&   Nr   r&   r   r   r@  r@  	  r   r   r@  c                       \ rS rSrSrg)Bz2AppendTesti	  r&   Nr   r&   r   r   rB  rB  	  r   r   rB  c                       \ rS rSrSrg)LzmaAppendTesti	  r&   Nr   r&   r   r   rD  rD  	  r   r   rD  c                   &    \ rS rSrS rS rS rSrg)
LimitsTesti	  c                    [         R                  " S5      nUR                  [         R                  5        [         R                  " S5      nU R	                  [
        UR                  [         R                  5        [         R                  " S5      nUR                  [         R                  5        [         R                  " S5      nU R	                  [
        UR                  [         R                  5        [         R                  " S5      nU R	                  [
        UR                  [         R                  5        [         R                  " S5      nSUl        U R	                  [
        UR                  [         R                  5        [         R                  " S5      nSUl        U R	                  [
        UR                  [         R                  5        g )	Nr0  r  a   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamea   1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/longname   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamer  r       )r/   rT  rU  r   rJ  r  r  r   r  s     r   test_ustar_limitsLimitsTest.test_ustar_limits	  s4   //"34g**+ //"9:*gmmW5I5IJ //":;g**+ //">?*gmmW5I5IJ //";<*gmmW5I5IJ //*-4*gmmW5I5IJ //&) *gmmW5I5IJr   c                 ~   [         R                  " S5      nUR                  [         R                  5        [         R                  " S5      nSUl        UR                  [         R                  5        [         R                  " S5      nSUl        U R                  [        UR                  [         R                  5        g NrH  r  r   l          )r/   rT  rU  r  r  r   rJ  r  r  s     r   test_gnu_limitsLimitsTest.test_gnu_limits
  s~    //";<g(()//*-4g(() //&)+*gmmW5G5GHr   c                 ^   [         R                  " S5      nUR                  [         R                  5        [         R                  " S5      nSUl        UR                  [         R                  5        [         R                  " S5      nSUl        UR                  [         R                  5        g rM  )r/   rT  rU  r  r  r   r  s     r   test_pax_limitsLimitsTest.test_pax_limits
  sr    //";<g(()//*-4g(()//&)+g(()r   r&   N)r'   r(   r)   r*   rJ  rN  rQ  r3   r&   r   r   rF  rF  	  s    K>I
*r   rF  c                       \ rS rSrS rS rS rS rS rS r	\
R                  " \R                  " 5       S5      \
R                  " \" \S	5      S
5      \
R                   R#                  S5      S 5       5       5       rSrg)MiscTesti,
  c                 H   U R                  [        R                  " SSSS5      S5        U R                  [        R                  " SSSS5      S5        U R                  [        R                  " SSS5      S5        U R                  [        R                  " S	SS5      S5        g )
NrP     r   r  s   foo     foobarr  r  s   foo bar )rk   r/   stnntsr"   s    r   test_char_fieldsMiscTest.test_char_fields.
  s    UAwA)	+Xq'8D	!%5wI	 ]GXF	 r   c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S	5      S
5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )N   0000001 r      7777777            rI               r                      rN  r   s           )rk   r/   ntir"   s    r   test_read_number_fields MiscTest.test_read_number_fields8
  s     	^4a8^4i@%HI#	%%HI#	%%HI	%HI	%HI+	- 	U+Q/\2A6r   c           	         U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S[        R                  S9S5        U R                  [        R                  " S[        R                  S9S	5        U R                  [        R                  " S
[        R                  S9S5        U R                  [        R                  " S[        R                  S9S5        U R                  [        R                  " S[        R                  S9S5        U R                  [        R                  " S[        R                  S9S5        U R                  [        R                  " S[        R                  S9S5        U R                  [        R                  " [        R                  " S[        R                  S95      S5        g )Nr   r]  r_  r^  rI  r  r`  rb  ra  r  rc  re  rd  rg  rf  g      Yg      0Bs         gr   )rk   r/   itnr  rh  r"   s    r   test_write_number_fields!MiscTest.test_write_number_fieldsL
  sa   Q8Y/@Z8J8JK<	>Z8J8JK<	>R0B0BC<	>T'2D2DE<	>%7,3,>,>@<	> 	VG4F4FG<	>]7;M;MN<	>W[[g>P>P%QRTUVr   c                    U R                  [        5         [        R                  " SS[        R                  5        S S S 5        U R                  [        5         [        R                  " SS[        R                  5        S S S 5        U R                  [        5         [        R                  " SS[        R
                  5        S S S 5        U R                  [        5         [        R                  " SS[        R
                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nu= f! , (       d  f       g = f)Nr  rV  rI  l       l        )rJ  r  r/   rl  r   r  r"   s    r   test_number_field_limits!MiscTest.test_number_field_limitsc
  s    z*KKAw334 +z*KK
Aw';';< +z*KK7+=+=> +z*KKq'*<*<= +* +*******s/   'D'D#'D4"'E
D #
D14
E
Ec                 @    1 Skn[         R                  " U [        US9  g )N>/   NULgrprl  rh  rY  pwdrX  mainr4  CHRTYPEr  r  r5  SYMTYPEXGLTYPEr!  versionAREGTYPECONTTYPEFIFOTYPEfilemoder*  	GNU_MAGIC	GNU_TYPES
PAX_FIELDSr)  r  r  POSIX_MAGICcopyfileobjExFileObjectcalc_chksumsLENGTH_PREFIXREGULAR_TYPESEOFHeaderErrorGNUTYPE_SPARSEPAX_NAME_FIELDSSOLARIS_XHDTYPESUPPORTED_TYPESEmptyHeaderErrorGNUTYPE_LONGLINKr  r  symlink_exceptionInvalidHeaderErrorTruncatedHeaderErrorSubsequentHeaderError)not_exported)r   check__all__r/   )r#   r  s     r   test__all__MiscTest.test__all__m
  s    = 	T7Fr   c                 @   [         R                  R                  [         R                  R                  [        5      SS5      nU R                  [        R                  5       n[        R                  " S5      4n[        R                  R                  R                  [        R                  SUS9   [        R                  " U5        S S S 5        S S S 5        U R                  S[!        WR"                  5      5        g ! , (       d  f       N<= f! , (       d  f       NE= f)Nr   r   zlzma module is not availablerJ   )r  z?
- method xz: CompressionError('lzma module is not available')
)r|   r}   r~   dirnamer  rJ  r/   r>  CompressionErrorr   r
  r  r  r0   r.   r  rx  	exception)r#   fnameexcinfor  s       r   .test_useful_error_message_when_modules_missing7MiscTest.test_useful_error_message_when_modules_missing|
  s    RWW__X68IK[\w001W,,-KLME$$++GOOXSX+YU# Z 2
 	O!!"	
 ZY 21s%   "AD1C>D>
D	D
Dzrequires symlink supportchmodzmissing os.chmodos.chmodc                   ^ [         R                  R                  [        S5      mU4S jnX!l        [         R                  R                  [        S5      n[        5        nUR                  SSS9  UR                  S[        R                  SS9  UR                  SUS9  S S S 5        [         R                  " U5         WR                  5       R                  TS	S
9  [        R                  " U5        [        R                  " T5        g ! , (       d  f       Np= f! [        R                  " U5        [        R                  " T5        f = f)N
test127987c                    > [         R                  R                  U 5      n[         R                  R                  UT/5      T:w  a  [	        SU5      eg )Nz8should not try to chmod anything outside the destination)r|   r}   realpath
commonpath	Exception)r}   r$   r{  target_pathrk  s       r   mock_chmod_side_effectRMiscTest.test_deferred_directory_attributes_update.<locals>.mock_chmod_side_effect
  sH    ''**40Kww!!;"89WD Z\ghh Er   outside_tree_dirr^  r  
symlink_to
?rwsrwsrwtr  r$   rT   r  )r|   r}   r~   r{   r  ArchiveMakerr   r/   r  makedirsr.   r  r	   r  )r#   
mock_chmodr  r  arcrk  s        @r   )test_deferred_directory_attributes_update2MiscTest.test_deferred_directory_attributes_update
  s    
 '',,w5	i "877<<1CD^sGGCCG(GGCgooLGAGGC$4G5 
 	$%	&HHJ!!wu!=-.W% ^ -.W%s    A D
?D 

D.E	r&   N)r'   r(   r)   r*   rZ  ri  rm  rq  r  r  r   r   r	   can_symlinkr   r|   r
  r  r  r3   r&   r   r   rT  rT  ,
  s     7(W.>G

 ..02LMW-/AB]]$& % C N&r   rT  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)CommandLineTesti
  c                     [         R                  " SS/UQ70 UD6u  p4nUR                  [        R                  R                  5       S5      $ )N-mr/      
)r
   assert_python_okr;  r|   linesepr   )r#   argsr{  rcr  errs         r   
tarfilecmdCommandLineTest.tarfilecmd
  sJ    $55dI @ @8>@{{2::,,.66r   c                 2    [         R                  " SS/UQ76 $ )Nr  r/   )r
   assert_python_failure)r#   r  s     r   tarfilecmd_failure"CommandLineTest.tarfilecmd_failure
  s    224JTJJr   c                 f   [         R                  " SSS9[         R                  " SSS9/nU R                  [        R                  U5        [
        R                  " US5       nU H0  nUR                  U[        R                  R                  U5      S9  M2     S S S 5        g ! , (       d  f       g = f)Ntokenize_tests.txttokenizedatar   9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   ro  )r   rc  r  r	   r  r/   r.   r   r|   r}   re  )r#   tar_namefilesr  tardatas        r   make_simple_tarfile#CommandLineTest.make_simple_tarfile
  s    !!"6)79!! #>)79:
 		(((3\\(C(B w(8(8(AB ! )((s   "7B""
B0c                    U R                  [        R                  U5        [        R                  " US5       n[        R
                  " S5      nUR                  U[        R                  " S5      S9  [        R
                  " S5      nUR                  U[        R                  " S5      S9  S S S 5        g ! , (       d  f       g = f)Nr   benignr   rU  ../evil)	r  r	   r  r/   r.   rT  r[  r,   r   )r#   r  r  r  evils        r   make_evil_tarfile!CommandLineTest.make_evil_tarfile
  s~    	(((3\\(C(B__X.FJJvrzz#J7??9-DJJtRZZ_J5	 )((s   A5B66
Cc                    U R                  5       u  pnU R                  US5        U R                  SUR                  5       5        U R                  SUR                  5       5        U R                  SUR                  5       5        U R                  SS5      u  pnU R                  US5        U R	                  UR                  5       S5        g )Nr   s   usages   errors   required-lr   )r  rk   r  lowerr  strip)r#   r  r  r  s       r   test_bad_useCommandLineTest.test_bad_use
  s    ..0c"h		,h		,k399;/..tR8c"CIIK-r   c                 v    [          H/  nS H&  nU R                  X!5      nU R                  US5        M(     M1     g )N)-tz--testr   )testtarnamesr  rk   r#   r  optr  s       r   test_test_command!CommandLineTest.test_test_command
  s4    $H%ooc4  c* & %r   c           	      x    [          H0  nS H'  nU R                  USUSS9nU R                  SU5        M)     M2     g )N-vz	--verboser  r  PYTHONIOENCODINGs   is a tar archive.
)r  r  r  r  s       r   test_test_command_verbose)CommandLineTest.test_test_command_verbose
  sB    $H(ooc47> & @4c: ) %r   c                    [         R                  " SSS9nU R                  SU5      u  p#nU R                  SU5        U R	                  US5        U R	                  US5        [
         H  nU R                  US9   [        US	5       nUR                  5       nS S S 5         [        [        S
5       nUR                  WS S 5        S S S 5        U R                  S[        5      u  p#nU R	                  US5        U R	                  US5        [        R                  " [        5         S S S 5        M     g ! , (       d  f       N= f! , (       d  f       N= f! [        R                  " [        5        f = f! , (       d  f       GM  = f)N
zipdir.zipr   r   r      is not a tar archive.r   r   )r  r   r+  r  )r   rc  r  r  rk   r  r  r.   rj   r   rS  r	   r  )r#   zipnamer  r  r  r  r  r   s           r   test_test_command_invalid_file.CommandLineTest.test_test_command_invalid_file
  s,   ""<8IJ..tW=/5c"Q$Hx0(D)Q668D *.gt,Tc
+ -#'#:#:4#ILBS$$S#.$$R+$$W- 10 %)) -, $$W- 10sU   9E3D2E3 E0EAE
E32
E <E3
EEE00E33
F	c                    [          H  n[        R                  " 5        n[        R                  " US5       nUR                  SS9  S S S 5        S S S 5        WR                  5       R                  SS5      nS H$  nU R                  XQSS9nU R                  Xd5        M&     M     g ! , (       d  f       Ne= f! , (       d  f       Nn= f)Nrw   Fr   r   r   )r  z--listr  
r  r   captured_stdoutr/   r.   r   r   r   r  rk   r#   r  r^  r  r  r  r  s          r   test_list_command!CommandLineTest.test_list_command
  s    $H((*a\\(C0BGGEG* 1 + zz|**74FGH%ooc7> & @  / & %00 +*s"   B7B&B7&
B40B77
C	c           	         [          H  n[        R                  " 5        n[        R                  " US5       nUR                  SS9  S S S 5        S S S 5        WR                  5       R                  SS5      nS H&  nU R                  USUSS9nU R                  Xd5        M(     M     g ! , (       d  f       Ng= f! , (       d  f       Np= f)	Nrw   Tr   r   r   r  r  r  r  r  s          r   test_list_command_verbose)CommandLineTest.test_list_command_verbose
  s    $H((*a\\(C0BGGDG) 1 + zz|**74FGH(ooc47> & @  / ) %00 +*s"   B9B(B9(
B62B99
C	c                     [         R                  " SSS9nU R                  SU5      u  p#nU R                  SU5        U R	                  US5        U R	                  US5        g )Nr  r   r   r  r  r   r   )r   rc  r  r  rk   r#   r  r  r  r  s        r   test_list_command_invalid_file.CommandLineTest.test_list_command_invalid_file   sZ    ""<8IJ..tW=/5c"Qr   c                    [         R                  " SSS9[         R                  " SSS9/nS H{  n U R                  " U[        /UQ76 nU R	                  US5        [
        R                  " [        5       nUR                  5         S S S 5        [        R                  " [        5        M}     g ! , (       d  f       N-= f! [        R                  " [        5        f = f)Nr  r  r   r  )-cz--creater   )
r   rc  r  r   rk   r/   r.   r  r	   r  r#   r  r  r  rT   s        r   test_create_command#CommandLineTest.test_create_command  s    !!"6)79!! #>)79:
 $C*ooc7;U;  c*\\'*cNN$ +   ) $ +*   )s$   AB>5B-B>-
B;	7B>>Cc                    [         R                  " SSS9[         R                  " SSS9/nS H  n U R                  " US[        /UQ7SS06nU R	                  S	U5        [
        R                  " [        5       nUR                  5         S S S 5        [        R                  " [        5        M     g ! , (       d  f       N-= f! [        R                  " [        5        f = f)
Nr  r  r   r  r  r  r  r  s    file created.)
r   rc  r  r   r  r/   r.   r  r	   r  r  s        r   test_create_command_verbose+CommandLineTest.test_create_command_verbose  s    !!"6)79!! #>)79:
 %C*ooc4 @5 @7>@/5\\'*cNN$ +   ) %
 +*   )s$   AC9B1
C1
B?	;CCc                    [         R                  " SSS9/n U R                  " S[        /UQ76 nU R	                  US5        [
        R                  " [        5       nUR                  5         S S S 5        [        R                  " [        5        g ! , (       d  f       N)= f! [        R                  " [        5        f = f)Nr  r  r   r  r   )
r   rc  r  dotlessnamerk   r/   r.   r  r	   r  )r#   r  r  rT   s       r   $test_create_command_dotless_filename4CommandLineTest.test_create_command_dotless_filename&  s    !!"6~NO	*//$<e<CS#&k*c  + [) +* [)s$   AB! B-B! 
BB! !B=c                    [         R                  R                  [        S5      n[        R
                  " SSS9/n U R                  " SU/UQ76 nU R                  US5        [        R                  " U5       nUR                  5         S S S 5        [        R                  " U5        g ! , (       d  f       N%= f! [        R                  " U5        f = f)Nz.testtarr  r  r   r  r   )r|   r}   r~   r{   r   rc  r  rk   r/   r.   r  r	   r  )r#   r  r  r  rT   s        r   (test_create_command_dot_started_filename8CommandLineTest.test_create_command_dot_started_filename0  s    77<<4!!"6~NO	'//$959CS#&h'3  ( X& (' X&s#   <B9 8B(	B9 (
B62B9 9Cc                    [         R                  " SSS9[         R                  " SSS9/n[        [        [        4 H  nUR
                  (       d  M   [        S-   UR                  -   nU R                  " SU/UQ76 nUR                  U5       nUR                  5         S S S 5        [        R                  " U5        M     g ! , (       d  f       N)= f! [        R                  " W5        f = f)Nr  r  r   r  r  r  )r   rc  r5   r=   rD   r.   r   r!   r  r1   r  r	   r  )r#   r  filetyper  r  rT   s         r   test_create_command_compressed.CommandLineTest.test_create_command_compressed;  s    !!"6)79!! #>)79:
 "7H5H==+"S=8??:oodH=u=%%h/3NN$ 0   * 6 0/   *s$   ;CCC
C	CC+c                 l   U R                  [        5        S Hi  n [        R                  " [        5         U R                  U[        5      nS S S 5        U R                  WS5        [        R                  " [        5        Mk     g ! , (       d  f       N?= f! [        R                  " [        5        f = f)N)-ez	--extractr   r  r   r	   r   	tarextdirr  rk   r  r#   r  r  s      r   test_extract_command$CommandLineTest.test_extract_commandL  sx      )$C,''	2//#w7C 3  c*  + %22   +"   BBB
B	BB3c           	      l   U R                  [        5        S Hi  n [        R                  " [        5         U R                  US[        SS9nS S S 5        U R                  SW5        [        R                  " [        5        Mk     g ! , (       d  f       N?= f! [        R                  " [        5        f = f)Nr  r  r  r      file is extracted.)r  r   r	   r   r  r  r  r  r  s      r   test_extract_command_verbose,CommandLineTest.test_extract_command_verboseV  s      )$C,''	2//#tW;B * DC 3 4c:  + %22
   +r  c           
         U R                  [        5        [        R                  R	                  [
        S5      n[        R                  " [
        5         [        R                  " U5         U R                  S[        SSS5        U R                  S[        SSSSS9nU R                  S	U5        S S S 5        [        R                  " [
        5        g ! , (       d  f       N)= f! [        R                  " [
        5        f = f)
Ndestr  r  z--filterr   r  r  r  r  )r  r   r|   r}   r~   r  r   r	   r   r  r  r  r  )r#   destdirr  s      r   test_extract_command_filter+CommandLineTest.test_extract_command_filtera  s    w' '',,y&1
	(##G,''g(,(2F< oodG&*&0/7> & @ 4c: - Y' -, Y's%   C# +AC/C# 
C C# #C?c                 \   U R                  [        5         [        R                  " [        5         U R                  S[        S5      nS S S 5        U R                  WS5        [        R                  " [        5        g ! , (       d  f       N;= f! [        R                  " [        5        f = f)Nr  spamdirr   r  )r#   r  s     r   (test_extract_command_different_directory8CommandLineTest.test_extract_command_different_directoryt  sr      )	(##I.oodGY? /S#&Y'	 /. Y's"   B A>	B >
BB B+c                 ,   [         R                  " SSS9n[        R                  " [        5         U R                  SU5      u  p#nS S S 5        U R                  SW5        U R                  WS5        U R                  WS5        g ! , (       d  f       NE= f)Nr  r   r   r  r  r   r   )r   rc  r	   r   r  r  r  rk   r  s        r   !test_extract_command_invalid_file1CommandLineTest.test_extract_command_invalid_file}  sv    ""<8IJ	*224ALBS +/5c"Q	 +*s   B
Br&   N)r'   r(   r)   r*   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r  r#  r&  r3   r&   r   r   r  r  
  sm    7
K	C6.+;.(	0	0 ** *	'+",	,(&( r   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
ContextManagerTesti  c                     [         R                  " [        5       nU R                  UR                  S5        S S S 5        U R                  WR                  S5        g ! , (       d  f       N+= f)Nzclosed inside runtime contextcontext manager failed)r/   r.   r+   r,  rm  r3  r?  s     r   
test_basicContextManagerTest.test_basic  sF    \\'"cSZZ)HI #

$<= #"s   A
A+c                     [         R                  " [        5      nUR                  5         U R	                  [
        5         U    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )r/   r.   r+   rX   rJ  ry  r?  s     r   test_closedContextManagerTest.test_closed  sK     ll7#		w'  (' ('s$    A'AA'
A$	 A''
A5c                 D   U R                  [        5       n[        R                  " [        5       n[
        e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  WR                  [
        S5        U R                  WR                  S5        g )Nz)wrong exception raised in context managerr+  )
rJ  r  r/   r.   r+   ry  rw  r  r3  rm  )r#   r  rT   s      r   test_exception!ContextManagerTest.test_exception  sl    y)Sg&# '&& *)) 	cmmWI	K

$<=s   A8
A	A
A!c                     [         R                  " [        S5       n[        e! , (       d  f       O
= f!    O= fU R	                  [
        R                  R                  [        5      SS5        U R                  WR                  S5        g )Nr   r   z-context manager wrote an end-of-archive blockr+  )
r/   r.   r   r  rk   r|   r}   r6  r3  rm  r?  s     r   test_no_eofContextManagerTest.test_no_eof  sd    	gs+s ,+	11?	A

$<=s   5 $
25 5 9c                     [         R                  " [        S5          S S S 5        U R                  [        R
                  R                  [        5      SS5        g ! , (       d  f       NC= f)Nr   r   z-context manager wrote no end-of-archive block)r/   r.   r   r  r|   r}   r6  r"   s    r   test_eofContextManagerTest.test_eof  sF     \\'3' (BGGOOG4a?	A ('s   A
A)c                 2   [        [        S5       n [        R                   " USS9 n[        e! , (       d  f       O
= f!    O= fU R	                  UR
                  S5        U R                  WR
                  S5        S S S 5        g ! , (       d  f       g = f)Nr+  r   ru  zexternal file object was closedr+  )r.   r   r/   r  r,  rm  r3  rz  s      r   r#  ContextManagerTest.test_fileobj  sp     '4 D\\$S9S#O :9T[[*KLOOCJJ(@A !  s3   BA /
=	A BA  A=B
Br&   N)r'   r(   r)   r*   r,  r/  r2  r5  r8  r#  r3   r&   r   r   r)  r)    s"    >
>
>A
Br   r)  zrequires os.link to be missingc                   B   \ rS rSrS r\R                  " \" \R                  S5      S5      S 5       r
\R                  " \" \R                  S5      S5      S 5       r\R                  " \" \S5      S5      S	 5       r\R                  " \" \S5      S5      S
 5       rSrg)LinkEmulationTesti  c                 0   U R                   R                  U[        SS9  [        [        R
                  R                  [        U5      S5       nUR                  5       nS S S 5        U R                  [        W5      [        5        g ! , (       d  f       N.= f)Nr  ru   r   )rT   rz   r{   r.   r|   r}   r~   rj   rk   r   rn   )r#   r   r  r   s       r   _test_link_extraction'LinkEmulationTest._test_link_extraction  sc    w?"'',,w-t4668D 54.9 54s   B
Bislinkz3Skip emulation - has os.path.islink but not os.linkc                 &    U R                  S5        g )Nr   r?  r"   s    r   test_hardlink_extraction1+LinkEmulationTest.test_hardlink_extraction1       	""?3r   c                 &    U R                  S5        g )Nr   rC  r"   s    r   test_hardlink_extraction2+LinkEmulationTest.test_hardlink_extraction2       	""#>?r   rZ  z Skip emulation if symlink existsc                 &    U R                  S5        g )Nr   rC  r"   s    r   test_symlink_extraction1*LinkEmulationTest.test_symlink_extraction1  rF  r   c                 &    U R                  S5        g )Nr   rC  r"   s    r   test_symlink_extraction2*LinkEmulationTest.test_symlink_extraction2  rJ  r   r&   N)r'   r(   r)   r*   r?  r   r  r   r|   r}   rD  rH  rL  rO  r3   r&   r   r   r=  r=    s    : __WRWWh/JL4L4 __WRWWh/JL@L@ __WR+79494 __WR+79@9@r   r=  c                   &    \ rS rSrS rS rS rSrg)Bz2PartialReadTesti  c                 ^  ^  " U4S jS[         R                  5      m[        R                  " [        R
                  " S5      R                  5       5      n[        [        U5      S-   5       H"  n [        R                  " T" US U 5      US9  M$     g ! [        R                   a     M>  f = f)Nc                   >   >^  \ rS rSrSrUU 4S jrUU 4S jrSrU =r$ )9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOi  Fc                    > U R                   (       a  [        S5      eU R                  5       [        U R	                  5       5      :H  U l         [
        TU ]  U5      $ )Nz(infinite loop detected in tarfile.open())hit_eofAssertionErrorr   rl   r   superrj   )r#   r  	MyBytesIO	__class__s     r   rj   >Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.read  sK    <<( *: ; ;#yy{c$--/.BBY2155r   c                 ,   > SU l         [        TU ]
  " U6 $ r  )rW  rY  r   )r#   r  rZ  r[  s     r   r   >Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek  s    $Y2D99r   )rW  )	r'   r(   r)   r*   rW  rj   r   r3   __classcell__)r[  rZ  s   @r   rZ  rU    s    G6: :r   rZ  rP  r   ru  )r,   r   r?   compressr/   rT  rU  rangerl   r.   r>  )r#   r$   r   r^  rZ  s       @r   _test_partial_input&Bz2PartialReadTest._test_partial_input  s    
	:

 
	: ||GOOE288:;s4y1}%AYtBQx%8tD & $$ s   1BB,+B,c                 &    U R                  S5        g Nrw   rb  r"   s    r   test_partial_input%Bz2PartialReadTest.test_partial_input  s      %r   c                 &    U R                  S5        g )Nrx  rf  r"   s    r   test_partial_input_bz2)Bz2PartialReadTest.test_partial_input_bz2  s      )r   r&   N)r'   r(   r)   r*   rb  rg  rj  r3   r&   r   r   rR  rR    s    (&*r   rR  c                       SS K n SS KnU R                  S5      S   S:w  a  gUR	                  S5      S   S:w  a  gg! [         a     gf = f)Nr   FrootT)rv  ru  ImportErrorgetpwuidgetgrgid)rv  ru  s     r   root_is_uid_gid_0rq    sS     ||AqV#
||AqV#  s   = 
A
	A
chownzmissing os.chowngeteuidzmissing os.geteuidc                      \ rS rSr\S 5       r\\S 5       5       r\R                  R                  S5      \R                  R                  S5      \R                  R                  S5      S 5       5       5       r\R                  R                  S5      \R                  R                  S5      \R                  R                  S5      S 5       5       5       r\R                  " \" 5       S	5      \R                  R                  S5      \R                  R                  S5      \R                  R                  S5      S
 5       5       5       5       r\R                  R                  S5      S 5       rSrg)NumericOwnerTesti  c                    [         R                  " S5      nU SS[        R                  U4USS[        R                  S 4USS[        R                  U4/n[        R
                  " [        S5       nU HN  u  pgpn
[        R                  " U5      nX{l        Xl	        S	Ul
        S	Ul        Xl        UR                  X5        MP     S S S 5        [        $ ! , (       d  f       [        $ = f)
Ns   contentc   b   M   L   X   rE   r   rm  )r,   r   r/   r5  r  r.   r   rT  r   r   r  rx  r  r[  )
filename_1	dirname_1
filename_2rq   ry  r  r   r   r   typcontentsr^  s               r   _make_test_archive#NumericOwnerTest._make_test_archive  s     zz*% b"goot<b"goot<b"goot< \\'3'516-3XOOD)  a* 27 (  (' s   0AC
C&c              #     #    SU l         SnSnUnUn[        R                  R                  X!5      n[        R                  UUU5      n[        R                  " U5       nXsXE4v   S S S 5        g ! , (       d  f       g = f7f)Nr   znumeric-owner-testfilerr  )rE  r|   r}   r~   ru  r  r/   r.   )mock_geteuidr  r  r|  r}  r~  tar_filenamer  s           r   _setup_testNumericOwnerTest._setup_test.  sx      %&!( 
	WW\\'1
 (:::;D;EG \\,'5Y:: (''s   AA?A.%	A?.
A<8A?zos.chownr  z
os.geteuidc                    U R                  U5       u  pEnnUR                  U[        SSS9  UR                  U[        SSS9  S S S 5        [        R                  R                  [        W5      n[        R                  R                  [        W5      n	UR                  [        R                  R                  USS5      [        R                  R                  U	SS5      /SS9  g ! , (       d  f       N= f)	NTr  numeric_ownerrv   rw  rx  r{  rE   	any_order)
r  rz   r{   r|   r}   r~   assert_has_callsr   r
  call)
r#   r  r  
mock_chownr  r|  rE  r~  f_filename_1f_filename_2s
             r   test_extract_with_numeric_owner0NumericOwnerTest.test_extract_with_numeric_ownerD  s    
 l+ 0<10:MM*gT!0  2MM*wd!0  2	 , ww||GZ8ww||GZ8##X]]%7%7b"%M%-]]%7%7b"%M%' /3 	$ 	4 ,+s   1C$$
C2c           	      D   U R                  U5       u  pEnnUR                  [        SSS9  S S S 5        [        R                  R                  [        W5      n[        R                  R                  [        W5      n	[        R                  R                  [        W5      n
UR                  [        R                  R                  USS5      [        R                  R                  U	SS5      [        R                  R                  U
SS	5      /SS
9  g ! , (       d  f       N= f)NTr  r  rw  rx  ry  rz  r{  rE   r  )
r  r  r{   r|   r}   r~   r  r   r
  r  )r#   r  r  r  r  r|  r}  r~  r  f_dirname_1r  s              r   "test_extractall_with_numeric_owner3NumericOwnerTest.test_extractall_with_numeric_ownerY  s    
 l+ 0<90:WD$3  5 , ww||GZ8ww||GY7ww||GZ8##X]]%7%7b"%M%-]]%7%7R%L%-]]%7%7b"%M%' /3	 	$ 	4 ,+s   D
Dz uid=0,gid=0 must be named "root"c                     U R                  U5       u  pE  nUR                  U[        SSS9  S S S 5        [        R                  R                  [        W5      nUR                  USS5        g ! , (       d  f       NF= f)NFr  r  r   )r  rz   r{   r|   r}   r~   assert_called_with)r#   r  r  r  r  r|  rE  r  s           r   "test_extract_without_numeric_owner3NumericOwnerTest.test_extract_without_numeric_ownerr  sk     l+/H1aMM*gU!0  2 ,
 ww||GZ8%%lAq9 ,+s   A--
A;c           	          U R                  U5       u  p#  nU R                  [        UR                  U[        SS5        S S S 5        g ! , (       d  f       g = f)NFT)r  rJ  rj  rz   r{   )r#   r  r  r|  rE  s        r   test_keyword_only"NumericOwnerTest.test_keyword_only  sE    l+/H1ai#mmZ%O ,++s   -A
Ar&   N)r'   r(   r)   r*   r  r  r   r  r   r
  r  r  r  r   rq  r  r  r3   r&   r   r   ru  ru    sf     . ;  ;( ]]$]]$]]&4 ' % %4$ ]]$]]$]]&4 ' % %4, *,;=]]$]]$]]&	: ' % %=
	: ]]&O 'Or   ru  c                   2    \ rS rSrS rS rS rS rS rSr	g)	ReplaceTestsi  c                 2   U R                   R                  S5      nUR                  SS9nU R                  UR                  S5        U R                  UR                  S5        U R                  U R                   R                  S5      R                  S5        g )Nrf   z
misc/otherr2  )rT   rh   r;  rk   r   r#   r  replaceds      r   test_replace_nameReplaceTests.test_replace_name  sv    ##O4>>|>45o6++O<AA(	*r   c                 &   U R                   R                  S5      nUR                  5       nSUR                  S'   U R	                  UR                  S   S5        U R	                  U R                   R                  S5      R                  S   S5        g )Nr  not-barrx  r   rT   rh   r;  r  rk   r  s      r   test_replace_deepReplaceTests.test_replace_deep  s{    ##N3>>#(1W%++G4e<HH~.::7CU	Lr   c                 $   U R                   R                  S5      nUR                  SS9nSUR                  S'   U R	                  UR                  S   S5        U R	                  U R                   R                  S5      R                  S   S5        g )Nr  F)deepr  rx  r  r  s      r   test_replace_shallow!ReplaceTests.test_replace_shallow  s    ##N3>>u>-(1W%++G4i@HH~.::7CY	Pr   c                 4   U R                   R                  S5      nS He  nU R                  US9   UR                  " S0 US 0D6nU R	                  [        X25      S 5        U R                  [        X5      S 5        S S S 5        Mg     g ! , (       d  f       My  = f)Nrf   )r   r  r$   r  r   r   r  rx  	attr_namer&   )rT   rh   r  r;  rk   r~  r  )r#   r  r  r  s       r   test_replace_allReplaceTests.test_replace_all  s    ##O4:I	2!>>>Y,=>  !=tD##GF$>E 32:22s   AB
B	c                     U R                   R                  S5      nU R                  [        5         UR	                  SS9  S S S 5        g ! , (       d  f       g = f)Nrf   i[)r  )rT   rh   rJ  rj  r;  )r#   r  s     r   test_replace_internal"ReplaceTests.test_replace_internal  s>    ##O4y)NN)N, *))s   A


Ar&   N)
r'   r(   r)   r*   r  r  r  r  r  r3   r&   r   r   r  r    s    *LPF-r   r  c                   x    \ rS rSrSr\S 5       r\S 5       rS r\	S 5       r
S rS rS	 rS
 rS rS rS rSrg)NoneInfoExtractTestsi  Nc                 4  ^  [         R                  " [        SSS9n[        R                  " [
        5      S-  T l        SUl        [        5        nT R                  c(  UR                  [        R                  " S[        S95        UR                  T R                  T R                  S9  S S S 5        UR                  5         [!        U 4S	 j[        R                  " T R                  5      R#                  S
5       5       5      T l        g ! , (       d  f       Nf= f)Nrw   rP   rQ   extractall_ctrlr   ignore)actioncategoryru   c              3   Z   >#    U  H   nUR                  TR                  5      v   M"     g 7fr   )relative_tocontrol_dir).0prI  s     r   	<genexpr>2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>  s)       A? MM#//**?s   (+**/*)r/   r.   r+   r  r  r{   r  r  r   extraction_filterenter_contextwarningscatch_warningsr  r  rX   setglobcontrol_paths)rI  rT   r  s   `  r   rJ  NoneInfoExtractTests.setUpClass  s    ll7{C!,,w/2CC[B$$,  !8!8#.@"B CNN3??33H3HNI	 
 			  A\\#//277? A A [s   AD		
Dc                 D    [         R                  " U R                  5        g r   )shutilr  r  rN  s    r   rO  "NoneInfoExtractTests.tearDownClass  s    coo&r   c                 *  ^ [        U4S j[        R                  " T5      R                  S5       5       5      nU R                  S:X  a.  S H(  nUR                  [        R                  " U5      5        M*     U R                  U R                  U5        g )Nc              3   F   >#    U  H  nUR                  T5      v   M     g 7fr   )r  )r  r  r>  s     r   r  ;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>  s$      ;9 MM)$$9s   !r  r   )r  r  r  )r  r  r  r  r  discardrk   r  )r#   r>  	got_pathsr}   s    `  r   check_files_present(NoneInfoExtractTests.check_files_present  sv     ;\\),11&9; ;	 !!V+J!!',,t"45 K++Y7r   c              '     #    [         R                  " [        5      S-  nSU R                  l        U R                  R                  5        H  nU H  n[        X4S 5        M     M     [        R                  " U5         U R                  R                  USS9  U R                  U5        Uv   S S S 5        g ! , (       d  f       g = f7f)Nextractall_noner   r  ru   )r  r  r{   rT   r  r  setattrr	   r  r  r  )r#   
attr_namesr  r  r  s        r   extract_with_none&NoneInfoExtractTests.extract_with_none  s     ll7#&77hh))+F'	40 ( , $HHO<$$S)I %$$s   A;C=0B6-	C6
C Cc                 @   [         R                  " [        5      R                  5       R                  nU R                  S5       n[         R                  " U5      R                  S5       H`  nU R                  US9    UR                  5       R                  nU R                  UR                  5       R                  U5        S S S 5        Mb     S S S 5        g ! [         a    UR                  5       (       d  e  N7f = f! , (       d  f       M  = f! , (       d  f       g = f)Nr  r  r  )r  r  r{   r  st_mtimer  r  r  assertGreaterEqualry  
is_symlink)r#   nowr  r}   r  s        r   test_extractall_none_mtime/NoneInfoExtractTests.test_extractall_none_mtime  s     ll7#((*33##G,S)..v6\\t\,K $		 4 4 //		0D0DcJ -, 7 -,
 # "#00!  1" -, -,sH   8D<C=>C*C=D C:	7C=9C:	:C==
DD
Dc                    [         R                  " [        5      R                  5       R                  n[         R                  " [        5      S-  nUR                  S5        UR                  5       R                  nU R                  S5       n[         R                  " U5      R                  S5       H  nU R                  US9   UR                  5       (       a+  U R                  UR                  5       R                  U5        O?UR                  5       (       a*  U R                  UR                  5       R                  U5        S S S 5        M     S S S 5        g ! , (       d  f       M  = f! , (       d  f       g = f)Nregular_filer   r$   r  r  )r  r  r{   r  r  
write_textr  r  r  is_dirrk   is_file)r#   dir_moder  regular_file_moder  r}   s         r   test_extractall_none_mode.NoneInfoExtractTests.test_extractall_none_mode  s    <<(--/77||G,~=#(--/77##F+sS)..v6\\t\,{{}}(()<)<hG(()<)<):<	 -, 7 ,+,, ,+s%   8E+B EE+
E(#E++
E9c                 \    U R                  S5          S S S 5        g ! , (       d  f       g = f)Nr   r  r"   s    r   test_extractall_none_uid-NoneInfoExtractTests.test_extractall_none_uid      ##E* +**   
+c                 \    U R                  S5          S S S 5        g ! , (       d  f       g = f)Nr   r  r"   s    r   test_extractall_none_gid-NoneInfoExtractTests.test_extractall_none_gid  r  r  c                 \    U R                  S5          S S S 5        g ! , (       d  f       g = f)Nr  r  r"   s    r   test_extractall_none_uname/NoneInfoExtractTests.test_extractall_none_uname      ##G, -,,r  c                 \    U R                  S5          S S S 5        g ! , (       d  f       g = f)Nrx  r  r"   s    r   test_extractall_none_gname/NoneInfoExtractTests.test_extractall_none_gname  r  r  c                 b    U R                  SSSS5          S S S 5        g ! , (       d  f       g = f)Nr   r   r  rx  r  r"   s    r   test_extractall_none_ownership3NoneInfoExtractTests.test_extractall_none_ownership  s&    ##E5'7C DCCs    
.r&   )r'   r(   r)   r*   r  rj  rJ  rO  r  r   r  r  r  r  r  r  r  r  r3   r&   r   r   r  r    so     A A ' '8 	 	K < r   r  c                       \ rS rSrSrSrg)NoneInfoExtractTests_Datai  r   r&   Nr'   r(   r)   r*   r  r3   r&   r   r   r  r    s    r   r  c                       \ rS rSrSrSrg)!NoneInfoExtractTests_FullyTrustedi  r  r&   Nr  r&   r   r   r  r    s    'r   r  c                       \ rS rSrSrSrg)NoneInfoExtractTests_Tari  rT   r&   Nr  r&   r   r   r  r    s    r   r  c                       \ rS rSrSrSrg)NoneInfoExtractTests_Defaulti!  Nr&   r  r&   r   r   r	  r	  !  s    r   r	  c                        \ rS rSrS rS rSrg)NoneInfoTests_Misci%  c                 n   [         R                  " 5       n[        R                  [        R                  [        R
                  4 H  nU R                  US9   [        R                  " USUS9nUR                  [        5      n [        [        S5       nUR                  XE5        S S S 5        S Hy  nU R                  US9   UR                  " S0 US 0D6nU R                  [        U 5         [        [        S5       nUR                  Xu5        S S S 5        S S S 5        S S S 5        M{     S S S 5        M     g ! , (       d  f       N= f! , (       d  f       N@= f! , (       d  f       NI= f! , (       d  f       M  = f! [         a    U[        R                  :X  a   Nre f = f! , (       d  f       GMo  = f)N)	tarformatr   )rv  r$   r   r   )r  r$   r   r   r  rx  r  r&   )r,   r   r/   r   r  r  r  r.   r:  r+   r[  r;  rD  r  r  )r#   bior  rT   rp   r  r  r  s           r   test_addNoneInfoTests_Misc.test_add&  sS   jjl!..0B0B!,,.I	2ll3SK..1=gt,G/ -&6	!\\I\>'.'K)T9J'KH!%!7!7
;D+"H%)'4%8A$'KK$< &9"H ?>&6 32. -,  &9%8"H "H ?> !  G$8$88  32s   ,F$E?D:&E?.F$,E-	.E?EEE-	!F$:
EE?
EE
E*&E-	-
E<7F$?F!F$F!!F$$
F4	c           
      D
   S1S1S1S1S1S1SS1SS14 GH  nU R                  US9   [        R                  " [        SS	9 n[        R
                  " [        R                  " 5       S
SS9n[        R                  " [        SU5         UR                  5         S S S 5        UR                  5        H  nU H  n[        XES 5        M     M     [        R
                  " [        R                  " 5       S
SS9n[        R                  " [        SU5         UR                  5         S S S 5        [        UR                  5       R                  5       R!                  5       UR                  5       R                  5       R!                  5       5       GH4  u  pxUS1:X  a0  ["        R$                  " SU5      (       a  U R'                  US5        M=  US1:X  a0  ["        R$                  " SU5      (       a  U R'                  US5        Mt  US1:X  a0  ["        R$                  " SU5      (       a  U R'                  US5        M  US1:X  ab  UR)                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R+                  US5        GM  US1:X  ab  UR-                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R+                  US5        GM}  US1:X  ab  UR)                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R'                  US5        GM  US1:X  ab  UR-                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R'                  US5        GMO  USS1:X  ab  UR)                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R'                  US5        GM  USS1:X  ab  UR-                  S5      (       aL  UR!                  S5      u  pUR!                  S5      u  pU R'                  X5        U R'                  US5        GM#  U R'                  Xx5        GM7     S S S 5        S S S 5        GM     g ! , (       d  f       GNH= f! , (       d  f       GN= f! , (       d  f       N@= f! , (       d  f       GM
  = f)Nr  r$   r   r   r  rx  )r  rP   r  r   r   r   r   s   2003-01-\d\ds
   ????-??-??s   \d\d:\d\d:\d\ds   ??:??:??s   .([r-][w-][x-]){3}s
   ??????????)   tarfile/   lars/   foo/   /s   [0-9]+)   /tarfile   /users   /bar   1000/s   None   /100)r  r  r  r  )r  r  r  r  )r  r/   r.   r+   r,   r   r   r   r   r   r   r  r  r  r   r   rG  rematchrk   r  r  endswith)r#   r  rT   tio_prevr  r  tio_newr  gotexp_user	exp_groupgot_user	got_groups                r   r  NoneInfoTests_Misc.test_listB  sA   
 $9vh%#9wi!7+eW-=?J ,,*,5,,w=++BJJL'4P&&sHh?HHJ @!nn.F%/	48 &0 / **2::<$O&&sHg>HHJ ?%():)C)C)E)K)K)M)0)9)B)B)D)J)J)L&NMH!gY.288<Lh3W3W((m<#y0RXX>PRZ5[5[((k:#x/BHH2H5> 5>((m<#y0X5H5H<6> 6>.6nnT.B+.1iio+((>((9=#y0X5F5F=6? 6?.6nnT.B+.1iio+((<((I>#w.83F3F%4( 4(.6nnT.B+.1iio+((>((7;#w.83D3Dg3O3O.6nnT.B+.1iio+((<((G<#w'77H<O<OF=H =H.6nnT.B+.1iio+((>((7;#'77H<M<MF=H =H.6nnT.B+.1iio+((<((G< ((7]&N > 65? @? ?> >= 65sV   TAS>S	A9S>S,	#N!S>T
S)$S>,
S;6S>>
TT
T	r&   N)r'   r(   r)   r*   r  r  r3   r&   r   r   r  r  %  s    =8A8r   r  c                    U SS  n[         R                  SS.US      [         R                  SS.US      -  [         R                  S[         R                  [         R                  -  [         R                  S.US      -  [         R
                  SS.US      -  [         R                  SS.US      -  [         R                  S[         R                  [         R                  -  [         R                  S.US	      -  [         R                  SS.US
      -  [         R                  SS.US      -  [         R                  S[         R                  [         R                  -  [         R                  S.US      -  nU$ )Nr   r   )rw   -)r   r'  )r^  r'  r   Sr   r     r  rp     )r^  r'  r^  TrV  )r  S_IRUSRS_IWUSRS_IXUSRS_ISUIDS_IRGRPS_IWGRPS_IXGRPS_ISGIDS_IROTHS_IWOTHS_IXOTHS_ISVTX)r$   str_moderesults      r   _filemode_to_intr:    s`   
 ABxH1
%hqk
21
%hqk
231t||+&qk++
 1
%hqk
23 1
%hqk
23 1t||+&qk+	+ 1
%hqk
2
3 1
%hqk
23 1t||+&qk++ ( Mr   c                   D    \ rS rSrS rS rS rSSSSSSS.S jrS rS	r	g)
r  i  c                 X    [         R                  " 5       U l        [        U5      U l        g r   )r,   r   r  dict
tar_kwargs)r#   r{  s     r   r  ArchiveMaker.__init__  s    ::<v,r   c                 j    [         R                  " SSU R                  S.U R                  D6U l        U $ )Nr   r  r&   )r/   r0   r  r>  tar_wr"   s    r   	__enter__ArchiveMaker.__enter__  s)    __S#txxS4??S
r   c                     U R                   R                  5         U R                  R                  5       U l        S U l        g r   )rA  rX   r  r   r  )r#   r  s     r   __exit__ArchiveMaker.__exit__  s-    

))+r   N)r  r  hardlink_tor$   rm   contentc                   [        U5      n[        R                  " U5      R                  " S0 UD6n	Ub0  [	        U[         5      (       a  UR                  5       n[        U5      nUb  Xil        Uc  [        U	R                  5      nU(       a  [        U5      U	l
        Ub   [        R                  n[        U5      U	l        Ub   [        R                  n[        U5      U	l        UR                  S5      (       a  Uc  [        R                  nUb  X)l        U	R#                  5       (       a  [$        R&                  " U5      n
OS n
U R(                  R+                  X5        g )Nr   r&   )rx  r/   rT  r;  r  r   rl   rm   r  r:  r$   ry  r  r  r  r  r  r$  r,   r   rA  r[  )r#   r   r  r  rG  r$   rm   rH  r{  rp   rv  s              r   r   ArchiveMaker.add  s    4y//$'//9&9'3''!..*w<DL-+D1GL!??D":G"??D";/G==$,??DL==??jj)GG

7,r   c                 r    [         R                  " U R                  5      n[        R                  " SSU0UD6$ )Nrv  r&   )r,   r   r  r/   r.   )r#   r{  r  s      r   r.   ArchiveMaker.open  s+    jj'||2C2622r   )r  r  r>  rA  )
r'   r(   r)   r*   r  rB  rE  r   r.   r3   r&   r   r   r  r    s,    '
 !%4D$'-R3r   r  c                 :    [         R                  " S5      " U 5      $ )NzWASI: Skip symlink test for now)r   skipr  s    r   symlink_testrP    s    }}>?BBr   c                     U $ r   r&   rO  s    r   rP  rP    s    r   c                   V   \ rS rSr\R
                  " \5      S-  r\S-  r\	SS.S j5       r
  S.S jrS	 rS/S
 jrS rS r\S 5       r\\R&                  S 5       5       r\S 5       r\S 5       rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS r S r!S r"S r#S r$S r%\&RN                  " \(RR                  S :H  S!5      S" 5       r*\&RN                  " \(RR                  S :H  S!5      S# 5       r+S$ r,S% r-S& r.S' r/S( r0S) r1S* r2S+ r3S, r4S-r5g)0TestExtractionFiltersi  outerdirr  T)
check_flagc             #   n  #    [         R                  " U R                  5         U R                  S-  nUR                  S5         UR	                  U R
                  US9  S U l        SU l        [        U R                  R                  S5      5      U l
        U R                  R                  U R
                  5        U R                  R                  U5         U v   UR                  5         U R                  (       a  U R                  eU R                  U R                  [        5       5        U(       a   U R                  UR                  5       S5        S S S 5        g ! [         a&  nXPl        SU l        [        5       U l
         S nANS nAff = f! UR                  5         f = f! , (       d  f       g = f7f)Nflagz
capture meru   Fr  T)r	   r  rT  r  r  r  raised_exceptionreraise_exceptionr  r  expected_pathsr  r  rX   rk   r  )r#   rT   rv   rU  	flag_pathr  s         r   check_context#TestExtractionFilters.check_context  sM     ..I  .7t||F; )-%).&&)$--*<*<V*D&E###++DLL9##++I6
		%%+++T00#%8  !4!4!6E/ /.
  ,(+%)-&&)e##, 		% /.s`   !F5!F$EA7F$FA8F$	F5
F&FF$FF$F!!F$$
F2.F5Nc                 x   U R                   (       a  U R                   e[        R                  " [        R                  R                  U R                  U-  5      5      nU R                  XpR                  5        U R                  R                  U5        Ub  [        R                  " 5       (       ag  [        R                  S:w  aS  [        R                  " [        R                  " UR                  5       R                   5      5      nU R#                  X5        Uc;  [%        U[&        5      (       a&  UR)                  S5      (       a  [*        R,                  nUbZ  U R                  U-  R/                  5       n[        R                  " U5      n	 X:w  a   U R1                  UR3                  U	5      5        OU[*        R8                  :X  d  Uc   U R1                  UR;                  5       5        OU[*        R,                  :X  a   U R1                  UR=                  5       5        OsU[*        R>                  :X  a   U R1                  URA                  5       5        O?U[*        RB                  :X  a   U R1                  URE                  5       5        O[G        U5      eUb*  U R#                  UR                  5       RH                  U5        Ub   U R#                  URK                  5       U5        URL                   H  nU R                  RO                  U5        M      g ! [4         a  n
U
R7                  SU	< SU< 35        e S n
A
ff = f)Nntr   z	expected=z, got=)(rX  r  r  r|   r}   normpathr  r  rZ  remover	   	can_chmodr   r  r  S_IMODEr  rk   r  rx  r  r/   r  readlinkr3  samefiler  add_noter5  r  r  r~  is_fifory  r  NotImplementedErrorr  r  parentsr  )r#   r   r  r  r$   rm   rH  r}   r   r  rQ  parents               r   expect_file!TestExtractionFilters.expect_file(  sB      '''||BGG,,T\\D-@ABd//0""4(	 3 3 5 5"''T/--TYY[-@-@ ABCS'<JtS11dmmC6H6H??D!<<$&002C||J/H?OOCLL$:;
 W__$OODLLN+W__$OODKKM*W%%%OODLLN+W__$OODOO-.%d++TYY[00$7T^^-w7llF''/ #%  

ih[3&12s   %L 
L9L44L9c                     U R                   U-  R                  5       nU R                  U[        R                  S9  U R
                   Vs1 s H  nX#R                  ;  d  M  UiM     snU l        g s  snf )Nr  )r  resolverk  r/   r  rZ  ri  )r#   r   	tree_pathr  s       r   expect_any_tree%TestExtractionFilters.expect_any_treeT  se    \\D(113	9**
*!		) *
 
s   
A0!A0c                     U R                  X5         U R                  b  U R                  e S S S 5        SU l        U R                  $ ! , (       d  f       N!= fr  )rD  rX  rY  )r#   exc_type
message_res      r   expect_exception&TestExtractionFilters.expect_exception]  sQ    ##H9$$0+++ 1 : "'$$$	 :9s   A
Ac                    [        5        nUR                  S5        S S S 5        S H=  nU R                  WR                  5       U5         U R	                  S5        S S S 5        M?     g ! , (       d  f       NR= f! , (       d  f       Mb  = f)Nz
benign.txt)r  rT   r   r  r   r\  r.   rk  r#   r  rv   s      r   test_benign_file&TestExtractionFilters.test_benign_filed  sa    ^sGGL! 4F##CHHJ7  . 87 5 ^ 87s   A)
A:)
A7:
B		c                    [        5        nUR                  U R                  S-  5        S S S 5        U R                  WR	                  5       S5         U R                  S5        S S S 5        S H  nU R                  UR	                  5       U5         [        U R                  5      R                  S5      (       a9  [        U R                  5      R                  S5      nU R                  U S35        O U R                  [        R                  S5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       M  = f)Nzescaped.evilr  z../escaped.evilrT   r   r   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r  r   rT  r\  r.   rk  rx  r  lstriprv  r/   AbsolutePathError)r#   r  rv   outerdir_strippeds       r   test_absolute#TestExtractionFilters.test_absolutek  s     ^sGGDMMN23  
O<./ = $F##CHHJ7t}}%0055 ),DMM(:(A(A#(F%$$(9':-%HI ))11IK 87 $ ^ =< 87s$   D!D2BE!
D/2
E 
E	c                 F   [        5        nUR                  SSS9  UR                  SSS9  UR                  S5        S S S 5        [        R                  " 5       (       Ga  U R	                  WR                  5       S5         U R                  b  U R                  [        5         S S S 5        g U R                  SSS9  U R                  SSS9  U R                  S5         S S S 5        U R	                  UR                  5       S	5         U R                  [        R                  S
5        S S S 5        U R	                  UR                  5       S5         U R                  [        R                  S5        S S S 5        g U R	                  WR                  5       S5         U R                  S5        S S S 5        U R	                  UR                  5       S	5         U R                  S5        S S S 5        U R	                  UR                  5       S5         U R                  S5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNc= f! , (       d  f       GN,= f! , (       d  f       g = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ncurrentr  r  rj  z
current/..parent/evilr  r  rT   T'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr   zK'parent' would link to ['"].*outerdir['"], which is outside the destination)r  r   r	   r  r\  r.   rX  rv  rY  rk  r/   OutsideDestinationErrorLinkOutsideDestinationErrorr#   r  s     r   test_parent_symlink)TestExtractionFilters.test_parent_symlink  s     ^s
 GGI#G. GGHG6GGM"    ""##CHHJ@((4 ))/:  A@ $$Y3$?$$X,$G$$Y/ A ##CHHJ6%%339: 7 ##CHHJ7%%779: 87 ##CHHJ@  / A##CHHJ6  / 7##CHHJ7  / 87Y ^ A@ 76 87 A@6677sY   2H) $H;-1H;!I!II0JJ)
H8;
I

I
I-0
I>
J
J c                    [        5        nSn[        R                  S:X  a  SnOS[        R                  ;   ag  [        R
                  " U R                  R                  S5      nSn[        [        U R                  5      5      U-   nXF-
  [        U5      U-   -  nSU-  nO[        S5      eSnSn	U H  n
UR                  [        R                  R                  X5      [        R                   S	S
9  UR                  [        R                  R                  X5      US9  [        R                  R                  X5      n[        R                  R                  X5      n	M     [        R                  R                  " / UQSP76 nS/[        U5      -  nUR                  U[        R                  R                  " U6 S9  UR                  S[        R                  R                  US5      S9  UR                  S[        R                  R                  SS5      S9  UR                  SSS9  UR                  SSS9  S S S 5        U R#                  S5         U R%                  WR'                  5       SSS9   [        R                  S:X  a  U R)                  [*        [,        45        OU R.                  (       a  U R)                  [0        5        O_U R3                  W5        U R5                  SSS9  U R5                  SSS9  U R5                  S[        R6                  S9  U R5                  SUS9  S S S 5        S S S 5        S H  nU R#                  U5         U R%                  WR'                  5       US9   U R)                  [8        [0        45      n[;        U[8        5      (       a[  [        R                  S:X  a  U R=                  UR>                  S5        O*U RA                  URB                  [B        RD                  5        S S S 5        S S S 5        M     g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       NP= f! , (       d  f       GM*  = f)Nabcdefghijklmnopr  dddddddddddddddddddddddddPC_PATH_MAXr   dz1Need to guess component length for {sys.platform}r   
drwxrwxrwxr  r  llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllr  escapeflaglinkrW  rG  	overwrite)rH  zescape/newfilenewr  F)rv   rU  z
../newfilern  r   r~  ru   )r  r     )#r  r   r  r|   pathconf_namespathconfrT  rj  rl   rx  r  rh  r   r}   r~   r/   r  r  r\  r.   rv  rE  rY  rX  r  rq  rk  ry  ry  r  r  winerrorrk   errnoENAMETOOLONG)r#   r  steps	componentmax_path_lenpath_sep_lendest_lencomponent_lenr}   	step_pathilinkpathparent_segmentsrv   r  s                  r   test_realpath_limit_attack0TestExtractionFilters.test_realpath_limit_attack  sY   
 ^s
 'E||w&$	""3"33!{{4==+?+?O s4<<01L@!-!8c%j<>W X-/	)*]^^DIT5GOO)  +T-)Dww||D4GGLL6	  ww||4U4G4H#fs5z1OGGH)GGHGGHh)EGF GGJBGGLL6,JGKGGJG4GG$eG4O R ll?+  O,1 ! 3||w&%%'8/&JK&&%%h/ $$Y/  [ A  u =   @   ;3 ,  $Ff%t'9'9#((*V'9'T++Wh,?@c7++||w. cllK@((E4F4FG (U%% $s ^T3 3 ,+" (U'T%%sV   H,P P00B7P'P0Q,BQ8Q
P
P-	)P00
P?
QQ
Q#	c                 ~   [         R                  " 5       (       Ga;  [        R                  R	                  [
        S5      n[        R                  " U5        [        R                  " S[        R                  R	                  US5      5        [        [        R                  R	                  USSS5      S5          S S S 5        [        R                  R                  [        R                  R	                  US5      5      (       a  SnOQ[        R                  R                  [        R                  R	                  USS5      5      (       a  SnO[        S	5      e[        5        nUR                  SSS
9  UR                  SSS
9  UR                  S5        S S S 5        U R                  WR                  5       S5         [         R                  " 5       (       a2  U R                  SSS
9  U R                  SSS
9  U R                  S5        O"U R                  S5        U R                  S5        S S S 5        U R                  UR                  5       S5         [         R                  " 5       (       a!  U R                  [         R"                  S5        O"U R                  S5        U R                  S5        S S S 5        U R                  UR                  5       S5         [         R                  " 5       (       aI  W(       a!  U R                  [         R"                  S5        OCU R                  [         R$                  S5        O"U R                  S5        U R                  S5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNh= f! , (       d  f       N= f! , (       d  f       g = f)Nresolution_testr  r  r  rn  r   TFz#Could not determine link resolutionr  zcurrent/parentr  r  rj  r  zcurrent/rT   r  r   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r	   r  r|   r}   r~   r{   r   rZ  r.   r  rX  r  r   r\  rk  rv  r/   r  r  )r#   testpathdotdot_resolves_earlyr  s       r   test_parent_symlink2*TestExtractionFilters.test_parent_symlink2  s      ""ww||G->?HHHX JJsBGGLL9=> bggll8YfEsK L ww~~bggll8V<== )-%XtV DEE ).%$%JKK^s GGI#G. GG$G6GGM"  
O<$$&&  s ;  d ;  +  ,  / = 
E2$$&&%%77,-   ,  / 3 
F3$$&&())#;;01 ))#??01   ,  /% 43_ LK ^ =< 32 43s?   7M'!2M9;A/NANBN.'
M69
N
N
N+.
N<c                    [        5        nUR                  SU R                  S9  UR                  S5        S S S 5        U R                  WR	                  5       S5         [
        R                  " 5       (       a,  U R                  SU R                  S9  U R                  S5        OU R                  S5        S S S 5        U R                  UR	                  5       S5         [
        R                  " 5       (       a!  U R                  [        R                  S5        OU R                  S5        S S S 5        U R                  UR	                  5       S5         U R                  [        R                  S	5        S S S 5        g ! , (       d  f       GNN= f! , (       d  f       N= f! , (       d  f       N{= f! , (       d  f       g = f)
Nrj  r  r  r  r  rT   r  r   &'parent' is a link to an absolute path)r  r   rT  r\  r.   r	   r  rk  rv  r/   r  AbsoluteLinkErrorr  s     r   test_absolute_symlink+TestExtractionFilters.test_absolute_symlinkX  sD    ^sGGHG7GGM"  
O<$$&&  dmm D  +  / = 
E2$$&&%%77,-   / 3 
F3!!))8: 43+ ^ =< 32 43s1   ,E>AFAF!!F2>
F
F!
F/2
G c                 z   [        5        nUR                  SU R                  S-  S9  S S S 5        U R                  WR	                  5       S5         U R                  [        S5        S S S 5        U R                  UR	                  5       S5         U R                  [        S5        S S S 5        U R                  UR	                  5       S5         U R                  [        R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       g = f)	Nrj  rP  r  r  z.*foo. not foundrT   r   r  )	r  r   rT  r\  r.   rv  r  r/   r  r  s     r   test_absolute_hardlink,TestExtractionFilters.test_absolute_hardlinkv  s     ^sGGH$--%*?G@  
O<!!(,>? = 
E2!!(,>? 3 
F3!!))8: 43 ^ =< 32 43s/   C9D
D!D,9
D

D
D),
D:c                    [        5        nUR                  SSS9  S S S 5         U R                  WR                  5       SS9   [        R
                  " 5       (       aF  [        U R                  [        5      (       a  U R                  [        5        OU R                  SSS9  O S S S 5        S HL  nU R                  WR                  5       U5         U R                  [        R                  S5        S S S 5        MN     g ! , (       d  f       N= f! , (       d  f       Nr= f! [         a     Nf = f! , (       d  f       M  = f)N../mooz..//tmp/moor  r  ru   r~  zH'../moo' would be extracted to '.*moo', which is outside the destination)r  r   r\  r.   r	   r  r  rX  rY  rv  rk  r/   r  rz  s      r   test_sly_relative0(TestExtractionFilters.test_sly_relative0  s    ^sGGHG7 	##CHHJ#G((**!$"7"7II --o>((m(L  H& $F##CHHJ7%%77,- 87 $1 ^
 HG   		 87sG   D D" A"D%D" !D2 
D
DD" D" "
D/.D/2
E	c                 Z   [        5        nUR                  S5        UR                  SSS9  S S S 5        U R                  WR                  5       S5         U R	                  S[
        R                  S9  [        R                  " 5       (       a  U R	                  SS	S9  S S S 5        S
 HL  nU R                  UR                  5       U5         U R                  [
        R                  S5        S S S 5        MN     g ! , (       d  f       N= f! , (       d  f       Nr= f! , (       d  f       M  = f)Nztmp/ztmp/../../mooztmp/../..//tmp/moor  r  tmprn  r  ztmp/../../tmp/moor~  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r  r   r\  r.   rk  r/   r  r	   r  rv  r  rz  s      r   test_sly_relative2(TestExtractionFilters.test_sly_relative2  s     ^sGGFOGGO0DGE  
O<U9$$&&  6I J =
 $F##CHHJ7%%33$% 87 $ ^ =< 87s$   "C9A	D
!D9
D

D
D*	c           	      f   [        5        nUR                  SSS9  UR                  S[        R                  R	                  SS5      S9  UR                  S[        R                  R	                  S	SS5      S
9  S S S 5        S H  nU R                  WR                  5       U5         U R                  SSS9  U R                  SSS9  [        R                  " 5       (       a  U R                  SSSS9  OU R                  SSS9  S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Ntargetdir/targetr  r  linkdir/hardlink	targetdirrV  r  linkdir/symlinkr  r  rT   r   r  z../targetdir/targetrm   r  
r  r   r|   r}   r~   r\  r.   rk  r	   r  rz  s      r   test_deep_symlink'TestExtractionFilters.test_deep_symlink  s   
 ^sGG&QG/GG&BGGLLX5'G ( GG%"'',,k83-G .  5F##CHHJ7  !3! <  !3! <((**$$%6Q0E % G $$%6Q$? 87 5 ^ 87s   A.D&AD!
D!
D0	c                 B   [        5        nUR                  SSS9  UR                  S[        R                  R	                  SS5      S9  UR                  SSS	9  UR                  S
[        R                  R	                  SS5      S9  UR                  S[        R                  R	                  SS5      S9  S S S 5        S H  nU R                  WR                  5       U5         U R                  SSS	9  U R                  S
SS	9  U R                  SSS	9  [        R                  " 5       (       a#  U R                  SSSS9  U R                  SSSS9  O U R                  SSS	9  U R                  SSS	9  S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nr  hardlinkr  symlink2linkdir	hardlink2r  r  r  r  r  rV  r  zlinkdir/hardlink2rZ  r  r  r  rz  s      r   test_chains!TestExtractionFilters.test_chains  s{    ^sGG%*G=GGJ277<<;,(G )GG&QG/GG&BGGLLh4WGXGG'RWW\\)Y5WGX  5F##CHHJ7  !3! <  !3! <  !41 =((**$$%6Q0: % <$$Za0C % E $$%6Q$?$$Za$8 87 5 ^ 87s   B+E>#BF>
F
F	c           	         [        5        nUR                  S5        UR                  S5        UR                  S[        R                  R	                  SS5      S9  UR                  S[        R                  R	                  SSS	5      S9  UR                  SS
S9  UR                  S[        R                  R	                  SS5      S9  S S S 5        U R                  WR                  5       S5         [        R                  " 5       (       d   U R                  [        R                  5        O~[        R                  S:X  a   U R                  [        R                  5        OJU R                  [        R                  S5      nU R                  UR                   [        R                  5        S S S 5        S H  nU R#                  U5         U R                  UR                  5       U5         [        R                  " 5       (       d4  U R%                  S5        U R%                  S5        U R%                  S5        ORU R%                  S5        U R%                  S5        U R%                  SSS9  U R%                  SSS9  U R%                  SS
S9  S S S 5        S S S 5        M     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N?= f! , (       d  f       GM0  = f)Nz	a/t/dummyzb/cr   r^  r  zc/escaper  	link_herer   boomr  r  r   r  zJlink 'boom' would be extracted as a copy of 'c/escape', which was rejected)rT   r  zc/z
a/t/escapez../../link_here)r  r   r|   r}   r~   r\  r.   r	   r  rv  r/   r  r   r  LinkFallbackErrorrw  	__cause__r  rk  )r#   r  rQ  rv   s       r   test_sneaky_hardlink_fallback3TestExtractionFilters.test_sneaky_hardlink_fallback  s2   
 ^s GGK GGDMGGCBGGLLc$:G;GGJ277<<d8C,EG F GGCCG( GGFS((CGD " 
F3((** %%779(%%g&I&IJ))--78 %%akk&-&I&IK 4" -Ff%t'9'9#((*f'M ,,..$$[1$$T*$$T*$$[1$$T*$$\>O$P$$V8I$J$$SS$9 (N%% -E ^" 43$ (N'M%%s>   B>J1B9J1!K)B!K
K
J.1
K 
KK
K$	c                    [        5        nUR                  S[        R                  R	                  SSSSS5      S9  UR                  SSS9  S S S 5        S H  nU R                  WR                  5       U5         [        R                  " 5       (       a8  U R                  SSS9  US:X  a  U R                  SSS9  OU R                  SS	S9  O S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)
Nr  r  r  z	link-herer  r  r  r   zlink/link/../../link-here)
r  r   r|   r}   r~   r\  r.   r	   r  rk  rz  s      r   test_exfiltration_via_symlink3TestExtractionFilters.test_exfiltration_via_symlink$  s     ^sGGHffdDR])^G_GGFtG,  5F##CHHJ7((**$$V$='((k(J((4O ) Q  87 5	 ^
 87s   AC:AC,
C),
C;	c                    [        5        nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SS	S9  S S S 5        S
 H  nU R                  WR                  5       U5       n[        R
                  " 5       (       d  U R                  S5        OGUS:X  a!  U R                  SS	S9  U R                  SSS9  O U R                  SS	S9  U R                  SSS9  [        R                  S:w  a9  UR                  R                  5       R                  nU R                  US-  S5        S S S 5        M     g ! , (       d  f       GN= f! , (       d  f       GM  = f)Nza/pwnr  r  za/pwn/r  r   zx/../za/xz../r  r   r  r  )r  r   r\  r.   r	   r  rk  r   r  rT  r  r  r  )r#   r  rv   ccr  s        r   test_chmod_outside_dir,TestExtractionFilters.test_chmod_outside_dir;  s:   
 ^sGGGG, GGH<G0GGGG0 GGEuG.  5F##CHHJ72 ,,..$$X.v%$$Uu$=$$W$=$$Uu$=$$W$A<<7* kk..088G''%? 87 5 ^ 87s   AE9CE
E
E)	c                    [        5        nUR                  S5        UR                  S5        UR                  SSS9  UR                  SSS9  S S S 5        S Hp  nU R                  WR                  5       U5       nU R	                  S5        U R	                  S5        U R	                  S5        U R	                  S5        S S S 5        Mr     g ! , (       d  f       N= f! , (       d  f       M  = f)	Ndir/zdir/../afilelink1r  link2zdir/../dir/../afiler  afilery  )r#   r  rv   r  s       r   test_link_fallback_normalizes3TestExtractionFilters.test_link_fallback_normalizes[  s     ^sGGFOGGN#GGGG8GGG)>G?	  5F##CHHJ72  (  )  )  )	 87 5 ^ 87s   AC;AC
C
C-	c           
      R   [        5        nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SS	S9  UR                  S
SS9  UR                  SSS9  UR                  SSS9  S S S 5        [        R                  R	                  [
        S5      n[        US5          S S S 5         [        R                  " U5      R                  [        R                  -  [        R                  -  [        R                  -  n [        R                  " X#5        [        R                  " U5      R                  nU[        R                  -  (       a  SOSnU[        R                  -  (       a  SOSnU[        R                  -  (       a  SOSn[        R"                  " U5        [        R$                  " U5        [        R                  " U5      R                  [        R                  -  [        R                  -  [        R                  -  n[        R                  " X#5        [        R                  " U5      R                  nU[        R                  -  (       a  SOSn	U[        R                  -  (       a  SOSn
U[        R                  -  (       a  SOSn[        R&                  " U5        U R)                  WR                  5       S5         U R+                  SSU SU SU 3S9  U R+                  SSS9  U R+                  SSS9  U R+                  SS	S9  U R+                  S
SS9  U R+                  SSU SU	 3S9  U R+                  SSU
 SU SU	 3S9  S S S 5        U R)                  UR                  5       S5         U R+                  SSS9  U R+                  SSS9  U R+                  SSS9  U R+                  SS	S9  U R+                  S
SS9  U R+                  SSS9  U R+                  SSS9  S S S 5        U R)                  UR                  5       S5         [        R,                  " [        R.                  " U R0                  R                  5       R                  5      5      nU R+                  SSS9  U R+                  SSS9  U R+                  SS S9  U R+                  SS!S9  U R+                  S
S"S9  U R+                  SUS9  U R+                  SUS9  S S S 5        g ! , (       d  f       GNw= f! , (       d  f       GNO= f! [         a<  nUR                  [        [        SS5      :X  a  U R!                  S5         S nAGN'e S nAff = f! [        R"                  " U5        f = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       g = f)#Nall_bitsr  r   	perm_bitsz
?rwxrwxrwxexec_group_otherz
?rw-rwxrwxread_group_onlyz
?---r-----no_bitsz
?---------r  z
?---rwsrwtzdir_all_bits/ztmp.filer   EFTYPEr   z?chmod() failed with EFTYPE: regular users cannot set sticky bitr^  r^  r   r  z?rwr  z?---rwrT   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr   z
?rw-r--r--z
?rw-r-----z
?rw-------)r  r   r|   r}   r~   r{   r.   r  r  r7  r3  r/  r  ry  r  r~  rU  r  r   r   r\  rk  r  rc  rT  )r#   r  tmp_filenamenew_moder  got_mode_t_file
_suid_file
_sgid_file_t_dir	_suid_dir	_sgid_dirnormal_dir_modes                r   
test_modes TestExtractionFilters.test_modesk  s    ^sGGJ\G2GGKlG3GG&\G:GG%LG9GGILG1GGFG.GGO,G7  ww||GZ8,$ %	$-55,,')-68<EH	0 ww|,44H&5cCG!)DLL!8sJ!)DLL!8sJIIl#
GGL)11ll#%)\\248LLA
(77<(00!DLL0s$t||3C#	$t||3C#	

O<Z$'
|2j\G9"M  O[|</lC.\BY\:VF9+Rx*HI_$'	{"YKr&"J  L = 
E2Zl;[|</lC.\BY\:V,7_<@ 3 
F3"mmDLL""$,,-. /OZl;[|</lC.\BY\:V/:_?C 43E ^ %$  99x ;; MM #H I I  IIl# =< 32 43s}   A1S,4S>?AU T )A4U B	U4A1V&B=V,
S;>
T
U0U
U UUU U14
V
V
V&c                 .   [        5        nUR                  S[        R                  S9  S S S 5        S Ha  nU R	                  WR                  5       U5         [        [        S5      (       a  U R                  S[        R                  S9  O S S S 5        Mc     U R	                  WR                  5       S5         U R                  [        R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       M  = f! , (       d  f       g = f)NrP  rn  )r  rT   mkfifor   z'foo' is a special file)r  r   r/   r~  r\  r.   r   r|   rk  rv  SpecialFileErrorrz  s      r   	test_pipeTestExtractionFilters.test_pipe  s    ^sGGE 0 0G1  -F##CHHJ72x(($$U1A1A$B  87 - 
F3!!(()+ 43 ^ 87 43s#   C#6C49!D#
C14
D	
Dc                    [         R                  [         R                  [         R                  4 GH  n[         R                  " S5      nXl        [         R                  " US5      nU R                  X25        [         R                  " US5      nU R                  UR
                  U5        U R                  [         R                  5       n[         R                  " US5        S S S 5        U R                  WR                  R                  [         R                  5        U R                  UR                  R                  R                   S5        GM!     g ! , (       d  f       Nx= f)NrP  r   )r/   r~  rx  r4  rT  r  fully_trusted_filterrh  
tar_filterrk   rJ  r  data_filterrw  r  rp   r   )r#   special_typerp   trustedrT   r  s         r   test_special_files(TestExtractionFilters.test_special_files  s     $,,goowNLooe,G'L227B?GMM'+$$Wb1CSXX|4""7#;#;<##GR0 =!!",,"6"6HR\\1166> O =<s   
E
E"	c                     [         R                  R                  [        5       nUR	                  5        H+  n[         R
                  " US5      nU R                  X25        M-     S S S 5        g ! , (       d  f       g = f)Nr   )r/   r0   r.   r+   r  r  rh  r#   rT   rp   filtereds       r   test_fully_trusted_filter/TestExtractionFilters.test_fully_trusted_filter  sQ    __!!'*c>>+"77Dh0 , +**s   A A--
A;c                    [         R                  R                  [        SS9 nUR	                  5        Hg  n [         R
                  " US5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        Mi     S S S 5        g ! [         a     M  f = f! , (       d  f       g = fNrP   r  r   )
r/   r0   r.   r+   r  r  UnicodeEncodeErrorrh  r   r  r	  s       r   test_tar_filter%TestExtractionFilters.test_tar_filter  s     __!!'K!@C>>+&11'2>H hmmW\\:hmmW\\: , A@ * 	 A@s/   B9B(AB9(
B62B95B66B99
Cc                    [         R                  R                  [        SS9 nUR	                  5        Hg  n [         R
                  " US5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        Mi     S S S 5        g ! [         R                  [        4 a     M  f = f! , (       d  f       g = fr  )r/   r0   r.   r+   r  r  FilterErrorr  rh  r   r  r	  s       r   test_data_filter&TestExtractionFilters.test_data_filter  s     __!!'K!@C>>+&227B?H hmmW\\:hmmW\\: , A@  ++-?@ 	 A@s/   C	B(AC	(CC	CC		
Cr  zrequires native bytes pathsc                    [         R                  " [        R                  5      n[         R                  " US5      nU R                  UR                  UR                  5        [         R                  " US5      nU R                  UR                  UR                  5        [         R                  " S5      nU R                  [        [         R                  US5        U R                  [        [         R                  US5        [         R                  " S5      nU R                  [        [         R                  US5        U R                  [        [         R                  US5        g )Nr   ztest    )r/   rT  r	   TESTFNr  rh  r   r  rJ  r  r  )r#   rp   r
  s      r   test_filter_unencodable-TestExtractionFilters.test_filter_unencodable  s     //)"2"23%%gr2hmmW\\2&&w3hmmW\\2//*-*g&8&8'2F*g&9&97BG//(+,g.@.@'2N,g.A.A7BOr   c                 Z   [        SSS9 nUR                  S5        S S S 5        [        R                  " 5        nWR	                  SSSS9nU R                  UR                  5       S	/5        U R                  [        5         UR                  [        R                  S
9  S S S 5        U R                  [        R                  " 5       / 5        UR	                  SSSSS9n[        R                  " 5        nUR                  [        R                  S
9  S S S 5        U R                  [        R                  " 5       / 5        U R!                  SWR#                  5       5        S S S 5        g ! , (       d  f       GNR= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r  u	   r  surrogatepassr   )rR   r  r  r  ru   r   )rR   r  r  debugztarfile: UnicodeEncodeError )r  r   r	   r   r.   rk   r<  rJ  r  r  r/   r  r|   listdirr   captured_stderrr  r   )r#   r  r  rT   stderrs        r   test_extract_unencodable.TestExtractionFilters.test_extract_unencodable  s>    73DEGG() F!S((GO&'  )CS\\^hZ8""#56g&8&89 7RZZ\2.((GO&'q  2C((*fg&8&89 +RZZ\2.MM8&//:KL "! FE 76 +* "!sI   E(AFE: AF4FAF(
E7:
F	F
F	F
F*c                 p   [        5        nUR                  S5        S S S 5        [        R                  " S[        45         U R                  WR                  5       S 5         U R                  S5        S S S 5        S S S 5        g ! , (       d  f       Nn= f! , (       d  f       N(= f! , (       d  f       g = f)NrP  zPython 3.14)r  r   r   check_warningsr  r\  r.   rk  r  s     r   test_default_filter_warns/TestExtractionFilters.test_default_filter_warns!  s    ^sGGEN ++ 235##CHHJ5  ' 65 5 ^ 655 5s/   B!B'"B4B'
B
B$	 B''
B5c                     [         R                  " [        S5      nS nX!l        U R	                  US 5         U R                  S5        S S S 5        g ! , (       d  f       g = f)Nrw   c                 (    U R                   S:X  a  U $ g Nrf   r2  rp   r}   s     r   strict_filterSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filter,      ||.r   rf   )r/   r0   r+   r  r\  rk  )r#   rT   r+  s      r   &test_change_default_filter_on_instance<TestExtractionFilters.test_change_default_filter_on_instance*  sI    oogs+	
 !.T*_- +**s   A
A c                 L   S n[         R                  " [        S5      n[        R                  " [         R                  S[        U5      5         U R                  US 5         U R                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                 (    U R                   S:X  a  U $ g r)  r2  r*  s     r   r+  PTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filter6  r-  r   rw   r  rf   )r/   r0   r+   r   r   r  r\  rk  )r#   r+  rT   s      r   #test_change_default_filter_on_class9TestExtractionFilters.test_change_default_filter_on_class5  sw    	
 oogs+w0C+M:<##C.  1 /< <..< <s$   B!B3B
B	B
B#c                      " S S[         R                  5      nU" [        S5      nU R                  US 5         U R	                  S5        S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrS rSrg)QTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclassiB  c                 (    UR                   S:X  a  U$ g r)  r2  r#   rp   r}   s      r   r  cTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filterC  s    <<?2"Nr   r&   Nr  r&   r   r   TarSubclassr7  B  s     r   r;  rw   rf   )r/   r0   r+   r\  rk  )r#   r;  rT   s      r   &test_change_default_filter_on_subclass<TestExtractionFilters.test_change_default_filter_on_subclassA  sJ    	 '// 	  '3'T*_- +**s   A
A"c                     [         R                  " [        S5      nSUl        U R	                  US 5         U R                  [        5        S S S 5        g ! , (       d  f       g = f)Nrw   r   )r/   r0   r+   r  r\  rv  rj  r?  s     r   $test_change_default_filter_to_string:TestExtractionFilters.test_change_default_filter_to_stringM  sD    oogs+ &T*!!), +**s   A
A"c                 x  ^  U 4S jn[        5        nUR                  S5        UR                  S5        UR                  S5        S S S 5        T R                  WR                  5       U5         T R	                  S5        T R	                  S5        S S S 5        g ! , (       d  f       NZ= f! , (       d  f       g = f)Nc                    > TR                  UTR                  5        U R                  S:X  a  U R                  SS9$ U R                  S:X  a  g U $ )N	move_thismovedr2  ignore_this)rh  r  r   r;  )rp   r}   r#   s     r   custom_filter?TestExtractionFilters.test_custom_filter.<locals>.custom_filterT  sF    MM$-||{*G44||},Nr   rC  rE  keeprD  ry  )r#   rF  r  s   `  r   test_custom_filter(TestExtractionFilters.test_custom_filterS  s    	 ^sGGK GGM"GGFO  
M:W%V$ ;:	 ^ ;:s   4B.#B+
B(+
B9c                    [        5        nUR                  S5        S S S 5        U R                  WR                  5       S5         U R	                  [
        5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)NrP  zbad filter name)r  r   r\  r.   rv  r  r  s     r   test_bad_filter_name*TestExtractionFilters.test_bad_filter_named  sU    ^sGGEN 
,=>!!*- ?> ^>>s   A$A5$
A25
Bc                     " S S5      n[        5        nUR                  S5        UR                  SSS9  UR                  S5        S S S 5        U" 5        nU R                  WR                  5       U5         U R	                  S5        S S S 5        S S S 5        U R                  WR                  S5        U R                  UR                  S5        g ! , (       d  f       N= f! , (       d  f       N`= f! , (       d  f       Ni= f)	Nc                   &    \ rS rSrS rS rS rSrg)BTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilterin  c                     SU l         U $ r,  )num_files_processedr"   s    r   rB  LTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__o  s    +,(r   c                      [         R                  " X5      nU =R                  S-  sl        U$ ! [         R                   a     g f = f)Nr   )r/   r  r  rR  r9  s      r   __call__KTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__s  sI     %11'@G ((A-( **   s   / AAc                     SU l         g )NT)done)r#   exc_infos     r   rE  KTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__{  s	     	r   )rX  rR  N)r'   r(   r)   r*   rB  rU  rE  r3   r&   r   r   StatefulFilterrP  n  s    !r   r[  goodbadr   r  r   T)r  r   r\  r.   rk  rk   rR  rX  )r#   r[  r  rF  s       r   test_stateful_filter*TestExtractionFilters.test_stateful_filterj  s    	! 	!  ^sGGFOGGEcG*GGFO  ##CHHJ>  ( ?  	::A>++T2 ^
 ?> s/   3C!C58C$
C5
C!$
C2	.C55
Dc                 D
   S nS nS nS nS n[        5        nUR                  S5        S S S 5        U R                  WR                  SS9U5          S S S 5        U R                  UR                  SS9U5          S S S 5        U R                  UR                  SS9U5          S S S 5        U R                  UR                  SS9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  SS9U5         U R	                  [        5        S S S 5        U R                  UR                  S	S9U5          S S S 5        U R                  UR                  S	S9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  S	S9U5         U R	                  [        5        S S S 5        U R                  UR                  S	S9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  S	S9U5         U R	                  [        5        S S S 5        U R                  UR                  S
S9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  S
S9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  S
S9U5         U R	                  [        5        S S S 5        U R                  UR                  S
S9U5         U R	                  [
        R                  5        S S S 5        U R                  UR                  S
S9U5         U R	                  [        5        S S S 5        U R                  UR                  SS9U5         U R	                  [        5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNR= f! , (       d  f       GN'= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN{= f! , (       d  f       GNP= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN[= f! , (       d  f       g = f)Nc                 .    [         R                  " S5      e)Nzfailed with ExtractError)r/   ExtractErrorr*  s     r   extracterror_filterBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filter  s    &&'ABBr   c                 .    [         R                  " S5      e)Nzfailed with FilterError)r/   r  r*  s     r   filtererror_filterATestExtractionFilters.test_errorlevel.<locals>.filtererror_filter  s    %%&?@@r   c                     [        S5      e)Nzfailed with OSError)ry  r*  s     r   oserror_filter=TestExtractionFilters.test_errorlevel.<locals>.oserror_filter  s    /00r   c                 .    [         R                  " S5      e)Nzfailed with base TarError)r/   TarErrorr*  s     r   tarerror_filter>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filter  s    ""#>??r   c                     [        S5      e)Nzfailed with ValueError)r  r*  s     r   valueerror_filter@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filter  s    566r   rn  r   rx  r   r   zboo!)r  r   r\  r.   rv  r/   rl  r  r  ry  rb  rj  )r#   rc  rf  ri  rm  rp  r  s          r   test_errorlevel%TestExtractionFilters.test_errorlevel  s   	C	A	1	@	7 ^sGGFO 
 A 68KL M A 68JK L A 6G H A 6H!!'"2"23 I A 68IJ!!*- K
 A 68KL M A 68JK!!'"5"56 L A 6G!!'* H A 6H!!'"2"23 I A 68IJ!!*- K
 A 68KL!!'"6"67 M A 68JK!!'"5"56 L A 6G!!'* H A 6H!!'"2"23 I A 68IJ!!*- K
 F ;=OP!!), QPq ^
 ML LK HG IH KJ
 ML LK HG IH KJ
 ML LK HG IH KJ
 QPs   O1P<P%P' P9QQ; Q/R? RR% R7
 S	S S-S?T1
P 
P
P$'
P69
Q
Q
Q,/
Q>
R
R"%
R47
S	
S
S*-
S<?
T
T)rZ  rX  rY  )NNNNN)r  )6r'   r(   r)   r*   r  r  r{   rT  r  r   r\  rk  rq  rv  r{  r  rP  r  r	   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r  r!  r%  r.  r3  r<  r?  rI  rL  r^  rr  r3   r&   r   r   rS  rS    s   
 ||G$z1H G7; '1 '1R BF'+*0X
%/K2 00 00d ""FH # FHP T0 T0l : :::"  -  -D % %& @ @. 9 92 1: 1:f  , @ @>* ND`+$?1;
; __S\\W,.KLP MP __S\\W,.KLM MM((	.
2
.-%".3<E-r   rS  c                   h    \ rS rSr\R
                  R                  \S5      r\	S 5       r
S rS rSrg)OverwriteTestsi  testoverwritec                 R   [         R                  R                  [        S5      =ol        U R                  [        R                  U5        [        R                  " US5       n[        R                  " S5      nSUl        UR                  U[        R                  " S5      5        S S S 5        [         R                  R                  [        S5      =ol        U R                  [        R                  U5        [        R                  " US5       nUR                  UR!                  [         R"                  S5      5        S S S 5        [         R                  R                  [        S5      nXl        U R                  [        R                  U5        [        R                  " US5       n[        R                  " S5      nSUl        UR                  U[        R                  " S5      5        S S S 5        g ! , (       d  f       GNV= f! , (       d  f       N= f! , (       d  f       g = f)	Nztar-with-file.tarr   r  r   s
   newcontentztar-with-dir.tarztar-with-implicit-dir.tarz	test/file)r|   r}   r~   r{   ar_with_fileaddClassCleanupr	   r  r/   r.   rT  rm   r[  r,   r   ar_with_dirr:  curdirar_with_implicit_dir)rI  r  rT   r^  s       r   rJ  OverwriteTests.setUpClass  sh   !ww||G5HIII,,a0\\!S!S'AAFKK2::m45 "
 !ggll74FGGOI,,a0\\!S!SKKryy&9: " GGLL"=>#$ I,,a0\\!S!S,AAFKK2::m45 "! "! "! "!s&   "AG50H(AH5
H
H
H&c                 0    [         R                  " US5      $ re  )r/   r.   )r#   r}   s     r   r.   OverwriteTests.open  s    ||D#&&r   c                 8    UR                  U R                  SS9  g )Nr  ru   )r  testdir)r#   ars     r   r  OverwriteTests.extractall  s    
dll?;r   r&   N)r'   r(   r)   r*   r|   r}   r~   r{   r  rj  rJ  r.   r  r3   r&   r   r   ru  ru    s2    ggll7O4G6 6*'<r   ru  c                   |   \ rS rSr\r\R                  \R                  -  S-   \	-   \R                  -   S-   \	-   \R                  -   S-   \	-   \R                  -   S-   \	-   \R                  S-  -   \	-   S-   \R                  -   \R                  -   \R                  \R                  -  -   \R                  -   \R                  S-  -   \R                  S-  -   \R                  S-  -   \	-   \R                  -   \R                  S-  -   \	-   \R                  -   \R                  \R                  -  -   \R                  S	-  -   r\R                  \R                  -  S
-   \R                  -   S-   \R                  -   S-   \R                  -   S-   \	-   \R                  S-  -   \	-   S-   \R                  -   \R                  -   \R                  \R                  -  -   \R                  -   \R                  S-  -   \R                  S-  -   \R                  S-  -   \R                  S-  -   \R                  S-  -   r\R                  \R                  -  S-   \	-   \R                  -   S-   \	-   \R                  -   S-   \	-   \R                  -   S-   \	-   \R                  S-  -   \	-   S-   \R                  -   \R                  -   \R                  \R                  -  -   \R                  S-  -   r\R$                  " S5      R'                  \R(                  5      rS\R,                  -  rS rSS jrS rS rS rS rS rSrg)OffsetValidationTestsi  s   000755s   000001s      s   0011407    rp     s   0000755s   0000001s   0011327rV     s   0010070r  r     c                     [        U R                  S5       nUR                  U5        S S S 5        g ! , (       d  f       g = frI  )r.   r+   rS  )r#   bufferr  s      r   _write_buffer#OffsetValidationTests._write_bufferM  s)    $,,%GGFO &%%rL  Nc                     [        U R                  S5       n[        R                   " SX!S9 nUR                  5       sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nr   rw   )r$   rv  rQ  )r.   r+   r/   r  )r#   rQ  r  rT   s       r   _get_members"OffsetValidationTests._get_membersQ  s^    $,,%!~~'  &%   &%%s!   A+A	A+
A	A++
A9c                     U R                  [        R                  S5         U R                  5         S S S 5        g ! , (       d  f       g = f)Nrb  )rD  r/   r>  r  r"   s    r   #_assert_raises_read_error_exception9OffsetValidationTests._assert_raises_read_error_exceptionX  s:    ##F
 
 
 
s	   ;
A	c                     SU R                   4SU R                  4SU R                  44 H>  u  pU R                  US9   U R	                  U5        U R                  5         S S S 5        M@     g ! , (       d  f       MR  = f)Nposixr  v7r  )invalid_posix_headerinvalid_gnu_headerinvalid_v7_headerr  r  r  )r#   
tar_formatinvalid_headers      r   &test_invalid_offset_header_validations<OffsetValidationTests.test_invalid_offset_header_validations^  sv    d//0D++,4))*+
&J
 Z0"">288: 10+

 10s   "A--
A<	c                 D   U R                   U R                  -   U R                   -   nU R                  U5        U R                  5       nU R	                  [        U5      S5        U R	                  US   R                  S5        U R	                  US   R                  S5        g )Nr   r   r  )valid_gnu_headerr  r  r  rk   rl   r   r  r#   r  r  s      r   (test_early_stop_at_invalid_offset_header>OffsetValidationTests.test_early_stop_at_invalid_offset_headerh  s    &&)@)@@4CXCXX6"##%Wq)*5**A.r   c                     U R                   U R                  -   S-  nU R                  U5        U R                  SS9nU R	                  [        U5      S5        g )Nr  TrQ  r   )r  
data_blockr  r  rk   rl   r  s      r   test_ignore_invalid_archive1OffsetValidationTests.test_ignore_invalid_archivep  sP    ))DOO;q@6"###6Wq)r   c                    U R                   U R                  U R                  -   S4U R                  U R                  -   U R                   S44 H  u  pnU R                  X-   5        U R	                  SS9nU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  U5        M     g )Nr   r   Tr  r   r  )	r  r  r  r  r  rk   rl   r   r  )r#   first_blocksecond_blockexpected_offsetr  s        r   "test_ignore_invalid_offset_headers8OffsetValidationTests.test_ignore_invalid_offset_headersw  s     &&((4??: ((4??:&&;
6K {9:''T':GS\1-WQZ__j9WQZ..@!;
r   r&   r   ) r'   r(   r)   r*   r   r+   r/   rt  r  SPACEr5  r  r  r  r  r  r  r  rT  rU  r  r  r*  r  r  r  r  r  r  r  r  r3   r&   r   r   r  r    s4   G 	g)))
		%kk	* 		 		 &kk		* 	 	 &kk	* 	 	 ++

	 #
	# 	 {{	# //	  ++++
+!	,$ 

%	( ++
)	, ++
-	0 ++/1	0 "1	"0 %,KK1	04 ++/5	4 "5	"4 %,KK5	08 ++--
-9	.< ++
=	 H 	g)))
	{{	# 		 {{		# 	 {{	# 	 	 ++

	 #
	# 	 {{	# //	  ++++
+!	,$ 

%	( ++
)	, ++
-	0 ++/1	4 ++/5	8 ++
9	 D 	g)))
		%kk	* 		 		 &kk		* 	 	 &kk	* 	 	 ++

	 #
	# 	 {{	# //	  ++++
+!	,$ ++
%	 , z2889K9KL7,,,J( ;/*Ar   r  c                  R   [         R                  " [        5        [        R                  " [        5        [
        /q[        [
        S5       n U R                  5       nS S S 5        [        [        [        4 H  nUR                  (       d  M  [         R                  " UR
                  5        [        R                  UR
                  5        UR                  UR
                  S5       nUR                  W5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nr   r+  )r	   r  r{   r|   r  r+   r  r.   rj   r5   r=   rD   rF  rS  )rq   r   r  rT   s       r   setUpModuler    s    WKK 9L	gt	yy{ 
 w(666QYY'		*		4(C		$ )(	 )	 
	 )(s   D'D
D
D&	c                      [         R                  R                  [        5      (       a  [        R
                  " [        5        g g r   )r|   r}   r  r{   r	   r  r&   r   r   tearDownModuler    s(    	ww~~g! r   __main__)r  r   r|   r,   hashlibr   
contextlibr   r   randomr   r  r  r  r  r  r   unittest.mockr/   r  r   r   test.supportr	   r
   r   r9   rn  r  r?   rH   r   r}   ry  r  r{   r  rc  r+   r~   r8   r@   rG   r   r  r  rn   r  r   requires_gzipr5   r  r=   requires_lzmarD   rL   r]   TestCaserc   r   r   r   r   r#  r%  r'  r)  rr  r  r  r  r   r"  r=  r?  rA  rC  rI  rK  rM  rO  rd  rf  rm  ro  rt  r  r  r	  r#  r.  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  rC  rl  rv  r{  r  r   r   r  r  r  r  r  r  r  r  r@  rB  rD  rF  rT  r  r)  r  r=  rR  rq  ru  r  r  r  r  r  r	  r  r:  r  r  rP  rS  ru  r  r  r  r'   rw  r&   r   r   <module>r     s    
 	 	  0    	        " & ($ ''//)**
+i
7o%	


=1B
C77<<!12
'',,w 1
2	g/	0
'',,w	
*ggll7I. G  G 
) ) 	% % % 	& & & 	% % %	w 	-X -UHh// Un	- 		w 		- 	Y1x** Y1x	8X 		'8 		8X 	Z1X Z1zi.~ i.V	#X%6%6 	x!183D3D 		g/1B1B 		x!183D3D 	<^X%6%6 <|	> 		 		> 	/NH,=,= /	X'< 		G%: 		X'< 	&1Wh// &1P	> 	, ,	> 	1x1B1B 1"^EXx00 ^EB6O 6Op9,(*;*; 9xT@,(*;*; T@nGG G<~%x00 ~%B
	Hi 		7I 		Hi 	2*mX%6%6 2*j7(O 78/ 8;(O ;?7 ?,!7$8(:K:K !!*>! (%98;L;L   *> C(++ C$O58$$ O5d+&}h&7&7 +&\W. 1 1 W.tXz GZ %Xz %(* ( 
WR(*KL'18$$ '1 M'1TH8< H8VN NbL{H$5$5 L^G[("3"3 G$K[("3"3 K(I I(>%!2!2 >%@	X~x/@/@ 		G^X->-> 		X~x/@/@ 	8*"" 8*vs&x   s&la h'' a H7B** 7Bt 
V$&FG@("3"3 @ H@B*("3"3 *>	 
WR)+=>	WR+-ABwOx(( wO C ?wOt%-8X.. %-Pd8 dL 4h6G6G ((<(0(9(9(3X5F5F #7#+#4#4^8** ^8@8D3 D3V ???CY-H-- Y-x<^22H4E4E <@XAH-- XAv "" zMMO KT  D  D  
C  DsH   $`# )`2 .a 3a #`/.`/2`>=`>aaaa