mò %U²Ic@sædkZdkZdkZdkZdkZdkZdklZydkZei Wne e fj o dZnXy dk Z Wne j o dZ nXd„ZedƒZeiieiƒdeidƒZeiZdZdd„Zd „Zd „Zd eifd „ƒYZd efd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ deifd„ƒYZ!defd„ƒYZ"defd„ƒYZ#defd„ƒYZ$defd „ƒYZ%d!efd"„ƒYZ&d#e fd$„ƒYZ'd%eifd&„ƒYZ(e o\d'e$fd(„ƒYZ)d)e%fd*„ƒYZ*d+efd,„ƒYZ+d-e'fd.„ƒYZ,nep[$[%[&['nd/„Z-e.d0jo e-ƒndS(1N(s test_supportcCs ti|ƒS(N(t test_supporttfindfiletpath(R((t./data/zmath/lib/python2.4/test/test_tarfile.pyRss testtar.tarttesttartdiri tcCs2|ptSntiitdtti|fƒS(Ns%s%s%s(tcompRtosRtjointtempdirtextsep(R((RttarnamescCs(tiitƒptitƒntS(N(RRtexistsR tmkdir(((Rtdirname#scCstS(N(ttempname(((Rttmpname(stBaseTestcBs,tZdZdZdZd„Zd„ZRS(NRtrt:cCs9|i|i|i}tit|iƒ|ƒ|_dS(N(tselftmodetsepRttarfiletopenR ttar(RR((RtsetUp1scCs|iiƒdS(N(RRtclose(R((RttearDown5s(t__name__t __module__RRRRR(((RR,s  tReadTestcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCs“d}xp|iD]e}|d7}|iƒpqn|ii|ƒ}|it|i ƒƒ|i jdƒ|i ƒqW|i|t jdƒdS(s Test member extraction. iis&size read does not match expected sizescould not find all membersN( tmembersRRttarinfotisregt extractfiletftassert_tlentreadtsizeRt membercount(RR%R!R"((Rttest:s   cCs^|idjoJ|iidƒ}|iidƒ}|i|iƒ|iƒjdƒndS(s'Test sparse member extraction. t|sS-SPARSEsS-SPARSE-WITH-NULLSs(_FileObject failed on sparse file memberN(RRRR$tf1tf2R&R((RR-R.((Rt test_sparseJs cCs‰|idjoud}|ii|tƒƒttii tƒ|ƒdƒi ƒ}|ii |ƒi ƒ}|i||jdƒndS(s0Test readlines() method of _FileObject. R,s0-REGTYPE-TEXTtrUs._FileObject.readline() does not work correctlyN(RRtfilenameRtextractRtfileRRR t readlinestlines1R$tlines2R&(RR5R1R6((Rttest_readlinesSs'c Cs1|idjod}|ii|tƒƒttii tƒ|ƒdƒi ƒ}|ii |ƒ}|ii|ƒ}|i ƒ}|idƒ|id|iƒjdƒ|iddƒ|id|iƒjdƒ|idd ƒ|id |iƒjd ƒ|id d ƒ|id|iƒjd ƒ|i d ƒ}|i||dd!jdƒ|iddƒ|i|i|iƒjdƒ|i|i ƒdjdƒ|i|i dƒ|id|iƒjdƒ|idƒ|iƒ}|idƒ|iƒ}|i||jdƒ|iƒndS(sATest seek() method of _FileObject, incl. random reading. R,s 0-REGTYPEtrbisseek() to file's start failedis"seek() to absolute position failediüÿÿiis+seek() to negative relative position faileds+seek() to positive relative position failedi i sread() after seek failedisseek() to file's end failedRs0read() at file's end did not return empty strings&relative seek() to file's start failedisreadlines() after seek failedN(RRR1RR2RR3RRR R(tdatat getmemberR"R$tfobjttexttseekR&ttelltsR)R4ts1ts2R( RRAR9R1R;R?R<R@R"((Rt test_seek^sL'      cCs¯tƒ}tidƒ}ti|_t|dƒ}|i |i ƒƒ|i ƒti |ƒ}|iƒd}|i ƒ|i|itijƒ|i|iidƒƒdS(s6Test old style dirtype member (bug #1336623). s directory/twit/N(RR1RtTarInfoR"tREGTYPEttypeR3R;twritettobufRRRt getmembersRR&tDIRTYPEtnametendswith(RRR;R1R"((Rttest_old_dirtype‰s    (RRR+R/R7RBRN(((RR 8s   +tReadStreamTestcBs tZdZd„Zd„ZRS(NR,cCsLti|ƒ|iiƒd}|ii|ƒ}|it i |i ƒdS(sWTest member extraction, and for StreamError when seeking backwards. iN( R R+RRRJR"R$R%t assertRaisesRt StreamErrorR((RR"R%((RR+¤s  cCs|i}titƒdƒ}xé|iƒ}|iƒ}|djoPn|i |dj dƒ|i ƒp |i ƒo |i ti|i|ƒq!n|i|ƒ}|i|ƒ}|djoq!n|i |dj dƒ|i |iƒ|iƒjdƒq!W|iƒdS(s3Compare the normal tar and the stream tar. Risstream.next() failed.sstream.extractfile() failedsstream extraction failedN(RRtstreamRRR tnexttt1tt2tNoneR&tislnktissymRPRQR$tv1tv2R(R(RRRRRURTRYRZ((Rt test_stream­s(     '(RRRR+R[(((RRO¡s t WriteTestcBsDtZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(NRCcCs]|i|i|i}tit|iƒdƒ|_tƒ|_ ti|i |ƒ|_ dS(NR( RRRRRRR tsrcRtdstnametdst(RR((RRÉs cCs|iiƒ|iiƒdS(N(RR]RR_(R((RRÏs cCsd|i_|iƒdS(Ni(RR_tposixt_test(R((Rt test_posixÓs cCsd|i_|iƒdS(Ni(RR_R`Ra(R((Rt test_nonposix×s cCs[|iitiitiitƒdƒƒ|iiƒ|i ti |i ƒi dƒdS(Ns cfgparser.1i( RR_taddRRR Rt__file__RtassertNotEqualtstatR^tst_size(R((Rt test_smallÛs+ cCs—x|iD]…}|iƒpq n|ii|ƒ}|iio9t|i ƒt i jo |i t |ii||ƒq |ii||ƒq WdS(N(RR]R"R#R$R%R_R`R'RLRt LENGTH_NAMERPt ValueErrortaddfile(RR%R"((RRaàs  &( RRRRRRbRcRiRa(((RR\Æs     tWriteSize0TestcBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(NRCcCs4tƒ|_tƒ|_ti|idƒ|_dS(NRC(RRttmpdirRR^RRR_(R((RRîs  cCs|iiƒdS(N(RR_R(R((RRóscCs‰tii|idƒ}t|dƒ|ii|ƒ}|i |i dƒt|dƒi dƒ|ii|ƒ}|i |i dƒdS(NR3RCitaaai( RRR RRnR3R_t gettarinfoR"t assertEqualR)RH(RRR"((Rt test_fileös cCsNtii|idƒ}ti|ƒ|ii|ƒ}|i |i dƒdS(Nt directoryi( RRR RRnRR_RpR"RqR)(RRR"((Rttest_directoryÿs cCsettdƒoQtii|idƒ}tid|ƒ|ii|ƒ}|i |i dƒndS(Ntsymlinkt link_targeti( thasattrRRR RRnRuR_RpR"RqR)(RRR"((Rt test_symlinks (RRRRRRrRtRx(((RRmës    tWriteStreamTestcBstZdZRS(NR,(RRR(((RRy stWriteGNULongTestcBs’tZdZd„Zd„Zd„Zed„Zed„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„ZRS(sGThis testcase checks for correct creation of GNU Longname and Longlink extensions. It creates a tarfile and adds empty members with either long names, long linknames or both and compares the size of the tarfile with the expected size. It checks for SF bug #812325 in TarFile._create_gnulong(). While I was writing this testcase, I noticed a second bug in the same method: Long{names,links} weren't null-terminated which lead to bad tarfiles when their length was a multiple of 512. This is tested as well. cCs(titƒdƒ|_t|i_dS(NRC(RRRRRtFalseR`(R((RR!scCs|iiƒdS(N(RRR(R((RR%scCs<tt|ƒddƒ\}}|o|d7}n|dS(Nii(tdivmodR'R?tblockst remainder(RR?R}R~((Rt_length(scCs…d}t|ƒtijo!|d7}||i|ƒ7}n|dj o7t|ƒti jo!|d7}||i|ƒ7}n|S(Ni( tcountR'RLRRjRRtlinkRVt LENGTH_LINK(RRLRR€((Rt _calc_size.s # cCstti|ƒ}|o||_ti|_n|i i |ƒ|i ||ƒ}|i i }|i||dƒdS(Ns%GNU longname/longlink creation failed(RRERLR"RtlinknametLNKTYPERGRRRlRƒRYtoffsetRZRq(RRLRRYRZR"((RRa>s  cCs|idddƒdS(Nslongnam/itlongnam(RRa(R((Rttest_longname_1023JscCs|idddƒdS(Nslongnam/itlongname(RRa(R((Rttest_longname_1024MscCs|idddƒdS(Nslongnam/it longname_(RRa(R((Rttest_longname_1025PscCs|iddddƒdS(NRLslonglnk/itlonglnk(RRa(R((Rttest_longlink_1023SscCs|iddddƒdS(NRLslonglnk/itlonglink(RRa(R((Rttest_longlink_1024VscCs|iddddƒdS(NRLslonglnk/it longlink_(RRa(R((Rttest_longlink_1025YscCs$|iddddddƒdS(Nslongnam/iR‡slonglnk/R(RRa(R((Rttest_longnamelink_1023\scCs$|iddddddƒdS(Nslongnam/iR‰slonglnk/R(RRa(R((Rttest_longnamelink_1024`scCs$|iddddddƒdS(Nslongnam/iR‹slonglnk/R‘(RRa(R((Rttest_longnamelink_1025ds(RRt__doc__RRRRVRƒRaRˆRŠRŒRŽRR’R“R”R•(((RRzs             tExtractHardlinkTestcBstZd„ZRS(NcCs…d|i_|iidtƒƒy|iidtƒƒWnBtj o6}dk}|i|ijo|i dƒqnXdS(s/Test hardlink extraction (bug #857297) is 0-REGTYPEs 1-LNKTYPENshardlink not extracted properly( RRt errorlevelR2RtEnvironmentErrorteterrnotENOENTtfail(RR›Rš((Rt test_hardlinkjs  (RRRž(((RR—hstCreateHardlinkTestcBs2tZdZd„Zd„Zd„Zd„ZRS(séTest the creation of LNKTYPE (hardlink) members in an archive. In this respect tarfile.py mimics the behaviour of GNU tar: If a file has a st_nlink > 1, it will be added a REGTYPE member only the first time. cCsÒtitƒdƒ|_tiitƒdƒ|_ tiitƒdƒ|_ tii |i ƒoti |i ƒntii |i ƒoti |i ƒnt |i dƒidƒ|ii|i ƒdS(NRCtfootbar(RRRRRRRR RR R¡R tremoveR3RHRd(R((RR€scCs2|ii|iƒ}|i|itidƒdS(Nsadd file as regular failed( RRRpR R"RqRGRRF(RR"((Rttest_add_twiceŽscCsvti|i|iƒ|ii|iƒ}|i|i t i dƒ|ii|iƒ}|i|i t i dƒdS(Nsadd file as hardlink failed( RRRR R¡RRpR"RqRGRR…(RR"((Rttest_add_hardlink•scCsTt|i_ti|i|iƒ|ii|iƒ}|i |i t i dƒdS(Nsdereferencing hardlink failed(tTrueRRt dereferenceRRR R¡RpR"RqRGRRF(RR"((Rttest_dereference_hardlink¡s  (RRR–RR£R¤R§(((RRŸys    t ReadTestGzipcBstZdZRS(Ntgz(RRR(((RR¨ªstReadStreamTestGzipcBstZdZRS(NR©(RRR(((RRª¬st WriteTestGzipcBstZdZRS(NR©(RRR(((RR«®stWriteStreamTestGzipcBstZdZRS(NR©(RRR(((RR¬°st FileModeTestcBstZd„ZRS(NcCs6|itidƒdƒ|itidƒdƒdS(Niís -rwxr-xr-xiIs ---s--s--t(RRqRtfilemode(R((Rt test_modes¶s(RRR¯(((RR­µst ReadTestBzip2cBstZdZRS(Ntbz2(RRR(((RR°½stReadStreamTestBzip2cBstZdZRS(NR±(RRR(((RR²¿stWriteTestBzip2cBstZdZRS(NR±(RRR(((RR³ÁstWriteStreamTestBzip2cBstZdZRS(NR±(RRR(((RR´ÃscCs²to5titdƒdƒittƒdƒiƒƒnto5titdƒdƒittƒdƒiƒƒntt t t t t tg}ttdƒo|itƒ|itƒnto|ittttgƒnto|ittttgƒnzti|ŒWdtoti tdƒƒntoti tdƒƒnti!i"t#ƒƒot$i%t#ƒƒnti!i"t&ƒƒoti t&ƒƒnXdS(NR©twbR8R±R('tgzipRR RHR3R(R±tBZ2FileR­R ROR\RmRyRzttestsRwRtappendR—RŸtextendR¨RªR«R¬R°R²R³R´Rt run_unittestR¢RR RtshutiltrmtreeR(R¸((Rt test_mainÍs.55  t__main__(/tsysRR¼ttempfiletunittestRR+RR¶tGzipFilet ImportErrortAttributeErrorRVR±RRR t gettempdirR R tTESTFNRR*R RRtTestCaseRR ROR\RmRyRzR—RŸR¨RªR«R¬R­R°R²R³R´R¾R($RR­R³RÂR*RR¼RzR¨R R±RÁR´R¬RRŸRR«R¾R R²R—RªRRÀRmRR RR°R\RyRROR¶R((Rt?sd              &     i%%"X1 -