asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYhX@sddlZddlZddlZddlmZddlmZddlmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZddlmZz ddlZWneydZYn0z ddlZWneydZYn0z ddlZWney dZYn0z ddlZWney2dZYn0dd Zejejd Zed Z e!d Z"ej#ed Z$ej#edZ%ej#edZ&ej#edZ'ej#edZ(dZ)dZ*GdddZ+e,GdddZ-e.GdddZ/e0GdddZ1Gddde+Z2Gddde2ej3Z4Gd d!d!e-e4Z5Gd"d#d#e/e4Z6Gd$d%d%e1e4Z7Gd&d'd'e2ej3Z8Gd(d)d)e-e8Z9Gd*d+d+e/e8Z:Gd,d-d-e1e8Z;Gd.d/d/e2ZGd4d5d5e-e=ej3Z?Gd6d7d7e/e=ej3Z@Gd8d9d9e1e=ej3ZAGd:d;d;ed?d?e/eBZDGd@dAdAe1eBZEGdBdCdCe+ej3ZFGdDdEdEe-eFZGGdFdGdGe/eFZHGdHdIdIe1eFZIGdJdKdKe2ej3ZJGdLdMdMZKGdNdOdOeKe2ej3ZLGdPdQdQeKe2ej3ZMGdRdSdSe+ZNGdTdUdUeNej3ZOGdVdWdWe-eOZPGdXdYdYe/eOZQGdZd[d[e1eOZRGd\d]d]eNej3ZSGd^d_d_e-eSZTGd`dadae/eSZUGdbdcdce1eSZVGdddedeej3ZWGdfdgdgeNej3ZXGdhdidieNej3ZYGdjdkdke-eYZZGdldmdme/eYZ[Gdndodoe1eYZ\GdpdqdqeYZ]e^e_edrdsGdtduduej3Z`GdvdwdweWZaGdxdydyZbGdzd{d{ebej3ZcGd|d}d}ebej3ZdGd~ddebej3ZeGdddZfGdddefej3ZgGddde-efej3ZhGddde/efej3ZiGddde1efej3ZjGdddej3ZkGdddej3ZlGdddej3ZmGdddej3Zneoe_edrdGddde2ej3ZpGddde/ej3ZqddZre^e_edde^e_eddGdddej3ZsGddde2ej3ZtGddde2ZuGdddeuej3ZvGdddeuej3ZwGdddeuej3ZxGdddeuej3ZyGdddej3ZzddZ{GdddZ|Gdddej3Z}ddZ~ddZedkredS)N)sha256)contextmanager)Random)support) script_helper)warnings_helpercCs t|SN)r hexdigest)datar -/usr/local/lib/python3.9/test/test_tarfile.py sha256sum'sr z-tardirz -extract-testz testtar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ@e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ceZ@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc@s.eZdZeZdZejZej j Z e ddZ dS)TarTestcCs |j|jSr)prefixsuffixselfr r r modeAsz TarTest.modeN) __name__ __module__ __qualname__tarnamerioFileIOopentarfileTarFiletaropenpropertyrr r r r r;s rc@s*eZdZeZdZerejndZe j j Z dS)GzipTestgzN) rrrgzipnamerrgzipZGzipFilerrrZgzopenrr r r r r Esr c@s*eZdZeZdZerejndZe j j Z dS)Bz2Testbz2N) rrrbz2namerrr%BZ2FilerrrZbz2openrr r r r r$Lsr$c@s*eZdZeZdZerejndZe j j Z dS)LzmaTestxzN) rrrxznamerrlzmaLZMAFilerrrZxzopenrr r r r r(Ssr(c@s eZdZdZddZddZdS)ReadTestr:cCstj|j|jdd|_dS)N iso8859-1rencodingrrrrtarrr r r setUp_s zReadTest.setUpcCs|jdSr)r3closerr r r tearDowncszReadTest.tearDownN)rrrrr4r6r r r r r-[sr-c@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS) UstarReadTestcCsj|jd}|j|>}|}|t||jd|t|tdWdn1s\0YdS)N ustar/regtyperegular file extraction failed) r3 getmember extractfileread assertEquallensizer sha256_regtypertarinfofobjr r r r test_fileobj_regular_fileis  z'UstarReadTest.test_fileobj_regular_filecCs|jdt|jd}ttjtdd}|}Wdn1sL0Y|j |T}t |}|}| ||d| t |dd| |dddWdn1s0YdS)Nr8rzfileobj.readlines() failedrSzOI will gladly admit that Python is not the fastest running scripting language. )r3extractTEMPDIRr:rospathjoin readlinesr;r TextIOWrapperr=r>)rrBfobj1lines1rCfobj2lines2r r r test_fileobj_readlinesrs" &   z$UstarReadTest.test_fileobj_readlinescCs|jdt|jd}ttjtdd}|}Wdn1sL0Y|j |,}t t |}| ||dWdn1s0YdS)Nr8rEzfileobj.__iter__() failed)r3rHrIr:rrJrKrLrMr;listrrNr=)rrBrOrPrQrRr r r test_fileobj_iters &zUstarReadTest.test_fileobj_iterc Cs*|jdtttjtdd}|}Wdn1s@0Y|jd}|j |}|}| d| d| d| dd| d| d| dd| d | d | d d| d| d |d }| ||dd d| dd| |j | d| |dd| |j d| d| d| d|}| d|}| ||d| d| t|| d| d| t|d| d| d|}| ||t|ddWdn1s0YdS)Nr8rbrzseek() to file's start failediz"seek() to absolute position failediz+seek() to negative relative position failedz+seek() to positive relative position failed i zread() after seek failedzseek() to file's end failedz0read() at file's end did not return empty stringz$relative seek() to file's end failedzreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r3rHrIrrJrKrLr<r:r;seekr=tellr?rMr>readline) rrCr rBtextss1s2liner r r test_fileobj_seeksr&                  zUstarReadTest.test_fileobj_seekc Cs|jdd}t|}|d}|t|tz| dWnt y`| dYn0Wdn1sv0YdS)Nr8r/dzseeking failed in text mode) r3r;rrNr<encoder=r r@r]AttributeErrorfailrrCr r r r test_fileobj_texts  zUstarReadTest.test_fileobj_textc Csl|j|L}|j| }||j|jWdn1s@0YWdn1s^0YdSr)r3r;r=name)rZlnktyperegtypeabr r r _test_fileobj_links  z UstarReadTest._test_fileobj_linkcCs|dddS)N ustar/lnktyper8rprr r r test_fileobj_link1sz UstarReadTest.test_fileobj_link1cCs|dddS)N./ustar/linktest2/lnktypeustar/linktest1/regtyperrrr r r test_fileobj_link2sz UstarReadTest.test_fileobj_link2cCs|dddS)N ustar/symtyper8rrrr r r test_fileobj_symlink1sz#UstarReadTest.test_fileobj_symlink1cCs|dddS)N./ustar/linktest2/symtyperurrrr r r test_fileobj_symlink2sz#UstarReadTest.test_fileobj_symlink2cCs|dddS)NZsymtype2r8rrrr r r test_issue14160szUstarReadTest.test_issue14160cCs|d|ddS)NbarZeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)add_dir_and_getmemberrr r r test_add_dir_getmembers z$UstarReadTest.test_add_dir_getmemberc Cstttd@}z"t|||Wt|n t|0Wdn1s\0Ytt,}| | || |dWdn1s0YWdn1s0YdS)Nw/) rtemp_cwdrrtmpnamerJmkdiraddrmdirr=r:)rrlr3r r r r}s   6  z#UstarReadTest.add_dir_and_getmemberN)rrrrDrSrUrerkrprsrvrxrzr{r~r}r r r r r7gs  0r7c@s eZdZdS)GzipUstarReadTestNrrrr r r r rsrc@s eZdZdS)Bz2UstarReadTestNrr r r r rsrc@s eZdZdS)LzmaUstarReadTestNrr r r r rsrc@s,eZdZddZddZddZddZd S) ListTestcCstj|j|jd|_dS)Nrr2rr r r r4szListTest.setUpcs@tjtddd}ttd|jjddWdn1sF0Y| } d| d| d | d | d | d | d | d|fdd} |d| |d| |d| |d| |d| |d d| d|dS)Nascii newlinestdoutFverboseustar/conttype ustar/regtypes ustar/lnktypesustar/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/lnktypesustar/dirtype/sustar/dirtype-with-size/cs|jjd}|ddS)Nsurrogateescaperbackslashreplace)decoder3r1rg)rorarr r convsz ListTest.test_list..convsustar/umlauts-s'misc/regtype-hpux-signed-chksum-s)misc/regtype-old-v7-signed-chksum-spax/bad-pax-spax/hdrcharset-s)ustar/conttype ?\r?\nustar/regtype ?\r?\nslink tos->) rrNBytesIOr swap_attrsysr3rTdetachgetvalueassertIn assertRegex assertNotIn)rtiooutrr rr test_lists2,              zListTest.test_listcCstjtddd}ttd||jjddWdn1sF0Y| }| |d| d|| d || d || d || d |dS) NrrrrTrs\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\nsustar/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) rrNrrrrr3rTrrrr)rrrr r r test_list_verbose+s ,    zListTest.test_list_verbosecCstjtddd}dd}ttd|&|jjd||jdWdn1sV0Y| }| d || d |dS) Nrrrcss"|D]}d|jvr|VqdS)NZreg) getmembersrl)r3rBr r r membersEs  z+ListTest.test_list_members..membersrF)rrrr) rrNrrrrr3rTrrrr)rrrrr r r test_list_membersCs4  zListTest.test_list_membersN)rrrr4rrrr r r r rs%rc@s eZdZdS) GzipListTestNrr r r r rPsrc@s eZdZdS) Bz2ListTestNrr r r r rTsrc@s eZdZdS) LzmaListTestNrr r r r rXsrc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)CommonReadTestcCsttdWdn1s 0Y|tt|tttttd }|t|Wdn1s0Y|ttddS)NwbrVsinvalid) rr assertFalser is_tarfilepathlibPathrrrrCr r r test_is_tarfile_erroneous^s  .z(CommonReadTest.test_is_tarfile_erroneousc Cs|t|j|tt|jt|jd }|t|Wdn1s\0Yt|jd*}|tt| Wdn1s0YdSNrV) assertTruerrrrrrrrr<rr r r test_is_tarfile_validos .z$CommonReadTest.test_is_tarfile_validcCstt|jddWdn1s,0YzVztt|j}|Wntjyp|dYn0|| gW| n | 0dS)NrErz&tarfile.open() failed on empty archive) rrrrreplacegetnames ReadErrorriassertListEqualrr5rr3r r r test_empty_tarfile~s z!CommonReadTest.test_empty_tarfilecCs>|tdtd|jWdn1s00YdS)NZxxx)assertRaisesRegexFileNotFoundErrorrrrrr r r test_non_existent_tarfilesz(CommonReadTest.test_non_existent_tarfilecCsVttdWdn1s 0Y|tjtjt|j|tjtjtdSNr)rr assertRaisesrrrrr r r test_null_tarfiles z CommonReadTest.test_null_tarfilec Cstdd}dD]}|tdJ}||dtd}t||_|| ||Wdn1sr0Ytjtddd }z$| | dgd |W| q| 0qdS) Nrr\)arrXfoorET)rZ ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks) r randbytesrrwriterTarInfor>r?tobufrrr5)rr charrCrBr3r r r test_ignore_zeross   (z CommonReadTest.test_ignore_zerosc CsdD]}ttd2}td}d|_||tdWdn1sN0Yttd}||Wdn1s0YttH}| tj d|D]}qWdn1s0YWdn1s0Ytt}| }| tj d| |t Wdn1s40Y| tj d||Wdn1sr0YWdq1s0YqdS)N)r\iXrXiw:rrXsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)rrrrr?addfilerrtruncaterrnextrHrIr;r<)rr?r3trCr r r test_premature_end_of_archives"  0 ( > ,z,CommonReadTest.test_premature_end_of_archivec Csb|tjd@ttd}Wdn1s60YWdn1sT0YdS)Nz%file could not be opened successfullyz recursion.tar)rrrrrfindfilerr r r test_length_zero_headersz&CommonReadTest.test_length_zero_headerN) rrrrrrrrrrrr r r r r\s rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZeeeddejdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zeed-ud.d/d0Z d-S)1MiscReadTestBasecCsdSrr rr r r requires_name_attributesz(MiscReadTestBase.requires_name_attributec Cs|t|jdt}||jttj||jd6}||jt||jt j |jWdn1sp0YWdn1s0YdSNrVfileobjr) rrrassertIsInstancerlstrrrr=rJrKabspathrrCr3r r r test_no_name_arguments z&MiscReadTestBase.test_no_name_argumentcCsnt|jd}|}Wdn1s*0Yt|}|tt|dtj||j d}| |j dS)NrVrlr) rrr<rrrrhgetattrrr assertIsNonerlrrCr r3r r r test_no_name_attributes & z'MiscReadTestBase.test_no_name_attributecCst|jd}|}Wdn1s*0Yt|}d|_tj||jd}||jWdn1sv0YdS)NrVrr) rrr<rrrlrrrrr r r test_empty_name_attributes & z*MiscReadTestBase.test_empty_name_attributec Cst|jtj}t|dZ}||jttj||jd}| |jWdn1s\0YWdn1sz0YdSr) rJrrO_RDONLYrrlintrrr)rfdrCr3r r r test_int_name_attributes  z(MiscReadTestBase.test_int_name_attributec Cs|t|j}t|dt}||jttj||j d6}||jt| |jtj |jWdn1sz0YWdn1s0YdSr) rrJfsencoderrrrlbytesrrr=rKr)rrrCr3r r r test_bytes_name_attributes  z*MiscReadTestBase.test_bytes_name_attributec Cst|j}tj||jd:}||jt| |jt j t |Wdn1s\0Y||:}||jt| |jt j t |Wdn1s0Ytjj||jd:}||jt| |jt j t |Wdn1s0Y|jdkr~tj|dd:}||jt| |jt j t |Wdn1st0YdS)NrrrE)rrrrrrrrlrr=rJrKrfspathrrr)rrr3r r r test_pathlike_names : :< z#MiscReadTestBase.test_pathlike_namecCsttdWdn1s 0Y|td|td}Wdn1sX0Y|td|td}Wdn1s0Y|td|td}Wdn1s0YdS)Nrz mode must be qrwr)rrr ValueErrorrrr r r test_illegal_mode_args **z&MiscReadTestBase.test_illegal_mode_argc Cstj|j|jd}zZ||}|j}|j}||}|}Wdn1sX0YW| n | 0||j}| ||j|jd|dF}|}| |j|| | |||dWdn1s0YWdn1s0YdS)Nrr.rrzseek back did not work) rrrrrrloffsetr;r<r5r]r=r)rr3rrlrfr rCr r r test_fileobj_with_offsets$ ( z)MiscReadTestBase.test_fileobj_with_offsetcCs\|tjtjt|jttd(}|jtjtj||jdWdn1sN0YdSr)rrrrrrrr r r test_fail_comp7s   zMiscReadTestBase.test_fail_compcCs"|jd}||jtjddS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r3r:r=typerDIRTYPErrBr r r test_v7_dirtype>s  z MiscReadTestBase.test_v7_dirtypecCs2z|jdWnty,|dYn0dS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r3r:KeyErrorrirr r r test_xstar_typeFs z MiscReadTestBase.test_xstar_typecCsN|jD]B}|t|jdd|j|jds2q||jdd|jqdS)N鏽>zwrong mtime for %szustar/rzwrong uname for %s)r3r=rmtimerl startswithunamerr r r test_check_membersOs   z#MiscReadTestBase.test_check_memberscCs||jdjdddS)Nzmisc/eofzcould not find all members)r=r3rrlrr r r test_find_membersXsz"MiscReadTestBase.test_find_memberslinkMissing hardlink implementationc Cs<tjtddd}|dt|tjtj td|dt|tjtj tdttj tdd}| }Wdn1s0Y| t |t|dt|tjtj tdttj tdd}| }Wdn1s0Y| t |tWdn1s.0YdS)NrWr/) errorlevelr1r8rqrVrw)rrrrHrI addCleanuprunlinkrJrKrLr<r=r r@)rr3rr r r r test_extract_hardlink\s  & &z&MiscReadTestBase.test_extract_hardlinkc Cstjtdd}tjtd}t|zdd|D}||||D]x}tj||j }t j dkr| |j d@t|jd@dd }tj|}d ||j|||}| |j||qFW|t|n|t|0dS) Nr/r1 extractallcSsg|]}|r|qSr isdir.0rr r r xr[z4MiscReadTestBase.test_extractall..win32cSs(t|trd||Sd|SdS)Nz{} ({})z {!r} (int)) isinstancefloatformathex)rr r r format_mtimes z6MiscReadTestBase.test_extractall..format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrrJrKrLrIrrrlrplatformr=rstatst_modegetmtimerrr5rrmtree) rr3DIR directoriesrBrKrZ file_mtimeerrmsgr r r test_extractallqs0      z MiscReadTestBase.test_extractallc Csd}tjtd}t|ztjtddn}||}|j ||dtj||}| tj ||j t jdkr| t|jd@dWdn1s0YWt|n t|0dS) N ustar/dirtypeZ extractdirr/rrKrri)rJrKrLrIrrrrr:rHr=rrrrrrrrrZdirtyperr3rBZ extractedr r r test_extract_directorys   8z'MiscReadTestBase.test_extract_directoryc Csttd}t|tjtddT}dd|D}||||D]$}||j }| t j ||jqHWdn1s0YWdn1s0YdS)Nrr/rcSsg|]}|r|qSr r r r r r r r[zBMiscReadTestBase.test_extractall_pathlike_name..)rrrIrtemp_dirrrrrrlr=rJrKrr)rrr3rrBrKr r r test_extractall_pathlike_names    z.MiscReadTestBase.test_extractall_pathlike_namec Csd}ttd}t|ttjtddF}||}|j ||d||}| t j ||jWdn1sx0YWdn1s0YdS)Nrrr/rr)rrrIrr"rrrr:rHr=rJrKrrr r r r test_extract_pathlike_names   z+MiscReadTestBase.test_extract_pathlike_namec Cstjtd}t|d}|dWdn1s80YzVttj }z| |Wn"tj y| |j jYn 0|dWt|n t|0dS)Nemptyrr[zReadError not raised)rJrKrLrIrrobject__new__rr__init__rrrclosedrirr)rr%rCr3r r r test_init_close_fobjs (  z%MiscReadTestBase.test_init_close_fobjcCsht|jH}t||D],\}}||j|j|||qWdn1sZ0YdSr)rrrzipr=rget_info)rr3Zm1Zm2r r r test_parallel_iterationsz(MiscReadTestBase.test_parallel_iterationNz requires zlibc CsptjdP}tj|_|tjt |j Wdn1sD0YWdn1sb0YdS)Nztarfile.TarInfo.fromtarfile) unittestmockpatchzliberrorZ side_effectrrrrr)rr/r r r test_zlib_error_does_not_leaksz.MiscReadTestBase.test_zlib_error_does_not_leak)!rrrrrrrrrrrrrrrrrr. skipUnlesshasattrrJrskip_unless_symlinkrrr!r#r$r*r-skipIfr1r3r r r r rs6         rc@seZdZdZdS) MiscReadTestN)rrrrr r r r r8sr8c@s eZdZdS)GzipMiscReadTestNrr r r r r9sr9c@seZdZddZdS)Bz2MiscReadTestcCs|ddS)NzBZ2File have no name attributeskipTestrr r r rsz'Bz2MiscReadTest.requires_name_attributeNrrrrr r r r r:sr:c@seZdZddZdS)LzmaMiscReadTestcCs|ddS)NzLZMAFile have no name attributer;rr r r rsz(LzmaMiscReadTest.requires_name_attributeNr=r r r r r>sr>c@s0eZdZdZddZddZddZdd Zd S) StreamReadTestr|c Cs||jD]p}|sq|j|F}z|d}WntjyN|dYn0|s"qXq"Wdq1sl0YqdS)Nr\z6simple read-through using TarFile.extractfile() failed)r3isregr;r<r StreamErrorri)rrBrCbufr r r test_read_throughs z StreamReadTest.test_read_throughcCsh|j}|j|}|}Wdn1s40Y|t||jd|t|tddS)Nr9) r3rr;r<r=r>r?r r@rAr r r rDs & z(StreamReadTest.test_fileobj_regular_filecCsN|j}|j|d }|tj|jWdn1s@0YdSNr)r3rr;rrrBr<)rZtarinfosrr r r test_provoke_stream_errors z(StreamReadTest.test_provoke_stream_errorcCstjtdd}z|j}|}|}|dur0q||d|sL|r|tj | |Wdq1sx0Yq| |}| |}|durq||d| | | dqW| n | 0dS)Nr/rzstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr3rassertIsNotNoneZislnkZissymrrBr;r=r<r5)rZtar1Ztar2t1t2v1v2r r r test_compare_memberss* (   z#StreamReadTest.test_compare_membersN)rrrrrDrDrFrLr r r r r?s  r?c@s eZdZdS)GzipStreamReadTestNrr r r r rM#srMc@s eZdZdS)Bz2StreamReadTestNrr r r r rN&srNc@s eZdZdS)LzmaStreamReadTestNrr r r r rO)srOc@s4eZdZddZddZddZddZd d Zd S) DetectReadTestc CsLzt||}Wn.tjy>}z|WYd}~nd}~00|dSr)rrrrir5)rrlrr3er r r _testfunc_file.s zDetectReadTest._testfunc_filec Cszz>t|d }tj|||d}Wdn1s20YWn.tjyl}z|WYd}~nd}~00|dS)NrVr)rrrrir5)rrlrrr3rQr r r _testfunc_fileobj6s  2z DetectReadTest._testfunc_fileobjcCsJ|jr|tj$tjtd|jdWdn1s<0Y|tj$tjtd|jdWdn1s|0Y|tj tj|jddWdn1s0Y|tj tj|jddWdn1s0Y||jd||jd|j||jd||jd|j||jddS)Nr.rr@rEzr:*r|*)rrrrrr)rZtestfuncr r r _test_modes?s22..  zDetectReadTest._test_modescCs||jdSr)rVrRrr r r test_detect_fileOszDetectReadTest.test_detect_filecCs||jdSr)rVrTrr r r test_detect_fileobjRsz"DetectReadTest.test_detect_fileobjN)rrrrRrTrVrWrXr r r r rP-s  rPc@s eZdZdS)GzipDetectReadTestNrr r r r rYUsrYc@seZdZddZdS)Bz2DetectReadTestcCs|ttd}|}Wdn1s(0Ytjtddd}||Wdn1sb0Y|tddS)NrVrrW compresslevelrU)rrr<r%r'rrrRrjr r r test_detect_stream_bz2Ys  &(z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrr]r r r r rZXsrZc@s eZdZdS)LzmaDetectReadTestNrr r r r r^gsr^c@seZdZd(ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'ZdS))MemberReadTestNcKs|durP|j|,}|t||d|jWdn1sF0Yd|d<d|d<d|d<d|jvrd |d <d |d <|D]&\}}|t|||d ||jfqdS) Nwrong sha256sum for %srruidrfgidzold-v7rrgnamezwrong value in %s field of %s)r3r;r=r r<rlitemsr)rrBchksumkwargsrkvr r r _test_memberms"  zMemberReadTest._test_membercCs |jd}|j|dtddS)Nr8cr?rfr3r:rjr@rr r r test_find_regtype~s z MemberReadTest.test_find_regtypecCs |jd}|j|dtddS)Nzustar/conttyperkrlrmrr r r test_find_conttypes z!MemberReadTest.test_find_conttypecCs|jd}|j|dddS)Nrrr?r3r:rjrr r r test_find_dirtypes z MemberReadTest.test_find_dirtypecCs|jd}|j|dddS)Nzustar/dirtype-with-sizerprqrr r r test_find_dirtype_with_sizes z*MemberReadTest.test_find_dirtype_with_sizecCs |jd}|j|ddddS)Nrqrr8r?linknamerqrr r r test_find_lnktypes z MemberReadTest.test_find_lnktypecCs |jd}|j|ddddS)Nrwrrmrurqrr r r test_find_symtypes z MemberReadTest.test_find_symtypecCs"|jd}|j|dddddS)Nz ustar/blktyperr?devmajordevminorrqrr r r test_find_blktypes z MemberReadTest.test_find_blktypecCs"|jd}|j|dddddS)Nz ustar/chrtyperrWryrzrqrr r r test_find_chrtypes z MemberReadTest.test_find_chrtypecCs|jd}|j|dddS)Nzustar/fifotyperrprqrr r r test_find_fifotypes z!MemberReadTest.test_find_fifotypecCs |jd}|j|dtddS)Nz ustar/sparsePrlr3r:rj sha256_sparserr r r test_find_sparses zMemberReadTest.test_find_sparsecCs |jd}|j|dtddS)N gnu/sparserrlrrr r r test_find_gnusparses z"MemberReadTest.test_find_gnusparsecCs |jd}|j|dtddS)Ngnu/sparse-0.0rrlrrr r r test_find_gnusparse_00s z%MemberReadTest.test_find_gnusparse_00cCs |jd}|j|dtddS)Ngnu/sparse-0.1rrlrrr r r test_find_gnusparse_01s z%MemberReadTest.test_find_gnusparse_01cCs |jd}|j|dtddS)Ngnu/sparse-1.0rrlrrr r r test_find_gnusparse_10s z%MemberReadTest.test_find_gnusparse_10cCs |jd}|j|dtddS)Nuustar/umlauts-ÄÖÜäöüßrkrlrmrr r r test_find_umlautss z MemberReadTest.test_find_umlautscCsd}|||jdS)Naustar/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)rr3r)rrlr r r test_find_ustar_longnamesz'MemberReadTest.test_find_ustar_longnamecCs |jd}|j|dtddS)Nzmisc/regtype-old-v7rkrlrmrr r r test_find_regtype_oldv7s z&MemberReadTest.test_find_regtype_oldv7cCs@|jtj|j|jdd|_|jd}|j|dtddS)Nr/r0upax/umlauts-ÄÖÜäöüßrkrl) r3r5rrrrr:rjr@rr r r test_find_pax_umlautss    z$MemberReadTest.test_find_pax_umlauts)N)rrrrjrnrorrrtrwrxr}r~rrrrrrrrrrr r r r r_ks& r_c@s,eZdZddZddZddZddZd S) LongnameTestcCsV|jddd}z|j|}Wnty>|dYn0||jtjddS)Nr123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamezlongname not foundzread longname as dirtype) subdirr3r:rriassertNotEqualrrr)rrrBr r r test_read_longnames  zLongnameTest.test_read_longnamecCsf|jddd}|jddd}z|j|}WntyP|dYn0||j|ddS)Nrrrlonglinkzlonglink not foundzlinkname wrong)rr3r:rrir=rv)rrrrBr r r test_read_longlinks zLongnameTest.test_read_longlinkcCs|jddd}|j|}|j}|jj|t|jjd}| t j t j d|dWdn1sv0YdS)Nrrrizfoo.tar)rlr) rr3r:rrr]rrr<rrrr)rrrBrrCr r r test_truncated_longnames z$LongnameTest.test_truncated_longnamecCs~|jddd}|j|j}ttd@}||tj | ddd}| |j |j Wdn1sp0YdS)NrrrrVr\r/strict)rr3r:rrrr]rrZfrombufr<r=r longnametype)rrrrCrBr r r test_header_offsets  zLongnameTest.test_header_offsetN)rrrrrrrr r r r rs   rc@sJeZdZdZejZddZddZddZ dd Z d d Z e d d Z dS) GNUReadTestZgnucCs|j|ttjt|}t|d}|}Wdn1sD0Y|t |t d|| rt |}| |jd|jdS)NrVr`r\)r3rHrIrJrKrLrr<r=r r_fs_supports_holesrZ assertLess st_blocksst_size)rrlfilenamerCr rar r r _test_sparse_files &  zGNUReadTest._test_sparse_filecCs|ddS)Nrrrr r r test_sparse_file_oldsz GNUReadTest.test_sparse_file_oldcCs|ddS)Nrrrr r r test_sparse_file_00szGNUReadTest.test_sparse_file_00cCs|ddS)Nrrrr r r test_sparse_file_01szGNUReadTest.test_sparse_file_01cCs|ddS)Nrrrr r r test_sparse_file_10szGNUReadTest.test_sparse_file_10cCstjdrtjtd}t|d,}|d| d| Wdn1sV0Yt |}t ||jd|jkSdSdS)Nlinuxz sparse-testrisxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr\F)rrrrJrKrLrIrr]rrrrrrr)rlrCrar r r rs    &  zGNUReadTest._fs_supports_holesN)rrrrrGNUTYPE_LONGNAMErrrrrr staticmethodrr r r r rs  rc@s&eZdZdZejZddZddZdS) PaxReadTestZpaxcCstjtdd}z|d}||jd||jd||jdd|d}||jd ||jd||jdd|d }||jd ||jd ||jddW| n | 0dS) Nr/r pax/regtype1rr|zVENDOR.umlautsuÄÖÜäöüßz pax/regtype2rz pax/regtype3r) rrrr:r=rrd pax_headersgetr5rr3rBr r r test_pax_global_headers6s*   z#PaxReadTest.test_pax_global_headerscCstjtdd}z|d}||jd||jd||jd||jd|t |jt |t |j dd|t |j ddW| n | 0dS) Nr/rz pax/regtype4rk{g^ AZatimectime) rrrr:r=r?rbrcrrrrr5rr r r test_pax_number_fieldsMs z"PaxReadTest.test_pax_number_fieldsN) rrrrrXHDTYPErrrr r r r r1src@seZdZddZddZdS) WriteTestBasecCst}tj||jd }|tdWdn1s>0Y||jd| }~t ||j| || dS)Nrrz#external fileobjs must never closed) rrrrrrrrr)rr gc_collectr=)rrCr3r r r r test_fileobj_no_closeas. z#WriteTestBase.test_fileobj_no_closecCstt|j@}td}tjtj|_||t d|jWdn1sT0Y|td*}| t | tjdWdn1s0YdS)NrrrVrZ)rrrrr RECORDSIZE BLOCKSIZEr?rrrr=r>r<)rr3rrCr r r test_eof_markerms  6zWriteTestBase.test_eof_markerN)rrrrrr r r r r]s rc@seZdZdZddZddZddZdd Zd d Zd d Z e e e ddddZejddZddZddZd&ddZejddZddZd d!Zd"d#Zd$d%ZdS)' WriteTestrcCszd}tt|j}z t|}||W|n |0tt}z"||d|dW|n |0dS)Nd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rz!failed to store 100 char filename) rrrrrrr5r=r)rrlr3rr r r test_100_char_names   zWriteTest.test_100_char_namecCstt|j}zXtjtd}t|d}|dWdn1sH0Y| |W| n | 0| tj tdddS)Nfileraaarztarfile is empty) rrrrrJrKrLrIrrr5Z assertGreatergetsize)rr3rKrCr r r test_tar_sizes ( zWriteTest.test_tar_sizecCstt|j}ztjtd}t|dWdn1s>0Y||}| |j dt|d}| dWdn1s0Y||}| |j dW| n | 0dS)Nrrrrry) rrrrrJrKrLrI gettarinfor=r?rr5)rr3rKrBrCr r r test_file_sizes   ( zWriteTest.test_file_sizec Csvtjtd}t|zLtt|j}z$| |}| |j dW| n | 0Wt |n t |0dS)N directoryr)rJrKrLrIrrrrrrr=r?r5rrrrKr3rBr r r test_directory_sizes  zWriteTest.test_directory_sizec CsXtjtd}t|ttj|ddttj|ddztt|j }zt j d$}ddg|_ ||Wdn1s0Yg}|D]}|tj|jdq||gdW|n |0Wttj|dttj|dt|n4ttj|dttj|dt|0dS)Nr1rn2z os.listdirr)rrr)rJrKrLrIrrr5rrrr.r/r0 return_valuerrappendsplitrlr=rrr)rrKr3Z mock_listdirpathsmr r r test_ordered_recursions*  (  z WriteTest.test_ordered_recursionc Cstt|j}ttd}t|d}|dWdn1sH0Y||}|t |}| |j t ||j |j ||jdWdn1s0YdS)Nrrrry)rrrrrrrIrrrJrrrlrr=r?)rr3rKrCrBZtarinfo2r r r test_gettarinfo_pathlike_names ( z'WriteTest.test_gettarinfo_pathlike_namerrc Cstjtd}tjtd}t|d}|dWdn1sF0Yzt||Wn2ty}z|d|WYd}~n d}~00z`t t |j }z.| || |}| |jdW|n |0Wt|t|nt|t|0dS)Nr link_targetrr os.link(): %sr)rJrKrLrIrrrPermissionErrorr<rrrrr=r?r5rr)rrtargetrCrQr3rBr r r test_link_sizes& ($    zWriteTest.test_link_sizec Csxtjtd}td|zLtt|j}z$| |}| |j dW| n | 0Wt |n t |0dS)Nsymlinkrr)rJrKrLrIrrrrrrr=r?r5rrrr r r test_symlink_sizes  zWriteTest.test_symlink_sizecCstjt}tt|j}z~||j|d| ||| gdt t | |Wdn1sr0Y|| gdW|n |0dS)Nzarchive name must be absolutezadded the archive to itself)rJrKrrrrrr=rlrrr change_cwdrIr5)rdstnamer3r r r test_add_selfs      ( zWriteTest.test_add_selfc Cs8tjtd}t|z dD]}tj||}t|q dd}tjt |j dd}z|j |d|dW| n | 0| t"| |dd d|Wdn1s0Ytt d }zF|D] }||jd ||jd q|t|d W| n | 0Wt|n t|0dS)Nfilter)rr|ZbazcSs&tj|jdkrdSd|_d|_|S)Nr|rr)rJrKbasenamerlrbr)rBr r r r!s z%WriteTest.test_filter..filterr/rZ empty_dir)arcnamerTrErrry)rJrKrLrIrrcreate_empty_filerrrrrr5r TypeErrorr=rbrr>rr)rtempdirrlrr3rBr r r test_filters*   0 zWriteTest.test_filterNFcCstjtd}|st|n t|tt |j }z|j ||dW| n | 0tt d}z| }W| n | 0|st|n t|||j|p|tjddS)NrrrEr)rJrKrLrIrrrrrrrrr5rrrr=rlrsep)rrKZcmp_pathdirrr3rr r r _test_pathnameAs       zWriteTest._test_pathnamec Cs`tjtd}tjtd}t|ztj|d}tj|d}t|d}|dWdn1sp0Yt||t|d,}|j |dd|j |ddWdn1s0Ytj|dd @}z|j |d Wnt y | d Yn0Wdn1s$0YWt |t |nt |t |0dS) NZ testsymlinksztestsymlinks.tarsourcerrz something rrZrrz&extractall failed with symlinked files)rJrKrLrIrrrrrrrOSErrorrirrr)rrZ temparchiveZ source_fileZ target_filerr3r r r test_extractall_symlinks^s*  ( ,2  z"WriteTest.test_extractall_symlinkscCs<|d|tjddd|tjddd|tjdd|tjddd|tjdddd|tjdddd|tjdddd|tjdd|tjddd|tjdddd|tjdddd|dtjtjd|jdtjtjddddS)Nr.r|..T)r)rrJrKrLrrr r r test_pathnamesxs zWriteTest.test_pathnamescCs4tjdkr|ddn|dd|dddS)NrzC:\foorz/fooz///foo)rrrrr r r test_abs_pathnamess  zWriteTest.test_abs_pathnamesc Cstttt|j}z|dW|n |0ttd}z6|D]$}|j dkrN| |j d|j qNW|n |0Wdn1s0YdS)NrrEz./) rrrIrrrrrr5rlrrrr3rr r r test_cwds    zWriteTest.test_cwdc stttfD]rGfdddtj}|}|,tjt|j |tj ddid}Wdn1sf0Y| |j q dS)NcseZdZdZfddZdS)z8WriteTest.test_open_nonwritable_fileobj..BadFileTcs|jrd|_dSNF)firstrr exctyper r rsz>WriteTest.test_open_nonwritable_fileobj..BadFile.writeN)rrrrrr rr r BadFilesrZnonr%)rrr) rEOFError RuntimeErrorrrrrrrr PAX_FORMATrr))rrrr3r rr test_open_nonwritable_fileobjs  $z'WriteTest.test_open_nonwritable_fileobj)NF)rrrrrrrrrrr.r4r5rJrrr6rrrrrrrrrr r r r r{s,   (  rc@s eZdZdS) GzipWriteTestNrr r r r rsrc@s eZdZdS) Bz2WriteTestNrr r r r rsrc@s eZdZdS) LzmaWriteTestNrr r r r rsrc@s@eZdZdZdZddZeej dko.e e dddd Z dS) StreamWriteTestzw|NcCstt|j}||jrp|}ttd}|}Wdn1sL0Y||}||j dn2|t}|}Wdn1s0Y| | dtj ddS)NrVzfound trailing datarzincorrect zero padding) rrrrr5 decompressorr< decompressr unused_datar=countr)rr3ZdecrCr r r r test_stream_paddings &  &z#StreamWriteTest.test_stream_paddingrumaskzMissing umask implementationc Csttjtrtttd}zBtt|j }| t tj d@}| |ddWt|n t|0dS)Nrizwrong file permissions)rJrKexistsrrrrrrrr5rrr=)rZoriginal_umaskr3rr r r test_file_modes   zStreamWriteTest.test_file_mode) rrrrrrr.r4rrr5rJrr r r r rsrc@seZdZddZdS)GzipStreamWriteTestcCs<tt|jttjdd}tj t|vs8JdS)zf Ensure the source directory is not included in the tar header per bpo-41316. zlatin-1rN) rrrrr5rr read_textrJrKdirname)rpayloadr r r test_source_directory_not_leakedsz4GzipStreamWriteTest.test_source_directory_not_leakedN)rrrr r r r r rsrc@seZdZerejndZdS)Bz2StreamWriteTestN)rrrr%BZ2Decompressorrr r r r r sr c@seZdZerejndZdS)LzmaStreamWriteTestN)rrrr+LZMADecompressorrr r r r r sr c@speZdZddZdddZdddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZdS) GNUWriteTestcCst|dd}|dS)Nr\rW)r>)rraZblocksr r r _lengthszGNUWriteTest._lengthNcCsXd}t|tjkr(|d7}|||7}|durTt|tjkrT|d7}|||7}|S)Nr\)r>r LENGTH_NAMEr LENGTH_LINK)rrlrrr r r _calc_sizeszGNUWriteTest._calc_sizecCst|}|r||_tj|_ttd}z>tj|_| || ||}|j }| ||dW| n | 0tt}zD|}||d| |j|jd| |j|jdW| n | 0dS)Nrz%GNU longname/longlink creation failedzunable to read longname member)rrrvLNKTYPErrr GNU_FORMATrrrrr=r5rrGrl)rrlrrBr3rJrKmemberr r r _test s2       zGNUWriteTest._testcCs|ddS)Nlongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamrrr r r test_longname_1023*szGNUWriteTest.test_longname_1023cCs|ddS)Nlongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamerrr r r test_longname_1024-szGNUWriteTest.test_longname_1024cCs|ddS)Nlongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/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_rrr r r test_longname_10250szGNUWriteTest.test_longname_1025cCs|dddS)Nrllonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnkrrr r r test_longlink_10233szGNUWriteTest.test_longlink_1023cCs|dddS)Nrllonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlinkrrr r r test_longlink_10246szGNUWriteTest.test_longlink_1024cCs|dddS)Nrllonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_rrr r r test_longlink_10259szGNUWriteTest.test_longlink_1025cCs|dddS)Nrrrrr r r test_longnamelink_1023<sz#GNUWriteTest.test_longnamelink_1023cCs|dddS)Nrr rrr r r test_longnamelink_1024@sz#GNUWriteTest.test_longnamelink_1024cCs|dddS)Nrr"rrr r r test_longnamelink_1025Dsz#GNUWriteTest.test_longnamelink_1025)N)N)rrrrrrrrrrr!r#r$r%r&r r r r rs  rc@seZdZdZddZdS)DeviceHeaderTestrc Cstjtd}t|z^tt|j}zHtj dd}tj dd}tj |_ tj |_ | || |W|n |0ttd}z |d}|d}W|n |0||jd||jd||jd||jdttd}|}Wdn1s0Y||j|j} ||j|j} tdd } || | d || | d Wt|n t|0dS) NZdevice_header_testZmy_block_devicerlZmy_regular_filerErrViIiYs00000000000000s)rJrKrLrIrrrrrrBLKTYPErREGTYPErr5r:r=r{r|r<rZ offset_dataslicerr) rrr3Z input_blkZ input_regZ output_blkZ output_regZinfilerCZbuf_blkZbuf_regZdevice_headersr r r *test_headers_written_only_for_device_filesMs:         ( z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)rrrrr,r r r r r'Isr'c@sneZdZdZejedZddZ e ddZ e ddZ d d Z d d Zd dZddZddZddZdS) CreateTestzx: spameggs42cCsttdSr)rrrrr r r r4}szCreateTest.setUpcCs:t|jd}|dWdn1s,0YdS)Nrr)r file_pathr)clsrCr r r setUpClassszCreateTest.setUpClasscCst|jdSr)rrr/r0r r r tearDownClassszCreateTest.tearDownClasscCstt|j}||jWdn1s00Y|t}|}Wdn1sb0Y|t |d| d|ddSNrWr.r) rrrrrr/rrr=r>rrtobjnamesr r r test_creates * &zCreateTest.test_createcCstt|j}||jWdn1s00Y|ttt|j}Wdn1sh0Y|t}| }Wdn1s0Y| t |d| d|ddSr4) rrrrrr/rFileExistsErrorrrr=r>rr5r r r test_create_existings* , &zCreateTest.test_create_existingcCs|td}||jWdn1s.0Y|t}|}Wdn1s`0Y|t|d|d|ddSNxrWr.r)rrrr/rr=r>rr5r r r test_create_taropens * &zCreateTest.test_create_taropenc Cs|td}||jWdn1s.0Y|t<|tdWdn1sf0YWdn1s0Y|t}|}Wdn1s0Y|t|d| d|ddSr;) rrrr/rr9rr=r>rr5r r r test_create_existing_taropens* < &z'CreateTest.test_create_existing_taropencCsttt|jN}||jt| |jt j t| t|j|}Wdn1sh0Y| t|d|d|d|t}|}Wdn1s0Y| t|d|d|ddSr4)rrrrrrrrlrr=rJrKrrr/rr>rrr5r r r test_create_pathlike_names& &z$CreateTest.test_create_pathlike_namecCs|ttdN}||jt||jtj t| t|j | }Wdn1sf0Y|t|d|d|d|t}| }Wdn1s0Y|t|d|d|ddSr;)rrrrrrlrr=rJrKrrr/rr>rr5r r r !test_create_taropen_pathlike_names& &z,CreateTest.test_create_taropen_pathlike_nameN)rrrrrJrKrLrIr/r4 classmethodr1r3r8r:r=r>r?r@r r r r r-ws      r-c@seZdZddZdS)GzipCreateTestcCsrtjt|jdd}||jWdn1s40Ytjtddd}Wdn1sd0YdS)NrWr[zr:gzrrrrrr/rr6r r r test_create_with_compresslevels*z-GzipCreateTest.test_create_with_compresslevelNrrrrEr r r r rBsrBc@seZdZddZdS) Bz2CreateTestcCsrtjt|jdd}||jWdn1s40Ytjtddd}Wdn1sd0YdS)NrWr[r:bz2rCrDr r r rEs*z,Bz2CreateTest.test_create_with_compresslevelNrFr r r r rGsrGc@seZdZddZdS)LzmaCreateTestcCsBtjt|jdd}||jWdn1s40YdS)NrW)presetrCrDr r r test_create_with_presetsz&LzmaCreateTest.test_create_with_presetN)rrrrKr r r r rIsrIc@seZdZdZdZdZdS)CreateWithXModeTestr<N)rrrrr=r>r r r r rLsrLrrc@s4eZdZddZddZddZddZd d Zd S) HardlinkTestc Cstjtd|_tjtd|_t|jd}|dWdn1sL0Yzt|j|jWn2t y}z| d|WYd}~n d}~00t t d|_ |j |jdS)Nrr|rfoorr)rJrKrLrIrr|rrrrr<rrr3r)rrCrQr r r r4s($zHardlinkTest.setUpcCs&|jt|jt|jdSr)r3r5rrrr|rr r r r6s  zHardlinkTest.tearDowncCs$|j|j}||jtjddS)Nzadd file as regular failed)r3rrr=rrr*rr r r test_add_twice s zHardlinkTest.test_add_twicecCs$|j|j}||jtjddS)Nzadd file as hardlink failed)r3rr|r=rrrrr r r test_add_hardlinks zHardlinkTest.test_add_hardlinkcCs,d|j_|j|j}||jtjddS)NTzdereferencing hardlink failed)r3Z dereferencerr|r=rrr*rr r r test_dereference_hardlinks  z&HardlinkTest.test_dereference_hardlinkN)rrrr4r6rOrPrQr r r r rMs rMc@s.eZdZd ddZddZddZdd ZdS) PaxWriteTestNcCst|}|r||_tj|_tjtdtjd}z||W| n | 0tt}zJ|r~| dj}| ||dn| dj }| ||dW| n | 0dS)NrrrzPAX longlink creation failedzPAX longname creation failed) rrrvrrrrrrr5rr=rl)rrlrrBr3lnr r r r!s    zPaxWriteTest._testc Cs dddddd}tjtdtj|d}z|tdW|n |0tjtd d }z||j||| d j||j D]f\}}| t |t | t |t |tjvrztj||Wqttfy|d Yq0qW|n |0dS) Nr|0z1.23äöütest)rrbrrXrWr)rrr/rrz"unable to convert pax header field)rrrrrrr5r=rrreZ assertIsNotrrPAX_NUMBER_FIELDSrrri)rrr3keyvalr r r test_pax_global_header9s2  z#PaxWriteTest.test_pax_global_headercCsddd}tjtdtjdd}z0t}d|_d|_||_||W| n | 0tjtdd }zB| d }| |j|| |jd| |jd W| n | 0dS) NrZ123)rKrbrr/rr1rWrrr) rrrrrrlrbrrr5rr=)rrr3rr r r test_pax_extended_headerYs$    z%PaxWriteTest.test_pax_extended_headercCst}d|_d|_d|_d|_d|_|}|j|dd}| |dd| |d t | |d d | |d d| |d d| |d d| |dt ddt ddt ddt ddt ddt ddt dt}d|_d|_d|_d|_d|_|}|j|dd}| |dd| |d d| |d d| |d d| |d d| |dt ddt ddt dddd t d!d"t d#d$t ddt ddS)%Nrg@@rfr|r/rrlrrar?rbrcs././@PaxHeaderVs90000000000000000000000000000002000000000000010205 xsustar00s16 mtime=1000.1 irNas90000644000017300001740000000014400000001750006516 0ufoo㍴ld( r^irs90000000000000000000000000000013000000000000010207 xs15 path=foo㍴ 16 uid=16777216 s$16 gid=16777217 20 size=10000000000 s21 mtime=10000000000 isfoo?`s90000644000000000000000000000000000000000000006540 0) rrrlrr?rbrcr,Zcreate_pax_headerr=rrr)rrinfoheaderr r r test_create_pax_headerrs   z#PaxWriteTest.test_create_pax_header)N)rrrrr\r_rgr r r r rRs  rRc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) UnicodeTestcCs|ddS)Nr/_test_unicode_filenamerr r r test_iso8859_1_filenamesz#UnicodeTest.test_iso8859_1_filenamecCs|ddS)Nutf7rirr r r test_utf7_filenameszUnicodeTest.test_utf7_filenamecCs|ddS)Nutf-8rirr r r test_utf8_filenameszUnicodeTest.test_utf8_filenamecCstjtd|j|dd}z d}|t|W|n |0tjt|d}z"||dj |W|n |0dS)Nrrrr1errorsrWrr) rrrrrrr5r=rrl)rr1r3rlr r r rjs z"UnicodeTest._test_unicode_filenamecCsltjtd|jddd}zFt}d|_|t|j|d|_d|_ |t|j|W| n | 0dS)NrrrrprWr) rrrrrrlr UnicodeErrorrrr5rr r r test_unicode_filename_errors z'UnicodeTest.test_unicode_filename_errorcCstjtdddd}z^|D]L}|t|jt|t|jt|t|jt|t|j tqW| n | 0dS)NrEr/rr1rq) rrrassertIsrrlrrvrrdr5rr r r test_unicode_argumentsz!UnicodeTest.test_unicode_argumentcCstd}d|_d|_tjtd|jdd}z||W|n |0tjtdd}zz| d}| |jd| |jd|jtj kr|tjtdd}| d}| |jd| |jdW|n |0dS) NrrWrr/)rrr1rru ) rrrrdrrrrr5r:r=r)rrr3r r r test_uname_unicodes*      zUnicodeTest.test_uname_unicodeN) rrrrkrmrorjrsrvrwr r r r rhs rhc@sfeZdZejZddZddZddZddZ d d Z d d Z dddZ ddZ ddZdddZd S)UstarUnicodeTestcCs0|d|dt|d|dtdSNre01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ_test_ustar_namerrr r r test_unicode_name1s   z#UstarUnicodeTest.test_unicode_name1cCs|d|dtdSNud012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr{rr r r test_unicode_name2s z#UstarUnicodeTest.test_unicode_name2cCs0|d|dt|d|dtdS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r{rr r r test_unicode_longname1s   z'UstarUnicodeTest.test_unicode_longname1cCs|dt|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r{rr r r test_unicode_longname2s z'UstarUnicodeTest.test_unicode_longname2cCs&|dt|d|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿr{rr r r test_unicode_longname3s  z'UstarUnicodeTest.test_unicode_longname3cCs|d|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr{rr r r test_unicode_longname4s z'UstarUnicodeTest.test_unicode_longname4NcCstjtd|jdd>}t|}|dur4||n|||j|Wdn1sX0Y|durtjtddd,}|D]}|||jqqWdn1s0YdS)Nrrnr]rEr) rrrrrrrr=rlrrlexcr3rr r r r|!s  .z!UstarUnicodeTest._test_ustar_namecCs0|d|dt|d|dtdSry_test_ustar_linkrrr r r test_unicode_link10s   z#UstarUnicodeTest.test_unicode_link1cCs|d|dtdSr~rrr r r test_unicode_link26s z#UstarUnicodeTest.test_unicode_link2cCstjtd|jddD}td}||_|dur:||n|||j|Wdn1s^0Y|durtjtddd,}|D]}|||jqqWdn1s0YdS)Nrrnr]rrEr) rrrrrrvrrr=rr r r r:s  .z!UstarUnicodeTest._test_ustar_link)N)N)rrrr USTAR_FORMATrr}rrrrrr|rrrr r r r rxs rxc@seZdZejZddZdS)GNUUnicodeTestc CsndD]d\}}tjt|dd<}z||}WntyH|dYn0Wdq1s^0YqdS)N))rnupax/bad-pax-)r/upax/bad-pax-äöürrtz%unable to read bad GNU tar pax headerrrrr:rrirr1rlr3rr r r test_bad_pax_headerNs  z"GNUUnicodeTest.test_bad_pax_headerN)rrrrrrrr r r r rJsrc@seZdZejZdZddZdS)PAXUnicodeTestNc CsndD]d\}}tjt|dd<}z||}WntyH|dYn0Wdq1s^0YqdS)N))rnupax/hdrcharset-)r/upax/hdrcharset-äöürrtz)unable to read POSIX.1-2008 binary headerrrr r r test_binary_headercs  z!PAXUnicodeTest.test_binary_header)rrrrrrrsrr r r r r\src@s&eZdZddZd ddZddZdS) AppendTestBasecCs$t|_tj|jr t|jdSr)rrrJrKrrrrr r r r4sszAppendTestBase.setUprc Cstjtdd}|d}d|_||J}t|j|}|||Wdn1s\0YWdn1sz0YWdn1s0YdS)Nr/rr8r)rrrr:rlr;r)rrsrcrrr3r r r _create_testtarxs   zAppendTestBase._create_testtarcCs(|d|j|tjtjtddS)Nrrn)rrrrrrrrr r r test_append_compressedsz%AppendTestBase.test_append_compressedN)r)rrrr4rrr r r r rps rc@seZdZdZdddZdgdfddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS) AppendTestNcCsFtj|jd|d }|tdWdn1s80YdS)NrnrSr|)rrrrr)rrr3r r r _add_testfileszAppendTest._add_testfiler|cCsDtj|j|d }|||Wdn1s60YdS)NrS)rrrr=r)rr7rr3r r r rszAppendTest._testcCs||dSr)rrrr r r test_non_existingszAppendTest.test_non_existingcCs&t|jd||dS)Nr)rrrr5rrrr r r test_emptyszAppendTest.test_emptycCs.td}|||d|j|ddS)NsrrS)rrrr]rrr r r test_empty_fileobjs   zAppendTest.test_empty_fileobjcCsp|t|jd}|}Wdn1s20Yt|}|||d|jddg|ddS)NrVrrr|)r7r) rrrr<rrrr]rrjr r r test_fileobjs&   zAppendTest.test_fileobjcCs$|||jddgddS)Nrr|)r7)rrrrr r r test_existingszAppendTest.test_existingcCsJt|jd}||Wdn1s,0Y|tj|jdSr)rrrrrrr)rr rCr r r _test_errors(zAppendTest._test_errorcCs|ddS)Nr[rrr r r test_nullszAppendTest.test_nullcCs|ddS)N rrr r r test_incompleteszAppendTest.test_incompletecCstd}||dS)Nrrrrrrr r r test_premature_eofszAppendTest.test_premature_eofcCs td}||ddS)Nrrrrr r r test_trailing_garbagesz AppendTest.test_trailing_garbagecCs|ddS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrr r r test_invalidszAppendTest.test_invalid)N)rrrrrrrrrrrrrrrrrr r r r rs  rc@s eZdZdS)GzipAppendTestNrr r r r rsrc@s eZdZdS) Bz2AppendTestNrr r r r rsrc@s eZdZdS)LzmaAppendTestNrr r r r rsrc@s$eZdZddZddZddZdS) LimitsTestcCstd}|tjtd}|t|jtjtd}|tjtd}|t|jtjtd}|t|jtjtd}d|_|t|jtjtd}d|_|t|jtjdS) Nrrza123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamea1234567/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/longname123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamerrl )rrrrrrrvrbrr r r test_ustar_limitss          zLimitsTest.test_ustar_limitscCsXtd}|tjtd}d|_|tjtd}d|_|t|jtjdSNrrrll)rrrrrvrbrrrr r r test_gnu_limitss     zLimitsTest.test_gnu_limitscCsRtd}|tjtd}d|_|tjtd}d|_|tjdSr)rrrrrvrbrr r r test_pax_limitss     zLimitsTest.test_pax_limitsN)rrrrrrr r r r rs rc@s4eZdZddZddZddZddZd d Zd S) MiscTestcCs`|tddddd|tddddd|tdddd|td ddddS) NrrrsfooZfoobarryrNsfoobar)r=rstnntsrr r r test_char_fields szMiscTest.test_char_fieldscCs|tdd|tdd|tdd|tdd|td d |td d |td d|tdd|tdddS)N0000001rW7777777 rrrrs )r=rntirr r r test_read_number_fields s&     z MiscTest.test_read_number_fieldscCs|tdd|tdd|tjdtjdd|tjdtjdd |tjd tjdd |tjd tjdd |tjdtjdd|tjdtjdd |tjdtjdd|ttjdtjdddS)NrWrrrrrSrrrrrrrrrgYg0Bsgr)r=ritnrrrr r r test_write_number_fields) s4 z!MiscTest.test_write_number_fieldscCs|t tddtjWdn1s00Y|t tddtjWdn1sj0Y|t tddtjWdn1s0Y|t tddtjWdn1s0YdS)Nrrrll)rrrrrrrr r r test_number_field_limits@ s . . . z!MiscTest.test_number_field_limitscCshd}tj|t|ddS)N>8rCHRTYPEZ LENGTH_PREFIXfully_trusted_filterZEOFHeaderErrorZ ExFileObjectrSYMTYPEZGNUTYPE_SPARSEZsymlink_exceptionZTruncatedHeaderErrorr*FIFOTYPEZPAX_NAME_FIELDSZSUPPORTED_TYPES FilterErrorrrr)NULOutsideDestinationErrorZSOLARIS_XHDTYPEZXGLTYPErYrZAREGTYPEZ REGULAR_TYPESZCONTTYPErrZ GNU_MAGICZ calc_chksumsZInvalidHeaderErrorgrp data_filterLinkOutsideDestinationErrorrZ POSIX_MAGICpwdZGNUTYPE_LONGLINKrZ GNU_TYPESfilemodemainAbsolutePathErrorZSubsequentHeaderError copyfileobjversionSpecialFileError tar_filterrZ PAX_FIELDSAbsoluteLinkErrorrZEmptyHeaderErrorr) blacklist)rZ check__all__r)rrr r r test__all__J szMiscTest.test__all__N)rrrrrrrrr r r r r s   rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+S),CommandLineTestcOs2tjddg|Ri|\}}}|tjdS)N-mr )rZassert_python_okrrJlineseprg)rargsrgrcrerrr r r tarfilecmdd s zCommandLineTest.tarfilecmdcGstjddg|RS)Nrr)rZassert_python_failurerrr r r tarfilecmd_failurei sz"CommandLineTest.tarfilecmd_failurecCsrtdtdg}|tj|t|d0}|D]}|j|tj |dq4Wdn1sd0YdS)Ntokenize_tests.txt9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtrr) rrrrrrrrJrKr)rtar_namefilestfZtardatar r r make_simple_tarfilel sz#CommandLineTest.make_simple_tarfilecCstdg}|tj|t|dL}td}|j|t ddtd}|j|t ddWdn1sx0YdS)Nrrbenignr[rS../evil) rrrrrrrrrr)rrrrrZevilr r r make_evil_tarfileu s   z!CommandLineTest.make_evil_tarfilecCs||\}}}||d|d||d||d||dd\}}}||d||ddS)Nr[susageserrorsrequired-lr)rr=rlowerrstrip)rrrrr r r test_bad_use~ s  zCommandLineTest.test_bad_usecCs0tD]&}dD]}|||}||dq qdS)N)-tz--testr[) testtarnamesrr=rroptrr r r test_test_command s z!CommandLineTest.test_test_commandcCs6tD],}dD]"}|j|d|dd}|d|q qdS)N-vz --verboserrnPYTHONIOENCODINGsis a tar archive. )rrrrr r r test_test_command_verbose s  z)CommandLineTest.test_test_command_verbosec Cs0td}|d|\}}}|d|||d||dtD]}|j|dt|d}|}Wdn1s~0Yzttt d"}| |dd Wdn1s0Y|dt \}}}||d||dWt t n t t 0WdqD1s 0YqDdS) N zipdir.zipr is not a tar archive.r[rW)rrVrr) rrrrr=rsubTestrr<rrr)rzipnamerrrrrr r r r test_test_command_invalid_file s      & 0 z.CommandLineTest.test_test_command_invalid_filec CstD]}tH}t|d}|jddWdn1s@0YWdn1s^0Y|dd}dD] }|j||dd}| ||q|qdS)NrEFrrr)rz--listr rrZcaptured_stdoutrrrTrrgrr=rrrrexpectedrrr r r test_list_command s Hz!CommandLineTest.test_list_commandc CstD]}tH}t|d}|jddWdn1s@0YWdn1s^0Y|dd}dD]"}|j|d|dd}| ||q|qdS) NrETrrrrrrrrr r r test_list_command_verbose s H z)CommandLineTest.test_list_command_verbosecCsDtd}|d|\}}}|d|||d||ddS)Nrrrr[rW)rrrrr=rrrrrr r r test_list_command_invalid_file s    z.CommandLineTest.test_list_command_invalid_filec Cstdtdg}dD]r}z`|j|tg|R}||dtt}|Wdn1sf0YWttqtt0qdS)Nrr)-cz--creater[) rrrrr=rrrrrrrrr3r r r test_create_command s  (z#CommandLineTest.test_create_commandc Cstdtdg}dD]z}zh|j|dtg|Rddi}|d|tt}|Wdn1sn0YWttqtt0qdS)Nrrrrrrns file created.) rrrrrrrrrrr r r test_create_command_verbose s  (z+CommandLineTest.test_create_command_verbosec Cs~tdg}z`|jdtg|R}||dtt}|Wdn1sV0YWttn tt0dS)Nrrr[) rrr dotlessnamer=rrrr)rrrr3r r r $test_create_command_dotless_filename s   (z4CommandLineTest.test_create_command_dotless_filenamec Cstjtd}tdg}z`|jd|g|R}||dt |}| Wdn1sd0YWt |n t |0dS)Nz.testtarrrr[) rJrKrLrIrrrr=rrrr)rrrrr3r r r (test_create_command_dot_started_filename s   (z8CommandLineTest.test_create_command_dot_started_filenamec Cstdtdg}tttfD]|}|js*qzbtd|j}|jd|g|R}| |}| Wdn1sv0YWt |qt |0qdS)Nrrrr) rrr r$r(rrrrrrr)rrZfiletyperrr3r r r test_create_command_compressed s (z.CommandLineTest.test_create_command_compressedc Csv|tdD]b}zPtt||t}Wdn1s@0Y||dWttqtt0qdS)N)-ez --extractr[rrrr tarextdirrr=rrrrr r r test_extract_command s  *z$CommandLineTest.test_extract_commandc Cs||tdD]h}zVtt"|j|dtdd}Wdn1sF0Y|d|Wttqtt0qdS)Nrrrnr file is extracted.)rrrrrrrrrr r r test_extract_command_verbose s   $z,CommandLineTest.test_extract_command_verbosec Cs|ttjtd}ttzlt|D| dtddd|j dtddddd}| d |Wdn1sx0YWt tn t t0dS) Ndestrrz--filterr fully_trustedrnrr) rrrJrKrLrrrrrrrr)rdestdirrr r r test_extract_command_filter s    ,z+CommandLineTest.test_extract_command_filterc Csn|tzRtt|dtd}Wdn1s:0Y||dWttn tt0dS)NrZspamdirr[r)rrr r r (test_extract_command_different_directory- s   ,z8CommandLineTest.test_extract_command_different_directorycCsntd}tt"|d|\}}}Wdn1s<0Y|d|||d||ddS)Nrrrr[rW)rrrrrrr=rr r r !test_extract_command_invalid_file6 s   0  z1CommandLineTest.test_extract_command_invalid_fileN)rrrrrrrrrrrrrrr r r r rrrrrrr r r r rb s*           rc@s<eZdZddZddZddZddZd d Zd d Zd S)ContextManagerTestcCsJtt}||jdWdn1s.0Y||jddS)Nzclosed inside runtime contextcontext manager failed)rrrrr)rrr r r test_basicA s ,zContextManagerTest.test_basicc Csdtt}||t4|Wdn1s80YWdn1sV0YdSr)rrrr5rrrr r r test_closedF s   zContextManagerTest.test_closedc Csz|t>}tt}tWdn1s00YWdn1sN0Y||jtd||j ddS)Nz)wrong exception raised in context managerr) r Exceptionrrrrr exceptionrr))rrr3r r r test_exceptionO s  @ z!ContextManagerTest.test_exceptioncCsjz4ttd}tWdn1s(0YWn Yn0|tjtdd||j ddS)Nrrz-context manager wrote an end-of-archive blockr) rrrr r=rJrKrrr)rr r r test_no_eofX s&zContextManagerTest.test_no_eofcCsFttdWdn1s"0Y|tjtdddS)Nrrz-context manager wrote no end-of-archive block)rrrrrJrKrrr r r test_eofd s zContextManagerTest.test_eofc Csttdp}z6tj|dd}tWdn1s60YWn Yn0||jd||jdWdn1s0YdS)Nrrrzexternal file object was closedr)rrrr rr)rrr r r rl s &zContextManagerTest.test_fileobjN) rrrrrr"r#r$rr r r r r? s    rzrequires os.link to be missingc@seZdZddZeeejddddZ eeejddddZ eeed d d d Z eeed d d dZ dS)LinkEmulationTestcCs^|j|tttjt|d}|}Wdn1s@0Y|t |t dSr) r3rHrIrrJrKrLr<r=r r@)rrlrr r r r _test_link_extraction s&z'LinkEmulationTest._test_link_extractionislinkz3Skip emulation - has os.path.islink but not os.linkcCs|ddS)Nrqr&rr r r test_hardlink_extraction1 sz+LinkEmulationTest.test_hardlink_extraction1cCs|ddS)Nrtr(rr r r test_hardlink_extraction2 sz+LinkEmulationTest.test_hardlink_extraction2rz Skip emulation if symlink existscCs|ddS)Nrwr(rr r r test_symlink_extraction1 sz*LinkEmulationTest.test_symlink_extraction1cCs|ddS)Nryr(rr r r test_symlink_extraction2 sz*LinkEmulationTest.test_symlink_extraction2N) rrrr&r.r7r5rJrKr)r*r+r,r r r r r%y s"     r%c@s$eZdZddZddZddZdS)Bz2PartialReadTestc sxGfdddtjttd}tt|dD]8}ztj |d||dWq:tj ypYq:0q:dS)Ncs0eZdZdZfddZfddZZS)z9Bz2PartialReadTest._test_partial_input..MyBytesIOFcs4|jrtd|t|k|_t||S)Nz(infinite loop detected in tarfile.open())hit_eofAssertionErrorr^r>rsuperr<)rrU MyBytesIO __class__r r r< sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.readcsd|_t|j|Sr)r.r0r]rr1r r r] sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.seek)rrrr.r<r] __classcell__r r2)r3r r2 sr2rrWr) rrr%compressrrrranger>rr)rrr r<r r5r _test_partial_input s z&Bz2PartialReadTest._test_partial_inputcCs|ddS)NrEr8rr r r test_partial_input sz%Bz2PartialReadTest.test_partial_inputcCs|ddS)NrHr9rr r r test_partial_input_bz2 sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrr8r:r;r r r r r- sr-cCsZzddl}ddl}Wnty(YdS0|dddkr@dS|dddkrVdSdS)NrFrootT)rr ImportErrorgetpwuidgetgrgid)rrr r r root_is_uid_gid_0 s r@chownzmissing os.chowngeteuidzmissing os.geteuidc@seZdZeddZeeddZej dej dej ddd Z ej dej dej dd d Z e e d ej dej dej dd dZej dddZdS)NumericOwnerTestc Cstd}|ddtj|f|ddtjdf|ddtj|fg}ttdX}|D]B\}}}} } t|} || _|| _ d | _ d | _ | | _ | | | qJWdn1s0YtS) NscontentcbMLXWrr<)rrrr*rrrrrbrcrrdrr) filename_1 dirname_1 filename_2rCretarflrlrbrctypcontentsrr r r _make_test_archive s  ,z#NumericOwnerTest._make_test_archiveccsnd|_d}d}|}|}tj||}t|||}t|}||||fVWdn1s`0YdS)Nrznumeric-owner-testfiler)rrJrKrLrCrPrr) mock_geteuidZfnamerrJrKrLZ tar_filenamerMr r r _setup_test s zNumericOwnerTest._setup_testzos.chownzos.chmodz os.geteuidc Cs||8\}}}}|j|tdd|j|tddWdn1sH0Ytjt|}tjt|} |jtj |ddtj | ddgdddS)NTZ numeric_ownerrDrErHrIZ any_order) rRrHrIrJrKrLassert_has_callsr.r/call) rrQ mock_chmod mock_chownrMrJ_rL f_filename_1 f_filename_2r r r test_extract_with_numeric_owner s.z0NumericOwnerTest.test_extract_with_numeric_ownerc Cs||&\}}}}|jtddWdn1s60Ytjt|}tjt|} tjt|} |jtj |ddtj | ddtj | ddgdd dS) NTrSrDrErFrGrHrIrT) rRrrIrJrKrLrUr.r/rV) rrQrWrXrMrJrKrLrZZ f_dirname_1r[r r r "test_extractall_with_numeric_owner s,z3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"cCsb||(\}}}}|j|tddWdn1s80Ytjt|}||dddS)NFrSr)rRrHrIrJrKrLZassert_called_with)rrQrWrXrMrJrYrZr r r "test_extract_without_numeric_owner( s.z3NumericOwnerTest.test_extract_without_numeric_ownerc CsL||.\}}}}|t|j|tddWdn1s>0YdS)NFT)rRrrrHrI)rrQrMrJrYr r r test_keyword_only7 s z"NumericOwnerTest.test_keyword_onlyN)rrrrrPrrRr.r/r0r\r]r4r@r^r_r r r r rC s,             rCc@s4eZdZddZddZddZddZd d Zd S) ReplaceTestscCsN|jd}|jdd}||jd||jd||jdjddS)Nr8z misc/otherr()r3r:rr=rlrrreplacedr r r test_replace_name? s  zReplaceTests.test_replace_namecCsN|jd}|}d|jd<||jdd||jdjdddS)Nrnot-barrdr|r3r:rrr=rar r r test_replace_deepG s  zReplaceTests.test_replace_deepcCsR|jd}|jdd}d|jd<||jdd||jdjdddS)NrF)Zdeeprdrdrerar r r test_replace_shallowO s   z!ReplaceTests.test_replace_shallowc Cs~|jd}dD]h}|j|dH|jfi|di}|t||d|t||dWdq1sn0YqdS)Nr8)rlrrrvrbrcrrd attr_name)r3r:rrr=rr)rrrirbr r r test_replace_allW s  zReplaceTests.test_replace_allcCsF|jd}|t|jddWdn1s80YdS)Nr8i[)r)r3r:rrr)rrr r r test_replace_internal` s  z"ReplaceTests.test_replace_internalN)rrrrcrfrgrjrkr r r r r`> s  r`c@steZdZdZeddZeddZddZedd Z d d Z d d Z ddZ ddZ ddZddZddZdS)NoneInfoExtractTestsNcsjtjtddd}ttd_d|_|jjj d| t fddtj d D_ dS) NrEr/r0Zextractall_ctrlrrc3s|]}|jVqdSr) relative_to control_dirr pr2r r v sz2NoneInfoExtractTests.setUpClass..**/*)rrrrrrIrorrextraction_filterr5setglob control_paths)r0r3r r2r r1o s zNoneInfoExtractTests.setUpClasscCst|jdSr)shutilrror2r r r r3z sz"NoneInfoExtractTests.tearDownClasscs4tfddtdD}||j|dS)Nc3s|]}|VqdSr)rnrprr r rr sz;NoneInfoExtractTests.check_files_present..rs)rurrrvr=rw)rrZ got_pathsr ryr check_files_present~ s z(NoneInfoExtractTests.check_files_presentcgsttd}d|j_|jD]}|D]}t||dq(q t|0|jj |dd| ||VWdn1s|0YdS)NZextractall_nonerrrm) rrrIr3rrsetattrrr"rrz)r attr_namesrrrir r r extract_with_none s  z&NoneInfoExtractTests.extract_with_nonec Csttj}|d}t|dD]n}|j|dNz|j}Wntyh| sdYn0| |j|Wdq,1s0Yq,Wdn1s0YdS)Nrrsr) rrrIrst_mtimer}rvrr is_symlinkZassertGreaterEqual)rZnowrrKrr r r test_extractall_none_mtime s  z/NoneInfoExtractTests.test_extractall_none_mtimec Csttj}ttd}|d|j}|d}t|dD]f}|j|dF| r|| |j|n| r| |j|WdqN1s0YqNWdn1s0YdS)N regular_filerrrsr) rrrIrr write_textr}rvris_dirr=is_file)rZdir_moderZregular_file_moderrKr r r test_extractall_none_mode s    z.NoneInfoExtractTests.test_extractall_none_modecCs.|dWdn1s 0YdS)Nrbr}rr r r test_extractall_none_uid s z-NoneInfoExtractTests.test_extractall_none_uidcCs.|dWdn1s 0YdS)Nrcrrr r r test_extractall_none_gid s z-NoneInfoExtractTests.test_extractall_none_gidcCs.|dWdn1s 0YdS)Nrrrr r r test_extractall_none_uname s z/NoneInfoExtractTests.test_extractall_none_unamecCs.|dWdn1s 0YdS)Nrdrrr r r test_extractall_none_gname s z/NoneInfoExtractTests.test_extractall_none_gnamecCs4|ddddWdn1s&0YdS)Nrbrcrrdrrr r r test_extractall_none_ownership sz3NoneInfoExtractTests.test_extractall_none_ownership)rrrrtrAr1r3rzrr}rrrrrrrr r r r rlf s   rlc@seZdZdZdS)NoneInfoExtractTests_Datar Nrrrrtr r r r r src@seZdZdZdS)!NoneInfoExtractTests_FullyTrustedrNrr r r r r src@seZdZdZdS)NoneInfoExtractTests_Tarr3Nrr r r r r src@seZdZdZdS)NoneInfoExtractTests_DefaultNrr r r r r src@seZdZddZddZdS)NoneInfoTests_Miscc Cst}tjtjtjfD]}|j|dtj|d|d}|t }z| |Wn t yr|tjkrlnYn0dD]|}|j|d\|j fi|di}| t|| |Wdn1s0YWdqx1s0YqxWdq1s 0YqdS)N) tarformatr)rrr)rrrbrcrrdrh)rrrrrrrrrrrr rrr)rbiorr3rBrirbr r r test_add s(   zNoneInfoTests_Misc.test_addc CsdhdhdhdhdhdhddhddhfD]}|j|dtjtdd ^}tjtd d d }tt d || Wdn1s0Y| D]}|D]}t ||dqqtjtd d d }tt d || Wdn1s0Yt ||D]p\}}|dhkr^td|r^||dq*|dhkrtd|r||dq*|dhkrtd|r||dq*|dhkr|dr|d\} } |d\} } || | || dq*|dhkrR|drR|d\} } |d\} } || | || dq*|dhkr|dr|d\} } |d\} } || | || dn|dhkr|dr|d\} } |d\} } || | || dn|ddhkr>|dr>|d\} } |d\} } || | || dn\|ddhkr|dr|d\} } |d\} } || | || dn |||q*Wdn1s0YWdq(1s0Yq(dS)Nrrrbrcrrd)r|r/rrrrrs 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/bar1000/sNone/100)rrrr)rrrr)rrrrrrNrrrrrTrr{r+rrrrematchr=rrendswith) rr|r3Ztio_prevrriZtio_newrgotZexp_userZ exp_groupZgot_userZ got_groupr r r r s  & &      zNoneInfoTests_Misc.test_listN)rrrrrr r r r r srcCs|dd}tjdd|dtjdd|dBtjdtjtjBtjd|dBtjdd|dBtjdd|d BtjdtjtjBtjd|d Btj dd|d Btj dd|d Btj dtj tj Btj d |dB}t |dd|ddksJ|S)zInverse of `stat.filemode` (for permission bits) Using mode strings rather than numbers makes the later tests more readable. rWNr)rE-)rr)r<rraSrZryr)r<rrTr)rS_IRUSRS_IWUSRS_IXUSRS_ISUIDS_IRGRPS_IWGRPS_IXGRPS_ISGIDS_IROTHS_IWOTHS_IXOTHS_ISVTXr)rZstr_moderesultr r r _filemode_to_int0 sH       $rc@sFeZdZdZddZddZddZdddddd d d Zd d ZdS) ArchiveMakerzHelper to create a tar file with specific contents Usage: with ArchiveMaker() as t: t.add('filename', ...) with t.open() as tar: ... # `tar` is now a TarFile with 'filename' in it! cCst|_dSr)rrrrr r r r(W szArchiveMaker.__init__cCstjd|jd|_|S)Nrr)rrrtar_wrr r r __enter__Z szArchiveMaker.__enter__cGs |j|j|_d|_dSr)rr5rrrO)rrr r r __exit__^ s  zArchiveMaker.__exit__N)r symlink_to hardlink_torr?c Kst|}t|jfi|}|dur,||_|r:t||_|durRtj}t||_|durjtj }t||_| dr|durtj }|dur||_ | rtt|j} nd} |j|| dS)z5Add a member to the test archive. Call within `with`.Nr)rrrrr?rrrrvrrrrrArrrrr) rrlrrrrr?rgrBrr r r rc s(   zArchiveMaker.addcKs t|j}tjfd|i|S)z9Open the resulting archive as TarFile. Call after `with`.r)rrrOrr)rrgrr r r r| s zArchiveMaker.open) rrr__doc__r(rrrrr r r r rL s  rc@s eZdZeedZedZeddZ d=ddZ d>d d Z d d Z d dZ ddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Z d5d6Z!d7d8Z"d9d:Z#d;d<Z$dS)?TestExtractionFiltersouterdirrc cst|jz|j|j|dWn2tyT}z||_t|_WYd}~n0d}~00d|_t|j d|_|j |jzdVW| n | 0|jr|j| |jtWdn1s0YdS)a}Extracts `tar` to `self.destdir` and allows checking the result If an error occurs, it must be checked using `expect_exception` Otherwise, all resulting files must be checked using `expect_file`, except the destination directory itself and parent directories of other files. When checking directories, do so before their contents. rmNrs) rr"rrrr raised_exceptionruexpected_pathsrvdiscardr5r=)rr3rrr r r check_context s z#TestExtractionFilters.check_contextNc Csj|jr |jttj|j|}|||j|j ||durrt j dkrrt t | j}||||durt|tr|drtj}|dur|j|}t|}||kr|||nb|tjks|dur||n@|tjkr ||n$|tjkr(||nt||durL|| j||j D]} |j!| qRdS)z'Check a single file. See check_context.Nrr)"rrrrJrKnormpathrrrremoverrrrS_IMODErr=rrrrrreadlinkrsamefiler*rrris_fifoNotImplementedErrorrparentsr) rrlrrrr?rKrrparentr r r expect_file s4       z!TestExtractionFilters.expect_filercCsF||| |jdur|jWdn1s20Yd|_dSr)rr)rexc_typeZ message_rer r r expect_exception s $z&TestExtractionFilters.expect_exceptionc Csxt}|dWdn1s&0YdD]>}||||dWdq41sh0Yq4dS)Nz benign.txt)rr3r rrrrrrarcrr r r test_benign_file s (z&TestExtractionFilters.test_benign_filec Cst }||jdWdn1s,0Y||d|dWdn1sf0YdD]t}|||Pt|jdrt|jd}||dn| t j dWdqt1s0YqtdS)Nz escaped.evilrz../escaped.evilr3r rz /escaped.evilz+['"].*escaped.evil['"] has an absolute path) rrrrrrrrlstriprrr)rrrZouterdir_strippedr r r test_absolute s.(z#TestExtractionFilters.test_absolutecCs t6}|jddd|jddd|dWdn1sB0YtrR||dZ|jdur|tWddS|j ddd|j ddd| dWdn1s0Y||d |t j d Wdn1s0Y||d |t j d Wdn1sF0Yn||d| dWdn1s0Y||d | dWdn1s0Y||d | dWdn1s0YdS) Ncurrentrrrz current/.. parent/evilrrr3T'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr zK'parent' would link to ['"].*outerdir['"], which is outside the destination) rrr can_symlinkrrrrr9rrrrrrr r r test_parent_symlink s8(   ($&**z)TestExtractionFilters.test_parent_symlinkcCsNtrtjtd}t|tdtj|dttj|ddddWdn1sd0Ytj tj|drd}n&tj tj|ddrd}nt d t 6}|j ddd |j d dd | d Wdn1s0Y| |d Vtr@|jddd |jddd |dn|d|d Wdn1sj0Y| |d>tr|tjdn|d|d Wdn1s0Y| |dTtr|r|tjdn|tjdn|d|d Wdn1s@0YdS)NZresolution_testrrrrrTFz#Could not determine link resolutionrzcurrent/parentrrrrzcurrent/r3rr zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)rrrJrKrLrIrrrrr/rrrrrrrr)rZtestpathZdotdot_resolves_earlyrr r r test_parent_symlink2) sV (   *  *  z*TestExtractionFilters.test_parent_symlink2cCs4t*}|jd|jd|dWdn1s60Y||d>trv|jd|jd|dn |dWdn1s0Y||d2tr|t j dn |dWdn1s0Y||d|t j d Wdn1s&0YdS) Nrrrrrr3rr &'parent' is a link to an absolute path) rrrrrrrrrrrrrr r r test_absolute_symlink s(( ((z+TestExtractionFilters.test_absolute_symlinkcCst$}|jd|jddWdn1s00Y||d|tdWdn1sl0Y||d|tdWdn1s0Y||d|tjdWdn1s0YdS) Nrrrrz.*foo. not foundr3r r) rrrrrrrrrrr r r test_absolute_hardlink s2**z,TestExtractionFilters.test_absolute_hardlinkc Cst}|jdddWdn1s*0Yzf|j|dd@trzt|jtrj| tqz|j dddnWdn1s0YWntyYn0dD]B}|||| t j dWdq1s0YqdS)N../mooz ..//tmp/moorrrmrzH'../moo' would be extracted to '.*moo', which is outside the destination) rrrrrrrrr9rrrrrr r r test_sly_relative0 s",  " z(TestExtractionFilters.test_sly_relative0c Cst(}|d|jdddWdn1s40Y||d6|jdtjdtrv|jdd dWdn1s0Yd D]B}|||| tj d Wdq1s0YqdS) Nztmp/z tmp/../../mooztmp/../..//tmp/moorrtmprrztmp/../../tmp/moorzU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination) rrrrrrrrrrrrr r r test_sly_relative2 s ,,z(TestExtractionFilters.test_sly_relative2c CstP}|jddd|jdtjddd|jdtjd ddd Wdn1s\0Yd D]x}|||T|jddd|jdddt r|jddd d n|jdddWdqj1s0YqjdS)Ntargetdir/targetryrplinkdir/hardlinkZ targetdirrrlinkdir/symlinkrrr3r rz../targetdir/targetr?r rrrJrKrLrrrrrrr r r test_deep_symlink s"  &z'TestExtractionFilters.test_deep_symlinkc Cs&t`}|jddd|jdtjddd|jddd |jd dd |jd dd Wdn1sl0Yd D]}||||jddd |jd dd |jd dd t r|jdddd|jddd dn|jddd |jddd Wdqz1s0YqzdS)NrZhardlinkrZsymlink2ZlinkdirZ hardlink2rryrprrzlinkdir/hardlink2rrrrr r r test_chains s, ,z!TestExtractionFilters.test_chainscCstd}|jddd|jddd|jddd|jdd d|jd d d|jd d dWdn1sp0Ytjtd}t|dWdn1s0Yt|t|j tj Bt|j tj @}t |t |t|t|j tj Bt|j tj @}t |||d|rP|jdddn|jddd|jddd|jddd|jdd d|jd d d|r|jd d dn|jd ddWdn1s0Y||dd|jddd|jddd|jddd|jdd d|jd d d|jd ddWdn1sV0Y||d|tt|jj }|jddd|jddd|jddd|jddd|jd dd|jd |dWdn1s0YdS)NZall_bitsz ?rwsrwsrwtrZ perm_bitsz ?rwxrwxrwxZexec_group_otherz ?rw-rwxrwxZread_group_onlyz ?---r-----Zno_bitsz ?---------zdir/z ?---rwsrwtztmp.filerrz ?rwsrwsrwxz ?---rwsrwxr3z ?rwxr-xr-xz ?rw-r-xr-xz ?---r-xr-xr z ?rw-r--r--z ?rw-r-----z ?rw-------)rrrJrKrLrIrchmodrrrrrrrrrrr)rrZ tmp_filenameZhave_sticky_filesZhave_sticky_dirsZnormal_dir_moder r r test_modessZ,    .. z TestExtractionFilters.test_modesc Cst }|jdtjdWdn1s,0YdD]P}|||,ttdrl|jdtjdnWdq:1s0Yq:||d| tj dWdn1s0YdS)Nrr)rr3mkfifor z'foo' is a special file) rrrrrrr5rJrrrrr r r test_pipeKs.  zTestExtractionFilters.test_pipec CstjtjtjfD]}td}||_t|d}|||t|d}| |j|| tj }t |dWdn1s0Y| |jjtj| |jjjdqdS)Nrr)rrrr)rrrrurr=rrrrr!rBrl)rZ special_typerBZtrustedr3cmr r r test_special_files]s    *z(TestExtractionFilters.test_special_filescCsVtjt6}|D]}t|d}|||qWdn1sH0YdSNr)rrrrrrrurr3rBZfilteredr r r test_fully_trusted_filterls  z/TestExtractionFilters.test_fully_trusted_filtercCsjtjtJ}|D]0}t|d}||j|j||j|jqWdn1s\0YdSr) rrrrrrrurlrrr r r test_tar_filterss   z%TestExtractionFilters.test_tar_filterc Cstjth}|D]N}zt|d}WntjyBYqYn0||j|j||j |j qWdn1sz0YdSr) rrrrrrrrurlrrr r r test_data_filter}s  z&TestExtractionFilters.test_data_filterc Cst}|dWdn1s&0Yt|J||d|dWdn1sl0YWdn1s0YdS)z6Ensure the default filter does not warn (like in 3.12)rN)rrrZcheck_no_warningsrrrrr r r test_default_filter_warns_nots ( z3TestExtractionFilters.test_default_filter_warns_notcCsTttd}dd}||_||d|dWdn1sF0YdS)NrEcSs|jdkr|SdSdSNr8r(rBrKr r r strict_filters zSTestExtractionFilters.test_change_default_filter_on_instance..strict_filterr8)rrrrtrr)rr3rr r r &test_change_default_filter_on_instances  z.strict_filterrErtr8)rrrrrrrr)rrr3r r r #test_change_default_filter_on_classs  z9TestExtractionFilters.test_change_default_filter_on_classcCsVGdddtj}|td}||d|dWdn1sH0YdS)Nc@seZdZddZdS)zQTestExtractionFilters.test_change_default_filter_on_subclass..TarSubclasscSs|jdkr|SdSdSrr(rrBrKr r r rts zcTestExtractionFilters.test_change_default_filter_on_subclass..TarSubclass.extraction_filterNrr r r r TarSubclasssrrEr8)rrrrr)rrr3r r r &test_change_default_filter_on_subclasss z0YdS)NrEr )rrrrtrrrrr r r $test_change_default_filter_to_strings z:TestExtractionFilters.test_change_default_filter_to_stringcsfdd}t.}|d|d|dWdn1sF0Y||$ddWdn1s0YdS)Ncs6|j|jdkr$|jddS|jdkr2dS|S)N move_thismovedr( ignore_this)rurrlrrrr r custom_filters    z?TestExtractionFilters.test_custom_filter..custom_filterrrZkeeprr)rrrr rr test_custom_filters   ( z(TestExtractionFilters.test_custom_filtercCsnt}|dWdn1s&0Y||d|tWdn1s`0YdS)Nrzbad filter name)rrrrrrrr r r test_bad_filter_names(z*TestExtractionFilters.test_bad_filter_namec CsGddd}t2}|d|jddd|dWdn1sL0Y|J}||||dWdn1s0YWdn1s0Y||jd||jddS) Nc@s$eZdZddZddZddZdS)zBTestExtractionFilters.test_stateful_filter..StatefulFiltercSs d|_|SrE)num_files_processedrr r r rszLTestExtractionFilters.test_stateful_filter..StatefulFilter.__enter__cSs:zt||}Wntjy&YdS0|jd7_|S)NrW)rrrr rr r r __call__s zKTestExtractionFilters.test_stateful_filter..StatefulFilter.__call__cWs d|_dS)NT)done)rexc_infor r r rszKTestExtractionFilters.test_stateful_filter..StatefulFilter.__exit__N)rrrrr rr r r r StatefulFiltersrZgoodZbadrrrZT)rrrrrr=r r )rrrrr r r test_stateful_filters (Fz*TestExtractionFilters.test_stateful_filtercCsddd}dd}dd}dd}d d }t}|d Wdn1sN0Y||jd d ||d Wdn1s0Y||jd d ||d Wdn1s0Y||jd d ||d Wdn1s 0Y||jd d ||tjWdn1sL0Y||jd d ||tWdn1s0Y||jdd ||d Wdn1s0Y||jdd ||tj Wdn1s0Y||jdd ||t Wdn1sN0Y||jdd ||tjWdn1s0Y||jdd ||tWdn1s0Y||jdd ||tj Wdn1s0Y||jdd ||tj Wdn1sT0Y||jdd ||t Wdn1s0Y||jdd ||tjWdn1s0Y||jdd ||tWdn1s0Y||jdd ||t Wdn1sV0YdS)NcSstddS)Nzfailed with ExtractError)r ExtractErrorrr r r extracterror_filterszBTestExtractionFilters.test_errorlevel..extracterror_filtercSstddS)Nzfailed with FilterError)rrrr r r filtererror_filterszATestExtractionFilters.test_errorlevel..filtererror_filtercSs tddS)Nzfailed with OSError)rrr r r oserror_filtersz=TestExtractionFilters.test_errorlevel..oserror_filtercSstddS)Nzfailed with base TarError)rTarErrorrr r r tarerror_filtersz>TestExtractionFilters.test_errorlevel..tarerror_filtercSs tddS)Nzfailed with ValueError)rrr r r valueerror_filtersz@TestExtractionFilters.test_errorlevel..valueerror_filterrrrrWrZzboo!) rrrrrrrrrrrrr)rrrrrrrr r r test_errorlevelsN(((*,**,*,*,,*,*z%TestExtractionFilters.test_errorlevel)NNNN)r)%rrrrrrIrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrr r r r r sB  ( 2V"9     rc Cstttttgattd}|}Wdn1sB0Yt t t fD]Z}|jrVt|jt |j||jd}| |WdqV1s0YqVdS)NrVr)rrrIrJmakedirsrrrr<r r$r(rr)rCr cr3r r r setUpModule7s   &  rcCstjtrttdSr)rJrKrrIrrr r r r tearDownModuleHs r__main__)rrJrZhashlibr contextlibrrandomrrrxrwarningsrr.Z unittest.mockrrXrZ test.supportrrr#r=r1r%r+r rKrZTESTFNrIrrrrLr"r&r*rr r@rrZ requires_gzipr Z requires_bz2r$Z requires_lzmar(r-ZTestCaser7rrrrrrrrrr8r9r:r>r?rMrNrOrPrYrZr^r_rrrrrrrrrrr r rr'r-rBrGrIrLr4r5rMrRrhrxrrrrrrrrrrrr7r%r-r@rCr`rlrrrrrrrrrrrrr r r r s(                   Pw=(a*;,9' R.Z   * QO@;Y^:! v(^  ^6: