ÿØÿà 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 3g@sTddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZz ddlZWneydZYn0ddl m!Z!ddl"m#Z#m$Z$ddl"m%Z%e#dZ&e#dZ'e#dZ(ej)*d Z+ej)*d Z,ej)dd d kZ-zddl.Z.ddl/Z/d Z0WneydZ0Yn0z ddl1Z1WneydZ1Yn0ddZ2ddZ3dBddZ4ddZ5dCddZ6ddZ7ddZ8e8Z9ddZ:Gdd d Z;Gd!d"d"e;ej<Z=Gd#d$d$e;ej<Z>Gd%d&d&e;ej<Z?Gd'd(d(e;ej<Z@Gd)d*d*e;ej<ZAGd+d,d,e;ej<ZBGd-d.d.eBZCGd/d0d0e;ej<ZDGd1d2d2ej<ZEGd3d4d4ej<ZFGd5d6d6eGZHeIe9 d7Gd8d9d9eHej<ZJeIe+ d:Gd;d<dd>ej<ZLGd?d@d@ej<ZMeNdAkrPeOdS)DN) make_archiveregister_archive_formatunregister_archive_formatget_archive_formatsErrorunpack_archiveregister_unpack_format RegistryErrorunregister_unpack_formatget_unpack_formats SameFileError_GiveupOnFastCopy)support)TESTFNFakePath)warnings_helper2Z_SRCZ_DSTdarwinZsunosZaixTFcOstttddddS)NZEXDEVzInvalid cross-device link)OSErrorgetattrerrnoargskwargsr//opt/python39/lib/python3.9/test/test_shutil.py _fake_rename6srcstfdd}|S)Ncs0z"tj}tt_|i|W|t_S|t_0dSN)osrenamer)rrZbuiltin_renamefuncrrwrap;szmock_rename..wrap) functoolswraps)r#r$rr"r mock_rename:sr'cCsVt|trtjj|}t||r"dnd}||Wdn1sH0YdS)Nwbw) isinstancetupler pathjoinopenwrite)r,Zcontentbinaryfprrr write_fileEs  r2cCsrdd}t|d}dddt|D}t|d*}|||D]}||q@Wdn1sd0YdS)Ncss&||kr|V||8}q|r"|VdSrr)totalsteprrrchunksSs  zwrite_test_file..chunksi cSsg|]}ttjqSr)randomchoicestring ascii_lettersencode).0irrr \sz#write_test_file..r()minr-ranger.r/)r,sizer5bufsizechunkfZcsizerrrwrite_test_fileQs   *rEcCsTt|trtjj|}t||r"dnd}|WdS1sF0YdS)Nrbr)r*r+r r,r-r.read)r,r0r1rrr read_filecs  rIcCs|g}tt|D]d}tj||}tj|rltj|sl||dt|D]}||d|qRq||q|S)N/) sortedr listdirr,r-isdirislinkappendrlistdir)r,resnamepnrrrrPos  rPc CsttdsdSd}d}ztjdtdd }|j}|dWdn1sT0Yt|d }tjdtdd}|j}|}|}zt ||ddWnTt yYWdWdW|durt ||durt |dS0WdWdW|dur0t ||durDt |d SWdn1s^0YWdn1s~0YW|durt ||durt |n*|durt ||durt |0dS) NsendfileFr(dirdeletes 0123456789rFrT) hasattrr tempfileNamedTemporaryFilegetcwdrRr/r.filenorUrrunlink)srcnamedstnamerDsrcdstinfdoutfdrrrsupports_file2file_sendfile{sH (      F      rfcCsJtrBtjdkrBtdtj}|ddd}t|ddkSdSdS) Niz/usr/bin/dump -o %s i T)AIXsysmaxsize subprocess getoutput executablesplitint)ZhdrsZmaxdatarrr _maxdataOKs rsc@seZdZdddZdS)BaseTestNcCs$tj|td}|tj||S)N)prefixrW)r[mkdtempr r] addCleanuprrmtree)selfrudrrrrvszBaseTest.mkdtemp)N)__name__ __module__ __qualname__rvrrrrrtsrtc@seZdZddZejddZejddZe e ddd Z e e dd d Z d d Z eejdddkdeeedoedkdddZddZddZddZddZejdd Ze e dd!d"ZdS)# TestRmTreecCsX|}tj|d}t|ttj|ddt|}||tt |dS)NZkillmeZsomefilefoo) rvr r,r-mkdirr2fsencodeassertIsInstancebytesshutilrx)rytmpZvictimrrrtest_rmtree_works_on_bytess   z%TestRmTree.test_rmtree_works_on_bytescs|}tj|d}t|tj|d}t|||ttj || tj || tj |gfdd}tj ||d| td|ddtjj| dd||dddtdS) NrWlinkcs|dSrrOrerrorsrronerrorsz8TestRmTree.test_rmtree_fails_on_symlink..onerrorrrirrY)rvr r,r-rsymlink assertRaisesrrrx assertTrueexistslexists assertEquallenassertIsrNrryrZdir_rrrrrtest_rmtree_fails_on_symlinks   z'TestRmTree.test_rmtree_fails_on_symlinkc Cs|}tj|d}tj|d}tj|d}|||fD]}t|q.onerrorrrirrY)rvr r,r-r_winapiCreateJunctionrwrr_rrrrxrrrrrrrNrrrrrtest_rmtree_fails_on_junctionss    z)TestRmTree.test_rmtree_fails_on_junctionsc Cs|}tj|d}tj|d}tj|d}|||fD]}t|q.onerrorrrYrri)r[mktemprvrFileNotFoundErrorrrxr2r r,r-NotADirectoryErrorassertIn exceptionfilenamerrrrrscandirrrmdir)ryrtmpdircmZ possible_argsrrrrtest_rmtree_errorss2 ( zTestRmTree.test_rmtree_errorsNcygwinz2This test can't be run on Cygwin (issue #1071513).geteuidrz9This test can't be run reliably as root (issue #1076467).cCs d|_tt|tjttjtd|_ tjtd|_ t |j t|j t tj}t |j j}t |j j}t jt jB}t|j |t|j |tt||tjt||tj|j ||tj|j |tjt|jd||jdddS)Nrabrrz1Expected call to onerror function did not happen.) errorStater rrrwrrxr,r-child_file_pathchild_dir_pathrcreate_empty_filestatst_modeS_IREADS_IEXECchmodcheck_args_to_onerrorr)ryZ old_dir_modeZold_child_file_modeZold_child_dir_modeZnew_moderrr test_on_error5s*       zTestRmTree.test_on_errorcCs|jdkr|tjur$|||jn:|tjur>|||jn ||tj| |t |jg| t |dt |jd7_n4||tj||t | t |dt d|_dS)NrYrrir)rr r_rrrrrrLrrr issubclassr)ryr#argexcrrrrTs    z TestRmTree.check_args_to_onerrorcsRzDtjfdd}|t_ttttdfdttWt_nt_0dS)Ncs|tkrtn|SdSr)rr)fnrrZ orig_lstatrrraiserrszFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat..raiserr)r lstatrrr2rrx)ryrrrr+test_rmtree_does_not_choke_on_failing_lstatos   z6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatcstjtjtjtjhtjko0tjtjvo0tjtjv}|r| t j | t j j |}tj|d}t|zBt j}Gdddtfdd}|t _|t j |W|t _q|t _0n|t j |t j j dS)Nrc@s eZdZdS)zHTestRmTree.test_rmtree_uses_safe_fd_version_if_available..CalledN)r{r|r}rrrrCalledr6rcsdSrrrrrr_raiserszITestRmTree.test_rmtree_uses_safe_fd_version_if_available.._raiser)r r.rr_rsupports_dir_fdrL supports_fdsupports_follow_symlinksrr_use_fd_functionsrxavoids_symlink_attacksrvr,r-r_rmtree_safe_fd Exceptionrr)ryrtmp_dirrzZ real_rmtreerrrr-test_rmtree_uses_safe_fd_version_if_availables,      z8TestRmTree.test_rmtree_uses_safe_fd_version_if_availablecCs<tj|d\}}t||ttj|t |dSNr) r[mkstemprvr closerrrrxremove)ryhandler,rrrtest_rmtree_dont_delete_files z'TestRmTree.test_rmtree_dont_delete_filec Csttzbtjtd}tjtd}t|t|||ttj |tj |ddWtj tddntj tdd0dS)NcheeseshopTr) r rrr,r-rrrrrxryrbrcrrrtest_rmtree_on_symlinks   z!TestRmTree.test_rmtree_on_symlinkc Csttzztjtd}tjtd}t|ttj|ddt||| t t j |t j |ddWt j tddnt j tdd0dS)NrrZspamr(Tr) r rrr,r-r.rrrrrrrxrrrrtest_rmtree_on_junctions   z"TestRmTree.test_rmtree_on_junction)r{r|r}rrskip_unless_symlinkrrunittest skipUnlessrrrrskipIfrlplatformrZr rrrrrrrrrrrrr~s2       $  r~c@seZdZddZddZejddZddZd d Z d d Z e j d ddZddZe eeddejddZddZejddZejddZddZddZd S)! TestCopyTreec Cs|}tj|d}|tj||tjtj|t|dfdt tj|dt|ddfdt ||| tj tj|d| tj tj|d| tj tj|ddt|df}||dt|ddf}||ddS)N destinationtest.txt123test_dir456)rvr r,r-rwrrxdirnamer2rcopytreerisfilerMrIrrysrc_dirdst_diractualrrrtest_copytree_simples"   z!TestCopyTree.test_copytree_simplec CsZ|}|}|tj||tj|t|dfdttj|dttj|dt|ddfdt|ddfdtj ||dd| tj tj|d| tj tj|d| tj tj|ddt |df}||dt |ddf}||d|t tj ||d dWdn1sL0YdS) Nznonexisting.txtrZ existing_dirz existing.txtzwill be replacedzhas been replacedT) dirs_exist_okF)rvrwrrxr2r rr,r-rrrrMrIrrFileExistsErrorrrrrtest_copytree_dirs_exist_oks*    z(TestCopyTree.test_copytree_dirs_exist_okc Cs|}tj|d}tj|d}tj|d}t|t|t|dfdtj|d}tj|d}ttj|d|ttdrt|t j t j Bttd rtt d rt |t j t|}tj||d d |tjtj|ddttj|dd}tjd kr8|dr8|dd}||tj|dt|} ttdrt|| j|jttd r|| j|jdS)Nrbrcsubzfile.txtrrzsub/linklchmodlchflags UF_NODUMPTsymlinksntz\\?\)rvr r,r-rr2rrZrrS_IRWXUS_IRWXOrrrrrrrNreadlinkrR startswithrrst_flags) ryrrrZsub_dirsrc_linkdst_linksrc_statrdst_statrrrtest_copytree_symlinkss8        z#TestCopyTree.test_copytree_symlinksc Cs^tjj}tjj}|}z ||d}t|dfdt|dfdt||dt|ddfdt||dt|ddfdt||ddt||dd t|dddfdt|dd d fdzftd d}tj |||d | |||d| |||d| |||dWt |n t |0zjtd d }tj |||d | |||d| |||dd | |||ddWt |n t |0zTdd}tj |||d | |||dd d | |||ddWt |n t |0Wt |t tj |nt |t tj |0dS)Nrrrztest.tmprrZ test_dir2subdirZsubdir2ztest.pyz*.tmpignorezsubdir*cSsfg}|D]X}tj||}tj|rB|ddkrB||qtj|ddvr||q|S)Nrhr z.py)r r,r-rMrqrOsplitext)rbnamesrQrRr,rrr_filter1s   z8TestCopyTree.test_copytree_with_exclude.._filter)r r,r-rrvr2rrignore_patternsrrrrxr)ryr-rrrpatternsrrrrtest_copytree_with_exclude sR     z'TestCopyTree.test_copytree_with_excludecsVtjj}tjj}}||d}t||t||dttj|ddt|dddfdgfdd}|d}tj|||d  |||ddd|d}tjt |||d  |||ddd|d}t t |d }|tjtj|||d  |||dddtd dS) Nsourcerr rrcsT||t|tt|tt||D]}|tq>gSr)rOrstrlistrrset)rbrrRZ invokationsryrr_ignoreXs   z?TestCopyTree.test_copytree_arg_types_of_ignore.._ignorerrr )r r,r-rrvrr2rrrpathlibPathrrrDirEntryrr)ryr-rrrrrZ src_dir_entryrrr!test_copytree_arg_types_of_ignoreJs8  z.TestCopyTree.test_copytree_arg_types_of_ignorec Csx|}tj|d}t|tj|d}|tj|t|dt |dfdttj|ddt |dfdttj|ddt j|d }|t j|t|dt ||| t|jt|j| ttj|djttj|dj| ttj|djttj|djtj|tj|d }| t|jt|jdS) Nrrizpermissive.txtrzrestrictive.txtrirri)rvr r,r-rrwrrxrr2r[rrrrrrq)ryrrrZrestrictive_subdirZrestrictive_subdir_dstrrr!test_copytree_retains_permissionsts6      z.TestCopyTree.test_copytree_retains_permissionszos.chmodcCs|}tj|d}|tj||tjtj|td|_ | tj t ||Wdn1sv0YdS)Nrzka-boom) rvr r,r-rwrrxrPermissionError side_effectrrr)ryZ mock_patchrrrrrtest_copytree_winerrors z#TestCopyTree.test_copytree_winerrorcsfdd}gtjdttjdd}|Wdn1s`0Ytj |d t ddS)NcsRd|t|t|tjd|tjddSNr)rOrrrr r,r-)rrrcflagryrbrr custom_cpfuns    zETestCopyTree.test_copytree_custom_copy_function..custom_cpfunrrr) copy_functionri) rvr[rr.r r,r-rrrrr)ryr(rDrr&r"test_copytree_custom_copy_functions&z/TestCopyTree.test_copytree_custom_copy_functionmkfiforequires os.mkfifo()c Cs2ttztjtd}t|tj|d}zt|Wn2tyt}z|d|WYd}~n d}~00zt tt Wn^tj y}zD|j d}| t|d|d\}}}| d||WYd}~nd}~00|dWtjtdd tjt dd ntjtdd tjt dd 0dS) Nr Zmypipeos.mkfifo(): %srriz`%s` is a named pipez$shutil.Error should have been raisedTr)r rrr,r-r,r"skipTestrrTESTFN2rrrrfailrx)ryr pipeerrbrcZ error_msgrrrtest_copytree_named_pipes*  $ & z%TestCopyTree.test_copytree_named_pipecs|}tj|d}t|dfdttj|dt|ddfdgfdd}tj|||d|t d dS) Nrrrrrcs||fdSrrrbrcZcopiedrr_copysz6TestCopyTree.test_copytree_special_func.._copyr)rY) rvr r,r-r2rrrrr)ryrrr7rr6rtest_copytree_special_funcs z'TestCopyTree.test_copytree_special_funccCs|}tj|d}tdtj|dttj|dt|ddfd|tt j ||tj|d}t j ||dd| dt |tj|d }t j ||dd | dt |dS) NrZ IDONTEXISTrrr destination2T)ignore_dangling_symlinksZ destination3r)rvr r,r-rrr2rrrr assertNotInrLrryrrrrrtest_copytree_dangling_symlinkssz,TestCopyTree.test_copytree_dangling_symlinksc Cs.|}tj|d}ttj|dttj|dddWdn1sZ0Ytjtj|dtj|dddtj||dd | tj tj|d| dt tj|dtj|d }tj||dd | tj tj|d| dt tj|ddS) NrZreal_dirrr)Z link_to_dirT)target_is_directoryFrr9)rvr r,r-rr.rrrrrNrrLrr<rrrtest_copytree_symlink_dirs  z&TestCopyTree.test_copytree_symlink_dircCs\|}|d}|tj|dtj|d}t|dt||}| dgt |dS)NdestTr) rvrwrrxr r,r-r2rrrL)ryrrrbrvrrrtest_copytree_return_values  z'TestCopyTree.test_copytree_return_valuecCs|}|jtj|ddtj|dd}tj|dd}t|tj|d}t|dt ||}| dgt |dS)NTrtZpgZ somevendorz1.0Zpol) rvrwrrxr r,r-makedirsr2rrrL)rybase_dirrrrbrArrrtest_copytree_subdirectorys   z'TestCopyTree.test_copytree_subdirectoryN)r{r|r}rrrrr rr r!rmockpatchr$r+rrZr r4r8r=r?rBrFrrrrrs( A*      rc@seZdZejddZeee ddejddZ e ee ddejdd Z ejd d Z eee d oeed oeeddddZejddZejejeee doe dkdddZddZddZejddZeee dd d!d"Zejd#d$Zejd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zejd/d0Zeee d1d2d3d4Zejd5d6Z eee d7d8d9d:Z!d;d<Z"d=d>Z#e e$pe%pe&d?d@dAZ'dBdCZ(dDS)ETestCopycCs|}tj|d}tj|d}tj|d}tj|d}t|dt|dt||t||t|tjtj Bt|tj | t|j t|j t |||t|j t|j tjdkrt|tj t |||t|j t|j t|tj t |||t|j t|j t|tj t |||t|j t|j dS)Nrbarbazquuxr)rvr r,r-r2rrrrS_IRWXGrassertNotEqualrrcopymoderrRryrrbrcrr rrrtest_copymode_follow_symlinkss0         z&TestCopy.test_copymode_follow_symlinksrzrequires os.lchmodcCsp|}tj|d}tj|d}tj|d}tj|d}t|dt|dt||t||t|tjtj Bt|tjt |tj tj Bt |tj t j ||dd|t|jt|j|t|jt|jt |tj t j ||dd|t|jt|jt |tj t j ||dd|t|jt|jdSNrrJrKrLFfollow_symlinks)rvr r,r-r2rrrrrMrrrrOrrrrNrPrrr test_copymode_symlink_to_symlink8s0     z)TestCopy.test_copymode_symlink_to_symlinkz requires os.lchmod to be missingcCs|}tj|d}tj|d}tj|d}tj|d}t|dt|dt||t||tj||dddSrR)rvr r,r-r2rrrOrPrrr*test_copymode_symlink_to_symlink_wo_lchmodVs    z3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodc Cs|}tj|d}tj|d}tj|d}tj|d}t|dt|}t||j|jdft|d| t|jt|jt ||t ||t tdrt |tj t tdrt tdrt|tjt|}t tdr tj||d d | |jt|jtj||d d t|}tjtjvrpd D]"} |t|| t|| d qLt tdr||j|jt tdrt |dr||j|jtj||d d |tt|jt|jdkdS)NrrJrKquxgE@rrrTrSFst_atimest_mtimerirg?)rvr r,r-r2rutimerYrZrNrrZrrrrrrcopystatrrassertLessEqualrrrrabs) ryrrbrcrr r  src_link_statZ dst_link_statattrrrrtest_copystat_symlinksfsJ             zTestCopy.test_copystat_symlinkschflags EOPNOTSUPPENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs|}tj|d}tj|d}t|dt|ddd}tj}zVtjtjfD]}||t_t ||qT|tjtjt_| t t j ||W|t_n|t_0dS)Nrfile2xxxcstddfdd }|S)NTrScs_dSr)r)r,flagsrTerrexrr_chflags_raiserszlTestCopy.test_copystat_handles_harmless_chflags_errors..make_chflags_raiser.._chflags_raiserr)rirkrrhrmake_chflags_raiserszSTestCopy.test_copystat_handles_harmless_chflags_errors..make_chflags_raiser) rvr r,r-r2rbrrcrdrr\rr)ryrrrermZ old_chflagsrirrr-test_copystat_handles_harmless_chflags_errorss   z6TestCopy.test_copystat_handles_harmless_chflags_errorscs |}tj|dtdtj|d}t|dt|tddtddt||t t t t ||t dt |dt |t|dt tjdfdd }z4tj|t_t||dt |Wt_nt_0d d fd d }z"tj |t_ t|Wt_ nt_ 0tj|dtj|d}tt||tddt|ddt|dtj|d}tj|d}t||t||t|t|||t |dd|t |dddS)NrrJuser.foo42zuser.bar43EPERMcs&|dkrn|||fi|dS)Nror)fnamer`valr) orig_setxattros_errorrr_raise_on_user_foosz3TestCopy.test_copyxattr.._raise_on_user_fooTrScs |krttjd||dS)NzOperation not supportedrS)rrrd)rsrT)orig_listxattrrbrr _raise_on_srcs z.TestCopy.test_copyxattr.._raise_on_srcZ the_originalZthe_original_rozuser.the_valuesfiddlyi$Zthe_copyZ the_copy_ro)rvr r,r-r2r _copyxattrsetxattrrrK listxattrgetxattrrrrrrrrr\)ryrrcrwryZsrcroZdstror)rxrurvrbrtest_copyxattrsZ                  zTestCopy.test_copyxattrrrroot privileges requiredcCs|}tj|d}tj|d}t|dt||t|ddtj|ddddtj|d}tj|d }t|dt||tj||dd| tj |dddd| t tj |dtj||dd| t |dddS) NrrKz trusted.foorprqFrSrJrW) rvr r,r-r2rr{rrzrr}rr)ryrrbrrcr rrrtest_copyxattr_symlinkss     z TestCopy.test_copyxattr_symlinkscCsPd}|}t||fdtj||}|}|||tj||}||fS)Nrrf)rvr2r r,r-)rymethodrsrrtmpdir2rerrr _copy_file s zTestCopy._copy_filecCsB|tj\}}|tj||t|j t|j dSr) rrcopyrr r,rrrr)ryrrerrr test_copyszTestCopy.test_copycCs |}tj|d}tj|d}tj|d}t|dt||ttdrft|tj tj Bt j ||dd| tj||t|t|t|t j ||dd|tj||t|t|ttdr|t|jt|jdS)NrrJrKrTrSF)rvr r,r-r2rrZrrrrrrrrNrrIrrrrr)ryrrbrcrrrrtest_copy_symlinkss&      zTestCopy.test_copy_symlinksr[zrequires os.utimecCs|tj\}}|tj|t|}t|}||j |j dD] }| t ||t ||dqJt tdrt |dr|t |dt |ddS)NrXrirbr) rrcopy2rr r,rrrrr]rrZ)ryrreZ file1_statZ file2_statr`rrr test_copy22s     zTestCopy.test_copy2c Cs|}tj|d}tj|d}tj|d}t|dt||ttdrft|tj tj Bttdrttdrt |tj t|}t |}tj||dd|tj||t|t|t|tj||d d|tj||t|t|t |}tjtjvrVd D]"}|t||t||d q2ttdr||j|j||j|jttdrt|d r||j|jdS) NrrJrKrrrTrSFrXrir)rvr r,r-r2rrZrrrrrrrrrrrNrrIrrrr[rr]rrrNr) ryrrbrcrr r_r r`rrrtest_copy2_symlinksCs<          zTestCopy.test_copy2_symlinkscCsr|}tj|d}tj|d}t|dt|ddt|||t |dt |dt |dS)NrrJrorp) rvr r,r-r2r{rrrr}r)ryrrbrcrrrtest_copy2_xattrfs    zTestCopy.test_copy2_xattrcCstjtjfD]v}|}|}tj|d}t|d|||}||tj|d||tj|d}||tj|dq dS)NrrJ) rrrrvr r,r-r2r)ryrrrrbrArrrtest_copy_return_valuess  zTestCopy.test_copy_return_valuecCs|tjdSr)_test_copy_dirrrryrrr test_copy_dirszTestCopy.test_copy_dircCs|tjdSr)rrrrrrrtest_copy2_dirszTestCopy.test_copy2_dircCsx|}tj|d}|}tj|d}t|dtjdkrFt}nt}| ||||| |||||||dSNrdoes_not_exist/win32) rvr r,r-r2rlrr"IsADirectoryErrorr)ryZ copy_funcrsrc_filerrcrirrrrs  zTestCopy._test_copy_dircCs|}tj|d}tj|d}tj|d}tj|d}t|dt||tj||dd|tj || t |t |t||| tj |dS)Nrbrcr rrFrS) rvr r,r-r2rrcopyfilerrNrrr)ryrrbrcr rrrrtest_copyfile_symlinkss   zTestCopy.test_copyfile_symlinksrzrequires os.linkc Cstttjtd}tjtd}zt|d}|dWdn1sR0Yzt||Wn2ty}z| d|WYd}~n d}~00| t j t j ||t|d }||dWdn1s0Yt|Wt jtddnt jtdd0dS) Nrrr)cheddarz os.link(): %srGTr)r rrr,r-r.r/rr"r/rrr rrrHrrx)ryrbrcrDr3rrr'test_dont_copy_file_onto_link_to_itselfs  ($ . z0TestCopy.test_dont_copy_file_onto_link_to_itselfc Cstttjtd}tjtd}zt|d}|dWdn1sR0Ytd||t j t j ||t|d }| | dWdn1s0Yt|Wt jtddnt jtdd0dS)Nrrr)rrGTr)r rrr,r-r.r/rrrr rrrHrrx)ryrbrcrDrrr*test_dont_copy_file_onto_symlink_to_itselfs  (  . z3TestCopy.test_dont_copy_file_onto_symlink_to_itselfr,r-c CszttWn2ty@}z|d|WYd}~n d}~00z6|tjtjtt |tjtjt tWt tn t t0dS)Nr.) r r,rr"r/rrSpecialFileErrorrr0__file__r)ryr3rrrtest_copyfile_named_pipes$z!TestCopy.test_copyfile_named_pipecCsl|}|}tj|d}tj|d}t|dt||}|tj|| t |t |dS)NrJr) rvr r,r-r2rrrrrrI)ryrrdst_filerrArrrtest_copyfile_return_values  z#TestCopy.test_copyfile_return_valuecCsX|}tj|d}t|d|ttj|||t tj||| t |ddSr%) rvr r,r-r2rr rrrrrI)ryrrrrrtest_copyfile_same_files  z TestCopy.test_copyfile_same_filezMOn MACOS, Solaris and Windows the errors are not confusing (though different)cCsD|}tj|d}tj|d}t|d|ttj||dS)Nrr) rvr r,r-r2rrrr)ryrrrcrrrtest_copyfile_nonexistent_dirs  z&TestCopy.test_copyfile_nonexistent_dircCs|}tj|d}|}tj|d}t|dtjdkrFt}nt}| |t j ||| |t j ||| |t j ||dSr) rvr r,r-r2rlrr"rrrr)ryrrrrcrirrrtest_copyfile_copy_dirs  zTestCopy.test_copyfile_copy_dirN))r{r|r}rrrQrrrZr rUrrVrarrnZskip_unless_xattrr~rrrrrrrrrrrrrrrrrrMACOSSOLARISrrrrrrrrIsh    (  ?    "         rIc@s~eZdZeddZddZd9ddZee e dd d d Z ed d Z ee e ddddZee e ddddZddZeddZee edddZddZdd Zed!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zed-d.Zed/d0Zee e!oRe" d1d2d3Z#ed4d5Z$d6d7Z%d8S): TestArchivesc Cs|d\}}|}t|tj|}tjtj|d}t |*tj |}t |d|d}Wdn1s|0Y| ||d| tj|| t|t|d$}||gdWdn1s0Yt |t |d|d}Wdn1s(0Y| ||d | tj|| t|t|d $}||gdWdn1s0YdS) Nrarchivegztar..tar.gzzr:gz)rz./subz./sub2z./file1z./file2z ./sub/file3tar.tarrG) _create_filesrvr rr,rr-basenamer change_cwdabspathrrrrtarfileZ is_tarfiler.assertCountEqualgetnames) ryroot_dirrErwork_dir rel_base_name base_nametarballZtfrrrtest_make_tarballs0    , " . zTestArchives.test_make_tarballcCsFt|(}|}|t|WdS1s80YdSr)rr.rsortr+)ryr,rrrrr_tarinfo:s zTestArchives._tarinfodistcCs|}tj||}tj|ddt|dfdt|dfdttj|dt|ddfdttj|d|rt|d fd||fS) NT)exist_okrrfrerZfile3Zsub2outer)rvr r,r-rDr2r)ryrErrrrrr@szTestArchives._create_filesrzNeed the tar command to runcCs |\}}tj|d}t|d||}|||d|tj|tj|d}ddd|g}t j ||t j d|tj||| || |t|d||}|||d|tj|t|d||d d }|||d|tj|dS) Nrrrz archive2.tarrz-cfcwdstdoutrT)dry_run) rr r,r-rvrrrrrn check_callDEVNULLr)ryrrErrZtarball2Ztar_cmdrrrtest_tarfile_vs_tarNs(   z TestArchives.test_tarfile_vs_tarc Cs|\}}|}t|tj|}tjtj|d}t |(tj |}t |d|}Wdn1sx0Y| ||d| tj|| t|t|$}||gdWdn1s0Yt |*tj |}t |d||}Wdn1s.0Y| ||d| tj|| t|t|$}||gdWdn1s0YdS)Nrzip.zip)dist/ dist/sub/ dist/sub2/ dist/file1 dist/file2dist/sub/file3r)rrrrrr)rrvr rr,rr-rrrrrrrrzipfile is_zipfileZipFilernamelist) ryrrErrrrrQzfrrrtest_make_zipfileos2     *  "  .  zTestArchives.test_make_zipfilerzNeed the zip command to runc Cs |\}}tj|d}t|d||}|||d|tj|tj|d}dddd|g}t j ||t j d|tj|t |}|}Wdn1s0Yt |}|} Wdn1s0Y|t|t| dS)Nrrrz archive2.zipz-qz-rr)rr r,r-rvrrrrrnrrrrrrK) ryrrErrZarchive2zip_cmdrrZnames2rrrtest_zipfile_vs_zips   & &z TestArchives.test_zipfile_vs_zipunzipzNeed the unzip command to runc Cs|\}}tj|d}t|d||}|||d|tj|dd|g}t |zt j |t j dWn\t jy}zB|jjdd}d |vr|d d }||||WYd}~n d}~00Wdn1s0YdS) Nrrrrz-t)stderrreplacerzunrecognized option: tzunzip doesn't support -tz{} **Unzip Output** {})rr r,r-rvrrrrrrrn check_outputSTDOUTCalledProcessErroroutputdecoder/r1format) ryrrErrrrZdetailsmsgrrrtest_unzip_zipfiles    zTestArchives.test_unzip_zipfilecCs*|}tj|d}|tt|ddS)Nrrf)rvr r,r-r ValueErrorr)ryrrrrrtest_make_archiveszTestArchives.test_make_archivecCstr"tdd}tdd}nd}}|\}}tj| d}t |d||||d}| tj |t |d||}| tj |t |d||||d}| tj |t |d||ddd}| tj |dS) NrrootrrownergrouprZ kjhkjhkjgZoihohoh) UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidrr r,r-rvrrr)ryrrrrErrQrrrtest_make_archive_owner_groups(    z*TestArchives.test_make_archive_owner_groupRequires grp and pwd supportc Cs|\}}tj|d}tdd}tdd}t |$t |d|d||d}Wdn1sn0Y| tj |t|}z6|D] }||jd||jdqW|n |0dS)Nrrrrr)rr r,r-rvrrrrrrrrrrr.Z getmembersruidgidr) ryrrErrr archive_namermemberrrrtest_tarfile_root_owners   $  z$TestArchives.test_tarfile_root_ownercCstt}dd}td|gdzFztdd|dWntyHYn0|t|Wtdn td0dS)Nc_s tdSr) RuntimeError)rkwrrr_breakssz3TestArchives.test_make_archive_cwd.._breaksrfxxx file)r)r r]rrrvrrr)ryZ current_dirrrrrtest_make_archive_cwds z"TestArchives.test_make_archive_cwdcCsZ|}t|4|tddd|tjdWdn1sL0YdS)Ntestrztest.tar rvrrrrrr r,rryrrrrtest_make_tarfile_in_curdir s z(TestArchives.test_make_tarfile_in_curdircCsZ|}t|4|tddd|tjdWdn1sL0YdS)Nrrztest.ziprrrrrtest_make_zipfile_in_curdirs z(TestArchives.test_make_zipfile_in_curdircCs|ttdd|ttdddd|ttdddddgtddddgd d d tD}|d|tdd d tD}|d|dS) NrfricSstSrxrrrrr6z;TestArchives.test_register_archive_format..cSstSrrrrrrr!r6)rirY)rirYrcSstSrrrrrrr$r6rcSsg|] \}}|qSrrr<rRparamsrrrr>%r6z=TestArchives.test_register_archive_format..cSsg|] \}}|qSrrrrrrr>)r6)r TypeErrorrrrrr;)ryformatsrrrtest_register_archive_formats z)TestArchives.test_register_archive_formatcKsF|j|ddfi||j|tjfi||j|tfi|dS)NcSs|Srrr,rrrr0r6z3TestArchives.check_unpack_archive..)#check_unpack_archive_with_converterrrr)ryrrrrrcheck_unpack_archive.sz!TestArchives.check_unpack_archivec Ks.|\}}t|}|dtj|d}t||||}|} t|||| fi|| t| ||} t|||| fd|i|| t| || t j $t|t fi|Wdn1s0Y| t(t|t fddi|Wdn1s 0YdS)Nrrrrf)rrPrr r,r-rvrrrrr ReadErrorrr) ryr converterrrrEexpectedrrrZtmpdir3rrrr5s"  2 z0TestArchives.check_unpack_archive_with_convertercCsT|j|dd|j|ddt|||Wdn1sF0YdS)NZ fully_trustedfilterdata)rrZcheck_no_warnings)ryrrrrcheck_unpack_tarballMs z!TestArchives.check_unpack_tarballcCs|ddS)Nrr rrrrtest_unpack_archive_tarSsz$TestArchives.test_unpack_archive_tarcCs|ddS)Nrr rrrrtest_unpack_archive_gztarVsz&TestArchives.test_unpack_archive_gztarcCs|ddS)Nbztarr rrrrtest_unpack_archive_bztarZsz&TestArchives.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs|ddS)Nxztarr rrrrtest_unpack_archive_xztar^sz&TestArchives.test_unpack_archive_xztarcCsF|d|t|jdddWdn1s80YdS)Nrr r )rrrrrrrtest_unpack_archive_zipcs  z$TestArchives.test_unpack_archive_zipcst}fdd}tdddg|dgtddttd dg|tdtd dg|d dgd ftddgd fttd t|dS) Ncs(|d|d|ddS)Nri stuff.booxx)r)r extract_dirextrarrr_booms  z/TestArchives.test_unpack_registry.._booZBooz.booz.b2)rrirrZBoo2r) r rrrr r rr;r)ryrrrrrtest_unpack_registryis   z!TestArchives.test_unpack_registryN)r)&r{r|r}rZ requires_zlibrrrrrrwhichrrrrrrrrrrrrrrr rrZ requires_bz2rZ requires_lzmarrkrsrrrrrrrrs\ #    $            rc@sLeZdZeeeddddZeedeee dddd Z d S) TestMisc disk_usagez)disk_usage not available on this platformcCsttjt}dD]}|t||tq| |j d| |j d| |j d| |j |j | |j |j ttdS)N)r3usedfreer)rrr r,rrrrrrZ assertGreaterr3rassertGreaterEqualr)ryusager`rrrtest_disk_usageszTestMisc.test_disk_usagerchownzrequires os.chowncs}tj|dtdttWdn1sH0YttjddWdn1s0YttjddWdn1s0Yt tdWdn1s0Yt tdWdn1s&0Yt }t }d fd d }t|||||t|||tj|d||tj|d||d t|||||||t|||||tj||d|||tj||d|||d z t |d }t|d }WntyHYn60t|||||t|||||||dS)Nrztesting chown functionznon-existing username)userznon-existing groupname)rspamgQ @cs:t}|dur ||j|dur6||jdSr)r rrst_uidst_gid)r,rrsrryrr check_chowns  z(TestMisc.test_chown..check_chown)rr)NN)rvr[rr2rrrr# LookupErrorrr getuidgetgidrrrrKeyError)ryrrrr*r$rrr)r test_chownsR   ( , , * ,           zTestMisc.test_chownN) r{r|r}rrrZrr"rr r/rrrrrs  rc@seZdZddZddZddZddZd d Ze e e d oHe d kd ddZ ddZddZeejdkdddZddZddZddZddZd d!Zd"d#Zeejdkd$d%d&Zeejdkd$d'd(Zd)S)* TestWhichcCst|jdd|_tj|jddd|_t|jjtj | |jj tj |jj\|_|_|j|_tj|_d|_dS)NZTmp)ruz.ExerWrusuffixz.EXE)rvtemp_dirr[r\ temp_filer rrRrS_IXUSRrwrr,rqrWfileenv_pathcurdirextrrrrsetUpszTestWhich.setUpcCs&tj|j|jd}|||jjdSNr)rrr6rWrr4rRryrArrr test_basicszTestWhich.test_basiccCs(tj|jj|jd}|||jjdSr;)rrr4rRr3rr<rrrtest_absolute_cmdszTestWhich.test_absolute_cmdcCstj|j\}}tj||j}tj|d,tj ||j d}| ||Wdn1s`0Ytj|jd(tj ||d}| |Wdn1s0YdSr;) r r,rqrWr-r6rrrrr3r assertIsNone)ryrEtail_dirrelpathrArrrtest_relative_cmds*zTestWhich.test_relative_cmdcCstj|j}tj|jdPtj|j|d}t j dkrT| |tj |j |jn ||Wdn1sr0YdS)Nrr)r r,rrWrrrrr6rlrrr-r8r?)ryrErArrrtest_cwds  zTestWhich.test_cwdrrznon-root user requiredcCsRt|jjtjt|jjtjr.|dt j |j |j tjd}| |dS)Nzcan't set the file read-only)r,mode)r rr4rRrraccessW_OKr/rrr6rWr?r<rrrtest_non_matching_modes  z TestWhich.test_non_matching_modecCsjtj|j\}}tj|d8tj|j|d}| |tj ||jWdn1s\0YdSr;) r r,rqrWrrrrr6rr-)ryrEr@rArrrtest_relative_pathszTestWhich.test_relative_pathcCstjd|jd}||dS)Nzfoo.exer)rrrWr?r<rrrtest_nonexistent_fileszTestWhich.test_nonexistent_filerzpathext check is Windows-onlycCs<tj|jdd|jd}|||jjdd|jdS)Nr)rrr6rWrr4rRr9r<rrrtest_pathext_checkingszTestWhich.test_pathext_checkingcCsRt6}|j|d<t|j}|||jjWdn1sD0YdSNPATH) rEnvironmentVarGuardr7rrr6rr4rRryenvrArrrtest_environ_path%s   zTestWhich.test_environ_pathc Cst}d|d<tjjd|jddttd|jRt|j&t |j }| |Wdn1sr0YWdn1s0YWdn1s0YWdn1s0YdS)NrrM os.confstrT return_valuecreatedefpath) rrNrrGrHrW swap_attrr rrrr6r?rOrrrtest_environ_path_empty+s    z!TestWhich.test_environ_path_emptyc Cs:tj|jj}tjdkrBtj}t|t r4t |}tj ||}t }tj|d<tjjd|jddt td|jjt|j}||t |j(t|j}|||Wdn1s0YWdn1s0YWdn1s 0YWdn1s,0YdS)NrrMrRTrSrV)r r,rr4rRrlrr8r*rrr-rrNpathseprrGrHrWrWrrr6r?rr)ryZ expected_cwdr8rPrArrrtest_environ_path_cwd6s$         zTestWhich.test_environ_path_cwdc Cs8t}|ddtjjdtddLttd|j t |j }Wdn1s^0YWdn1s|0Y| ||jjtjjd|j ddJttddt |j }Wdn1s0YWdn1s0Y| ||jjWdn1s*0YdS)NrMrRT)r#rUrVrSr)rrNpoprrGrHrrWr rWrrr6rr4rRrOrrrtest_environ_path_missingLs    H  Hz#TestWhich.test_environ_path_missingc Cstj|j}tj|jd\t4}|j|d<tj |j dd}| |Wdn1s`0YWdn1s~0YdS)NrrMr) r r,rrWrrrNr7rrr6r?)ryrErPrArrrtest_empty_path^s zTestWhich.test_empty_pathcCsNt2}|ddt|j}||Wdn1s@0YdSrL)rrNr[rrr6r?rOrrrtest_empty_path_no_PATHfs   z!TestWhich.test_empty_path_no_PATHztest specific to WindowscCsd}tj|jd|d}t|jtj||j tj |j}tj |d}t 6}||d<tj||jd}|||jWdn1s0YdS)N.xyzTmp2r1rPATHEXTr)r[r\r3r rrRrr5rwrr,rrrrNrrrryr9Z temp_filexyzZprogramrPrArrr test_pathextls  zTestWhich.test_pathextcCsd}tj|jd|d}||jtj|j}tj |d}t <}|d|d<t j ||jd}|||jWdn1s0YdS)Nr_r`r1r;rar)r[r\r3rwrr r,rrRrrrNrrrrbrrrtest_pathext_with_empty_str~s  z%TestWhich.test_pathext_with_empty_strN)r{r|r}r:r=r>rBrCrrrZr rrGrHrIrrlrrKrQrXrZr\r]r^rcrerrrrr0s2       r0c@seZdZddZdS)TestWhichBytescCsXt|t|j|_t|j|_t|jj|j_t|j|_t|j |_ dSr) r0r:r rrWr6r4rRr8r9rrrrr:s  zTestWhichBytes.setUpN)r{r|r}r:rrrrrfsrfc@seZdZddZddZddZddZd d Zd d Zd dZ e ddZ e ddZ ddZ e ddZddZe ddZddZeejjdddZd d!Zd"d#Zd$d%Zd&d'Zeje d(d)Zeje d*d+Zeje d,d-Z eje d.d/Z!d0d1Z"d2d3Z#e d4d5Z$e d6d7Z%d8d9Z&ee'ed:ove(d;kove'ed<ove'e)d=ove'e)d>d?d@dAZ*dBS)CTestMovecCsvd}||_||_tj|j||_tj|j||_t|jd}| dWdn1sh0YdS)Nrr(r%) rvrrr r,r-rrr.r/)ryrrDrrrr:s  zTestMove.setUpcCst|d}|}Wdn1s(0Yt||t|d }|||Wdn1sn0Y|tj|dSNrF) r.rHrmoverrr r,r)ryrbrcreal_dstrDcontentsrrr_check_move_files  &  .zTestMove._check_move_filecCsFtt|}t||||tt||tj|dSr) rKr rLrrirrr,r)ryrbrcrjrkrrr_check_move_dirs zTestMove._check_move_dircCs||j|j|jdSr)rlrrrrrrtest_move_fileszTestMove.test_move_filecCs||j|j|jdSr)rlrrrrrrrtest_move_file_to_dirszTestMove.test_move_file_to_dircCs"t|j}|||j|jdSr)rrrrlrr)ryrbrrr"test_move_file_to_dir_pathlike_srcs z+TestMove.test_move_file_to_dir_pathlike_srccCs"t|j}||j||jdSr)rrrrlrrryrcrrr"test_move_file_to_dir_pathlike_dsts z+TestMove.test_move_file_to_dir_pathlike_dstcCs |dSr)rnrrrrtest_move_file_other_fssz TestMove.test_move_file_other_fscCs |dSr)rorrrrtest_move_file_to_dir_other_fssz'TestMove.test_move_file_to_dir_other_fsc Cs@tj|d}z||j||Wt|n t|0dSr)r[rrvrmrrrxryrrrr test_move_dirszTestMove.test_move_dircCs |dSr)rvrrrrtest_move_dir_other_fsszTestMove.test_move_dir_other_fsc Cs,||j|jtj|jtj|jdSr)rmrrr r,r-rrrrrtest_move_dir_to_dirs zTestMove.test_move_dir_to_dircCs |dSr)rxrrrrtest_move_dir_to_dir_other_fssz&TestMove.test_move_dir_to_dir_other_fsc Cs4||jtjj|jtj|jtj|jdSr)rmrr r,seprr-rrrrrtest_move_dir_sep_to_dirsz!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc Cs4||jtjj|jtj|jtj|jdSr)rmrr r,altseprr-rrrrrtest_move_dir_altsep_to_dirsz$TestMove.test_move_dir_altsep_to_dircCsHt|jdWdn1s"0Y|tjtj|j|jdS)Nr()r.rrrrrirrrrrr"test_existing_file_inside_dest_dirsz+TestMove.test_existing_file_inside_dest_dircCs*tj|jd}|tjtj|j|dSNrJ)r r,r-rrrrrirqrrrtest_dont_move_dir_in_itselfsz%TestMove.test_dont_move_dir_in_itselfc CsrttzVdD]B\}}tjt|}tjt|}|jt||d||fdqWt tn t t0dS)N))srcdirz srcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)r) r rrr,r-rr _destinsrcrrxrrrrtest_destinsrc_false_negatives   z&TestMove.test_destinsrc_false_negativec CsrttzVdD]B\}}tjt|}tjt|}|jt||d||fdqWt tn t t0dS)N))rzsrc/dest)rz srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)r) r rrr,r-rrrrrxrrrrtest_destinsrc_false_positives   z&TestMove.test_destinsrc_false_positivecCs\tj|jd}t|j|t||j| tj |j| tj |j|jdSr) r r,r-rrrrrirrrNsamefilerqrrrtest_move_file_symlinks zTestMove.test_move_file_symlinkcCsld}tj|j|}t|j|t||jtj|j|}| tj || tj |j|dSr) r r,r-rrrrrirrrNr)ryrrcZ final_linkrrrtest_move_file_symlink_to_dirsz&TestMove.test_move_file_symlink_to_dircCsztj|jd}tj|jd}t||tj|jd}t|||tj || tj |tj |dSNrKrJrL) r r,r-rrrrrirrNrrealpathryrbrcr rrrtest_move_dangling_symlink%s  z#TestMove.test_move_dangling_symlinkcCs|tj|jd}tj|jd}t|t||tj|jd}t||| tj || tj ||dSr) r r,r-rrrrrrirrNrrrrrtest_move_dir_symlink0s   zTestMove.test_move_dir_symlinkc Cs6t|j|j}||tj|jtj|jdSr) rrirrrr r,r-rr<rrrtest_move_return_value<szTestMove.test_move_return_valuecCs6t|jtj|jd}||tj|jddSr)rrirr r,r-rrr<rrr test_move_as_rename_return_valueAsz)TestMove.test_move_as_rename_return_valuecs8gfdd}tj|j|j|d|tddS)Ncs||fdSrrr5Zmovedrrr7Hsz7TestMove.test_move_file_special_function.._copyr)ri)rrirrrrryr7rrrtest_move_file_special_functionEs z(TestMove.test_move_file_special_functioncsdgfdd}ttj|jdttj|jdtj|j|j|d| t ddS)Ncs||fdSrrr5rrrr7Psz6TestMove.test_move_dir_special_function.._copychildZchild1r)r) rrr r,r-rrrirrrrrrrtest_move_dir_special_functionMs  z'TestMove.test_move_dir_special_functionc Cs~||_tjtj|jtj|j}||j|z.t |j|| tj |Wt |n t |0dSr)rvrr r,r-rrupperrNrrirrMrrurrrtest_move_dir_caseinsensitiveWs  z&TestMove.test_move_dir_caseinsensitiverrr SF_IMMUTABLE UF_OPAQUErc Cs0ztttttj|ttj tt | t t vtttj ttjtdtttj|ttj tt | t t vWtjtrtttj tttjt rtt tj tt nNtjtrtttj tttjt r*tt tj tt 0dS)Nr)r r TESTFN_SRCrrrrr"rri TESTFN_DSTrrLrrrr,r-rrxrrrrtest_move_dir_permission_deniedhs,      z(TestMove.test_move_dir_permission_deniedN)+r{r|r}r:rlrmrnrorprrr'rsrtrvrwrxryr{rrr r,r|r}r~rrrrrrrrrrrrrrrZrrrrrrrrgsh              rgc@s`eZdZGdddeZddZeedddZ eeddd Z eedd d Z d S) TestCopyFilec@s:eZdZdZdZdZd ddZddZdd Zd d Z dS) zTestCopyFile.FauxFNTcCs||_||_dSr)_raise_in_exit_suppress_at_exit)ryZ raise_in_exitZsuppress_at_exitrrr__init__szTestCopyFile.Faux.__init__cGsdS)Nrr)ryrrrrrHszTestCopyFile.Faux.readcCs d|_dS)NT)_enteredrrrr __enter__szTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td|jS)NT Cannot close) _exited_withr_raisedrr)ryexc_typeexc_valexc_tbrrr__exit__s  zTestCopyFile.Faux.__exit__)FT) r{r|r}rrrrrHrrrrrrFauxs rc Csrddd}ttd|F|ttddWdn1sF0YWdn1sd0YdS)NrGcSs|dkrtddS)NsrcfilezCannot open "srcfile"rlrrDrrr_opensz4TestCopyFile.test_w_source_open_fails.._openr.rdestfile)rG)rrWrrrrryrrrrtest_w_source_open_failss  z%TestCopyFile.test_w_source_open_failszskipped on macOScs|d fdd }ttd|tddWdn1sF0Y|j|jdtu| jdj d dS) NrGcs |dkr S|dkrtddS)NrrCannot open "destfile"rlrrrrrs z2TestCopyFile.test_w_dest_open_fails.._openr.rrrri)r)rG) rrrWrrrrrrrrrrrrtest_w_dest_open_failss* z#TestCopyFile.test_w_dest_open_failscs||dd fdd }ttd|tddWdn1sR0Y|j|j|j|jdt u| jd j d dS) NTrGcs|dkr S|dkrSdSNrrrrrrrrrs z3TestCopyFile.test_w_dest_close_fails.._openr.rrrri)r)rG) rrrWrrrrrrrrrrrrrtest_w_dest_close_failss *   z$TestCopyFile.test_w_dest_close_failsc s|d|d fdd }ttd|F|ttddWdn1s^0YWdn1s|0Y|j|j| j |j ddu|j dS) NTrGcs|dkr S|dkrSdSrrrrrrrs z5TestCopyFile.test_w_source_close_fails.._openr.rrr)rG) rrrWrrrrrrrrrrrrrtest_w_source_close_failss  H   z&TestCopyFile.test_w_source_close_failsN) r{r|r}objectrrrrrrrrrrrrrs     rc@sxeZdZdZeddZeddZddZej dd Z d d Z d d Z ddZ ddZeejdkdddZdS)TestCopyFileObji cCstt|jdSr)rErFILESIZEclsrrr setUpClassszTestCopyFileObj.setUpClasscCsttttdSr)rr_rr0rrrr tearDownClasss zTestCopyFileObj.tearDownClasscCsttdSrrr_r0rrrrtearDownszTestCopyFileObj.tearDownc csbttdD}ttd}||fVWdn1s60YWdn1sT0YdSNrFr(r.rr0rrrr get_filess  zTestCopyFileObj.get_filesc Cslt|dN}t|d$}|||Wdn1s@0YWdn1s^0YdSrh)r.rrH)ryrbrcfsrcfdstrrrassert_files_eqs  zTestCopyFileObj.assert_files_eqcCsH| \}}t||Wdn1s.0Y|ttdSr)rr copyfileobjrrr0rrrr test_content s*zTestCopyFileObj.test_contentcCs<| \}}t||Wdn1s.0YdSr)rrrrrrrtest_file_not_closed s z$TestCopyFileObj.test_file_not_closedcCs`|D\}}t|||||j|||jWdn1sR0YdSr)rrrrtellrrrrrtest_file_offset s z TestCopyFileObj.test_file_offsetrz Windows onlycCs~tjd}tttWdn1s.0Y||jdddt j t dd}| dWdn1s0Y|j}|tj|tjd}t|tWdn1s0Y||jdddt j t dd}Wdn1s0Y|j}|tj|tjd}t|tWdn1sd0Y||tdS) Nzshutil._copyfileobj_readintorrYiFrVsfoor)rrGrHrrrr0r call_argsr[r\r r]r/rRrwrr_r)rymrDrsrrr test_win_impl s"*(* ,zTestCopyFileObj.test_win_implN)r{r|r}r classmethodrrr contextlibcontextmanagerrrrrrrrr rRrrrrrrs   rc@seZdZdZdZdZeddZeddZdd Z e j d d Z d d Z ddZddZddZddZddZddZddZddZdS)_ZeroCopyFileTestir6rcCsDtt|jttd}||_Wdn1s60YdSrh)rErrr.rHFILEDATA)rrDrrrr7 s   z_ZeroCopyFileTest.setUpClasscCsttdSr)rr_rrrrrr> sz_ZeroCopyFileTest.tearDownClasscCsttdSrrrrrrrB sz_ZeroCopyFileTest.tearDownc csbttdD}ttd}||fVWdn1s60YWdn1sT0YdSrrrrrrrE s  z_ZeroCopyFileTest.get_filescOs tddS)Nzmust be implemented in subclass)NotImplementedError)ryrrrrr zerocopy_funK sz_ZeroCopyFileTest.zerocopy_funcCs$||||dSr)rrrr:rrrrresetN sz_ZeroCopyFileTest.resetc Cs| \}}|||Wdn1s.0Y|ttdd|j|L\}}tjd}t t tWdn1s0YWdn1s0YdS)NTr0zshutil.copyfileobj) rrrrIr0rrrGrHrrr)ryrbrcrrrrtest_regular_copyV s**z#_ZeroCopyFileTest.test_regular_copyc Cs||j|J\}}|t|||Wdn1sF0YWdn1sd0Y|ttdd|j dS)NTr) rwrrrrrrrIrrrrrrtest_same_file` s   Hz _ZeroCopyFileTest.test_same_filecCsZtjtd}|t}t|dWdn1s<0Y||j j |dS)Nrnew) r[rr r]rrrrrrr)ryrRrrrrtest_non_existent_srch s *z'_ZeroCopyFileTest.test_non_existent_srcc stdtd|fdd|fddtdWdn1sT0YtdF}td}|||Wdn1s0YWdn1s0Y|tdd d dS) Nrbrccs tSrrr_r)r`rrrq r6z3_ZeroCopyFileTest.test_empty_file..cs tSrrr)rarrrr r6r(rFTrr6)rrwr.rrrIrr)rar`rtest_empty_filen s   Hz!_ZeroCopyFileTest.test_empty_filecCsHtjj|jtd"|ttjtt Wdn1s:0YdS)Nr#) rrGrH PATCHPOINTZeroDivisionErrorrrrrr0rrrrtest_unhandled_exception| s  z*_ZeroCopyFileTest.test_unhandled_exceptionc Cstjj|jttjddr|J\}}|t | ||Wdn1sV0YWdn1st0YWdn1s0YdSNyor) rrGrHrrrEINVALrrr rrrrrtest_exception_on_first_call s    z._ZeroCopyFileTest.test_exception_on_first_callc Cs|tjj|jttjddN|&\}}|t|j ||Wdn1sP0YWdn1sn0YdSr) rrGrHrrrENOSPCrrrrrrrtest_filesystem_full s   z&_ZeroCopyFileTest.test_filesystem_fullN)r{r|r}rrrrrrrrrrrrrrrrrrrrrrrr1 s&     rzos.sendfile() not supportedc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)TestZeroCopySendfile os.sendfilecCs t||Sr)r_fastcopy_sendfile)ryrrrrrr sz!TestZeroCopySendfile.zerocopy_func Cst|j|}ttdR}|t|||Wdn1sF0Yt ||Wdn1sp0YWdn1s0Y| t tdd|jdS)Nr(Tr) ioBytesIOrr.r0rr rrrrrIrrrrtest_non_regular_file_src s   *Hz.TestZeroCopySendfile.test_non_regular_file_srcc Csttd}tn}|t|||Wdn1sB0Yt||| d| | |j Wdn1s0YWdn1s0YdS)NrFr) r.rrrrr rrrseekrrHrrrrrtest_non_regular_file_dst s   *  z.TestZeroCopySendfile.test_non_regular_file_dstc sfdd}gtjtjjdd|dr|J\}}|t}t ||Wdn1sf0YWdn1s0YWdn1s0Y| |j j t j dS)Ncs,sd|i|SttjddS)Nr)rOrrEBADFrr'Z orig_sendfilerrrU s zDTestZeroCopySendfile.test_exception_on_second_call..sendfilerT)rUr#)r rUrrGrHrrrrrrrrr)ryrUrbrcrrrrtest_exception_on_second_call s  fz2TestZeroCopySendfile.test_exception_on_second_callc CstjjdtdH}| \}}t||Wdn1s@0YWdn1s^0Y|tt dd|j dS)Nos.fstatrTr) rrGrHrrrrrrIr0rryrrbrcrrrtest_cant_get_size s  <z'TestZeroCopySendfile.test_cant_get_sizec Cstj}d|_tjjd|dH}| \}}t||Wdn1sP0YWdn1sn0Y|t t dd|j dS)NirrTTr) rrGMockst_sizerHrrrrrIr0rryrGrrbrcrrrtest_small_chunks s  <z&TestZeroCopySendfile.test_small_chunksc Cstj}|jd|_tjjd|dH}| \}}t||Wdn1sV0YWdn1st0Y| t t dd|j dS)Ni@rrTr) rrGrrrrHrrrrrIr0rrrrrtest_big_chunk s   <z#TestZeroCopySendfile.test_big_chunkcCstjjdtd}|ttjtt|j dd}| |t j tttttddd|tjtd|ttjttd|j dd}| |d Wdn1s0YdS) NrrrrshelloTr3i)rrGrHrrrrrr0rrr r,getsizerr_r2rw)ryr blocksizerrrtest_blocksize_arg s"  z'TestZeroCopySendfile.test_blocksize_argc Csztjj|jttjddr}|J\}}|t t ||Wdn1sX0YWdn1sv0YWdn1s0Ytj|j}t t tWdn1s0YWdt _ndt _0dS)NrrT)rrGrHrrrENOTSOCKrrr rrrrr0_USE_CP_SENDFILErrrrtest_file2file_not_supported s  H  z1TestZeroCopySendfile.test_file2file_not_supportedN) r{r|r}rrrrrrrrrrrrrrr s     rz macOS onlyc@seZdZdZddZdS)TestZeroCopyMACOSzposix._fcopyfilecCst||tjSr)r_fastcopy_fcopyfileposix_COPYFILE_DATArrrrr szTestZeroCopyMACOS.zerocopy_funN)r{r|r}rrrrrrr src@s^eZdZddZddZddZee e j dee edd d d Zd d ZdS)TestGetTerminalSizecCs(t}||jd||jddS)Nr)rget_terminal_sizer columnslines)ryrArrrtest_does_not_crash sz'TestGetTerminalSize.test_does_not_crashcCst&}d|d<|d=t}Wdn1s40Y||jdt&}|d=d|d<t}Wdn1s0Y||jddS)NZ777COLUMNSLINESi Z888ix)rrNrrrrr ryrPrArrrtest_os_environ_first s & &z)TestGetTerminalSize.test_os_environ_firstcCs`t(}d|d<d|d<t}Wdn1s60Y||jd||jddS)Nrfr Zyyyr r)rrNrrr rr r rrrtest_bad_environ. s  &z$TestGetTerminalSize.test_bad_environz not on ttyrzneed os.get_terminal_size()c Csztddg}Wn$tttjfy>|dYn0t|dt|df}t $}|d=|d=t }Wdn1s0Y| ||dS)NZsttyrAzstty invocation failedrirr r )rnrrrqrr"rr/rrrrNrrr)ryrArrPrrrrtest_stty_match6 s   &z#TestGetTerminalSize.test_stty_matchc Cst}|d=|d=ttddtjdd}Wdn1sF0Y||jd||jdt t j dJ}ttd|tjd d}Wdn1s0YWdn1s0Y||jd ||jd Wdn1s0YdS) Nr r  __stdout__) )fallbackrrr))(rr) rrNrWrlrrrrr r.r devnull)ryrPrArDrrr test_fallbackN s * Hz!TestGetTerminalSize.test_fallbackN)r{r|r}r rrrrr isattyrlrr^rZrrrrrrr s   rc@seZdZddZdS)PublicAPITestscCsP|ttdgd}ttds,tjdkr6|d|ttjt|dS)N__all__)rrrOr\rrrrirxrr ExecErrorrrrrr rr rrr#rrr statvfsrr) rrZrr rRrOrrr)ryZ target_apirrrtest_module_all_attributee s  z(PublicAPITests.test_module_all_attributeN)r{r|r}rrrrrrb sr__main__)F)F)PrZ unittest.mockrr[rlrr Zos.pathrr%rrnr7r9rrrrrrrrrr r r r r rrr ImportErrorrrZ test.supportrrrr0rrrrrrrkrrrrrr'r2rErIrPrfZSUPPORTS_SENDFILErsrtZTestCaser~rrIrrr0rfrgrrrrrrrrrr{mainrrrrs8                [tP< s\Jd v N