ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3gX@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 0/opt/python39/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}dS)zf Ensure the source directory is not included in the tar header per bpo-41316. zlatin-1rN)rrrrr5rr read_text)rpayloadr r r test_source_directory_not_leakedsz4GzipStreamWriteTest.test_source_directory_not_leakedN)rrrrr 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)Nrrrrr 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 r s  r c@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.r/r 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|ddSr3) rrrrrr.rFileExistsErrorrrr=r>rr4r r r test_create_existings* , &zCreateTest.test_create_existingcCs|td}||jWdn1s.0Y|t}|}Wdn1s`0Y|t|d|d|ddSNxrWr-r)rrrr.rr=r>rr4r r r test_create_taropens * &zCreateTest.test_create_taropenc Cs|td}||jWdn1s.0Y|t<|tdWdn1sf0YWdn1s0Y|t}|}Wdn1s0Y|t|d| d|ddSr:) rrrr.rr8rr=r>rr4r 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|ddSr3)rrrrrrrrlrr=rJrKrrr.rr>rrr4r 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>rr4r r r !test_create_taropen_pathlike_names& &z,CreateTest.test_create_taropen_pathlike_nameN)rrrrrJrKrLrIr.r4 classmethodr0r2r7r9r<r=r>r?r r r r r,ws      r,c@seZdZddZdS)GzipCreateTestcCsrtjt|jdd}||jWdn1s40Ytjtddd}Wdn1sd0YdS)NrWr[zr:gzrrrrrr.rr5r r r test_create_with_compresslevels*z-GzipCreateTest.test_create_with_compresslevelNrrrrDr r r r rAsrAc@seZdZddZdS) Bz2CreateTestcCsrtjt|jdd}||jWdn1s40Ytjtddd}Wdn1sd0YdS)NrWr[r:bz2rBrCr r r rDs*z,Bz2CreateTest.test_create_with_compresslevelNrEr r r r rFsrFc@seZdZddZdS)LzmaCreateTestcCsBtjt|jdd}||jWdn1s40YdS)NrW)presetrBrCr r r test_create_with_presetsz&LzmaCreateTest.test_create_with_presetN)rrrrJr r r r rHsrHc@seZdZdZdZdZdS)CreateWithXModeTestr;N)rrrrr<r=r r r r rKsrKrrc@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)rrrr4r6rNrOrPr r r r rLs rLc@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)rrbrrWrVr)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/rr1rVrrr) 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 irMas90000644000017300001740000000014400000001750006516 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^rfr r r r rQs  rQc@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)Nutf7rhrr r r test_utf7_filenameszUnicodeTest.test_utf7_filenamecCs|ddS)Nutf-8rhrr r r test_utf8_filenameszUnicodeTest.test_utf8_filenamecCstjtd|j|dd}z d}|t|W|n |0tjt|d}z"||dj |W|n |0dS)Nrrrr1errorsrVrr) rrrrrrr5r=rrl)rr1r3rlr r r ris z"UnicodeTest._test_unicode_filenamecCsltjtd|jddd}zFt}d|_|t|j|d|_d|_ |t|j|W| n | 0dS)NrrrrorVr) 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/rr1rp) 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) NrrVrr/)rrr1rru ) rrrrdrrrrr5r:r=r)rrr3r r r test_uname_unicodes*      zUnicodeTest.test_uname_unicodeN) rrrrjrlrnrirrrurvr r r r rgs rgc@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ÿÿrzrr r r test_unicode_name2s z#UstarUnicodeTest.test_unicode_name2cCs0|d|dt|d|dtdS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rzrr r r test_unicode_longname1s   z'UstarUnicodeTest.test_unicode_longname1cCs|dt|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rzrr r r test_unicode_longname2s z'UstarUnicodeTest.test_unicode_longname2cCs&|dt|d|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿrzrr r r test_unicode_longname3s  z'UstarUnicodeTest.test_unicode_longname3cCs|d|dtdS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿrzrr r r test_unicode_longname4s z'UstarUnicodeTest.test_unicode_longname4NcCstjtd|jdd>}t|}|dur4||n|||j|Wdn1sX0Y|durtjtddd,}|D]}|||jqqWdn1s0YdS)Nrrmr\rEr) rrrrrrrr=rlrrlexcr3rr r r r{!s  .z!UstarUnicodeTest._test_ustar_namecCs0|d|dt|d|dtdSrx_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)Nrrmr\rrEr) rrrrrrvrrr=rr r r r:s  .z!UstarUnicodeTest._test_ustar_link)N)N)rrrr USTAR_FORMATrr|r~rrrrr{rrrr r r r rws rwc@seZdZejZddZdS)GNUUnicodeTestc CsndD]d\}}tjt|dd<}z||}WntyH|dYn0Wdq1s^0YqdS)N))rmupax/bad-pax-)r/upax/bad-pax-äöürrsz%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))rmupax/hdrcharset-)r/upax/hdrcharset-äöürrsz)unable to read POSIX.1-2008 binary headerrrr r r test_binary_headercs  z!PAXUnicodeTest.test_binary_header)rrrrrrrrrr 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)rr6rr3r 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|)r6r) rrrr<rrrr]rrjr r r test_fileobjs&   zAppendTest.test_fileobjcCs$|||jddgddS)Nrr|)r6)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) Nrrya123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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) NrrrsfooZfoobarryrMsfoobar)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)NrWrrrrrRrrrrrrrrrgYg0Bsgr)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>8rrZInvalidHeaderErrorrZ GNU_TYPESZTruncatedHeaderErrorrpwdversionZXGLTYPEZ calc_chksumsLinkOutsideDestinationErrorrZ GNU_MAGICZ REGULAR_TYPESgrp copyfileobjrr(ZSubsequentHeaderErrorFIFOTYPEr data_filterZ LENGTH_PREFIXSYMTYPE FilterErrorAbsoluteLinkErrorAbsolutePathErrorZ POSIX_MAGICZsymlink_exceptionZ ExFileObjectrZAREGTYPEZPAX_NAME_FIELDSSpecialFileErrorOutsideDestinationErrorZEmptyHeaderErrorrfully_trusted_filterZGNUTYPE_LONGLINKCHRTYPENULmain tar_filterZCONTTYPErZGNUTYPE_SPARSEZEOFHeaderErrorZSUPPORTED_TYPESr)rrXZSOLARIS_XHDTYPEZ PAX_FIELDSrfilemode) 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 --verboserrmPYTHONIOENCODINGsis 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)Nrrrrrrms 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)Nrrrmr 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_trustedrmrr) 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)rrrrrrrrrrrrrrrr r r r rrrrrr 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) rrrrr=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)rrrrrr)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<)rrT MyBytesIO __class__r r r< sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.readcsd|_t|j|Sr)r-r/r]rr0r r r] sz>Bz2PartialReadTest._test_partial_input..MyBytesIO.seek)rrrr-r<r] __classcell__r r1)r2r r1 sr1rrWr) rrr%compressrrrranger>rr)rrr r;r r4r _test_partial_input s z&Bz2PartialReadTest._test_partial_inputcCs|ddS)NrEr7rr r r test_partial_input sz%Bz2PartialReadTest.test_partial_inputcCs|ddS)NrGr8rr r r test_partial_input_bz2 sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrr7r9r: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)rrJrKrLrBrOrr) mock_geteuidZfnamedirnamerIrJrKZ tar_filenamerLr r r _setup_test s zNumericOwnerTest._setup_testzos.chownzos.chmodz os.geteuidc Cs||8\}}}}|j|tdd|j|tddWdn1sH0Ytjt|}tjt|} |jtj |ddtj | ddgdddS)NTZ numeric_ownerrCrDrGrHZ any_order) rRrHrIrJrKrLassert_has_callsr.r/call) rrP mock_chmod mock_chownrLrI_rK 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) NTrSrCrDrErFrGrHrT) rRrrIrJrKrLrUr.r/rV) rrPrWrXrLrIrJrKrZZ 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)rrPrWrXrLrIrYrZr r r "test_extract_without_numeric_owner( s.z3NumericOwnerTest.test_extract_without_numeric_ownerc CsL||.\}}}}|t|j|tddWdn1s>0YdS)NFT)rRrrrHrI)rrPrLrIrYr r r test_keyword_only7 s z"NumericOwnerTest.test_keyword_onlyN)rrrrrOrrRr.r/r0r\r]r4r?r^r_r r r r rB s,             rBc@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 pr1r r v sz2NoneInfoExtractTests.setUpClass..**/*)rrrrrrIrorrextraction_filterr5setglob control_paths)r/r3r r1r r0o s zNoneInfoExtractTests.setUpClasscCst|jdSr)shutilrror1r r r r2z 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)rrrrtr@r0r2rzrr}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)rrrrrrrrrrrrrrr)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}|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_ISVTX)rZstr_moderesultr r r _filemode_to_int0 sF       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)rr5rrrN)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)rrrNrr)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"rrrrraised_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_symlinkrrrrr8rrrrrrr 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) rrrrrrrrr8rrrrrr 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(rrrrtrr=rrrrr rBrl)rZ special_typerBZtrustedr3cmr r r test_special_files]s    *z(TestExtractionFilters.test_special_filescCsVtjt6}|D]}t|d}|||qWdn1sH0YdSNr)rrrrrrrtrr3rBZfilteredr r r test_fully_trusted_filterls  z/TestExtractionFilters.test_fully_trusted_filtercCsjtjtJ}|D]0}t|d}||j|j||j|jqWdn1s\0YdSr) rrrrrrrtrlrrr r r test_tar_filterss   z%TestExtractionFilters.test_tar_filterc Cstjth}|D]N}zt|d}WntjyBYqYn0||j|j||j |j qWdn1sz0YdSr) rrrrrrrrtrlrrr 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)rtrrlrrrr 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.mockrrWrZ 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 r r&r,rArFrHrKr4r5rLrQrgrwrrrrrrrrrrrr7r$r,r?rBr`rlrrrrrrrrrrrrr r r r s(                   Pw=(a*;,9' R.Z   * QO@;Y^:! v(^  ^6: