a 5êdgÉ•ã@s’ddlZddlZddlZddlmZddlmZddlmZddl Z ddl Z ddl Z ddl Z ddl mZddlmZz ddlZWney–dZYn0z ddlZWneyºdZYn0z ddlZWneyÞdZYn0dd„Zej ej¡d Zed Ze d ¡Zej ed ¡Zej ed ¡Zej ed¡Z ej ed¡Z!ej ed¡Z"dZ#dZ$Gdd„dƒZ%e &¡Gdd„dƒƒZ'e (¡Gdd„dƒƒZ)e *¡Gdd„dƒƒZ+Gdd„de%ƒZ,Gdd„de,e j-ƒZ.Gdd „d e'e.ƒZ/Gd!d"„d"e)e.ƒZ0Gd#d$„d$e+e.ƒZ1Gd%d&„d&e,e j-ƒZ2Gd'd(„d(e'e2ƒZ3Gd)d*„d*e)e2ƒZ4Gd+d,„d,e+e2ƒZ5Gd-d.„d.e,ƒZ6Gd/d0„d0e6ƒZ7Gd1d2„d2e7e j-ƒZ8Gd3d4„d4e'e7e j-ƒZ9Gd5d6„d6e)e7e j-ƒZ:Gd7d8„d8e+e7e j-ƒZ;Gd9d:„d:e6e j-ƒZ„d>e)e<ƒZ>Gd?d@„d@e+e<ƒZ?GdAdB„dBe%e j-ƒZ@GdCdD„dDe'e@ƒZAGdEdF„dFe)e@ƒZBGdGdH„dHe+e@ƒZCGdIdJ„dJe,e j-ƒZDGdKdL„dLƒZEGdMdN„dNeEe,e j-ƒZFGdOdP„dPeEe,e j-ƒZGGdQdR„dRe%ƒZHGdSdT„dTeHe j-ƒZIGdUdV„dVe'eIƒZJGdWdX„dXe)eIƒZKGdYdZ„dZe+eIƒZLGd[d\„d\eHe j-ƒZMGd]d^„d^e'eMƒZNGd_d`„d`e)eMƒZOGdadb„dbe+eMƒZPGdcdd„dde j-ƒZQGdedf„dfeHe j-ƒZRGdgdh„dheHe j-ƒZSGdidj„dje'eSƒZTGdkdl„dle)eSƒZUGdmdn„dne+eSƒZVGdodp„dpeSƒZWe  XeYedqƒdr¡Gdsdt„dte j-ƒƒZZGdudv„dveQƒZ[Gdwdx„dxƒZ\Gdydz„dze\e j-ƒZ]Gd{d|„d|e\e j-ƒZ^Gd}d~„d~e\e j-ƒZ_Gdd€„d€ƒZ`Gdd‚„d‚e`e j-ƒZaGdƒd„„d„e'e`e j-ƒZbGd…d†„d†e)e`e j-ƒZcGd‡dˆ„dˆe+e`e j-ƒZdGd‰dŠ„dŠe j-ƒZeGd‹dŒ„dŒe j-ƒZfGddŽ„dŽe j-ƒZgGdd„de j-ƒZhe  ieYedqƒd‘¡Gd’d“„d“e,e j-ƒƒZjGd”d•„d•e)e j-ƒZkd–d—„Zle  XeYed˜ƒd™¡e  XeYedšƒd›¡Gdœd„de j-ƒƒƒZmdždŸ„Znd d¡„Zoepd¢krŽe  q¡dS)£éN)Úsha256)Úcontextmanager)ÚRandom)Úsupport)Ú script_helpercCs t|ƒ ¡S©N)rÚ hexdigest)Údata©r ú-/usr/local/lib/python3.9/test/test_tarfile.pyÚ sha256sumsr z-tardirz -extract-testz testtar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ@e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ceZ@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc@s.eZdZeZdZejZej j Z e dd„ƒZ dS)ÚTarTestÚcCs |j|jSr)ÚprefixÚsuffix©Úselfr r r Úmode8sz TarTest.modeN) Ú__name__Ú __module__Ú __qualname__ÚtarnamerÚioÚFileIOÚopenÚtarfileÚTarFileÚtaropenÚpropertyrr r r r r 2s r c@s*eZdZeZdZerejndZe j j Z dS)ÚGzipTestÚgzN) rrrÚgzipnamerrÚgzipZGzipFilerrrZgzopenrr r r r r<src@s*eZdZeZdZerejndZe j j Z dS)ÚBz2TestÚbz2N) rrrÚbz2namerrr$ÚBZ2FilerrrZbz2openrr r r r r#Csr#c@s*eZdZeZdZerejndZe j j Z dS)ÚLzmaTestÚxzN) rrrÚxznamerrÚlzmaÚLZMAFilerrrZxzopenrr r r r r'Jsr'c@s eZdZdZdd„Zdd„ZdS)ÚReadTestúr:cCstj|j|jdd|_dS)Nú iso8859-1©rÚencoding©rrrrÚtarrr r r ÚsetUpVs ÿzReadTest.setUpcCs|j ¡dSr)r2Úcloserr r r ÚtearDownZszReadTest.tearDownN)rrrrr3r5r r r r r,Rsr,c@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)Ú UstarReadTestcCsj|j d¡}|j |¡>}| ¡}| t|ƒ|jd¡| t|ƒtd¡Wdƒn1s\0YdS)Nú ustar/regtypeúregular file extraction failed) r2Ú getmemberÚ extractfileÚreadÚ assertEqualÚlenÚsizer Úsha256_regtype©rÚtarinfoÚfobjr r r r Útest_fileobj_regular_file`s ÿ ÿz'UstarReadTest.test_fileobj_regular_filecCsÊ|j dt¡|j d¡}ttj td¡dƒ}| ¡}Wdƒn1sL0Y|j  |¡T}t   |¡}| ¡}|  ||d¡|  t |ƒdd¡|  |ddd¡Wdƒn1s¼0YdS)Nr7Úrzfileobj.readlines() failedéréSzOI will gladly admit that Python is not the fastest running scripting language. )r2ÚextractÚTEMPDIRr9rÚosÚpathÚjoinÚ readlinesr:rÚ TextIOWrapperr<r=)rrAÚfobj1Úlines1rBÚfobj2Úlines2r r r Útest_fileobj_readlinesis" & ÿ ÿ ýz$UstarReadTest.test_fileobj_readlinescCs¢|j dt¡|j d¡}ttj td¡dƒ}| ¡}Wdƒn1sL0Y|j  |¡,}t t   |¡ƒ}|  ||d¡Wdƒn1s”0YdS)Nr7rDzfileobj.__iter__() failed)r2rGrHr9rrIrJrKrLr:ÚlistrrMr<)rrArNrOrPrQr r r Útest_fileobj_iter{s &ÿzUstarReadTest.test_fileobj_iterc Cs*|j dt¡ttj td¡dƒ}| ¡}Wdƒn1s@0Y|j d¡}|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|ƒd…d¡Wdƒn1s0YdS)Nr7Úrbrzseek() to file's start failediz"seek() to absolute position failediüÿÿééz+seek() to negative relative position failedz+seek() to positive relative position failedé i zread() after seek failedézseek() to file's end failedóz0read() at file's end did not return empty stringz$relative seek() to file's end failedézreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r2rGrHrrIrJrKr;r9r:Úseekr<Útellr>rLr=Úreadline) rrBr rAÚtextÚsÚs1Ús2Úliner r r Útest_fileobj_seek…sr&   ÿ  ÿ  ÿ  ÿ ÿ ÿ ÿ ÿ  ÿ ÿ ÿ ÿzUstarReadTest.test_fileobj_seekc Cs„|j d¡d}t |¡}| ¡ d¡}| t|ƒt¡z|  d¡Wnt y`|  d¡Yn0Wdƒn1sv0YdS)Nr7r.édzseeking failed in text mode) r2r:rrMr;Úencoder<r r?r\ÚAttributeErrorÚfail©rrBr r r r Útest_fileobj_textµs  zUstarReadTest.test_fileobj_textc Csl|j |¡L}|j |¡ }| |j|j¡Wdƒn1s@0YWdƒn1s^0YdSr)r2r:r<Úname)rZlnktypeÚregtypeÚaÚbr r r Ú_test_fileobj_linkÄs  ÿz UstarReadTest._test_fileobj_linkcCs| dd¡dS)Nú ustar/lnktyper7©rorr r r Útest_fileobj_link1Ész UstarReadTest.test_fileobj_link1cCs| dd¡dS)Nú./ustar/linktest2/lnktypeúustar/linktest1/regtyperqrr r r Útest_fileobj_link2Ìsÿz UstarReadTest.test_fileobj_link2cCs| dd¡dS)Nú ustar/symtyper7rqrr r r Útest_fileobj_symlink1Ðsz#UstarReadTest.test_fileobj_symlink1cCs| dd¡dS)Nú./ustar/linktest2/symtypertrqrr r r Útest_fileobj_symlink2Ósÿz#UstarReadTest.test_fileobj_symlink2cCs| dd¡dS)NZsymtype2r7rqrr r r Útest_issue14160×szUstarReadTest.test_issue14160N)rrrrCrRrTrdrjrorrrurwryrzr r r r r6^s  0r6c@s eZdZdS)ÚGzipUstarReadTestN©rrrr r r r r{Úsr{c@s eZdZdS)ÚBz2UstarReadTestNr|r r r r r}Ýsr}c@s eZdZdS)ÚLzmaUstarReadTestNr|r r r r r~àsr~c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚListTestcCstj|j|jd|_dS)N©rr1rr r r r3çszListTest.setUpcs@tjt ¡ddd}t td|¡ˆjjddWdƒn1sF0Y| ¡  ¡}ˆ  d|¡ˆ  d|¡ˆ  d |¡ˆ  d |¡ˆ  d |¡ˆ  d |¡ˆ  d |¡ˆ  d|¡‡fdd„}ˆ  |dƒ|¡ˆ  |dƒ|¡ˆ  |dƒ|¡ˆ  |dƒ|¡ˆ  |dƒ|¡ˆ  |d¡ˆ  d|¡ˆ  d|¡dS)NÚasciiÚ ©ÚnewlineÚstdoutF©Úverboseóustar/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¡}| dd¡S)NÚsurrogateescaperÚbackslashreplace)Údecoder2r0rf)rnr`rr r Úconvùsz 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->) rrMÚBytesIOrÚ swap_attrÚsysr2rSÚdetachÚgetvalueÚassertInÚ assertRegexÚ assertNotIn)rÚtioÚoutrr rr Ú test_listês2,           ÿ ÿ  zListTest.test_listcCs¨tjt ¡ddd}t td|¡|jjddWdƒn1sF0Y| ¡  ¡}|  |d¡|  d|¡|  d |¡|  d |¡|  d |¡|  d |¡dS) Nrr‚rƒr…Tr†s°\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\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) rrMrŽrrrr2rSr‘r’r”r“)rr–r—r r r Útest_list_verboses ,    ÿÿÿzListTest.test_list_verbosecCsˆtjt ¡ddd}dd„}t td|¡&|jjd||jƒdWdƒn1sV0Y| ¡  ¡}|  d |¡|  d |¡dS) Nrr‚rƒcss"| ¡D]}d|jvr|VqdS)NZreg)Ú getmembersrk)r2rAr r r Úmembers)s  z+ListTest.test_list_members..membersr…F)r‡r›r‰rˆ) rrMrŽrrrr2rSr‘r’r“r•)rr–r›r—r r r Útest_list_members's4  zListTest.test_list_membersN)rrrr3r˜r™rœr r r r räs%rc@s eZdZdS)Ú GzipListTestNr|r r r r r4src@s eZdZdS)Ú Bz2ListTestNr|r r r r rž8sržc@s eZdZdS)Ú LzmaListTestNr|r r r r rŸ<srŸc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚCommonReadTestcCs¤ttdƒWdƒn1s 0Y| t t¡¡| t t t¡¡¡ttdƒ }| t |¡¡Wdƒn1s€0Y| t t d¡¡¡dS)NÚwbrUsinvalid) rÚtmpnameÚ assertFalserÚ is_tarfileÚpathlibÚPathrrŽ©rrBr r r Útest_is_tarfile_erroneousBs  .z(CommonReadTest.test_is_tarfile_erroneousc Cs°| t |j¡¡| t t |j¡¡¡t|jdƒ }| t |¡¡Wdƒn1s\0Yt|jdƒ*}| t t |  ¡¡¡¡Wdƒn1s¢0YdS©NrU) Ú assertTruerr¤rr¥r¦rrrŽr;r§r r r Útest_is_tarfile_validSs .z$CommonReadTest.test_is_tarfile_validcCsœt t|j dd¡¡Wdƒn1s,0YzVzt t|j¡}| ¡Wntjyp| d¡Yn0| |  ¡g¡W|  ¡n |  ¡0dS)NrDÚwz&tarfile.open() failed on empty archive) rrr¢rÚreplaceÚgetnamesÚ ReadErrorrhÚassertListEqualršr4©rr2r r r Útest_empty_tarfilebs z!CommonReadTest.test_empty_tarfilecCs>| td¡t d|j¡Wdƒn1s00YdS)NZxxx)ÚassertRaisesRegexÚFileNotFoundErrorrrrrr r r Útest_non_existent_tarfilessz(CommonReadTest.test_non_existent_tarfilecCsVttdƒWdƒn1s 0Y| tjtjt|j¡| tjtjt¡dS©Nr¡)rr¢Ú assertRaisesrr¯rrr r r Útest_null_tarfileys z CommonReadTest.test_null_tarfilec CsÂtdƒ d¡}dD]ª}| td¡J}| |d¡t d¡}t|ƒ|_| |  ¡¡| |¡Wdƒn1sr0Ytjtddd }z$|  |  ¡dgd |¡W|  ¡q|  ¡0qdS) Nrr[)óóar¬rWÚfoorDT)rZ ignore_zerosz3ignore_zeros=True should have skipped the %r-blocks) rÚ randbytesrr¢ÚwriterÚTarInfor=r>Útobufr°r®r4)rr ÚcharrBrAr2r r r Útest_ignore_zeros‚s   (ÿÿz CommonReadTest.test_ignore_zerosc Cs¢dD]–}t td¡2}t d¡}d|_| |t d¡¡Wdƒn1sN0Yttdƒ}| |¡Wdƒn1s‚0Yt t¡H}|  tj d¡|D]}q¬Wdƒn1sÆ0YWdƒn1sä0Yt t¡’}|  ¡}|  tj d¡|  |t ¡Wdƒn1s40Y|  tj d¡| |¡ ¡Wdƒn1sr0YWdƒq1s’0YqdS)N)r[iXrWi°úw:r»rWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)rrr¢r¾r>ÚaddfilerrŽÚtruncater³r¯ÚnextrGrHr:r;)rr>r2ÚtrBr r r Útest_premature_end_of_archive˜s"  0 ( > ,z,CommonReadTest.test_premature_end_of_archivec Csb| tjd¡@t t d¡¡}Wdƒn1s60YWdƒn1sT0YdS)Nz%file could not be opened successfullyz recursion.tar)r³rr¯rrÚfindfiler±r r r Útest_length_zero_header°sz&CommonReadTest.test_length_zero_headerN) rrrr¨r«r²rµr¸rÁrÇrÉr r r r r @s r c@sÌeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Ze eedƒd¡ejdd „ƒƒZd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-S).ÚMiscReadTestBasecCsdSrr rr r r Úrequires_name_attribute¸sz(MiscReadTestBase.requires_name_attributec Csœ| ¡t|jdƒt}| |jt¡tj||jd6}| |jt¡| |jt j   |j¡¡Wdƒn1sp0YWdƒn1sŽ0YdS©NrU©Úfileobjr) rËrrÚassertIsInstancerkÚstrrrr<rIrJÚabspath©rrBr2r r r Útest_no_name_argument»s z&MiscReadTestBase.test_no_name_argumentcCsnt|jdƒ}| ¡}Wdƒn1s*0Yt |¡}| tt|d¡tj||j d}|  |j ¡dS)NrUrkrÍ) rrr;rrŽr·rgÚgetattrrrÚ assertIsNonerk©rrBr r2r r r Útest_no_name_attributeÃs & z'MiscReadTestBase.test_no_name_attributecCs„t|jdƒ}| ¡}Wdƒn1s*0Yt |¡}d|_tj||jd}| |j¡Wdƒn1sv0YdS)NrUrrÍ) rrr;rrŽrkrrrÕrÖr r r Útest_empty_name_attributeËs & z*MiscReadTestBase.test_empty_name_attributec Csˆt |jtj¡}t|dƒZ}| |jt¡tj||jd}|  |j¡Wdƒn1s\0YWdƒn1sz0YdSrÌ) rIrrÚO_RDONLYrÏrkÚintrrrÕ)rÚfdrBr2r r r Útest_int_name_attributeÓs  z(MiscReadTestBase.test_int_name_attributec Cs¦| ¡t |j¡}t|dƒt}| |jt¡tj||j d6}| |jt¡|  |jtj   |j¡¡Wdƒn1sz0YWdƒn1s˜0YdSrÌ) rËrIÚfsencoderrrÏrkÚbytesrrr<rJrÑ)rrrBr2r r r Útest_bytes_name_attributeÜs  z*MiscReadTestBase.test_bytes_name_attributec Cs‚t |j¡}tj||jd:}| |jt¡|  |jt j   t   |¡¡¡Wdƒn1s\0Y| |¡:}| |jt¡|  |jt j   t   |¡¡¡Wdƒn1s°0Ytjj||jd:}| |jt¡|  |jt j   t   |¡¡¡Wdƒn1s0Y|jdkr~tj|dd:}| |jt¡|  |jt j   t   |¡¡¡Wdƒn1st0YdS)Nr€rrD)r¥r¦rrrrrÏrkrÐr<rIrJrÑÚfspathrrr)rrr2r r r Útest_pathlike_nameås : :< z#MiscReadTestBase.test_pathlike_namecCsÖttdƒWdƒn1s 0Y| td¡| td¡}Wdƒn1sX0Y| td¡| td¡}Wdƒn1s0Y| td¡| td¡}Wdƒn1sÈ0YdS)Nr¡z mode must be ÚqÚrwr)rr¢r³Ú ValueErrorrr±r r r Útest_illegal_mode_argõs **z&MiscReadTestBase.test_illegal_mode_argc Cstj|j|jd}zZ| ¡| ¡}|j}|j}| |¡}| ¡}Wdƒn1sX0YW|  ¡n |  ¡0| |j¡‚}|  |¡|j|jd|dF}| ¡}|  |j|¡|  ¡|  | |¡ ¡|d¡Wdƒn1sî0YWdƒn1s0YdS)Nr€r-)rrÎzseek back did not work) rrrrrÅrkÚoffsetr:r;r4r\r<rš)rr2rÆrkræÚfr rBr r r Útest_fileobj_with_offsetÿs$ ( ÿz)MiscReadTestBase.test_fileobj_with_offsetcCs\| tjtjt|j¡ttdƒ(}|jtjtj||jdWdƒn1sN0YdSrÌ)r·rr¯rrrr§r r r Útest_fail_comps   ÿzMiscReadTestBase.test_fail_compcCs"|j d¡}| |jtjd¡dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r2r9r<ÚtyperÚDIRTYPE©rrAr r r Útest_v7_dirtype"s  ÿz MiscReadTestBase.test_v7_dirtypecCs2z|j d¡Wnty,| d¡Yn0dS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r2r9ÚKeyErrorrhrr r r Útest_xstar_type*s z MiscReadTestBase.test_xstar_typecCsN|jD]B}| t|jƒdd|j¡|j d¡s2q| |jdd|j¡qdS)Né½>zwrong mtime for %szustar/rzwrong uname for %s)r2r<rÚÚmtimerkÚ startswithÚunamerìr r r Útest_check_members3s ÿ  ÿz#MiscReadTestBase.test_check_memberscCs| |j ¡djdd¡dS)Néÿÿÿÿzmisc/eofzcould not find all members)r<r2ršrkrr r r Útest_find_members<sÿz"MiscReadTestBase.test_find_membersÚlinkúMissing hardlink implementationc Cs<tjtddd}| dt¡| tjtj   td¡¡| dt¡| tjtj   td¡¡ttj   td¡dƒ}|  ¡}Wdƒn1sŽ0Y|  t |ƒt¡| dt¡| tjtj   td¡¡ttj   td¡dƒ}|  ¡}Wdƒn1sþ0Y|  t |ƒt¡Wdƒn1s.0YdS)NrVr.)Ú errorlevelr0r7rprUrv)rrrrGrHÚ addCleanuprÚunlinkrIrJrKr;r<r r?)rr2rçr r r r Útest_extract_hardlink@s  & &z&MiscReadTestBase.test_extract_hardlinkc Csîtjtdd}tj td¡}t |¡z®dd„|Dƒ}| ||¡|D]x}tj ||j ¡}t j dkr‚|  |j d@t |¡jd@¡dd „}tj |¡}d  ||jƒ||ƒ|¡}|  |j||¡qFW| ¡t |¡n| ¡t |¡0dS) Nr.©r0Ú extractallcSsg|]}| ¡r|‘qSr ©Úisdir©Ú.0rÆr r r Ú \rZz4MiscReadTestBase.test_extractall..Úwin32éÿcSs(t|tƒrd || ¡¡Sd |¡SdS)Nz{} ({})z {!r} (int))Ú isinstanceÚfloatÚformatÚhex)rñr r r Ú format_mtimeds z6MiscReadTestBase.test_extractall..format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrrIrJrKrHÚmkdirrþrkrÚplatformr<rÚstatÚst_modeÚgetmtimerrñr4rÚrmtree) rr2ÚDIRÚ directoriesrArJr Z file_mtimeÚerrmsgr r r Útest_extractallUs0    ÿ ý ÿz MiscReadTestBase.test_extractallc CsÈd}tj td¡}t |¡zštjtddn}| |¡}|j ||dtj ||¡}|  tj  |¡|j ¡t jdkrŒ|  t |¡jd@d¡Wdƒn1s 0YWt |¡n t |¡0dS) Nú ustar/dirtypeZ extractdirr.rý©rJrrií)rIrJrKrHr rrrr9rGr<rrñrr r rrr©rZdirtyperr2rAZ extractedr r r Útest_extract_directoryss   8z'MiscReadTestBase.test_extract_directoryc Cs®t t¡d}t |¡‚tjtddT}dd„|Dƒ}| ||¡|D]$}||j }|  t j   |¡|j¡qHWdƒn1s‚0YWdƒn1s 0YdS)Nrþr.rýcSsg|]}| ¡r|‘qSr rÿrr r r r†rZzBMiscReadTestBase.test_extractall_pathlike_name..)r¥r¦rHrÚtemp_dirrrrrþrkr<rIrJrrñ)rrr2rrArJr r r Útest_extractall_pathlike_name‚s  ÿ  z.MiscReadTestBase.test_extractall_pathlike_namec Cs¤d}t t¡d}t |¡ttjtddF}| |¡}|j ||d||}|  t j   |¡|j¡Wdƒn1sx0YWdƒn1s–0YdS)Nrrþr.rýr)r¥r¦rHrrrrrr9rGr<rIrJrrñrr r r Útest_extract_pathlike_nameŒs  ÿ z+MiscReadTestBase.test_extract_pathlike_namec Csªtj td¡}t|dƒ}| d¡Wdƒn1s80YzVt tj ¡}z|  |¡Wn"tj y€|  |j j¡Yn 0| d¡Wt |¡n t |¡0dS)NÚemptyr¡rZzReadError not raised)rIrJrKrHrr½ÚobjectÚ__new__rrÚ__init__r¯rªrÎÚclosedrhrrû)rrrBr2r r r Útest_init_close_fobj–s (  z%MiscReadTestBase.test_init_close_fobjcCsht |j¡H}t||ƒD],\}}| |j|j¡| | ¡| ¡¡qWdƒn1sZ0YdSr)rrrÚzipr<ræZget_info)rr2Zm1Zm2r r r Útest_parallel_iteration©sz(MiscReadTestBase.test_parallel_iterationN)rrrrËrÓr×rØrÜrßrárårèrérírïrôröÚunittestÚ skipUnlessÚhasattrrIrÚskip_unless_symlinkrürrrrr!r#r r r r rÊ·s2      ÿ   rÊc@seZdZdZdS)Ú MiscReadTestN)rrrrér r r r r(±sr(c@s eZdZdS)ÚGzipMiscReadTestNr|r r r r r)´sr)c@seZdZdd„ZdS)ÚBz2MiscReadTestcCs| d¡dS)NzBZ2File have no name attribute©ÚskipTestrr r r r˸sz'Bz2MiscReadTest.requires_name_attributeN©rrrrËr r r r r*·sr*c@seZdZdd„ZdS)ÚLzmaMiscReadTestcCs| d¡dS)NzLZMAFile have no name attributer+rr r r r˼sz(LzmaMiscReadTest.requires_name_attributeNr-r r r r r.»sr.c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚStreamReadTestúr|c Cs||jD]p}| ¡sq|j |¡F}z| d¡}WntjyN| d¡Yn0|s"qXq"Wdƒq1sl0YqdS)Nr[z6simple read-through using TarFile.extractfile() failed)r2Zisregr:r;rÚ StreamErrorrh)rrArBÚbufr r r Útest_read_throughÄs z StreamReadTest.test_read_throughcCsh|j ¡}|j |¡}| ¡}Wdƒn1s40Y| t|ƒ|jd¡| t|ƒtd¡dS)Nr8) r2rÅr:r;r<r=r>r r?r@r r r rCÔs &ÿ ÿz(StreamReadTest.test_fileobj_regular_filecCsN|j ¡}|j |d¡ }| tj|j¡Wdƒn1s@0YdS)Nr)r2ršr:r·rr1r;)rZtarinfosrçr r r Útest_provoke_stream_errorÝs z(StreamReadTest.test_provoke_stream_errorcCsàtjtdd}zÂ|j}| ¡}| ¡}|dur0qÆ| |d¡| ¡sL| ¡r„| tj ¡|  |¡Wdƒq1sx0Yq|  |¡}|  |¡}|dur¢q| |d¡|  |  ¡|  ¡d¡qW|  ¡n |  ¡0dS)Nr.rýzstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr2rÅÚassertIsNotNoneZislnkZissymr·r1r:r<r;r4)rZtar1Ztar2Út1Út2Úv1Úv2r r r Útest_compare_membersâs* (   ÿz#StreamReadTest.test_compare_membersN)rrrrr3rCr4r:r r r r r/Às  r/c@s eZdZdS)ÚGzipStreamReadTestNr|r r r r r;ýsr;c@s eZdZdS)ÚBz2StreamReadTestNr|r r r r r<sr<c@s eZdZdS)ÚLzmaStreamReadTestNr|r r r r r=sr=c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚDetectReadTestc CsLzt ||¡}Wn.tjy>}z| ¡WYd}~nd}~00| ¡dSr)rrr¯rhr4)rrkrr2Úer r r Ú_testfunc_files zDetectReadTest._testfunc_filec Cszz>t|dƒ }tj|||d}Wdƒn1s20YWn.tjyl}z| ¡WYd}~nd}~00| ¡dS)NrU©rÎ)rrr¯rhr4)rrkrrçr2r?r r r Ú_testfunc_fileobjs  2z DetectReadTest._testfunc_fileobjcCsJ|jrþ| tj¡$tjtd|jdWdƒn1s<0Y| tj¡$tjtd|jdWdƒn1s|0Y| tj¡ tj|jddWdƒn1s¸0Y| tj¡ tj|jddWdƒn1sô0Y||jdƒ||jd|jƒ||jdƒ||jd|jƒ||jdƒdS)Nr-r€r0rDzr:*úr|*)rr·rr¯rr)rZtestfuncr r r Ú _test_modess22..  zDetectReadTest._test_modescCs| |j¡dSr)rDr@rr r r Útest_detect_file)szDetectReadTest.test_detect_filecCs| |j¡dSr)rDrBrr r r Útest_detect_fileobj,sz"DetectReadTest.test_detect_fileobjN)rrrr@rBrDrErFr r r r r>s  r>c@s eZdZdS)ÚGzipDetectReadTestNr|r r r r rG/srGc@seZdZdd„ZdS)ÚBz2DetectReadTestcCs|ttdƒ}| ¡}Wdƒn1s(0Ytjtddd}| |¡Wdƒn1sb0Y| td¡dS)NrUr¡rV)Ú compresslevelrC)rrr;r$r&r¢r½r@rir r r Útest_detect_stream_bz23s  &(z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrrJr r r r rH2srHc@s eZdZdS)ÚLzmaDetectReadTestNr|r r r r rKAsrKc@s¦eZdZd(dd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„ZdS))ÚMemberReadTestNcKs¶|durP|j |¡,}| t| ¡ƒ|d|j¡Wdƒn1sF0Yd|d<d|d<d|d<d|jvr‚d |d <d |d <| ¡D]&\}}| t||ƒ|d ||jf¡qŠdS) Núwrong sha256sum for %srðrñièÚuidreÚgidzold-v7rróÚgnamezwrong value in %s field of %s)r2r:r<r r;rkÚitemsrÔ)rrAÚchksumÚkwargsrçÚkÚvr r r Ú _test_memberGsÿ"  ÿzMemberReadTest._test_membercCs |j d¡}|j|dtddS)Nr7éc©r>rR©r2r9rVr?rìr r r Útest_find_regtypeXs z MemberReadTest.test_find_regtypecCs |j d¡}|j|dtddS)Nzustar/conttyperWrXrYrìr r r Útest_find_conttype\s z!MemberReadTest.test_find_conttypecCs|j d¡}|j|dddS)Nrr©r>©r2r9rVrìr r r Útest_find_dirtype`s z MemberReadTest.test_find_dirtypecCs|j d¡}|j|dddS)Nzustar/dirtype-with-sizeéÿr\r]rìr r r Útest_find_dirtype_with_sizeds z*MemberReadTest.test_find_dirtype_with_sizecCs |j d¡}|j|ddddS)Nrprr7©r>Úlinknamer]rìr r r Útest_find_lnktypehs z MemberReadTest.test_find_lnktypecCs |j d¡}|j|ddddS)Nrvrrlrar]rìr r r Útest_find_symtypels z MemberReadTest.test_find_symtypecCs"|j d¡}|j|dddddS)Nz ustar/blktyperé©r>ÚdevmajorÚdevminorr]rìr r r Útest_find_blktypeps z MemberReadTest.test_find_blktypecCs"|j d¡}|j|dddddS)Nz ustar/chrtyperrVrerfr]rìr r r Útest_find_chrtypets z MemberReadTest.test_find_chrtypecCs|j d¡}|j|dddS)Nzustar/fifotyperr\r]rìr r r Útest_find_fifotypexs z!MemberReadTest.test_find_fifotypecCs |j d¡}|j|dtddS)Nz ustar/sparseéPrX©r2r9rVÚ sha256_sparserìr r r Útest_find_sparse|s zMemberReadTest.test_find_sparsecCs |j d¡}|j|dtddS)Nú gnu/sparserlrXrmrìr r r Útest_find_gnusparse€s z"MemberReadTest.test_find_gnusparsecCs |j d¡}|j|dtddS)Núgnu/sparse-0.0rlrXrmrìr r r Útest_find_gnusparse_00„s z%MemberReadTest.test_find_gnusparse_00cCs |j d¡}|j|dtddS)Núgnu/sparse-0.1rlrXrmrìr r r Útest_find_gnusparse_01ˆs z%MemberReadTest.test_find_gnusparse_01cCs |j d¡}|j|dtddS)Núgnu/sparse-1.0rlrXrmrìr r r Útest_find_gnusparse_10Œs z%MemberReadTest.test_find_gnusparse_10cCs |j d¡}|j|dtddS)Nuustar/umlauts-ÄÖÜäöüßrWrXrYrìr r r Útest_find_umlautss z MemberReadTest.test_find_umlautscCsd}| ||j ¡¡dS)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)r“r2r®)rrkr r r Útest_find_ustar_longname•sz'MemberReadTest.test_find_ustar_longnamecCs |j d¡}|j|dtddS)Nzmisc/regtype-old-v7rWrXrYrìr r r Útest_find_regtype_oldv7™s z&MemberReadTest.test_find_regtype_oldv7cCs@|j ¡tj|j|jdd|_|j d¡}|j|dtddS)Nr.r/upax/umlauts-ÄÖÜäöüßrWrX) r2r4rrrrr9rVr?rìr r r Útest_find_pax_umlautss   ÿ z$MemberReadTest.test_find_pax_umlauts)N)rrrrVrZr[r^r`rcrdrirjrkrorqrsrurwrxryrzr{r r r r rLEs& rLc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú LongnameTestcCsV|jddd}z|j |¡}Wnty>| d¡Yn0| |jtjd¡dS)Nú/áô123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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) Úsubdirr2r9rîrhÚassertNotEqualrêrrë)rrrAr r r Útest_read_longname¨s  ÿzLongnameTest.test_read_longnamecCsf|jddd}|jddd}z|j |¡}WntyP| d¡Yn0| |j|d¡dS)Nr}r~rÚlonglinkzlonglink not foundzlinkname wrong)r€r2r9rîrhr<rb)rrrƒrAr r r Útest_read_longlink²s zLongnameTest.test_read_longlinkcCs„|jddd}|j |¡}|j}|jj |¡t |jj d¡¡}|  t j ¡t j d|dWdƒn1sv0YdS)Nr}r~rizfoo.tar)rkrÎ) r€r2r9rærÎr\rrŽr;r·rr¯r)rrrArærBr r r Útest_truncated_longname»s z$LongnameTest.test_truncated_longnamecCs~|jddd}|j |¡j}ttdƒ@}| |¡tj  |  d¡dd¡}|  |j |j ¡Wdƒn1sp0YdS)Nr}r~rrUr[r.Ústrict)r€r2r9rærrr\rr¾Zfrombufr;r<rêÚ longnametype)rrrærBrAr r r Útest_header_offsetÄs  ÿzLongnameTest.test_header_offsetN)rrrr‚r„r…rˆr r r r r|¦s   r|c@sJeZdZdZejZdd„Zdd„Zdd„Z dd „Z d d „Z e d d „ƒZ dS)Ú GNUReadTestZgnucCsŽ|j |t¡tj t|¡}t|dƒ}| ¡}Wdƒn1sD0Y| t |ƒt d|¡|  ¡rŠt  |¡}|  |jd|j¡dS)NrUrMr[)r2rGrHrIrJrKrr;r<r rnÚ_fs_supports_holesr Z assertLessÚ st_blocksÚst_size)rrkÚfilenamerBr r`r r r Ú_test_sparse_fileÜs & ÿ zGNUReadTest._test_sparse_filecCs| d¡dS)Nrp©rŽrr r r Útest_sparse_file_oldèsz GNUReadTest.test_sparse_file_oldcCs| d¡dS)Nrrrrr r r Útest_sparse_file_00ëszGNUReadTest.test_sparse_file_00cCs| d¡dS)Nrtrrr r r Útest_sparse_file_01îszGNUReadTest.test_sparse_file_01cCs| d¡dS)Nrvrrr r r Útest_sparse_file_10ñszGNUReadTest.test_sparse_file_10cCsŒtj d¡r„tj td¡}t|dƒ,}| d¡|  d¡|  ¡Wdƒn1sV0Yt  |¡}t   |¡|jd|jkSdSdS)NÚlinuxz sparse-testr¡isxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr[F)rr ròrIrJrKrHrr\r½rÄr rrûr‹rŒ)rkrBr`r r r rŠôs    &  zGNUReadTest._fs_supports_holesN)rrrr€rÚGNUTYPE_LONGNAMEr‡rŽrr‘r’r“Ú staticmethodrŠr r r r r‰Ðs  r‰c@s&eZdZdZejZdd„Zdd„ZdS)Ú PaxReadTestZpaxcCsØtjtdd}zº| d¡}| |jd¡| |jd¡| |j d¡d¡| d¡}| |jd ¡| |jd¡| |j d¡d¡| d ¡}| |jd ¡| |jd ¡| |j d¡d¡W|  ¡n |  ¡0dS) Nr.rýz pax/regtype1r»ÚbarzVENDOR.umlautsuÄÖÜäöüßz pax/regtype2rz pax/regtype3r) rrrr9r<rórPÚ pax_headersÚgetr4©rr2rAr r r Útest_pax_global_headerss* ÿ ÿ ÿz#PaxReadTest.test_pax_global_headerscCsªtjtdd}zŒ| d¡}| |jd¡| |jd¡| |jd¡| |jd¡| t |jƒt ¡| t |j dƒd¡| t |j dƒd¡W|  ¡n |  ¡0dS) Nr.rýz pax/regtype4rWé{g€Ç^ ÏAZatimeÚctime) rrrr9r<r>rNrOrñrêrr™r4r›r r r Útest_pax_number_fields's z"PaxReadTest.test_pax_number_fieldsN) rrrr€rÚXHDTYPEr‡rœrŸr r r r r— sr—c@seZdZdd„Zdd„ZdS)Ú WriteTestBasecCsˆt ¡}tj||jd }| t d¡¡Wdƒn1s>0Y| |jd¡|  ¡}~t   ¡| |j¡|  ||  ¡¡dS)NrÍr»z#external fileobjs must never closed) rrŽrrrrÃr¾r£r r’rÚ gc_collectr<)rrBr2r r r r Útest_fileobj_no_close;s. z#WriteTestBase.test_fileobj_no_closecCs¨t t|j¡@}t d¡}tjtj|_| |t   d|j¡¡Wdƒn1sT0Y| td¡*}|  t |  ¡ƒtjd¡Wdƒn1sš0YdS)Nr»rºrUrY)rrr¢rr¾Ú RECORDSIZEÚ BLOCKSIZEr>rÃrrŽr<r=r;)rr2rÆrBr r r Útest_eof_markerGs  6zWriteTestBase.test_eof_markerN)rrrr£r¦r r r r r¡7s r¡c@s°eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z e   e e dƒd¡dd„ƒZejdd„ƒZdd„Zdd„Zd&dd„Zejdd„ƒZdd„Zd d!„Zd"d#„Zd$d%„ZdS)'Ú WriteTestrÂcCszd}t t|j¡}z t |¡}| |¡W| ¡n | ¡0t t¡}z"| | ¡d|d¡W| ¡n | ¡0dS)NÚd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rz!failed to store 100 char filename) rrr¢rr¾rÃr4r<r®)rrkr2rÆr r r Útest_100_char_nameYs   ÿzWriteTest.test_100_char_namecCsŒt t|j¡}zXtj td¡}t|dƒ}| d¡Wdƒn1sH0Y|  |¡W|  ¡n |  ¡0|  tj  t¡dd¡dS)NÚfiler¡óaaarztarfile is empty) rrr¢rrIrJrKrHr½Úaddr4Z assertGreaterÚgetsize)rr2rJrBr r r Ú test_tar_sizems ( ÿzWriteTest.test_tar_sizecCsÆt t|j¡}z¨tj td¡}t|dƒWdƒn1s>0Y| |¡}|  |j d¡t|dƒ}|  d¡Wdƒn1sŠ0Y| |¡}|  |j d¡W|  ¡n |  ¡0dS)Nrªr¡rr«re) rrr¢rrIrJrKrHÚ gettarinfor<r>r½r4)rr2rJrArBr r r Útest_file_size{s   ( zWriteTest.test_file_sizec Csvtj td¡}t |¡zLt t|j¡}z$|  |¡}|  |j d¡W|  ¡n |  ¡0Wt  |¡n t  |¡0dS)NÚ directoryr)rIrJrKrHr rrr¢rr¯r<r>r4rÚrmdir©rrJr2rAr r r Útest_directory_size‹s  zWriteTest.test_directory_sizec CsXtj td¡}t |¡ttj |d¡dƒ ¡ttj |d¡dƒ ¡zÖt t|j ¡}z†t j   d¡$}ddg|_ | |¡Wdƒn1s0Yg}| ¡D]}| tj |j¡d¡q¦| |gd¢¡W| ¡n | ¡0Wt tj |d¡¡t tj |d¡¡t |¡n4t tj |d¡¡t tj |d¡¡t |¡0dS)Nr±Ú1rmÚ2z os.listdirrõ)r±rµr¶)rIrJrKrHr rr4rr¢rr$ÚmockÚpatchÚ return_valuer¬ršÚappendÚsplitrkr<rrûr²)rrJr2Z mock_listdirÚpathsÚmr r r Útest_ordered_recursionšs*  (  þz WriteTest.test_ordered_recursionc Csºt t|j¡˜}t t¡d}t|dƒ}| d¡Wdƒn1sH0Y| |¡}| t   |¡¡}|  |j t ¡| |j |j ¡| |jd¡Wdƒn1s¬0YdS)Nrªr¡r«re)rrr¢rr¥r¦rHr½r¯rIràrÏrkrÐr<r>)rr2rJrBrAZtarinfo2r r r Útest_gettarinfo_pathlike_name°s ( z'WriteTest.test_gettarinfo_pathlike_namer÷røc Cstj td¡}tj td¡}t|dƒ}| d¡Wdƒn1sF0Yzt ||¡Wn2ty’}z| d|¡WYd}~n d}~00z`t  t |j ¡}z.|  |¡|  |¡}|  |jd¡W| ¡n | ¡0Wt |¡t |¡nt |¡t |¡0dS)Nr÷Ú link_targetr¡r«ú os.link(): %sr)rIrJrKrHrr½r÷ÚPermissionErrorr,rr¢rr¯r<r>r4rrû)rr÷ÚtargetrBr?r2rAr r r Útest_link_size»s& ($    ÿ zWriteTest.test_link_sizec Csxtj td¡}t d|¡zLt t|j¡}z$|  |¡}|  |j d¡W|  ¡n |  ¡0Wt  |¡n t  |¡0dS)NÚsymlinkrÀr)rIrJrKrHrÅrrr¢rr¯r<r>r4rrûr³r r r Útest_symlink_sizeÓs  zWriteTest.test_symlink_sizecCs¨tj t¡}t t|j¡}z~| |j|d¡|  |¡| |  ¡gd¡t   t ¡|  |¡Wdƒn1sr0Y| |  ¡gd¡W| ¡n | ¡0dS)Nzarchive name must be absolutezadded the archive to itself)rIrJrÑr¢rrrr<rkr¬r®rÚ change_cwdrHr4)rÚdstnamer2r r r Ú test_add_selfás   ÿ  ÿ ( ÿzWriteTest.test_add_selfc Cs8tj td¡}t |¡z dD]}tj ||¡}t |¡q dd„}tjt |j dd}z|j |d|dW|  ¡n |  ¡0|  t¡"|  |dd d|¡Wdƒn1s²0Yt t d ¡}zF|D] }| |jd ¡| |jd ¡qÎ| t| ¡ƒd ¡W|  ¡n |  ¡0Wt |¡n t |¡0dS)NÚfilter)r»r˜ZbazcSs&tj |j¡dkrdSd|_d|_|S)Nr˜rr»)rIrJÚbasenamerkrNró)rAr r r rÊûs z%WriteTest.test_filter..filterr.rýZ empty_dir)ÚarcnamerÊTrDrr»re)rIrJrKrHr rÚcreate_empty_filerrr¢rr¬r4r·Ú TypeErrorr<rNrór=ršr)rÚtempdirrkrÊr2rAr r r Ú test_filterós*   0 zWriteTest.test_filterNFcCsÂtj td¡}|st |¡n t |¡t t |j ¡}z|j ||dW|  ¡n |  ¡0t t d¡}z|  ¡}W|  ¡n |  ¡0|s˜t |¡n t |¡| |j|pº| tjd¡¡dS)Nr»©rÌrDr})rIrJrKrHrrÍr rrr¢rr¬r4rÅrûr²r<rkr­Úsep)rrJZcmp_pathÚdirr»r2rÆr r r Ú_test_pathnames       zWriteTest._test_pathnamec Cs`tj td¡}tj td¡}t |¡ztj |d¡}tj |d¡}t|dƒ}| d¡Wdƒn1sp0Yt ||¡t |d¡,}|j |dd|j |ddWdƒn1sÄ0Ytj|dd @}z|j |d Wnt y |  d ¡Yn0Wdƒn1s$0YWt  |¡t  |¡nt  |¡t  |¡0dS) NZ testsymlinksztestsymlinks.tarÚsourcerÅr¬z something rÑrY)rùrz&extractall failed with symlinked files)rIrJrKrHr rr½rÅrr¬rþÚOSErrorrhrrûr)rrÏZ temparchiveZ source_fileZ target_filerçr2r r r Útest_extractall_symlinks8s*  ( ,2  ÿ z"WriteTest.test_extractall_symlinkscCs<| d¡| tj ddd¡¡| tj ddd¡¡| tj dd¡¡| tj ddd¡¡| tj dddd¡¡| tj dddd¡¡| tj dddd¡¡| tj dd¡¡| tj ddd¡¡| tj dddd¡¡| tj dddd¡¡| dtjtjd¡|jdtjtjddddS)Nr»Ú.r˜z..T)rÓ)rÔrIrJrKrÒrr r r Útest_pathnamesRs zWriteTest.test_pathnamescCs4tjdkr| dd¡n| dd¡| dd¡dS)NrzC:\foor»z/fooz///foo)rr rÔrr r r Útest_abs_pathnamescs  zWriteTest.test_abs_pathnamesc Cs¬t t¡Žt t|j¡}z| d¡W| ¡n | ¡0t td¡}z6|D]$}|j dkrN|  |j   d¡|j ¡qNW| ¡n | ¡0Wdƒn1sž0YdS)NrØrDz./) rrÇrHrrr¢rr¬r4rkrªrò©rr2rÆr r r Útest_cwdjs    zWriteTest.test_cwdc s‚tttfD]r‰G‡fdd„dtjƒ}|ƒ}| ˆ¡,tjt|j |tj ddid}Wdƒn1sf0Y|  |j ¡q dS)NcseZdZdZ‡fdd„ZdS)z8WriteTest.test_open_nonwritable_fileobj..BadFileTcs|jrd|_ˆ‚dS©NF)Úfirst©rr ©Úexctyper r r½sz>WriteTest.test_open_nonwritable_fileobj..BadFile.writeN)rrrrÞr½r ràr r ÚBadFile}srâZnonr)rÎrr™) rÖÚEOFErrorÚ RuntimeErrorrrŽr·rrr¢rÚ PAX_FORMATr£r )rrârçr2r ràr Útest_open_nonwritable_fileobj{s  þ$z'WriteTest.test_open_nonwritable_fileobj)NF)rrrrr©r®r°r´r¾r¿r$r%r&rIrÄrr'rÆrÉrÐrÔr×rÙrÚrÜrær r r r r§Us, ÿ  (  r§c@s eZdZdS)Ú GzipWriteTestNr|r r r r rçŒsrçc@s eZdZdS)Ú Bz2WriteTestNr|r r r r rèsrèc@s eZdZdS)Ú LzmaWriteTestNr|r r r r ré”sréc@s@eZdZdZdZdd„Ze ej dko.e e dƒd¡dd „ƒZ dS) ÚStreamWriteTestzw|NcCs¼t t|j¡}| ¡|jrp| ¡}ttdƒ}| ¡}Wdƒn1sL0Y| |¡}| |j d¡n2| t¡}| ¡}Wdƒn1s˜0Y|  |  d¡tj d¡dS)NrUzfound trailing datar¹zincorrect zero padding) rrr¢rr4Ú decompressorr;Ú decompressr£Ú unused_datar<Úcountr¤)rr2ZdecrBr r r r Útest_stream_paddings &  &ÿz#StreamWriteTest.test_stream_paddingrÚumaskzMissing umask implementationc Csttj t¡rt t¡t d¡}zBt t|j ¡}|  ¡t  t¡j d@}|  |dd¡Wt |¡n t |¡0dS)Néri¤zwrong file permissions)rIrJÚexistsr¢rrûrðrrrr4r rr<)rZoriginal_umaskr2rr r r Útest_file_mode­s   zStreamWriteTest.test_file_mode) rrrrrërïr$r%rr r&rIrór r r r rê˜sÿrêc@seZdZdd„ZdS)ÚGzipStreamWriteTestcCs(t t|j¡ ¡t t¡jdd}dS)zf Ensure the source directory is not included in the tar header per bpo-41316. zlatin-1rýN)rrr¢rr4r¥r¦Ú read_text)rÚpayloadr r r Ú test_source_directory_not_leakedÀsz4GzipStreamWriteTest.test_source_directory_not_leakedN)rrrr÷r r r r rô¿srôc@seZdZerejndZdS)ÚBz2StreamWriteTestN)rrrr$ÚBZ2Decompressorrër r r r røÊsrøc@seZdZerejndZdS)ÚLzmaStreamWriteTestN)rrrr*ÚLZMADecompressorrër r r r rúÍsrúc@speZdZdd„Zddd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)Ú GNUWriteTestcCst|ƒdd}|dS)Nr[rV)r=)rr`Zblocksr r r Ú_lengthÕszGNUWriteTest._lengthNcCsXd}t|ƒtjkr(|d7}|| |¡7}|durTt|ƒtjkrT|d7}|| |¡7}|S)Nr[)r=rÚ LENGTH_NAMErýÚ LENGTH_LINK)rrkr÷rîr r r Ú _calc_sizeÙszGNUWriteTest._calc_sizecCsÐt |¡}|r||_tj|_t td¡}z>tj|_|  |¡|  ||¡}|j }|  ||d¡W|  ¡n |  ¡0t t¡}zD| ¡}| |d¡|  |j|jd¡|  |j|jd¡W|  ¡n |  ¡0dS)Nr¬z%GNU longname/longlink creation failedzunable to read longname member)rr¾rbÚLNKTYPErêrr¢Ú GNU_FORMATrrÃrrær<r4rÅr5rk)rrkr÷rAr2r8r9Úmemberr r r Ú_testçs2     ÿ ÿ ÿzGNUWriteTest._testcCs| d¡dS)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©rrr r r Útest_longname_1023szGNUWriteTest.test_longname_1023cCs| d¡dS)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/longnamerrr r r Útest_longname_1024szGNUWriteTest.test_longname_1024cCs| d¡dS)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_rrr r r Útest_longname_1025 szGNUWriteTest.test_longname_1025cCs| dd¡dS)Nrkáÿlonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1023 szGNUWriteTest.test_longlink_1023cCs| dd¡dS)Nrkálonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1024szGNUWriteTest.test_longlink_1024cCs| dd¡dS)Nrkálonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1025szGNUWriteTest.test_longlink_1025cCs| dd¡dS)Nrr rrr r r Útest_longnamelink_1023sÿz#GNUWriteTest.test_longnamelink_1023cCs| dd¡dS)Nrrrrr r r Útest_longnamelink_1024sÿz#GNUWriteTest.test_longnamelink_1024cCs| dd¡dS)Nr rrrr r r Útest_longnamelink_1025sÿz#GNUWriteTest.test_longnamelink_1025)N)N)rrrrýrrrr r r rrrrrr r r r rüÑs  rüc@seZdZdZdd„ZdS)ÚDeviceHeaderTestrÂc CsŠtj td¡}t |¡z^t t|j¡}zHtj dd}tj dd}tj |_ tj |_ |  |¡|  |¡W| ¡n | ¡0t td¡}z | d¡}| d¡}W| ¡n | ¡0| |jd¡| |jd¡| |jd¡| |jd¡ttdƒ}| ¡}Wdƒn1s0Y||j|j…} ||j|j…} tdd ƒ} | | | d ¡| | | d ¡Wt |¡n t |¡0dS) NZdevice_header_testZmy_block_device)rkZmy_regular_filerDrrUiIiYs00000000000000s)rIrJrKrHr rrr¢rr¾ÚBLKTYPErêÚREGTYPErÃr4r9r<rgrhr;ræZ offset_dataÚslicerr) rrÏr2Z input_blkZ input_regZ output_blkZ output_regZinfiler2Zbuf_blkZbuf_regZdevice_headersr r r Ú*test_headers_written_only_for_device_files's:         ( z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)rrrrrr r r r r#src@sneZdZdZej ed¡Zdd„Z e dd„ƒZ e dd„ƒZ d d „Z d d „Zd d„Zdd„Zdd„Zdd„ZdS)Ú CreateTestzx:Ú spameggs42cCst t¡dSr)rrûr¢rr r r r3WszCreateTest.setUpcCs:t|jdƒ}| d¡Wdƒn1s,0YdS)Nr¡r«)rÚ file_pathr½)ÚclsrBr r r Ú setUpClassZszCreateTest.setUpClasscCst |j¡dSr)rrûr)rr r r Ú tearDownClass_szCreateTest.tearDownClasscCst t|j¡}| |j¡Wdƒn1s00Y| t¡}| ¡}Wdƒn1sb0Y| t |ƒd¡|  d|d¡dS©NrVrr) rrr¢rr¬rrr®r<r=r“©rZtobjÚnamesr r r Ú test_createcs * &zCreateTest.test_createcCsÈt t|j¡}| |j¡Wdƒn1s00Y| t¡t t|j¡}Wdƒn1sh0Y| t¡}|  ¡}Wdƒn1sš0Y|  t |ƒd¡|  d|d¡dSr ) rrr¢rr¬rr·ÚFileExistsErrorrr®r<r=r“r!r r r Útest_create_existingls* , &zCreateTest.test_create_existingcCsŽ| td¡}| |j¡Wdƒn1s.0Y| t¡}| ¡}Wdƒn1s`0Y| t|ƒd¡| d|d¡dS©NÚxrVrr)rr¢r¬rr®r<r=r“r!r r r Útest_create_taropenxs * &zCreateTest.test_create_taropenc Csä| td¡}| |j¡Wdƒn1s.0Y| t¡<| td¡Wdƒn1sf0YWdƒn1s„0Y| t¡}| ¡}Wdƒn1s¶0Y| t|ƒd¡|  d|d¡dSr&) rr¢r¬rr·r$r®r<r=r“r!r r r Útest_create_existing_taropens* < &z'CreateTest.test_create_existing_taropencCsèt t t¡|j¡N}| |jt¡|  |jt j   t¡¡|  t |j¡¡| ¡}Wdƒn1sh0Y|  t|ƒd¡| d|d¡| t¡}| ¡}Wdƒn1sº0Y|  t|ƒd¡| d|d¡dSr )rrr¥r¦r¢rrÏrkrÐr<rIrJrÑr¬rr®r=r“rr!r r r Útest_create_pathlike_nameŽs& &z$CreateTest.test_create_pathlike_namecCsæ| t t¡d¡N}| |jt¡| |jtj   t¡¡|  t |j ¡¡|  ¡}Wdƒn1sf0Y| t|ƒd¡| d|d¡| t¡}|  ¡}Wdƒn1s¸0Y| t|ƒd¡| d|d¡dSr&)rr¥r¦r¢rÏrkrÐr<rIrJrÑr¬rr®r=r“r!r r r Ú!test_create_taropen_pathlike_nameœs& &z,CreateTest.test_create_taropen_pathlike_nameN)rrrrrIrJrKrHrr3Ú classmethodrrr#r%r(r)r*r+r r r r rQs      rc@s eZdZdS)ÚGzipCreateTestNr|r r r r r-«sr-c@s eZdZdS)Ú Bz2CreateTestNr|r r r r r.¯sr.c@s eZdZdS)ÚLzmaCreateTestNr|r r r r r/³sr/c@seZdZdZdZdZdS)ÚCreateWithXModeTestr'N)rrrrr(r)r r r r r0·sr0r÷røc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú HardlinkTestc Cs¾tj td¡|_tj td¡|_t|jdƒ}| d¡Wdƒn1sL0Yzt |j|j¡Wn2t yœ}z|  d|¡WYd}~n d}~00t  t d¡|_ |j  |j¡dS)Nr»r˜r¡ófoorÁr¬)rIrJrKrHr»r˜rr½r÷rÂr,rr¢r2r¬)rrBr?r r r r3Ãs($zHardlinkTest.setUpcCs&|j ¡t |j¡t |j¡dSr)r2r4rrûr»r˜rr r r r5Òs  zHardlinkTest.tearDowncCs$|j |j¡}| |jtjd¡dS)Nzadd file as regular failed)r2r¯r»r<rêrrrìr r r Útest_add_twice×s ÿzHardlinkTest.test_add_twicecCs$|j |j¡}| |jtjd¡dS)Nzadd file as hardlink failed)r2r¯r˜r<rêrrrìr r r Útest_add_hardlinkÞs ÿzHardlinkTest.test_add_hardlinkcCs,d|j_|j |j¡}| |jtjd¡dS)NTzdereferencing hardlink failed)r2Z dereferencer¯r˜r<rêrrrìr r r Útest_dereference_hardlinkãs  ÿz&HardlinkTest.test_dereference_hardlinkN)rrrr3r5r3r4r5r r r r r1¿s r1c@s&eZdZddd„Zdd„Zdd„ZdS) Ú PaxWriteTestNcCs´t |¡}|r||_tj|_tjtdtjd}z| |¡W|  ¡n |  ¡0t t¡}zJ|r~|  ¡dj}|  ||d¡n|  ¡dj }|  ||d¡W|  ¡n |  ¡0dS)Nr¬©rrzPAX longlink creation failedzPAX longname creation failed) rr¾rbrrêrr¢rårÃr4ršr<rk)rrkr÷rAr2ÚlÚnr r r rìs    zPaxWriteTest._testc Cs ddddddœ}tjtdtj|d}z| t d¡¡W| ¡n | ¡0tjtd d }z¢| |j|¡| |  ¡d j|¡|j  ¡D]f\}}|  t |ƒt ¡|  t |ƒt ¡|tjvrŠztj||ƒWqŠttfyî| d ¡YqŠ0qŠW| ¡n | ¡0dS) Nr˜Ú0z1.23õäöüÚtest)r»rNrñr<r;r¬)rr™r.rýrz"unable to convert pax header field)rrr¢rårÃr¾r4r<r™ršrQZ assertIsNotrêrÞÚPAX_NUMBER_FIELDSrÎrärh)rr™r2ÚkeyÚvalr r r Útest_pax_global_headers2û ÿ z#PaxWriteTest.test_pax_global_headercCsºdddœ}tjtdtjdd}z0t ¡}d|_d|_||_| |¡W|  ¡n |  ¡0tjtdd }zB|  ¡d }|  |j|¡|  |jd¡|  |jd ¡W|  ¡n |  ¡0dS) Nr»Z123)rJrNr¬r.©rr0r;irýrr) rrr¢rår¾rkrNr™rÃr4ršr<)rr™r2rÆr r r Útest_pax_extended_header$s$  ÿ  z%PaxWriteTest.test_pax_extended_header)N)rrrrr@rBr r r r r6ês  r6c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú UnicodeTestcCs| d¡dS)Nr.©Ú_test_unicode_filenamerr r r Útest_iso8859_1_filename@sz#UnicodeTest.test_iso8859_1_filenamecCs| d¡dS)NÚutf7rDrr r r Útest_utf7_filenameCszUnicodeTest.test_utf7_filenamecCs| d¡dS)Núutf-8rDrr r r Útest_utf8_filenameFszUnicodeTest.test_utf8_filenamecCs‚tjtd|j|dd}z d}| t |¡¡W| ¡n | ¡0tjt|d}z"| | ¡dj |¡W| ¡n | ¡0dS)Nr¬r†©rr0Úerrorsr;rýr) rrr¢rrÃr¾r4r<ršrk)rr0r2rkr r r rEIs ÿz"UnicodeTest._test_unicode_filenamecCsltjtd|jddd}zFt ¡}d|_| t|j|¡d|_d|_ | t|j|¡W|  ¡n |  ¡0dS)Nr¬rr†rKr;r») rrr¢rr¾rkr·Ú UnicodeErrorrÃrór4r›r r r Útest_unicode_filename_errorXs ÿz'UnicodeTest.test_unicode_filename_errorcCs€tjtdddd}z^|D]L}| t|jƒt¡| t|jƒt¡| t|jƒt¡| t|j ƒt¡qW|  ¡n |  ¡0dS)NrDr.r†©r0rL) rrrZassertIsrêrkrÐrbrórPr4rÛr r r Útest_unicode_argumentgsÿz!UnicodeTest.test_unicode_argumentcCsät d¡}d|_d|_tjtd|jdd}z| |¡W| ¡n | ¡0tjtdd}zz|  d¡}|  |jd¡|  |jd¡|jtj krÊ| ¡tjtdd}|  d¡}|  |jd¡|  |jd¡W| ¡n | ¡0dS) Nr»r;r¬r.)rrr0rýru í³¤í³¶í³¼) rr¾rórPrr¢rrÃr4r9r<rå)rrÆr2r r r Útest_uname_unicodess*  ÿ    zUnicodeTest.test_uname_unicodeN) rrrrFrHrJrErNrPrQr r r r rC>s rCc@sfeZdZejZdd„Zdd„Zdd„Zdd„Z d d „Z d d „Z ddd„Z dd„Z dd„Zddd„Zd S)ÚUstarUnicodeTestcCs0| d¡| dt¡| d¡| dt¡dS©Nr¨Úe01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ©Ú_test_ustar_namerärr r r Útest_unicode_name1–s   z#UstarUnicodeTest.test_unicode_name1cCs| d¡| dt¡dS©Nud012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿrUrr r r Útest_unicode_name2œs z#UstarUnicodeTest.test_unicode_name2cCs0| d¡| dt¡| d¡| dt¡dS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rUrr r r Útest_unicode_longname1¢s   z'UstarUnicodeTest.test_unicode_longname1cCs| dt¡| dt¡dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rUrr r r Útest_unicode_longname2¨s z'UstarUnicodeTest.test_unicode_longname2cCs&| dt¡| d¡| dt¡dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿrUrr r r Útest_unicode_longname3¬s  z'UstarUnicodeTest.test_unicode_longname3cCs| d¡| dt¡dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿrUrr r r Útest_unicode_longname4±s z'UstarUnicodeTest.test_unicode_longname4NcCsºtjtd|jdd>}t |¡}|dur4| |¡n| ||j|¡Wdƒn1sX0Y|dur¶tjtddd,}|D]}| ||j¡q˜q€Wdƒn1s¬0YdS)Nr¬rIrArDrý) rrr¢rr¾rÃr·r<rk©rrkÚexcr2rÆr r r rVµs  .z!UstarUnicodeTest._test_ustar_namecCs0| d¡| dt¡| d¡| dt¡dSrS©Ú_test_ustar_linkrärr r r Útest_unicode_link1Äs   z#UstarUnicodeTest.test_unicode_link1cCs| d¡| dt¡dSrXr`rr r r Útest_unicode_link2Ês z#UstarUnicodeTest.test_unicode_link2cCsÀtjtd|jddD}t d¡}||_|dur:| |¡n| ||j|¡Wdƒn1s^0Y|dur¼tjtddd,}|D]}| ||j¡qžq†Wdƒn1s²0YdS)Nr¬rIrAr»rDrý) rrr¢rr¾rbrÃr·r<r^r r r raÎs  .z!UstarUnicodeTest._test_ustar_link)N)N)rrrrÚ USTAR_FORMATrrWrYrZr[r\r]rVrbrcrar r r r rRs rRc@seZdZejZdd„ZdS)ÚGNUUnicodeTestc CsndD]d\}}tjt|dd<}z| |¡}WntyH| d¡Yn0Wdƒq1s^0YqdS)N))rIupax/bad-pax-í³¤í³¶í³¼)r.upax/bad-pax-äöürŠrOz%unable to read bad GNU tar pax header©rrrr9rîrh©rr0rkr2rÆr r r Útest_bad_pax_headerâs ÿ z"GNUUnicodeTest.test_bad_pax_headerN)rrrrrrrhr r r r reÞsrec@seZdZejZdZdd„ZdS)ÚPAXUnicodeTestNc CsndD]d\}}tjt|dd<}z| |¡}WntyH| d¡Yn0Wdƒq1s^0YqdS)N))rIupax/hdrcharset-í³¤í³¶í³¼)r.upax/hdrcharset-äöürŠrOz)unable to read POSIX.1-2008 binary headerrfrgr r r Útest_binary_header÷s ÿ z!PAXUnicodeTest.test_binary_header)rrrrrårrNrjr r r r riðsric@s&eZdZdd„Zd dd„Zdd„ZdS) ÚAppendTestBasecCs$t|_tj |j¡r t |j¡dSr)r¢rrIrJròrrûrr r r r3szAppendTestBase.setUprÂc Cs¦tjtdd„}| d¡}d|_| |¡J}t |j|¡}| ||¡Wdƒn1s\0YWdƒn1sz0YWdƒn1s˜0YdS)Nr.rýr7r»)rrrr9rkr:rÃ)rrÚsrcrÆrçr2r r r Ú_create_testtar s   zAppendTestBase._create_testtarcCs(| d|j¡| tjtjtd¡dS)NrÂrm)rmrr·rr¯rr¢rr r r Útest_append_compressedsz%AppendTestBase.test_append_compressedN)rÂ)rrrr3rmrnr r r r rks rkc@s‚eZdZdZddd„Zdgdfdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)Ú AppendTestNcCsFtj|jd|d }| t d¡¡Wdƒn1s80YdS)NrmrAr˜)rrrrÃr¾)rrÎr2r r r Ú _add_testfileszAppendTest._add_testfiler˜cCsDtj|j|d }| | ¡|¡Wdƒn1s60YdS)NrA)rrrr<r®)rr"rÎr2r r r rszAppendTest._testcCs| ¡| ¡dSr)rprrr r r Útest_non_existing#szAppendTest.test_non_existingcCs&t |jd¡ ¡| ¡| ¡dS)NrÂ)rrrr4rprrr r r Ú test_empty'szAppendTest.test_emptycCs.t d¡}| |¡| d¡|j|ddS)NsrrA)rrŽrpr\rr§r r r Útest_empty_fileobj,s   zAppendTest.test_empty_fileobjcCsp| ¡t|jdƒ}| ¡}Wdƒn1s20Yt |¡}| |¡| d¡|jddg|ddS)NrUrr»r˜)r"rÎ) rmrrr;rrŽrpr\rrir r r Ú test_fileobj2s&   zAppendTest.test_fileobjcCs$| ¡| ¡|jddgddS)Nr»r˜)r")rmrprrr r r Ú test_existing;szAppendTest.test_existingcCsJt|jdƒ}| |¡Wdƒn1s,0Y| tj|j¡dSr¶)rrr½r·rr¯rp)rr rBr r r Ú _test_errorBs(zAppendTest._test_errorcCs| d¡dS)NrZ©rvrr r r Ú test_nullGszAppendTest.test_nullcCs| d¡dS)Nó rwrr r r Útest_incompleteJszAppendTest.test_incompletecCst d¡ ¡}| |¡dS)Nr»©rr¾r¿rvrßr r r Útest_premature_eofMszAppendTest.test_premature_eofcCs t d¡ ¡}| |d¡dS)Nr»ryr{rßr r r Útest_trailing_garbageQsz AppendTest.test_trailing_garbagecCs| d¡dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarwrr r r Ú test_invalidUszAppendTest.test_invalid)N)rrrrnrprrqrrrsrtrurvrxrzr|r}r~r r r r ros  roc@s eZdZdS)ÚGzipAppendTestNr|r r r r rXsrc@s eZdZdS)Ú Bz2AppendTestNr|r r r r r€[sr€c@s eZdZdS)ÚLzmaAppendTestNr|r r r r r^src@s$eZdZdd„Zdd„Zdd„ZdS)Ú LimitsTestcCsÈt d¡}| tj¡t d¡}| t|jtj¡t d¡}| tj¡t d¡}| t|jtj¡t d¡}| t|jtj¡t d¡}d|_| t|jtj¡t d¡}d|_| t|jtj¡dS) Nr¨rTa123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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/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ƒrké )rr¾r¿rdr·rärbrNrìr r r Útest_ustar_limitsds          zLimitsTest.test_ustar_limitscCsXt d¡}| tj¡t d¡}d|_| tj¡t d¡}d|_| t|jtj¡dS©Nrƒrƒrkl)rr¾r¿rrbrNr·rärìr r r Útest_gnu_limitsƒs     zLimitsTest.test_gnu_limitscCsRt d¡}| tj¡t d¡}d|_| tj¡t d¡}d|_| tj¡dSr†)rr¾r¿rårbrNrìr r r Útest_pax_limitss     zLimitsTest.test_pax_limitsN)rrrr…r‡rˆr r r r r‚bs r‚c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚMiscTestcCs`| t dddd¡d¡| t dddd¡d¡| t ddd¡d¡| t d dd¡d¡dS) Nr»érr†sfooZfoobarrer2sfoobar)r<rÚstnÚntsrr r r Útest_char_fieldsŸsÿÿÿÿzMiscTest.test_char_fieldscCs¦| t d¡d¡| t d¡d¡| t d¡d¡| t d¡d¡| t d ¡d ¡| t d ¡d ¡| t d ¡d¡| t d¡d¡| t d¡d¡dS)Nó0000001rVó7777777éÿÿó€ r„ó€ÿÿÿÿìÿÿóÿÿÿÿÿÿÿÿrõóÿÿÿÿÿÿÿœéœÿÿÿóÿìüÿÿÿr¹rs )r<rÚntirr r r Útest_read_number_fields©s& ÿ ÿ ÿ ÿ ÿz MiscTest.test_read_number_fieldscCsî| t d¡d¡| t d¡d¡| tjdtjdd¡| tjdtjdd ¡| tjd tjdd ¡| tjd tjdd ¡| tjdtjdd¡| tjdtjdd ¡| tjdtjdd¡| t tjdtjd¡d¡dS)NrVrŽrrr„r7r‘r“r’rõr”r–r•r˜r—gYÀg0Bs€gš™™™™™¹¿r)r<rÚitnrr™rr r r Útest_write_number_fields½s4ÿÿÿÿ ÿþÿÿz!MiscTest.test_write_number_fieldscCsì| t¡ t ddtj¡Wdƒn1s00Y| t¡ t ddtj¡Wdƒn1sj0Y| t¡ t ddtj¡Wdƒn1s¤0Y| t¡ t ddtj¡Wdƒn1sÞ0YdS)NrõrŠr„lýÿÿÿél)r·rärr›rdrrr r r Útest_number_field_limitsÔs . . . z!MiscTest.test_number_field_limitscCshd£}tj|t|ddS)N>/ÚNULr™Úversionr¤ÚgrpZEmptyHeaderErrorZSUPPORTED_TYPESZEOFHeaderErrorZInvalidHeaderErrorZ calc_chksumsr›Z REGULAR_TYPESZGNUTYPE_SPARSErr¥ZSubsequentHeaderErrorZ PAX_FIELDSrZ LENGTH_PREFIXZ ExFileObjectrZCHRTYPEZPAX_NAME_FIELDSZSYMTYPEr ZSOLARIS_XHDTYPEZ GNU_MAGICrþr•Ú copyfileobjZTruncatedHeaderErrorZXGLTYPErërŒr‹ÚmainrÿZ POSIX_MAGICZCONTTYPEÚpwdZGNUTYPE_LONGLINKÚfilemodeZFIFOTYPEr=Zsymlink_exceptionZ GNU_TYPESZAREGTYPE)Ú blacklist)rZ check__all__r)rr¦r r r Ú test__all__ÞszMiscTest.test__all__N)rrrrršrœržr§r r r r r‰s   r‰c@s¤eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'S)(ÚCommandLineTestcOs2tjddg|¢Ri|¤Ž\}}}| tj ¡d¡S)Nú-mró )rZassert_python_okr­rIÚlineseprf)rÚargsrSÚrcr—Úerrr r r Ú tarfilecmdósÿ zCommandLineTest.tarfilecmdcGstjddg|¢RŽS)Nr©r)rZassert_python_failure©rr¬r r r Útarfilecmd_failureøsz"CommandLineTest.tarfilecmd_failurecCsrt d¡t d¡g}| tj|¡t |d¡0}|D]}|j|tj  |¡dq4Wdƒn1sd0YdS)Nútokenize_tests.txtú9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr¬rÑ) rrÈrúrûrrr¬rIrJrË)rÚtar_nameÚfilesÚtfZtardatar r r Úmake_simple_tarfileûsÿz#CommandLineTest.make_simple_tarfilecCs|| ¡\}}}| |d¡| d| ¡¡| d| ¡¡| d| ¡¡| dd¡\}}}| |d¡| | ¡d¡dS)NrZsusageserrorsrequiredú-lr)r±r<r“ÚlowerrÚstrip)rr­r—r®r r r Ú test_bad_use s  zCommandLineTest.test_bad_usecCs0tD]&}dD]}| ||¡}| |d¡q qdS)N)ú-tz--testrZ)Ú testtarnamesr¯r<©rr´Úoptr—r r r Útest_test_command s z!CommandLineTest.test_test_commandcCs6tD],}dD]"}|j|d|dd}| d|¡q qdS)N©z-vz --verboser¼rI©ÚPYTHONIOENCODINGsis a tar archive. )r½r¯r“r¾r r r Útest_test_command_verbose s  ÿz)CommandLineTest.test_test_command_verbosec Cs0t d¡}| d|¡\}}}| d|¡| |d¡| |d¡tD]æ}|j|dÄt|dƒ}| ¡}Wdƒn1s~0Yzttt dƒ"}|  |dd …¡Wdƒn1s¼0Y| dt ¡\}}}| |d¡| |d¡Wt  t ¡n t  t ¡0WdƒqD1s 0YqDdS) Nú zipdir.zipr¼ó is not a tar archive.rZrV)r´rUr¡r) rrÈr±r“r<r½ZsubTestrr;r¢r½rû)rÚzipnamer­r—r®r´rçr r r r Útest_test_command_invalid_file s      & 0 z.CommandLineTest.test_test_command_invalid_filec Cs¤tD]š}t ¡H}t |d¡}|jddWdƒn1s@0YWdƒn1s^0Y| ¡ dd¡}dD] }|j||dd}|  ||¡q|qdS)NrDFr†rr‹)r¸z--listr© r½rZcaptured_stdoutrrrSr’rfr¯r<©rr´rÆr¶Zexpectedr¿r—r r r Útest_list_command/ s Hÿz!CommandLineTest.test_list_commandc Cs¦tD]œ}t ¡H}t |d¡}|jddWdƒn1s@0YWdƒn1s^0Y| ¡ dd¡}dD]"}|j|d|dd}|  ||¡q|qdS) NrDTr†rr‹rÁr¸rÂrÉrÊr r r Útest_list_command_verbose: s H ÿz)CommandLineTest.test_list_command_verbosecCsDt d¡}| d|¡\}}}| d|¡| |d¡| |d¡dS)NrÅr¸rÆrZrV)rrÈr±r“r<©rrÇr­r—r®r r r Útest_list_command_invalid_fileE s    z.CommandLineTest.test_list_command_invalid_filec Cst d¡t d¡g}dD]r}z`|j|tg|¢RŽ}| |d¡t t¡}| ¡Wdƒn1sf0YWt t¡qt t¡0qdS)Nr²r³)ú-cz--createrZ) rrÈr¯r¢r<rrršrû©rrµr¿r—r2r r r Útest_create_commandL sÿ  (z#CommandLineTest.test_create_commandc Cs˜t d¡t d¡g}dD]z}zh|j|dtg|¢RddiŽ}| d|¡t t¡}| ¡Wdƒn1sn0YWt t¡qt t¡0qdS)Nr²r³rÁrÏrÃrIs file created.) rrÈr¯r¢r“rrršrûrÐr r r Útest_create_command_verboseY sÿÿ  (z+CommandLineTest.test_create_command_verbosec Cs~t d¡g}z`|jdtg|¢RŽ}| |d¡t t¡}| ¡Wdƒn1sV0YWt t¡n t t¡0dS)Nr²rÏrZ) rrÈr¯Ú dotlessnamer<rrršrû)rrµr—r2r r r Ú$test_create_command_dotless_filenameg s   (z4CommandLineTest.test_create_command_dotless_filenamec CsŒtj td¡}t d¡g}z`|jd|g|¢RŽ}| |d¡t  |¡}|  ¡Wdƒn1sd0YWt  |¡n t  |¡0dS)Nz.testtarr²rÏrZ) rIrJrKrHrrÈr¯r<rrršrû)rr´rµr—r2r r r Ú(test_create_command_dot_started_filenameq s   (z8CommandLineTest.test_create_command_dot_started_filenamec Cs t d¡t d¡g}tttfD]|}|js*qzbtd|j}|jd|g|¢RŽ}|  |¡}|  ¡Wdƒn1sv0YWt  |¡qt  |¡0qdS)Nr²r³rØrÏ) rrÈrr#r'rr¢rr¯rršrû)rrµZfiletyper´r—r2r r r Útest_create_command_compressed| sÿ (z.CommandLineTest.test_create_command_compressedc Csv| t¡dD]b}zPt t¡| |t¡}Wdƒn1s@0Y| |d¡Wt t¡qt t¡0qdS)N)ú-ez --extractrZ©r·r¢rÚtemp_cwdÚ tarextdirr¯r<r©rr¿r—r r r Útest_extract_command‹ s  *z$CommandLineTest.test_extract_commandc Cs|| t¡dD]h}zVt t¡"|j|dtdd}Wdƒn1sF0Y| d|¡Wt t¡qt t¡0qdS)NrÁr×rIrÂs file is extracted.)r·r¢rrÙrÚr¯r“rrÛr r r Útest_extract_command_verbose• s   ÿ$z,CommandLineTest.test_extract_command_verbosec Csn| t¡zRt t¡| dtd¡}Wdƒn1s:0Y| |d¡Wt t¡n t t¡0dS)Nr×ZspamdirrZrØ)rr—r r r Ú(test_extract_command_different_directory  s   ,z8CommandLineTest.test_extract_command_different_directorycCsnt d¡}t t¡"| d|¡\}}}Wdƒn1s<0Y| d|¡| |d¡| |d¡dS)NrÅr×rÆrZrV)rrÈrÙrÚr±r“r<rÍr r r Ú!test_extract_command_invalid_file© s   0  z1CommandLineTest.test_extract_command_invalid_fileN)rrrr¯r±r·r»rÀrÄrÈrËrÌrÎrÑrÒrÔrÕrÖrÜrÝrÞrßr r r r r¨ñs&          r¨c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚContextManagerTestcCsJt t¡}| |jd¡Wdƒn1s.0Y| |jd¡dS)Nzclosed inside runtime contextúcontext manager failed)rrrr£r rªr±r r r Ú test_basic´ s ,zContextManagerTest.test_basicc Csdt t¡}| ¡| t¡4|Wdƒn1s80YWdƒn1sV0YdSr)rrrr4r·rÖr±r r r Ú test_closed¹ s   zContextManagerTest.test_closedc Csz| t¡>}t t¡}t‚Wdƒn1s00YWdƒn1sN0Y| |jtd¡| |j d¡dS)Nz)wrong exception raised in context managerrá) r·Ú ExceptionrrrrÖrÏÚ exceptionrªr )rr_r2r r r Útest_exception s  @ ÿz!ContextManagerTest.test_exceptioncCsjz4t td¡}t‚Wdƒn1s(0YWn Yn0| tj t¡dd¡| |j d¡dS)Nr¬rz-context manager wrote an end-of-archive blockrá) rrr¢rär<rIrJr­rªr r±r r r Ú test_no_eofË s&ÿzContextManagerTest.test_no_eofcCsFt td¡Wdƒn1s"0Y| tj t¡dd¡dS)Nr¬rz-context manager wrote no end-of-archive block)rrr¢rrIrJr­rr r r Útest_eof× s ÿzContextManagerTest.test_eofc CsŽttdƒp}z6tj|dd}t‚Wdƒn1s60YWn Yn0| |jd¡| |jd¡Wdƒn1s€0YdS)Nr¡r¬rÍzexternal file object was closedrá)rr¢rrär£r rªrÒr r r rtß s &zContextManagerTest.test_fileobjN) rrrrârãrærçrèrtr r r r rಠs    ràzrequires os.link to be missingc@s€eZdZdd„Ze eejdƒd¡dd„ƒZ e eejdƒd¡dd„ƒZ e eed ƒd ¡d d „ƒZ e eed ƒd ¡d d„ƒZ dS)ÚLinkEmulationTestcCs^|j |t¡ttj t|¡dƒ}| ¡}Wdƒn1s@0Y| t |ƒt ¡dSr©) r2rGrHrrIrJrKr;r<r r?)rrkrçr r r r Ú_test_link_extractionò s&z'LinkEmulationTest._test_link_extractionÚislinkz3Skip emulation - has os.path.islink but not os.linkcCs| d¡dS)Nrp©rêrr r r Útest_hardlink_extraction1ù sz+LinkEmulationTest.test_hardlink_extraction1cCs| d¡dS)Nrsrìrr r r Útest_hardlink_extraction2þ sz+LinkEmulationTest.test_hardlink_extraction2rÅz Skip emulation if symlink existscCs| d¡dS)Nrvrìrr r r Útest_symlink_extraction1 sz*LinkEmulationTest.test_symlink_extraction1cCs| d¡dS)Nrxrìrr r r Útest_symlink_extraction2 sz*LinkEmulationTest.test_symlink_extraction2N) rrrrêr$ÚskipIfr&rIrJrírîrïrðr r r r réì s"ÿ ÿ  ÿ  ÿréc@s$eZdZdd„Zdd„Zdd„ZdS)ÚBz2PartialReadTestc sxG‡fdd„dtjƒ‰t t d¡ ¡¡}tt|ƒdƒD]8}ztj ˆ|d|…ƒ|dWq:tj ypYq:0q:dS)Ncs0eZdZdZ‡‡fdd„Z‡‡fdd„Z‡ZS)z9Bz2PartialReadTest._test_partial_input..MyBytesIOFcs4|jrtdƒ‚| ¡t| ¡ƒk|_tˆ|ƒ |¡S)Nz(infinite loop detected in tarfile.open())Úhit_eofÚAssertionErrorr]r=r’Úsuperr;)rr9©Ú MyBytesIOÚ __class__r r r; sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.readcsd|_tˆ|ƒj|ŽSrÝ)rórõr\r°rör r r\ sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.seek)rrrrór;r\Ú __classcell__r ©r÷)rør r÷ sr÷r»rVrÍ) rrŽr$Úcompressrr¾r¿Úranger=rr¯)rrr r'r rúr Ú_test_partial_input s z&Bz2PartialReadTest._test_partial_inputcCs| d¡dS)NrD©rýrr r r Útest_partial_input& sz%Bz2PartialReadTest.test_partial_inputcCs| d¡dS)Nzr:bz2rþrr r r Útest_partial_input_bz2) sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrrýrÿrr r r r rò sròcCsZzddl}ddl}Wnty(YdS0| d¡ddkr@dS| d¡ddkrVdSdS)NrFÚrootT)r¤r¡Ú ImportErrorÚgetpwuidÚgetgrgid)r¤r¡r r r Úroot_is_uid_gid_0- s rÚchownzmissing os.chownÚgeteuidzmissing os.geteuidc@sÎeZdZedd„ƒZeedd„ƒƒZej  d¡ej  d¡ej  d¡dd „ƒƒƒZ ej  d¡ej  d¡ej  d¡d d „ƒƒƒZ e  e ƒd ¡ej  d¡ej  d¡ej  d¡d d„ƒƒƒƒZej  d¡dd„ƒZdS)ÚNumericOwnerTestc Cs°t d¡}|ddtj|f|ddtjdf|ddtj|fg}t td¡X}|D]B\}}}} } t |¡} || _|| _ d | _ d | _ | | _ |  | | ¡qJWdƒn1s¢0YtS) NscontentécébéMéLéXéWr¬r)rrŽrrrërr¢r¾rNrOrórPrêrÃ) Ú filename_1Ú dirname_1Ú filename_2rBrQÚtarflrkrNrOÚtypÚcontentsrÆr r r Ú_make_test_archiveB s þ ,z#NumericOwnerTest._make_test_archiveccsnd|_d}d}|}|}tj ||¡}t |||¡}t |¡}||||fVWdƒn1s`0YdS)Nrznumeric-owner-testfilerÓ)r¹rIrJrKrrrr)Ú mock_geteuidZfnameÚdirnamerrrZ tar_filenamerr r r Ú _setup_testZ sþ zNumericOwnerTest._setup_testzos.chownzos.chmodz os.geteuidc Csœ| |¡8\}}}}|j|tdd|j|tddWdƒn1sH0Ytj t|¡}tj t|¡} |jtj  |dd¡tj  | dd¡gdddS)NT©Z numeric_ownerr r r r©Z any_order) rrGrHrIrJrKÚassert_has_callsr$r·Úcall) rrÚ mock_chmodÚ mock_chownrrÚ_rÚ f_filename_1Ú f_filename_2r r r Útest_extract_with_numeric_ownerp s.ÿýz0NumericOwnerTest.test_extract_with_numeric_ownerc Cs¦| |¡&\}}}}|jtddWdƒn1s60Ytj t|¡}tj t|¡} tj t|¡} |jtj  |dd¡tj  | dd¡tj  | dd¡gdd dS) NTrr r r r r rr) rrþrHrIrJrKrr$r·r) rrrrrrrrr Z 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|tddWdƒn1s80Ytj t|¡}| |dd¡dS)NFrr)rrGrHrIrJrKZassert_called_with)rrrrrrrr r r r Ú"test_extract_without_numeric_owner› s.z3NumericOwnerTest.test_extract_without_numeric_ownerc CsL| |¡.\}}}}| t|j|tdd¡Wdƒn1s>0YdS)NFT)rr·rÎrGrH)rrrrrr r r Útest_keyword_onlyª s ÿz"NumericOwnerTest.test_keyword_onlyN)rrrr–rrrr$r·r¸r"r#r%rr$r%r r r r r9 s,         ÿ    rc Cs¶t t¡t t¡tgattdƒ}| ¡}Wdƒn1sB0Yt t t fD]Z}|jrVt |j¡t  |j¡| |jd¡}|  |¡WdƒqV1s¦0YqVdS)NrUr¡)rrûrHrIÚmakedirsrr½rr;rr#r'rºr½)rBr Úcr2r r r Ú setUpModule± s   &  r(cCstj t¡rt t¡dSr)rIrJròrHrrr r r r ÚtearDownModule s r)Ú__main__)rrrIrZhashlibrÚ contextlibrÚrandomrr¥r$Z unittest.mockrr<rZ test.supportrr"rr$r*r rJrÑZTESTFNrHrÚrÈrrKr!r%r)r¢rÓr?rnr Z requires_gziprZ requires_bz2r#Z requires_lzmar'r,ZTestCaser6r{r}r~rrržrŸr rÊr(r)r*r.r/r;r<r=r>rGrHrKrLr|r‰r—r¡r§rçrèrérêrôrørúrürrr-r.r/r0r%r&r1r6rCrRrerirkrorr€rr‚r‰r¨ràrñréròrrr(r)rr£r r r r Úsê               ÿÿ  |Pw{=(a*;,9' R.Z*TQO@;TB:! v