a 5êdg—ã@s<ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZz ddlZWneyêdZYn0ddl m!Z!ddl"m#Z#m$Z$e#dZ%e#dZ&e#dZ'ej( )d¡Z*ej(dd …d kZ+zddl,Z,ddl-Z-d Z.Wneynd Z.Yn0z ddl/Z/Wney”dZ/Yn0d d„Z0dd„Z1d@dd„Z2dd„Z3dAdd„Z4dd„Z5dd„Z6e6ƒZ7dd„Z8Gdd„dƒZ9Gdd „d e9ej:ƒZ;Gd!d"„d"e9ej:ƒZGd'd(„d(e9ej:ƒZ?Gd)d*„d*e9ej:ƒZ@Gd+d,„d,e@ƒZAGd-d.„d.e9ej:ƒZBGd/d0„d0ej:ƒZCGd1d2„d2ej:ƒZDGd3d4„d4eEƒZFe Ge7 d5¡Gd6d7„d7eFej:ƒƒZHe Ge* d8¡Gd9d:„d:eFej:ƒƒZIGd;d<„d„d>ej:ƒZKeLd?kr8e M¡dS)BéN) Ú make_archiveÚregister_archive_formatÚunregister_archive_formatÚget_archive_formatsÚErrorÚunpack_archiveÚregister_unpack_formatÚ RegistryErrorÚunregister_unpack_formatÚget_unpack_formatsÚ SameFileErrorÚ_GiveupOnFastCopy)Úsupport)ÚTESTFNÚFakePathÚ2Z_SRCZ_DSTÚdarwinéZaixTFcOstttddƒdƒ‚dS)NZEXDEVézInvalid cross-device link)ÚOSErrorÚgetattrÚerrno©ÚargsÚkwargs©rú,/usr/local/lib/python3.9/test/test_shutil.pyÚ _fake_rename4srcst ˆ¡‡fdd„ƒ}|S)Ncs0z"tj}tt_ˆ|i|¤ŽW|t_S|t_0dS©N)ÚosÚrenamer)rrZbuiltin_rename©ÚfuncrrÚwrap9sþzmock_rename..wrap)Ú functoolsÚwraps)r"r#rr!rÚ mock_rename8sr&cCsVt|tƒrtjj|Ž}t||r"dndƒ}| |¡Wdƒn1sH0YdS)NÚwbÚw)Ú isinstanceÚtuplerÚpathÚjoinÚopenÚwrite)r+ZcontentÚbinaryÚfprrrÚ write_fileCs  r1cCsrdd„}t|dƒ}d dd„t|ƒDƒ¡}t|dƒ*}|||ƒD]}| |¡q@Wdƒn1sd0YdS)Ncss&||kr|V||8}q|r"|VdSrr)ÚtotalÚsteprrrÚchunksQs  zwrite_test_file..chunksi ócSsg|]}t tj¡ ¡‘qSr)ÚrandomÚchoiceÚstringÚ ascii_lettersÚencode)Ú.0ÚirrrÚ Zsÿz#write_test_file..r')Úminr,Úranger-r.)r+Úsizer4ÚbufsizeÚchunkÚfZcsizerrrÚwrite_test_fileOs  ÿ *rDcCsTt|tƒrtjj|Ž}t||r"dndƒ}| ¡WdƒS1sF0YdS)NÚrbÚr)r)r*rr+r,r-Úread)r+r/r0rrrÚ read_fileas  rHcCs|g}tt |¡ƒD]d}tj ||¡}tj |¡rltj |¡sl| |d¡t|ƒD]}| |d|¡qRq| |¡q|S)Nú/) ÚsortedrÚlistdirr+r,ÚisdirÚislinkÚappendÚrlistdir)r+ÚresÚnameÚpÚnrrrrOms  rOc CsâttdƒsdSd}d}zštjdt ¡dd }|j}| d¡Wdƒn1sT0Yt|dƒ }tjdt ¡ddÖ}|j}| ¡}| ¡}zt  ||dd¡WnTt yYWdƒWdƒW|durêt   |¡|durüt   |¡dS0WdƒWdƒW|dur0t   |¡|durDt   |¡d SWdƒn1s^0YWdƒn1s~0YW|duržt   |¡|durÞt   |¡n*|durÈt   |¡|durÜt   |¡0dS) NÚsendfileFr'©ÚdirÚdeletes 0123456789rEréT) ÚhasattrrÚtempfileÚNamedTemporaryFileÚgetcwdrQr.r-ÚfilenorTrrÚunlink)ÚsrcnameÚdstnamerCÚsrcÚdstÚinfdÚoutfdrrrÚsupports_file2file_sendfileysH (  ù    ûF    ý   recCsJtrBtjdkrBt dtj¡}| d¡d ¡d}t|dƒdkSdSdS) Niÿÿÿz/usr/bin/dump -o %sÚ éÿÿÿÿééi T)ÚAIXÚsysÚmaxsizeÚ subprocessÚ getoutputÚ executableÚsplitÚint)ZhdrsZmaxdatarrrÚ _maxdataOKœs rrc@seZdZddd„ZdS)ÚBaseTestNcCs$tj|t ¡d}| tj|¡|S)N)ÚprefixrV)rZÚmkdtemprr\Ú addCleanuprÚrmtree)ÚselfrtÚdrrrru§szBaseTest.mkdtemp)N)Ú__name__Ú __module__Ú __qualname__rurrrrrs¥srsc@sâeZdZdd„Zejdd„ƒZejdd„ƒZe  e d¡dd „ƒZ e  e d¡d d „ƒZ d d „Z e ejdd…dkd¡e eedƒoŒe ¡dkd¡dd„ƒƒZdd„Zdd„Zdd„Zdd„Zejdd „ƒZe  e d¡d!d"„ƒZdS)#Ú TestRmTreecCsX| ¡}tj |d¡}t |¡ttj |d¡dƒt |¡}| |t¡t   |¡dS)NZkillmeZsomefileÚfoo) rurr+r,Úmkdirr1ÚfsencodeÚassertIsInstanceÚbytesÚshutilrw)rxÚtmpZvictimrrrÚtest_rmtree_works_on_bytes³s   z%TestRmTree.test_rmtree_works_on_bytescsä| ¡}tj |d¡}t |¡tj |d¡}t ||¡| ttj |¡|  tj  |¡¡|  tj  |¡¡g‰‡fdd„}tj ||d|  tˆƒd¡| ˆddtjj¡|  ˆdd|¡| ˆdddt¡dS) NrVÚlinkcsˆ |¡dSr©rN©r©ÚerrorsrrÚonerrorÇsz8TestRmTree.test_rmtree_fails_on_symlink..onerror©r‹rhrrX)rurr+r,rÚsymlinkÚ assertRaisesrrƒrwÚ assertTrueÚexistsÚlexistsÚ assertEqualÚlenÚassertIsrMr©rxr„Zdir_r†r‹rr‰rÚtest_rmtree_fails_on_symlink¼s   z'TestRmTree.test_rmtree_fails_on_symlinkc Csö| ¡}tj |d¡}tj |d¡}tj |d¡}|||fD]}t |¡q.onerrorrŒrhrrX)rurr+r,rÚ_winapiÚCreateJunctionrvrr^rŽrrƒrwrrr‘r’r“r”rMrr•rr‰rÚtest_rmtree_fails_on_junctionsås    z)TestRmTree.test_rmtree_fails_on_junctionsc Csö| ¡}tj |d¡}tj |d¡}tj |d¡}|||fD]}t |¡q.onerrorrŒrXrrh)rZÚmktemprurŽÚFileNotFoundErrorrƒrwr1rr+r,ÚNotADirectoryErrorÚassertInÚ exceptionÚfilenamerrr’r“r”ÚscandirrÚrmdir)rxr¯ÚtmpdirÚcmZ possible_argsr‹rr‰rÚtest_rmtree_errorss2 ( zTestRmTree.test_rmtree_errorsNéÚcygwinz2This test can't be run on Cygwin (issue #1071513).Úgeteuidrz9This test can't be run reliably as root (issue #1076467).cCs d|_t t¡| tjt¡tj td¡|_ tj td¡|_ t   |j ¡t |j ¡t  t¡j}t  |j ¡j}t  |j ¡j}t jt jB}t |j |¡t |j |¡t t|¡| tjt|¡| tj|j |¡| tj|j |¡tjt|jd| |jdd¡dS)NrÚaÚbrŒrz1Expected call to onerror function did not happen.)Ú errorStaterrrrvrƒrwr+r,Úchild_file_pathÚchild_dir_pathrÚcreate_empty_fileÚstatÚst_modeÚS_IREADÚS_IEXECÚchmodÚcheck_args_to_onerrorr’)rxZ old_dir_modeZold_child_file_modeZold_child_dir_modeZnew_moderrrÚ test_on_error3s*       ÿzTestRmTree.test_on_errorcCsº|jdkr‚|tjur$| ||j¡n:|tjur>| ||j¡n | |tj¡|  |t |jg¡|  t |dt ƒ¡|jd7_n4| |tj¡| |t ¡|  t |dt ƒ¡d|_dS)NrXrrhr)rºrr^r’r»r±r¼r”rKr­rrÚ issubclassr)rxr"ÚargÚexcrrrrÃRs    z TestRmTree.check_args_to_onerrorcsRzDtj‰‡fdd„}|t_t t¡ttdfdƒt t¡Wˆt_nˆt_0dS)Ncs|tkrtƒ‚nˆ|ƒSdSr)rr)Úfnrr©Z orig_lstatrrÚraiserpszFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat..raiserr~)rÚlstatrrr1rƒrw)rxrÊrrÉrÚ+test_rmtree_does_not_choke_on_failing_lstatms   z6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatcsÜtjtjtjtjhtjko0tjtjvo0tjtjv}|r¾|  t j ¡|  t j j ¡| ¡}tj |d¡}t |¡zBt j}Gdd„dtƒ‰‡fdd„}|t _| ˆt j |¡W|t _qØ|t _0n| t j ¡| t j j ¡dS)Nr¸c@s eZdZdS)zHTestRmTree.test_rmtree_uses_safe_fd_version_if_available..CalledN)rzr{r|rrrrÚCalledŠr5rÍcsˆ‚dSrrr©rÍrrÚ_raiser‹szITestRmTree.test_rmtree_uses_safe_fd_version_if_available.._raiser)rr-r¾r^r±Úsupports_dir_fdrKÚ supports_fdÚsupports_follow_symlinksrrƒÚ_use_fd_functionsrwÚavoids_symlink_attacksrur+r,rÚ_rmtree_safe_fdÚ ExceptionrŽrŸ)rxrÓÚtmp_dirryZ real_rmtreerÏrrÎrÚ-test_rmtree_uses_safe_fd_version_if_available}s,ÿ þ ý    z8TestRmTree.test_rmtree_uses_safe_fd_version_if_availablecCs<tj| ¡d\}}t |¡| ttj|¡t  |¡dS©Nr¦) rZÚmkstemprurÚcloserŽr¬rƒrwÚremove)rxÚhandler+rrrÚtest_rmtree_dont_delete_file•s z'TestRmTree.test_rmtree_dont_delete_filec Cs‚t t¡zbtj td¡}tj td¡}t |¡t ||¡| ttj |¡tj |ddWtj tddntj tdd0dS)NÚcheeseÚshopTr§) rrrr+r,rrŽrrƒrw©rxrarbrrrÚtest_rmtree_on_symlinkœs   z!TestRmTree.test_rmtree_on_symlinkc Csšt t¡zztj td¡}tj td¡}t |¡ttj |d¡dƒ ¡t ||¡|  t t j |¡t j |ddWt j tddnt j tdd0dS)NrßràZspamr'Tr§) rrrr+r,r-rÛr¢r£rŽrrƒrwrárrrÚtest_rmtree_on_junctionªs   z"TestRmTree.test_rmtree_on_junction)rzr{r|r…rÚskip_unless_symlinkr–r¡ÚunittestÚ skipUnlessr¢r¤r¥r´ÚskipIfrkÚplatformrYrr·rÄrÃrÌrØrÞrârãrrrrr}±s2       $ÿÿ  r}c@s²eZdZdd„Zdd„Zejdd„ƒZdd„Zd d „Z d d „Z e j   d ¡dd„ƒZdd„Ze  eedƒd¡ejdd„ƒƒZdd„Zejdd„ƒZejdd„ƒZdd„Zdd„Zd S)!Ú TestCopyTreec Cs| ¡}tj | ¡d¡}| tj|¡| tjtj |¡¡t|dfdƒt  tj |d¡¡t|ddfdƒt  ||¡|  tj  tj |d¡¡¡|  tj  tj |d¡¡¡|  tj  tj |dd¡¡¡t|dfƒ}| |d¡t|ddfƒ}| |d¡dS)NÚ destinationútest.txtÚ123Útest_dirÚ456)rurr+r,rvrƒrwÚdirnamer1rÚcopytreerÚisfilerLrHr’©rxÚsrc_dirÚdst_dirÚactualrrrÚtest_copytree_simple»s" ÿ  z!TestCopyTree.test_copytree_simplec CsZ| ¡}| ¡}| tj|¡| tj|¡t|dfdƒt tj |d¡¡t tj |d¡¡t|ddfdƒt|ddfdƒtj ||dd|  tj  tj |d¡¡¡|  tj  tj |d¡¡¡|  tj  tj |dd¡¡¡t |dfƒ}| |d¡t |ddfƒ}| |d¡| t¡ tj ||d dWdƒn1sL0YdS) Nznonexisting.txtrìZ existing_dirz existing.txtzwill be replacedzhas been replacedT)Ú dirs_exist_okF)rurvrƒrwr1rrr+r,rðrrñrLrHr’rŽÚFileExistsErrorròrrrÚtest_copytree_dirs_exist_okÎs*ÿ    z(TestCopyTree.test_copytree_dirs_exist_okc Cs”| ¡}tj |d¡}tj |d¡}tj |d¡}t |¡t |¡t|dfdƒtj |d¡}tj |d¡}t tj |d¡|¡ttdƒr¤t |t j t j B¡ttd ƒrÆtt d ƒrÆt  |t j ¡t |¡}tj||d d | tj tj |dd¡¡¡t tj |dd¡¡}tjd kr8| d¡r8|dd…}| |tj |d¡¡t |¡} ttdƒrt| | j|j¡ttd ƒr| | j|j¡dS)NrarbÚsubzfile.txtr~r†zsub/linkÚlchmodÚlchflagsÚ UF_NODUMPT©ÚsymlinksÚntz\\?\é)rurr+r,rr1rrYrûr¾ÚS_IRWXUÚS_IRWXOrürýrËrƒrðrrMÚreadlinkrQÚ startswithr’r¿Úst_flags) rxr×rórôZsub_dirÚsrc_linkÚdst_linkÚsrc_statrõÚdst_statrrrÚtest_copytree_symlinksçs8  ÿ      z#TestCopyTree.test_copytree_symlinksc Cs^tjj}tjj}| ¡}z || ¡dƒ}t|dfdƒt|dfdƒt ||dƒ¡t|ddfdƒt ||dƒ¡t|ddfdƒt ||ddƒ¡t ||dd ƒ¡t|dddfdƒt|dd d fdƒzft d d¡}tj |||d |  |||dƒƒ¡|  |||dƒƒ¡|  |||dƒƒ¡Wt  |¡n t  |¡0zjt d d ¡}tj |||d |  |||dƒƒ¡|  |||dd ƒƒ¡|  |||ddƒƒ¡Wt  |¡n t  |¡0zTdd„}tj |||d |  |||dd d ƒƒ¡|  |||ddƒƒ¡Wt  |¡n t  |¡0Wt  |¡t  tj  |¡¡nt  |¡t  tj  |¡¡0dS)Nrêrërìztest.tmprírîZ test_dir2ÚsubdirZsubdir2ztest.pyz*.tmp©Úignorezsubdir*cSsfg}|D]X}tj ||¡}tj |¡rB| ¡ddkrB| |¡qtj |¡ddvr| |¡q|S)Nrgr z.py)rr+r,rLrprNÚsplitext)raÚnamesrPrQr+rrrÚ_filter/s ÿ  z8TestCopyTree.test_copytree_with_exclude.._filter)rr+r,rrur1rrƒÚignore_patternsrðrrŸrwrï)rxr,rrórôÚpatternsrrrrÚtest_copytree_with_excludesR   ÿ ÿ z'TestCopyTree.test_copytree_with_excludecsVtjj}tjj}ˆ ¡}||dƒ}t ||ƒ¡t ||dƒ¡t tj |dd¡¡t|dddfdƒg‰‡‡fdd„}|ˆ ¡dƒ}tj|||d ˆ  |||dddƒƒ¡|ˆ ¡dƒ}tjt   |¡||d ˆ  |||dddƒƒ¡|ˆ ¡dƒ}t t  |¡ƒd }ˆ |tj¡tj|||d ˆ  |||dddƒƒ¡ˆ tˆƒd ¡dS) NÚsourcerír rërîcsTˆ |¡ˆ |t¡ˆ |t¡ˆ t|ƒtt|ƒƒ¡|D]}ˆ |t¡q>gSr)rNrÚstrÚlistr’r“Úset)rarrQ©Z invokationsrxrrÚ_ignoreVs   z?TestCopyTree.test_copytree_arg_types_of_ignore.._ignorerêr ré )rr+r,rrurr1rƒrðrÚpathlibÚPathrr°rÚDirEntryr’r“)rxr,rr×rórrôZ src_dir_entryrrrÚ!test_copytree_arg_types_of_ignoreHs8  ÿÿÿz.TestCopyTree.test_copytree_arg_types_of_ignorec Csx| ¡}tj |d¡}t |¡tj |d¡}| tj|¡t |d¡t |dfdƒt tj |d¡d¡t |dfdƒt tj |d¡d¡t j|d }| t j|¡t |d¡t  ||¡|  t |¡jt |¡j¡|  t tj |d¡¡jt tj |d¡¡j¡|  t tj |d¡¡jt tj |d¡¡j¡tj |tj |¡d ¡}|  t |¡jt |¡j¡dS) Nrrêiÿzpermissive.txtrìzrestrictive.txtrîi€r¦rh)rurr+r,rrvrƒrwrÂr1rZrrðr’r¾r¿rp)rxr×rórôZrestrictive_subdirZrestrictive_subdir_dstrrrÚ!test_copytree_retains_permissionsrs6     ÿÿÿ ÿz.TestCopyTree.test_copytree_retains_permissionszos.chmodcCs„| ¡}tj | ¡d¡}| tj|¡| tjtj |¡¡tdƒ|_ |  tj ¡t  ||¡Wdƒn1sv0YdS)Nrêzka-boom) rurr+r,rvrƒrwrïÚPermissionErrorÚ side_effectrŽrrð)rxZ mock_patchrórôrrrÚtest_copytree_winerrors z#TestCopyTree.test_copytree_winerrorcsއ‡‡‡fdd„}g‰ˆ ¡‰tjˆ ¡d‰ttj ˆd¡dƒ}| ¡Wdƒn1s`0Ytj ˆˆ|dˆ  t ˆƒd¡dS)NcsRˆ d¡ˆ |t¡ˆ |t¡ˆ |tj ˆd¡¡ˆ |tj ˆd¡¡dS©Nr~)rNrrr’rr+r,)r¸r¹©rbÚflagrxrarrÚ custom_cpfuns    zETestCopyTree.test_copytree_custom_copy_function..custom_cpfunr¦r~r(©Ú copy_functionrh) rurZrªr-rr+r,rÛrƒrðr’r“)rxr'rCrr%rÚ"test_copytree_custom_copy_function›s&z/TestCopyTree.test_copytree_custom_copy_functionÚmkfifoúrequires os.mkfifo()c Cs2t t¡ztj td¡}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| d¡Wtjtdd tjt dd ntjtdd tjt dd 0dS) Nr Zmypipeúos.mkfifo(): %srrhz`%s` is a named pipez$shutil.Error should have been raisedTr§)rrrr+r,r+r!ÚskipTestrƒrðÚTESTFN2rrr’r“Úfailrw)rxr ÚpipeÚerŠrarbZ error_msgrrrÚtest_copytree_named_pipe­s*  $ & ÿz%TestCopyTree.test_copytree_named_pipecs€| ¡}tj | ¡d¡}t|dfdƒt tj |d¡¡t|ddfdƒg‰‡fdd„}tj|||d| t ˆƒd ¡dS) Nrêrërìrírîcsˆ ||f¡dSrr‡©rarb©ZcopiedrrÚ_copyÎsz6TestCopyTree.test_copytree_special_func.._copyr(rX) rurr+r,r1rrƒrðr’r“)rxrórôr6rr5rÚtest_copytree_special_funcÆs z'TestCopyTree.test_copytree_special_funccCsÒ| ¡}tj | ¡d¡}t dtj |d¡¡t tj |d¡¡t|ddfdƒ| tt j ||¡tj | ¡d¡}t j ||dd|  dt  |¡¡tj | ¡d ¡}t j ||dd |  dt  |¡¡dS) NrêZ IDONTEXISTrërírîÚ destination2T)Úignore_dangling_symlinksZ destination3rþ)rurr+r,rrr1rŽrrƒrðÚ assertNotInrKr­©rxrórôrrrÚtest_copytree_dangling_symlinksÔsz,TestCopyTree.test_copytree_dangling_symlinksc Cs.| ¡}tj | ¡d¡}t tj |d¡¡ttj |dd¡dƒWdƒn1sZ0Ytjtj |d¡tj |d¡ddtj||dd |  tj  tj |d¡¡¡|  dt  tj |d¡¡¡tj | ¡d ¡}tj||dd |  tj  tj |d¡¡¡|  dt  tj |d¡¡¡dS) NrêZreal_dirrër(Z link_to_dirT)Útarget_is_directoryFrþr8)rurr+r,rr-rrƒrðrŸrMr­rKrr;rrrÚtest_copytree_symlink_dirès  þz&TestCopyTree.test_copytree_symlink_dircCs\| ¡}|d}| tj|d¡tj |d¡}t|dƒt ||¡}|  dgt  |¡¡dS)NÚdestTr~) rurvrƒrwrr+r,r1rðr’rK)rxrórôraÚrvrrrÚtest_copytree_return_valueüs  z'TestCopyTree.test_copytree_return_valuecCs€| ¡}|jtj|ddtj |dd¡}tj |dd¡}t |¡tj |d¡}t|dƒt  ||¡}|  dgt  |¡¡dS)NTr§ÚtZpgZ somevendorz1.0Zpol) rurvrƒrwrr+r,Úmakedirsr1rðr’rK)rxÚbase_dirrórôrar@rrrÚtest_copytree_subdirectorys   z'TestCopyTree.test_copytree_subdirectoryN)rzr{r|rörùrrär rrr råÚmockÚpatchr#r*rærYrr3r7r<r>rArErrrrré¹s( A*      réc@s’eZdZejdd„ƒZe ee dƒd¡ejdd„ƒƒZ e  ee dƒd¡ejdd „ƒƒZ ejd d „ƒZ e ee d ƒo„eed ƒo„eedƒd¡dd„ƒZejdd„ƒZejeje ee dƒoÀe  ¡dkd¡dd„ƒƒƒZdd„Zdd„Zejdd„ƒZe ee dƒd ¡d!d"„ƒZejd#d$„ƒZejd%d&„ƒZd'd(„Zejd)d*„ƒZe ee d+ƒd,¡d-d.„ƒZejd/d0„ƒZe ee d1ƒd2¡d3d4„ƒZd5d6„Zd7d8„Z d9S):ÚTestCopycCs„| ¡}tj |d¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt|dƒt ||¡t ||¡t |tjtj B¡t |tj ¡|  t |¡j t |¡j ¡t  ||¡| t |¡j t |¡j ¡tjdkr€t |tj ¡t  ||¡| t |¡j t |¡j ¡t |tj ¡t  ||¡| t |¡j t |¡j ¡t |tj ¡t  ||¡| t |¡j t |¡j ¡dS)Nr~ÚbarÚbazÚquuxr)rurr+r,r1rrÂr¾rÚS_IRWXGrÚassertNotEqualr¿rƒÚcopymoder’rQ©rxr×rarbrrrrrÚtest_copymode_follow_symlinkss0         z&TestCopy.test_copymode_follow_symlinksrûzrequires os.lchmodcCsp| ¡}tj |d¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt|dƒt ||¡t ||¡t |tjtj B¡t |tj¡t  |tj tj B¡t  |tj ¡t j ||dd| t |¡jt |¡j¡| t |¡jt |¡j¡t  |tj ¡t j ||dd| t |¡jt |¡j¡t  |tj ¡t j ||dd| t |¡jt |¡j¡dS©Nr~rIrJrKF©Úfollow_symlinks)rurr+r,r1rrÂr¾rrLrûrrƒrNr’rËr¿rMrOrrrÚ test_copymode_symlink_to_symlink6s0     ÿz)TestCopy.test_copymode_symlink_to_symlinkz requires os.lchmod to be missingcCs€| ¡}tj |d¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt|dƒt ||¡t ||¡tj||dddSrQ)rurr+r,r1rrƒrNrOrrrÚ*test_copymode_symlink_to_symlink_wo_lchmodTs    z3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodc Csî| ¡}tj |d¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt |¡}t ||j|jdf¡t|dƒ|  t |¡jt |¡j¡t  ||¡t  ||¡t tdƒrÂt  |tj ¡t tdƒrät tdƒrät |tj¡t |¡}t tdƒr tj||d d |  |jt |¡j¡tj||d d t |¡}tjtjvrpd D]"} | t|| ƒt|| ƒd ¡qLt tdƒrŒ| |j|j¡t tdƒr´t |dƒr´| |j|j¡tj||d d | tt |¡jt |¡jƒdk¡dS)Nr~rIrJÚquxgE@rûrürýTrRF©Úst_atimeÚst_mtimerhrgš™™™™™¹?)rurr+r,r1r¾ÚutimerXrYrMrrYrûrrürýrËrƒÚcopystatr¿rÒÚassertLessEqualrr’rrÚabs) rxr×rarbrrr Ú src_link_statZ dst_link_statÚattrrrrÚtest_copystat_symlinksdsJ   ÿ         ÿ ÿzTestCopy.test_copystat_symlinksÚchflagsÚ EOPNOTSUPPÚENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCsª| ¡}tj |d¡}tj |d¡}t|dƒt|dƒdd„}tj}zVtjtjfD]}||ƒt_t   ||¡qT|tjtjƒt_|  t t j ||¡W|t_n|t_0dS)Nr›Úfile2Úxxxcstƒ‰ddœ‡‡fdd„ }|S)NTrRcsˆˆ_ˆ‚dSr)r)r+ÚflagsrS©ÚerrÚexrrÚ_chflags_raiser›szlTestCopy.test_copystat_handles_harmless_chflags_errors..make_chflags_raiser.._chflags_raiser©r)rhrjrrgrÚmake_chflags_raiser˜szSTestCopy.test_copystat_handles_harmless_chflags_errors..make_chflags_raiser) rurr+r,r1rarrbrcrƒr[rŽr)rxr²r›rdrlZ old_chflagsrhrrrÚ-test_copystat_handles_harmless_chflags_errorss   z6TestCopy.test_copystat_handles_harmless_chflags_errorscs | ¡}tj |d¡‰tˆdƒtj |d¡}t|dƒt ˆ|¡t ˆdd¡t ˆdd¡t ˆ|¡| t t  ˆ¡ƒt t  |¡ƒ¡| t  ˆd¡t  |d¡¡t  |¡t|dƒt tjdƒ‰‡‡fdd „}z4tj‰|t_t ˆ|¡| dt  |¡¡Wˆt_nˆt_0d d œ‡‡fd d „ }z"tj ‰|t_ t ˆ|¡Wˆt_ nˆt_ 0tj |d¡‰tj |d¡}tˆˆƒt||ƒt ˆdd¡t |dd¡t |d¡tj |d¡}tj |d¡}t||ƒt||ƒt ˆ|¡t ||¡| t  |d¡d¡| t  |d¡d¡dS)Nr~rIúuser.fooó42zuser.baró43ÚEPERMcs&|dkrˆ‚nˆ|||fi|¤ŽdS)Nrnr)Úfnamer_Úvalr)Ú orig_setxattrÚos_errorrrÚ_raise_on_user_fooÃsz3TestCopy.test_copyxattr.._raise_on_user_fooTrRcs |ˆkrttjdƒ‚ˆ||dS)NzOperation not supportedrR)rrrc)rrrS)Úorig_listxattrrarrÚ _raise_on_srcÐs z.TestCopy.test_copyxattr.._raise_on_srcZ the_originalZthe_original_rozuser.the_valuesfiddlyi$Zthe_copyZ the_copy_ro)rurr+r,r1rƒÚ _copyxattrÚsetxattrr’rJÚ listxattrÚgetxattrrÜrrrqr­rÂr[)rxr×rbrvrxZsrcroZdstror)rwrtrurarÚtest_copyxattr¬sZ       þ           zTestCopy.test_copyxattrr·rúroot privileges requiredcCsî| ¡}tj |d¡}tj |d¡}t|dƒt ||¡t |dd¡tj|ddddtj |d¡}tj |d ¡}t|dƒt ||¡tj||dd|  tj |dddd¡|  t tj |d¡tj||dd|  t  |d¡d¡dS) Nr~rJz trusted.foororpFrRrIrV) rurr+r,r1rrzrƒryr’r|rŽr)rxr×rarrbrrrrÚtest_copyxattr_symlinksìs     z TestCopy.test_copyxattr_symlinkscCsPd}| ¡}t||fdƒtj ||¡}| ¡}|||ƒtj ||¡}||fS)Nrëre)rur1rr+r,)rxÚmethodrrr²r›Útmpdir2rdrrrÚ _copy_files zTestCopy._copy_filecCsB| tj¡\}}| tj |¡¡| t |¡j t |¡j ¡dSr) r‚rƒÚcopyrrr+rr’r¾r¿)rxr›rdrrrÚ test_copyszTestCopy.test_copycCs | ¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt ||¡ttdƒrft |tj tj B¡t j ||dd|  tj |¡¡| t|ƒt|ƒ¡t |¡t j ||dd| tj |¡¡| t |¡t |¡¡ttdƒr| t |¡jt |¡j¡dS)Nr~rIrJrûTrRF)rurr+r,r1rrYrûr¾rrrƒrƒrŸrMr’rHrÜrrrËr¿)rxr×rarbrrrrÚtest_copy_symlinkss&      ÿzTestCopy.test_copy_symlinksrZzrequires os.utimecCsœ| tj¡\}}| tj |¡¡t |¡}t |¡}| |j |j ¡dD] }|  t ||ƒt ||ƒd¡qJt tdƒr˜t |dƒr˜| t |dƒt |dƒ¡dS)NrWrhrar) r‚rƒÚcopy2rrr+rr¾r’r¿r\rrY)rxr›rdZ file1_statZ file2_statr_rrrÚ test_copy20s    ÿ ÿzTestCopy.test_copy2c Cs®| ¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt ||¡ttdƒrft |tj tj B¡ttdƒrˆttdƒrˆt  |tj ¡t |¡}t  |¡}tj||dd| tj |¡¡| t|ƒt|ƒ¡t |¡tj||d d| tj |¡¡| t |¡t |¡¡t  |¡}tjtjvrVd D]"}| t||ƒt||ƒd ¡q2ttdƒr‚| |j|j¡| |j|j¡ttdƒrªt|d ƒrª| |j|j¡dS) Nr~rIrJrûrürýTrRFrWrhr)rurr+r,r1rrYrûr¾rrrürýrËrƒr†rŸrMr’rHrÜrrrZrÒr\rr¿rMr) rxr×rarbrr r^r r_rrrÚtest_copy2_symlinksAs<         ÿ zTestCopy.test_copy2_symlinkscCsr| ¡}tj |d¡}tj |d¡}t|dƒt |dd¡t ||¡| t  |d¡t  |d¡¡t  |¡dS)Nr~rIrnro) rurr+r,r1rzrƒr†r’r|rÜ)rxr×rarbrrrÚtest_copy2_xattrds    þzTestCopy.test_copy2_xattrcCsˆtjtjfD]v}| ¡}| ¡}tj |d¡}t|dƒ|||ƒ}| |tj |d¡¡||tj |d¡ƒ}| |tj |d¡¡q dS)Nr~rI) rƒrƒr†rurr+r,r1r’)rxrÈrórôrar@rrrÚtest_copy_return_valueqs  zTestCopy.test_copy_return_valuecCs²| ¡}tj |d¡}tj |d¡}tj |d¡}tj |d¡}t|dƒt ||¡tj||dd| tj  |¡¡|  t  |¡t  |¡¡t ||¡|  tj  |¡¡dS)Nrarbrr†r~FrR) rurr+r,r1rrƒÚcopyfilerrMr’rrŸ)rxr×rarbrr†rrrÚtest_copyfile_symlinkss   zTestCopy.test_copyfile_symlinksr†zrequires os.linkc Cst t¡tj td¡}tj td¡}zât|dƒ}| d¡Wdƒn1sR0Yzt ||¡Wn2tyž}z|  d|¡WYd}~n d}~00|  t j t j ||¡t|dƒ }| | ¡d¡Wdƒn1sä0Yt |¡Wt jtddnt jtdd0dS) Nrßràr(Úcheddarz os.link(): %srFTr§)rrrr+r,r-r.r†r!r.rŽrƒr r‹r’rGrÜrw)rxrarbrCr2rrrÚ'test_dont_copy_file_onto_link_to_itselfs  ($ . z0TestCopy.test_dont_copy_file_onto_link_to_itselfc Csæt t¡tj td¡}tj td¡}zªt|dƒ}| d¡Wdƒn1sR0Yt d|¡| t j t j ||¡t|dƒ }|  |  ¡d¡Wdƒn1s¬0Yt |¡Wt jtddnt jtdd0dS)Nrßràr(rrFTr§)rrrr+r,r-r.rrŽrƒr r‹r’rGrÜrw)rxrarbrCrrrÚ*test_dont_copy_file_onto_symlink_to_itself¤s  (  . z3TestCopy.test_dont_copy_file_onto_symlink_to_itselfr+r,c CsŠzt t¡Wn2ty@}z| d|¡WYd}~n d}~00z6| tjtjtt ¡| tjtjt t¡Wt  t¡n t  t¡0dS)Nr-) rr+rr!r.rŽrƒÚSpecialFileErrorr‹r/Ú__file__rÜ)rxr2rrrÚtest_copyfile_named_pipe¹s$ÿÿz!TestCopy.test_copyfile_named_pipecCsl| ¡}| ¡}tj |d¡}tj |d¡}t|dƒt ||¡}| tj |¡¡|  t |ƒt |ƒ¡dS)NrIr~) rurr+r,r1rƒr‹rrr’rH)rxrórôÚdst_fileÚsrc_filer@rrrÚtest_copyfile_return_valueÇs  z#TestCopy.test_copyfile_return_valuecCsX| ¡}tj |d¡}t|dƒ| ttj||¡| t tj||¡|  t |ƒd¡dSr$) rurr+r,r1rŽr rƒr‹rr’rH)rxrór”rrrÚtest_copyfile_same_fileÒs  z TestCopy.test_copyfile_same_fileN)!rzr{r|rrärPrårærYrrTrçrUr`rrmZskip_unless_xattrr}r·rr‚r„r…r‡rˆr‰rŠrŒrŽrr’r•r–rrrrrHs\    (ÿý  ?ÿ    "      rHc@sveZdZe ¡dd„ƒZdd„Zd7dd„Ze ¡e  e   d¡d ¡d d „ƒƒZ e ¡d d „ƒZ e ¡e  e   d¡d¡dd„ƒƒZe ¡e  e   d¡d¡dd„ƒƒZdd„Ze ¡dd„ƒZe ¡e  ed¡dd„ƒƒZdd„Zdd „Ze ¡d!d"„ƒZd#d$„Zd%d&„Zd'd(„Zd)d*„Ze ¡d+d,„ƒZe ¡d-d.„ƒZe ¡e e oJe!ƒ d/¡d0d1„ƒƒZ"e ¡d2d3„ƒZ#d4d5„Z$d6S)8Ú TestArchivesc Csª| d¡\}}| ¡}t |¡tj |¡}tj tj |¡d¡}t  |¡*tj  |¡}t |d|dƒ}Wdƒn1s|0Y|  ||d¡|  tj |¡¡|  t |¡¡t |d¡$}| | ¡gd¢¡Wdƒn1sî0Yt  |¡t |d|dƒ}Wdƒn1s(0Y|  ||d ¡|  tj |¡¡|  t |¡¡t |d ¡$}| | ¡gd¢¡Wdƒn1sœ0YdS) Nr©ÚarchiveÚgztarÚ.ú.tar.gzzr:gz)ršz./subz./sub2z./file1z./file2z ./sub/file3Útarú.tarrF)Ú _create_filesrurr±r+rïr,ÚbasenamerÚ change_cwdÚabspathrr’rrñÚtarfileZ is_tarfiler-ÚassertCountEqualÚgetnames) rxÚroot_dirrDrÚwork_dirÚ rel_base_nameÚ base_nameÚtarballZtfrrrÚtest_make_tarballãs0    , ÿ" . ÿzTestArchives.test_make_tarballcCsFt |¡(}| ¡}| ¡t|ƒWdƒS1s80YdSr)r¢r-r¤Úsortr*)rxr+rœrrrrÚ_tarinfos zTestArchives._tarinfoÚdistcCs’| ¡}tj ||¡}tj|ddt|dfdƒt|dfdƒt tj |d¡¡t|ddfdƒt tj |d¡¡|rŠt|d fdƒ||fS) NT)Úexist_okr›rerdrúZfile3Zsub2Úouter)rurr+r,rCr1r)rxrDr¥r­rrrrž szTestArchives._create_filesrœzNeed 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) Nr˜r™r›z archive2.tarrœz-cf©ÚcwdÚstdoutrT)Údry_run) ržrr+r,rurr’rrñrmÚ check_callÚDEVNULLr¬)rxr¥rDr¨r©Ztarball2Ztar_cmdrrrÚtest_tarfile_vs_tars(  ÿ ÿz TestArchives.test_tarfile_vs_tarc Cs®| ¡\}}| ¡}t |¡tj |¡}tj tj |¡d¡}t  |¡(tj  |¡}t |d|ƒ}Wdƒn1sx0Y|  ||d¡|  tj |¡¡|  t |¡¡t |¡$}| | ¡gd¢¡Wdƒn1sè0Yt  |¡*tj  |¡}t |d||ƒ}Wdƒn1s.0Y|  ||d¡|  tj |¡¡|  t |¡¡t |¡$}| | ¡gd¢¡Wdƒn1s 0YdS)Nr˜Úzipú.zip)údist/ú dist/sub/ú dist/sub2/ú dist/file1ú dist/file2údist/sub/file3r¯)r¹rºr»r¼r½r¾)ržrurr±r+rïr,rŸrr r¡rr’rrñÚzipfileÚ is_zipfileÚZipFiler£Únamelist) rxr¥rDrr¦r§r¨rPÚzfrrrÚtest_make_zipfile<s2     *  ÿ"  .  ÿzTestArchives.test_make_zipfiler·zNeed the zip command to runc Cs | ¡\}}tj | ¡d¡}t|d||ƒ}| ||d¡| tj |¡¡tj |d¡}dddd|g}t j ||t j d| tj |¡¡t   |¡}| ¡}Wdƒn1s¶0Yt   |¡}| ¡} Wdƒn1sè0Y| t|ƒt| ƒ¡dS)Nr˜r·r¸z archive2.zipz-qz-rr°)ržrr+r,rurr’rrñrmr´rµr¿rÁrÂrJ) rxr¥rDr¨r˜Zarchive2Úzip_cmdrÃrZnames2rrrÚtest_zipfile_vs_zipas  ÿ & &z TestArchives.test_zipfile_vs_zipÚunzipzNeed 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}~00Wdƒn1sê0YdS) Nr˜r·r¸rÇz-t)ÚstderrÚreplacer‰zunrecognized option: tzunzip doesn't support -tz{} **Unzip Output** {})ržrr+r,rurr’rrñrr rmÚ check_outputÚSTDOUTÚCalledProcessErrorÚoutputÚdecoder.r0Úformat) rxr¥rDr¨r˜rÅrÇZdetailsÚmsgrrrÚtest_unzip_zipfile{s    zTestArchives.test_unzip_zipfilecCs*| ¡}tj |d¡}| tt|d¡dS)Nr˜re)rurr+r,rŽÚ ValueErrorr)rxr²r¨rrrÚtest_make_archive“szTestArchives.test_make_archivecCsÞtr"t d¡d}t d¡d}nd}}| ¡\}}tj |  ¡d¡}t |d||||d}|  tj  |¡¡t |d||ƒ}|  tj  |¡¡t |d||||d}|  tj  |¡¡t |d||ddd}|  tj  |¡¡dS) NrÚrootr˜r·©ÚownerÚgrouprœZ kjhkjhkjgZoihohoh) ÚUID_GID_SUPPORTÚgrpÚgetgrgidÚpwdÚgetpwuidržrr+r,rurrrñ)rxr×rÖr¥rDr¨rPrrrÚtest_make_archive_owner_group˜s(  ÿ ÿ ÿz*TestArchives.test_make_archive_owner_groupúRequires grp and pwd supportc CsÚ| ¡\}}tj | ¡d¡}t d¡d}t d¡d}t   |¡$t |d|d||d}Wdƒn1sn0Y|  tj  |¡¡t |¡}z6| ¡D] }| |jd¡| |jd¡qžW| ¡n | ¡0dS)Nr˜rr™r­rÕ)ržrr+r,rurÙrÚrÛrÜrr rrrñr¢r-Z getmembersr’ÚuidÚgidrÛ) rxr¥rDr¨r×rÖÚ archive_namer˜ÚmemberrrrÚtest_tarfile_root_owner´s   ÿ$  z$TestArchives.test_tarfile_root_ownercCstt ¡}dd„}td|gdƒzFztdd| ¡dWntyHYn0| t ¡|¡Wtdƒn tdƒ0dS)Nc_s tƒ‚dSr)Ú RuntimeError)rÚkwrrrÚ_breaksÍsz3TestArchives.test_make_archive_cwd.._breaksreúxxx file)r¥)rr\rrrurÖr’r)rxZ current_dirrærrrÚtest_make_archive_cwdËs z"TestArchives.test_make_archive_cwdcCsZ| ¡}t |¡4| tddƒd¡| tj d¡¡Wdƒn1sL0YdS)NÚtestrœztest.tar© rurr r’rrrr+rñ©rxr¥rrrÚtest_make_tarfile_in_curdirÚs z(TestArchives.test_make_tarfile_in_curdircCsZ| ¡}t |¡4| tddƒd¡| tj d¡¡Wdƒn1sL0YdS)Nrér·ztest.ziprêrërrrÚtest_make_zipfile_in_curdirás z(TestArchives.test_make_zipfile_in_curdircCs˜| ttdd¡| ttddd„d¡| ttddd„ddg¡tddd„dgd ƒd d „tƒDƒ}| d|¡tdƒd d „tƒDƒ}| d|¡dS) NrerhcSstSr©ÚxrrrrÚìr5z;TestArchives.test_register_archive_format..cSstSrrîrrrrrðîr5)rhrX)rhrXrcSstSrrîrrrrrðñr5rçcSsg|] \}}|‘qSrr©r;rQÚparamsrrrr=òr5z=TestArchives.test_register_archive_format..cSsg|] \}}|‘qSrrrñrrrr=ör5)rŽÚ TypeErrorrrr­rr:)rxÚformatsrrrÚtest_register_archive_formatésÿÿ z)TestArchives.test_register_archive_formatcCs.| |dd„¡| |tj¡| |t¡dS)NcSs|Srr©r+rrrrðür5z3TestArchives.check_unpack_archive..)Ú#check_unpack_archive_with_converterrrr)rxrÏrrrÚcheck_unpack_archiveûsz!TestArchives.check_unpack_archivec CsÄ| ¡\}}t|ƒ}| d¡tj | ¡d¡}t||||ƒ}| ¡}t||ƒ||ƒƒ|  t|ƒ|¡| ¡} t||ƒ|| ƒ|d|  t| ƒ|¡|  t j t|t ƒ¡|j tt|t ƒdddS)Nr¯r˜)rÏre)ržrOrÜrr+r,rurrr’rŽrƒÚ ReadErrorrrÒ) rxrÏÚ converterr¥rDÚexpectedr¨r¯rZtmpdir3rrrr÷s  z0TestArchives.check_unpack_archive_with_convertercCs| d¡dS)Nrœ©rø©rxrrrÚtest_unpack_archive_tarsz$TestArchives.test_unpack_archive_tarcCs| d¡dS)Nr™rürýrrrÚtest_unpack_archive_gztarsz&TestArchives.test_unpack_archive_gztarcCs| d¡dS)NÚbztarrürýrrrÚtest_unpack_archive_bztarsz&TestArchives.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs| d¡dS)NÚxztarrürýrrrÚtest_unpack_archive_xztar sz&TestArchives.test_unpack_archive_xztarcCs| d¡dS)Nr·rürýrrrÚtest_unpack_archive_zip%sz$TestArchives.test_unpack_archive_zipcs tƒ}‡fdd„}tdddg|dgƒtddƒˆ ttd dg|¡tdƒtd dg|ƒˆ d dgd ftƒ¡ˆ ddgd ftƒ¡td ƒˆ tƒ|¡dS) Ncs(ˆ |d¡ˆ |d¡ˆ |d¡dS)Nrhú stuff.booÚxx)r’)r¯Ú extract_dirÚextrarýrrÚ_boo-s  z/TestArchives.test_unpack_registry.._booZBooz.booz.b2)rrhrrZBoo2r©) r rrrŽr r r­r:r’)rxrôr rrýrÚtest_unpack_registry)s   ÿz!TestArchives.test_unpack_registryN)r­)%rzr{r|rZ requires_zlibrªr¬ržrårærƒÚwhichr¶rÄrÆrÑrÓrÝrØrãrèrìrírõrør÷rþrÿZ requires_bz2rZ requires_lzmarçrjrrrrr rrrrr—ßsZ #  ÿ  $ ÿ  ÿ         r—c@sLeZdZe eedƒd¡dd„ƒZe ed¡e ee dƒd¡dd „ƒƒZ d S) ÚTestMiscÚ disk_usagez)disk_usage not available on this platformcCs†t tj t¡¡}dD]}| t||ƒt¡q|  |j d¡|  |j d¡|  |j d¡|  |j |j ¡|  |j |j ¡t t¡dS)N)r2ÚusedÚfreer)rƒr rr+rïr‘rrrqZ assertGreaterr2rÚassertGreaterEqualr)rxÚusager_rrrÚtest_disk_usageFszTestMisc.test_disk_usagerÞÚchownzrequires os.chowncs‚ˆ ¡}tj|d‰tˆdƒˆ t¡t ˆ¡Wdƒn1sH0Yˆ t¡tjˆddWdƒn1s€0Yˆ t¡tjˆddWdƒn1s¸0Yˆ t ¡t ˆd¡Wdƒn1sî0Yˆ t ¡t ˆd¡Wdƒn1s&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)Nr¦ztesting chown functionznon-existing username)Úuserznon-existing groupname)r×óspamg…ëQ¸ @cs:t ˆ¡}|dur ˆ ||j¡|dur6ˆ ||j¡dSr)rr¾r’Úst_uidÚst_gid)r+rßràÚs©r¯rxrrÚ check_chownns  z(TestMisc.test_chown..check_chown)ràr)NN)rurZrªr1rŽrÒrƒrÚ LookupErrorrórÚgetuidÚgetgidrÛrÜrÙrÚÚKeyError)rxrïrßràrrr×rrrÚ test_chownUsR   ( , , * ,           zTestMisc.test_chownN) rzr{r|rårærYrƒrrØrrrrrrr Ds ÿ r c@sèeZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  e e d ƒoHe   ¡d kd ¡dd„ƒZ dd„Zdd„Ze ejdkd¡dd„ƒZdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Ze ejdkd$¡d%d&„ƒZe ejdkd$¡d'd(„ƒZd)S)*Ú TestWhichcCst|jdd|_tj|jddd|_t |jjtj ¡|  |jj ¡tj   |jj¡\|_|_|j|_tj|_d|_dS)NZTmp)rtz.Exe©rVrtÚsuffixz.EXE)ruÚtemp_dirrZr[Ú temp_filerrÂrQr¾ÚS_IXUSRrvrÛr+rprVÚfileÚenv_pathÚcurdirÚextrýrrrÚsetUp–sþzTestWhich.setUpcCs&tj|j|jd}| ||jj¡dS©Nrö)rƒr r&rVr’r$rQ©rxr@rrrÚ test_basic¤szTestWhich.test_basiccCs(tj|jj|jd}| ||jj¡dSr+)rƒr r$rQr#r’r,rrrÚtest_absolute_cmd©szTestWhich.test_absolute_cmdcCs´tj |j¡\}}tj ||j¡}tj|d,tj ||j d}|  ||¡Wdƒn1s`0Ytj|jd(tj ||d}|  |¡Wdƒn1s¦0YdSr+) rr+rprVr,r&rr rƒr r#r’Ú assertIsNone)rxrDÚtail_dirÚrelpathr@rrrÚtest_relative_cmd¯s*zTestWhich.test_relative_cmdcCs€tj |j¡}tj|jdPtj|j|d}t j dkrT|  |tj  |j |j¡¡n | |¡Wdƒn1sr0YdS)NröÚwin32)rr+rïrVrr rƒr r&rkrèr’r,r(r/)rxrDr@rrrÚtest_cwd¼s  zTestWhich.test_cwdr·rznon-root user requiredcCsRt |jjtj¡t |jjtj¡r.| d¡t j |j |j tjd}|  |¡dS)Nzcan't set the file read-only)r+Úmode)rrÂr$rQr¾rÀÚaccessÚW_OKr.rƒr r&rVr/r,rrrÚtest_non_matching_modeÈs  z TestWhich.test_non_matching_modecCsjtj |j¡\}}tj|d8tj|j|d}|  |tj  ||j¡¡Wdƒn1s\0YdSr+) rr+rprVrr rƒr r&r’r,)rxrDr0r@rrrÚtest_relative_pathÒszTestWhich.test_relative_pathcCstjd|jd}| |¡dS)Nzfoo.exerö)rƒr rVr/r,rrrÚtest_nonexistent_fileØszTestWhich.test_nonexistent_filer3zpathext check is Windows-onlycCs<tj|jdd…|jd}| ||jjdd…|j¡dS)Néüÿÿÿrö)rƒr r&rVr’r$rQr)r,rrrÚtest_pathext_checkingÝszTestWhich.test_pathext_checkingcCsRt ¡6}|j|d<t |j¡}| ||jj¡Wdƒn1sD0YdS©NÚPATH) rÚEnvironmentVarGuardr'rƒr r&r’r$rQ©rxÚenvr@rrrÚtest_environ_pathås   zTestWhich.test_environ_pathc CsÚt ¡¾}d|d<tjjd|jdd‚t td|j¡Rt |j¡&t   |j ¡}|  |¡Wdƒn1sr0YWdƒn1s0YWdƒn1s®0YWdƒn1sÌ0YdS)Nr©r>ú os.confstrT©Ú return_valueÚcreateÚdefpath) rr?rårFrGrVÚ swap_attrrr rƒr r&r/r@rrrÚtest_environ_path_emptyës  ÿþ ý z!TestWhich.test_environ_path_emptyc Cs:tj |jj¡}tjdkrBtj}t|t ƒr4t  |¡}tj  ||¡}t   ¡Ú}tj|d<tjjd|jddšt  td|j¡jt |j¡}| |¡t  |j¡(t |j¡}| ||¡Wdƒn1sÎ0YWdƒn1sì0YWdƒn1s 0YWdƒn1s,0YdS)Nr3r>rCTrDrG)rr+rŸr$rQrkrèr(r)r‚r€r,rr?ÚpathseprårFrGrVrHrƒr r&r/r r’)rxZ expected_cwdr(rAr@rrrÚtest_environ_path_cwdös$      ÿþ   zTestWhich.test_environ_path_cwdc Cs8t ¡}| dd¡tjjdtddLt td|j ¡t   |j ¡}Wdƒn1s^0YWdƒn1s|0Y|  ||jj¡tjjd|j ddJt tdd¡t   |j ¡}Wdƒn1sÜ0YWdƒn1sú0Y|  ||jj¡Wdƒn1s*0YdS)Nr>rCT)r"rFrGrDr©)rr?ÚpoprårFrGrÒrHrrVrƒr r&r’r$rQr@rrrÚtest_environ_path_missing s    ÿþH ÿ þHz#TestWhich.test_environ_path_missingc CsŒtj |j¡}tj|jd\t ¡4}|j|d<tj |j dd}|  |¡Wdƒn1s`0YWdƒn1s~0YdS)Nrör>r©) rr+rïrVrr r?r'rƒr r&r/)rxrDrAr@rrrÚtest_empty_pathsÿ zTestWhich.test_empty_pathcCsNt ¡2}| dd¡t |j¡}| |¡Wdƒn1s@0YdSr=)rr?rLrƒr r&r/r@rrrÚtest_empty_path_no_PATH&s   z!TestWhich.test_empty_path_no_PATHztest specific to WindowscCs¢d}tj|jd|d}t |jtj¡| |j ¡tj   |j¡}tj   |¡d}t  ¡6}||d<tj||jd}| ||j¡Wdƒn1s”0YdS)Nú.xyzÚTmp2r!rÚPATHEXTrö)rZr[r#rrÂrQr¾r%rvrÛr+rŸrrr?rƒr r’©rxr)Z temp_filexyzZprogramrAr@rrrÚ test_pathext,sÿ  zTestWhich.test_pathextcCs˜d}tj|jd|d}| |j¡tj |j¡}tj  |¡d}t   ¡<}|›d|d<t j ||jd}| ||j¡Wdƒn1sŠ0YdS)NrPrQr!rú;rRrö)rZr[r#rvrÛrr+rŸrQrrr?rƒr r’rSrrrÚtest_pathext_with_empty_str>sÿ  z%TestWhich.test_pathext_with_empty_strN)rzr{r|r*r-r.r2r4rårçrYrr·r8r9r:rærkrèr<rBrIrKrMrNrOrTrVrrrrr ”s2  ÿ  ÿ   r c@seZdZdd„ZdS)ÚTestWhichBytescCsXt |¡t |j¡|_t |j¡|_t |jj¡|j_t |j¡|_t |j ¡|_ dSr) r r*rr€rVr&r$rQr(r)rýrrrr*Ps  zTestWhichBytes.setUpN)rzr{r|r*rrrrrWOsrWc@sˆeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e dd„ƒZ e dd„ƒZ dd„Z e dd„ƒZdd„Ze dd„ƒZdd„Ze ejjd¡dd„ƒZd d!„Zd"d#„Zd$d%„Zd&d'„Zeje d(d)„ƒƒZeje d*d+„ƒƒZeje d,d-„ƒƒZ eje d.d/„ƒƒZ!d0d1„Z"d2d3„Z#e d4d5„ƒZ$e d6d7„ƒZ%d8d9„Z&e e'ed:ƒove (¡d;kove'ed<ƒove'e)d=ƒove'e)d>ƒd?¡d@dA„ƒZ*dBS)CÚTestMovecCsvd}| ¡|_| ¡|_tj |j|¡|_tj |j|¡|_t|jdƒ}|  d¡Wdƒn1sh0YdS)Nr~r'r) rurórôrr+r,r”r“r-r.)rxr¯rCrrrr*[s  zTestMove.setUpcCsŽt|dƒ}| ¡}Wdƒn1s(0Yt ||¡t|dƒ }| || ¡¡Wdƒn1sn0Y| tj |¡¡dS©NrE) r-rGrƒÚmover’rŸrr+r)rxrarbÚreal_dstrCÚcontentsrrrÚ_check_move_fileds  &  .zTestMove._check_move_filecCsFtt |¡ƒ}t ||¡| |tt |¡ƒ¡| tj |¡¡dSr) rJrrKrƒrZr’rŸr+r)rxrarbr[r\rrrÚ_check_move_dirls zTestMove._check_move_dircCs| |j|j|j¡dSr)r]r”r“rýrrrÚtest_move_filerszTestMove.test_move_filecCs| |j|j|j¡dSr)r]r”rôr“rýrrrÚtest_move_file_to_dirvszTestMove.test_move_file_to_dircCs"t |j¡}| ||j|j¡dSr)rrr”r]rôr“)rxrarrrÚ"test_move_file_to_dir_pathlike_srczs z+TestMove.test_move_file_to_dir_pathlike_srccCs"t |j¡}| |j||j¡dSr)rrrôr]r”r“©rxrbrrrÚ"test_move_file_to_dir_pathlike_dsts z+TestMove.test_move_file_to_dir_pathlike_dstcCs | ¡dSr)r_rýrrrÚtest_move_file_other_fs„sz TestMove.test_move_file_other_fscCs | ¡dSr)r`rýrrrÚtest_move_file_to_dir_other_fs‰sz'TestMove.test_move_file_to_dir_other_fsc Cs@tj| ¡d}z| |j||¡Wt |¡n t |¡0dSrÙ)rZrªrur^rórrw©rxrôrrrÚ test_move_dirŽszTestMove.test_move_dircCs | ¡dSr)rgrýrrrÚtest_move_dir_other_fs–szTestMove.test_move_dir_other_fsc Cs,| |j|jtj |jtj |j¡¡¡dSr)r^rórôrr+r,rŸrýrrrÚtest_move_dir_to_dir›s ÿzTestMove.test_move_dir_to_dircCs | ¡dSr)rirýrrrÚtest_move_dir_to_dir_other_fs sz&TestMove.test_move_dir_to_dir_other_fsc Cs4| |jtjj|jtj |jtj |j¡¡¡dSr)r^rórr+Úseprôr,rŸrýrrrÚtest_move_dir_sep_to_dir¥sÿz!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc Cs4| |jtjj|jtj |jtj |j¡¡¡dSr)r^rórr+Úaltseprôr,rŸrýrrrÚtest_move_dir_altsep_to_dir©sÿz$TestMove.test_move_dir_altsep_to_dircCsHt|jdƒWdƒn1s"0Y| tjtj|j|j¡dS)Nr')r-r“rŽrƒrrZr”rôrýrrrÚ"test_existing_file_inside_dest_dir®sz+TestMove.test_existing_file_inside_dest_dircCs*tj |jd¡}| tjtj|j|¡dS©NrI)rr+r,rórŽrƒrrZrbrrrÚtest_dont_move_dir_in_itself´sz%TestMove.test_dont_move_dir_in_itselfc Csrt t¡zVdD]B\}}tj t|¡}tj t|¡}|jt ||¡d||fdqWt  t¡n t  t¡0dS)N))Úsrcdirz srcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)©rÐ) rrrr+r,rrƒÚ _destinsrcrrwrárrrÚtest_destinsrc_false_negative¹s  ÿÿ z&TestMove.test_destinsrc_false_negativec Csrt t¡zVdD]B\}}tj t|¡}tj t|¡}|jt ||¡d||fdqWt  t¡n t  t¡0dS)N))rrzsrc/dest)rrz srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)rs) rrrr+r,rŸrƒrtrrwrárrrÚtest_destinsrc_false_positiveÅs  ÿÿ z&TestMove.test_destinsrc_false_positivecCs\tj |jd¡}t |j|¡t ||j¡|  tj  |j¡¡|  tj  |j|j¡¡dSrp) rr+r,rórr”rƒrZr“rrMÚsamefilerbrrrÚtest_move_file_symlinkÑs zTestMove.test_move_file_symlinkcCsld}tj |j|¡}t |j|¡t ||j¡tj |j|¡}|  tj  |¡¡|  tj  |j|¡¡dSrp) rr+r,rórr”rƒrZrôrrMrw)rxr¯rbZ final_linkrrrÚtest_move_file_symlink_to_dirÚsz&TestMove.test_move_file_symlink_to_dircCsztj |jd¡}tj |jd¡}t ||¡tj |jd¡}t ||¡| tj  |¡¡|  tj  |¡tj  |¡¡dS©NrJrIrK) rr+r,rórrôrƒrZrrMr’Úrealpath©rxrarbrrrrÚtest_move_dangling_symlinkås  z#TestMove.test_move_dangling_symlinkcCs|tj |jd¡}tj |jd¡}t |¡t ||¡tj |jd¡}t ||¡|  tj  |¡¡|  tj  ||¡¡dSrz) rr+r,rórrrôrƒrZrrMrwr|rrrÚtest_move_dir_symlinkðs   zTestMove.test_move_dir_symlinkc Cs6t |j|j¡}| |tj |jtj |j¡¡¡dSr) rƒrZr”rôr’rr+r,rŸr,rrrÚtest_move_return_valueüsÿzTestMove.test_move_return_valuecCs6t |jtj |jd¡¡}| |tj |jd¡¡dSrp)rƒrZr”rr+r,rôr’r,rrrÚ test_move_as_rename_return_valuesz)TestMove.test_move_as_rename_return_valuecs8g‰‡fdd„}tj|j|j|d| tˆƒd¡dS)Ncsˆ ||f¡dSrr‡r4©Zmovedrrr6sz7TestMove.test_move_file_special_function.._copyr(rh)rƒrZr”rôr’r“©rxr6rrrÚtest_move_file_special_functions z(TestMove.test_move_file_special_functioncsdg‰‡fdd„}t tj |jd¡¡t tj |jd¡¡tj|j|j|d|  t ˆƒd¡dS)Ncsˆ ||f¡dSrr‡r4rrrr6sz6TestMove.test_move_dir_special_function.._copyÚchildZchild1r(r) rr½rr+r,rórƒrZrôr’r“r‚rrrÚtest_move_dir_special_function s  z'TestMove.test_move_dir_special_functionc Cs~| ¡|_tj tj |j¡tj |j¡ ¡¡}| |j|¡z.t   |j|¡|  tj  |¡¡Wt  |¡n t  |¡0dSr)rurórr+r,rïrŸÚupperrMrƒrZrrLr±rfrrrÚtest_move_dir_caseinsensitives  þz&TestMove.test_move_dir_caseinsensitiver·rrüÚ SF_IMMUTABLEÚ UF_OPAQUEr~c Cs0zÜt t¡t ttj¡| ttj tt ¡|  t t  ¡v¡t ttj ¡t tj td¡¡t ttj¡| ttj tt ¡|  t t  ¡v¡Wtj t¡r¸t ttj ¡t t¡tj t ¡rÜt t tj ¡t t ¡nNtj t¡rt ttj ¡t t¡tj t ¡r*t t tj ¡t t ¡0dS)Nr„)rrÚ TESTFN_SRCrür¾rˆrŽr!rƒrZÚ TESTFN_DSTrŸrKr‰Z os_helperr½r+r,rrwrýrrrÚtest_move_dir_permission_denied(s,     û z(TestMove.test_move_dir_permission_deniedN)+rzr{r|r*r]r^r_r`rarcr&rdrergrhrirjrlrårærr+rmrnrorqrurvrrärxryr}r~rr€rƒr…r‡rYr·r¾rŒrrrrrXYsh              ÿþürXc@s`eZdZGdd„deƒZdd„Ze ed¡dd„ƒZ e ed¡dd „ƒZ e ed¡d d „ƒZ d S) Ú TestCopyFilec@s:eZdZdZdZdZd dd„Zdd„Zdd „Zd d „Z dS) zTestCopyFile.FauxFNTcCs||_||_dSr)Ú_raise_in_exitÚ_suppress_at_exit)rxZ raise_in_exitZsuppress_at_exitrrrÚ__init__QszTestCopyFile.Faux.__init__cGsdS)Nr©r)rxrrrrrGTszTestCopyFile.Faux.readcCs d|_dS)NT)Ú_enteredrýrrrÚ __enter__VszTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_tdƒ‚|jS)NTú Cannot close)Ú _exited_withrŽÚ_raisedrr)rxÚexc_typeÚexc_valÚexc_tbrrrÚ__exit__Xs  zTestCopyFile.Faux.__exit__)FT) rzr{r|r‘r”r•rrGr’r™rrrrÚFauxMs ršc Csrddd„}t td|¡F| t¡t dd¡Wdƒn1sF0YWdƒn1sd0YdS)NrFcSs|dkrtdƒ‚dS)NÚsrcfilezCannot open "srcfile"rk©r¯r5rrrÚ_open`sz4TestCopyFile.test_w_source_open_fails.._openr-r›Údestfile)rF)rrHrƒrŽrr‹©rxrrrrÚtest_w_source_open_fails_s  z%TestCopyFile.test_w_source_open_failszskipped on macOScsˆ| ¡‰d ‡fdd„ }t td|¡t dd¡Wdƒn1sF0Y| ˆj¡| ˆjdtu¡|  ˆjdj d ¡dS) NrFcs |dkr ˆS|dkrtdƒ‚dS)Nr›ržúCannot open "destfile"rkrœ©r›rrrms z2TestCopyFile.test_w_dest_open_fails.._openr-r›ržrrh)r¡)rF) ršrrHrƒr‹rr‘r”rr’rrŸrr¢rÚtest_w_dest_open_failsis* ÿz#TestCopyFile.test_w_dest_open_failscs¬| ¡‰| d¡‰d ‡‡fdd„ }t td|¡t dd¡Wdƒn1sR0Y| ˆj¡| ˆj¡| ˆj¡| ˆjdt u¡|  ˆjd j d ¡dS) NTrFcs|dkr ˆS|dkrˆSdS©Nr›ržrrœ©ržr›rrr€s z3TestCopyFile.test_w_dest_close_fails.._openr-r›ržrrh)r“)rF) ršrrHrƒr‹rr‘r•r”rr’rrŸrr¥rÚtest_w_dest_close_fails{s *   ÿz$TestCopyFile.test_w_dest_close_failsc sÎ| d¡‰| ¡‰d ‡‡fdd„ }t td|¡F| t¡t dd¡Wdƒn1s^0YWdƒn1s|0Y| ˆj¡| ˆj¡|  ˆj ¡| ˆj ddu¡| ˆj ¡dS) NTrFcs|dkr ˆS|dkrˆSdSr¤rrœr¥rrr–s z5TestCopyFile.test_w_source_close_fails.._openr-r›ržr)rF) ršrrHrƒrŽrr‹rr‘rŸr•r”rŸrr¥rÚtest_w_source_close_failss  H   z&TestCopyFile.test_w_source_close_failsN) rzr{r|Úobjectršr rårçÚMACOSr£r¦r§rrrrrKs     rc@sxeZdZdZedd„ƒZedd„ƒZdd„Zej dd „ƒZ d d „Z d d „Z dd„Z dd„Ze ejdkd¡dd„ƒZdS)ÚTestCopyFileObji cCstt|jƒdSr)rDrÚFILESIZE©ÚclsrrrÚ setUpClassªszTestCopyFileObj.setUpClasscCst t¡t t¡dSr)rr^rr/r¬rrrÚ tearDownClass®s zTestCopyFileObj.tearDownClasscCst t¡dSr©rr^r/rýrrrÚtearDown³szTestCopyFileObj.tearDownc csbttdƒD}ttdƒ}||fVWdƒn1s60YWdƒn1sT0YdS©NrEr'©r-rr/rárrrÚ get_files¶s  zTestCopyFileObj.get_filesc Cslt|dƒN}t|dƒ$}| | ¡| ¡¡Wdƒn1s@0YWdƒn1s^0YdSrY)r-r’rG)rxrarbÚfsrcÚfdstrrrÚassert_files_eq¼s  zTestCopyFileObj.assert_files_eqcCsH| ¡ \}}t ||¡Wdƒn1s.0Y| tt¡dSr)r´rƒÚ copyfileobjr·rr/rárrrÚ test_contentÁs*zTestCopyFileObj.test_contentcCs<| ¡ \}}t ||¡Wdƒn1s.0YdSr)r´rƒr¸rárrrÚtest_file_not_closedÆs z$TestCopyFileObj.test_file_not_closedcCs`| ¡D\}}t ||¡| | ¡|j¡| | ¡|j¡Wdƒn1sR0YdSr)r´rƒr¸r’Útellr«rárrrÚtest_file_offsetÌs z TestCopyFileObj.test_file_offsetrz Windows onlycCs~tj d¡}t tt¡Wdƒn1s.0Y| |jddd¡t j t   ¡dd}|  d¡Wdƒn1s€0Y|j}| tj|¡tj d¡}t |t¡Wdƒn1sÌ0Y| |jddd¡t j t   ¡dd}Wdƒn1s0Y|j}| tj|¡tj d¡}t |t¡Wdƒn1sd0Y| |t¡dS) Nzshutil._copyfileobj_readintorrXiFrUsfoor)rårFrGrƒr‹rr/r’Ú call_argsrZr[rr\r.rQrvrr^r·)rxÚmrCrrrrrÚ test_win_implÒs"*(* ,zTestCopyFileObj.test_win_implN)rzr{r|r«Ú classmethodr®r¯r±Ú contextlibÚcontextmanagerr´r·r¹rºr¼rårçrrQr¿rrrrrª§s   rªc@sŽeZdZdZdZdZedd„ƒZedd„ƒZdd „Z e j d d „ƒZ d d „Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)Ú_ZeroCopyFileTesti r5r©cCsDtt|jƒttdƒ}| ¡|_Wdƒn1s60YdSrY)rDrr«r-rGÚFILEDATA)r­rCrrrr®÷s   z_ZeroCopyFileTest.setUpClasscCst t¡dSr)rr^rr¬rrrr¯þsz_ZeroCopyFileTest.tearDownClasscCst t¡dSrr°rýrrrr± sz_ZeroCopyFileTest.tearDownc csbttdƒD}ttdƒ}||fVWdƒn1s60YWdƒn1sT0YdSr²r³rárrrr´ s  z_ZeroCopyFileTest.get_filescOs tdƒ‚dS)Nzmust be implemented in subclass)ÚNotImplementedError)rxrrrrrÚ zerocopy_fun sz_ZeroCopyFileTest.zerocopy_funcCs$| ¡| ¡| ¡| ¡dSr)r±r¯r®r*rýrrrÚreset sz_ZeroCopyFileTest.resetc Cs¶| ¡ \}}| ||¡Wdƒn1s.0Y| ttdd|j¡| ¡L\}}tj d¡}t   t t¡Wdƒn1sŠ0YWdƒn1s¨0YdS)NT©r/zshutil.copyfileobj) r´rÆr’rHr/rÄrårFrGrƒr‹r)rxrarbr¾rrrÚtest_regular_copy s**z#_ZeroCopyFileTest.test_regular_copyc Csˆ| |j¡| ¡J\}}| t¡| ||¡Wdƒn1sF0YWdƒn1sd0Y| ttdd|j ¡dS)NTrÈ) rvrÇr´rŽrÖrÆr’rHrrÄrárrrÚtest_same_file s   Hz _ZeroCopyFileTest.test_same_filecCsZtjt ¡d}| t¡}t |d¡Wdƒn1s<0Y| |j j |¡dS)Nr¦Únew) rZrªrr\rŽr«rƒr‹r’r®r¯)rxrQr³rrrÚtest_non_existent_src( s *z'_ZeroCopyFileTest.test_non_existent_srcc sÖtd‰td‰| ‡fdd„¡| ‡fdd„¡tˆdƒWdƒn1sT0YtˆdƒF}tˆdƒ}| ||¡Wdƒn1s–0YWdƒn1s´0Y| tˆdd d ¡dS) Nrarbcs t ˆ¡Sr©rr^r)r_rrrð1 r5z3_ZeroCopyFileTest.test_empty_file..cs t ˆ¡SrrÍr)r`rrrð2 r5r'rETrÈr5)rrvr-rÆr’rHrár)r`r_rÚtest_empty_file. s   Hz!_ZeroCopyFileTest.test_empty_filecCsHtjj|jtd"| ttjtt ¡Wdƒn1s:0YdS)N©r") rårFrGÚ PATCHPOINTÚZeroDivisionErrorrŽrƒr‹rr/rýrrrÚtest_unhandled_exception< s  ÿÿz*_ZeroCopyFileTest.test_unhandled_exceptionc Cs tjj|jttjdƒdr| ¡J\}}| t ¡|  ||¡Wdƒn1sV0YWdƒn1st0YWdƒn1s’0YdS©NÚyorÏ) rårFrGrÐrrÚEINVALr´rŽr rÆrárrrÚtest_exception_on_first_callB s   ÿ z._ZeroCopyFileTest.test_exception_on_first_callc Cs|tjj|jttjdƒdN| ¡&\}}| t|j ||¡Wdƒn1sP0YWdƒn1sn0YdSrÓ) rårFrGrÐrrÚENOSPCr´rŽrÆrárrrÚtest_filesystem_fullL s   ÿz&_ZeroCopyFileTest.test_filesystem_fullN)rzr{r|r«rÄrÐrÀr®r¯r±rÁrÂr´rÆrÇrÉrÊrÌrÎrÒrÖrØrrrrrÃñs&     rÃzos.sendfile() not supportedc@sXeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dS)ÚTestZeroCopySendfileú os.sendfilecCs t ||¡Sr)rƒÚ_fastcopy_sendfile)rxrµr¶rrrrÆY sz!TestZeroCopySendfile.zerocopy_func Cs²t |j¡|}ttdƒR}| t¡| ||¡Wdƒn1sF0Yt  ||¡Wdƒn1sp0YWdƒn1sŽ0Y|  t tdd|j¡dS)Nr'TrÈ) ÚioÚBytesIOrÄr-r/rŽr rÆrƒr¸r’rHrárrrÚtest_non_regular_file_src\ s   *Hz.TestZeroCopySendfile.test_non_regular_file_srcc Cs´ttdƒ–}t ¡n}| t¡| ||¡Wdƒn1sB0Yt ||¡|  d¡|  |  ¡|j ¡Wdƒn1sˆ0YWdƒn1s¦0YdS)NrEr) r-rrÜrÝrŽr rÆrƒr¸Úseekr’rGrÄrárrrÚtest_non_regular_file_dste s   *  z.TestZeroCopySendfile.test_non_regular_file_dstc s‡‡fdd„}g‰tj‰tjjdd|dr| ¡J\}}| t¡}t  ||¡Wdƒn1sf0YWdƒn1s„0YWdƒn1s¢0Y|  |j j t j ¡dS)Ncs,ˆsˆ d¡ˆ|i|¤ŽSttjdƒ‚dS)NrÔ)rNrrÚEBADFr©r&Z orig_sendfilerrrTo s zDTestZeroCopySendfile.test_exception_on_second_call..sendfilerÚT)rFr")rrTrårFrGr´rŽrrƒrÛr’r®rrá)rxrTrarbr³rrârÚtest_exception_on_second_calln s ÿ fz2TestZeroCopySendfile.test_exception_on_second_callc Cs‚tjjdtdH}| ¡ \}}t ||¡Wdƒn1s@0YWdƒn1s^0Y| tt dd|j ¡dS)Núos.fstatrÏTrÈ) rårFrGrr´rƒrÛr’rHr/rÄ©rxr¾rarbrrrÚtest_cant_get_size€ s  <z'TestZeroCopySendfile.test_cant_get_sizec Cs’tj ¡}d|_tjjd|dH}| ¡ \}}t ||¡Wdƒn1sP0YWdƒn1sn0Y| t t dd|j ¡dS)Nirä©rETrÈ) rårFÚMockÚst_sizerGr´rƒrÛr’rHr/rÄ©rxrFr¾rarbrrrÚtest_small_chunksŠ s  <z&TestZeroCopySendfile.test_small_chunksc Cs˜tj ¡}|jd|_tjjd|dH}| ¡ \}}t ||¡Wdƒn1sV0YWdƒn1st0Y|  t t dd|j ¡dS)Ni@rärçTrÈ) rårFrèr«rérGr´rƒrÛr’rHr/rÄrêrrrÚtest_big_chunk— s   <z#TestZeroCopySendfile.test_big_chunkcCsÂtjjdtdž}| ttjtt¡|j dd}|  |t j   t¡¡t t¡ttddd| tjtd¡| ttjttd¡|j dd}|  |d ¡Wdƒn1s´0YdS) NrÚrÏrrshelloTrÈÚ3i€)rårFrGrÑrŽrƒr‹rr/r½r’rr+Úgetsizerr^r1rv)rxr¾Ú blocksizerrrÚtest_blocksize_arg¤ s"ÿÿ  ÿz'TestZeroCopySendfile.test_blocksize_argc Csîzàtjj|jttjdƒdr}| ¡J\}}| t ¡t   ||¡Wdƒn1sX0YWdƒn1sv0YWdƒn1s”0Ytj |j¡}t   t t¡Wdƒn1sÎ0YWdt _ndt _0dS)NrÔrÏT)rårFrGrÐrrÚENOTSOCKr´rŽr rƒrÛr‹rr/Ú_USE_CP_SENDFILErårrrÚtest_file2file_not_supported¶ s þ H  z1TestZeroCopySendfile.test_file2file_not_supportedN) rzr{r|rÐrÆrÞràrãrærërìrðrórrrrrÙU s     rÙz macOS onlyc@seZdZdZdd„ZdS)ÚTestZeroCopyMACOSzposix._fcopyfilecCst ||tj¡Sr)rƒÚ_fastcopy_fcopyfileÚposixÚ_COPYFILE_DATArárrrrÆÐ szTestZeroCopyMACOS.zerocopy_funN)rzr{r|rÐrÆrrrrrôÌ srôc@s^eZdZdd„Zdd„Zdd„Ze e  e j   ¡¡d¡e e edƒd ¡d d „ƒƒZd d „ZdS)ÚTestGetTerminalSizecCs(t ¡}| |jd¡| |jd¡dS)Nr)rƒÚget_terminal_sizerÚcolumnsÚlines)rxr@rrrÚtest_does_not_crashÕ sz'TestGetTerminalSize.test_does_not_crashcCsœt ¡&}d|d<|d=t ¡}Wdƒn1s40Y| |jd¡t ¡&}|d=d|d<t ¡}Wdƒn1s€0Y| |jd¡dS)NZ777ÚCOLUMNSÚLINESi Z888ix)rr?rƒrùr’rúrû©rxrAr@rrrÚtest_os_environ_firstß s & &z)TestGetTerminalSize.test_os_environ_firstcCs`t ¡(}d|d<d|d<t ¡}Wdƒn1s60Y| |jd¡| |jd¡dS)NrerýZyyyrþr)rr?rƒrùrrúrûrÿrrrÚtest_bad_environî s  &z$TestGetTerminalSize.test_bad_environz not on ttyrùzneed os.get_terminal_size()c Cs¤zt ddg¡ ¡ ¡}Wn$tttjfy>| d¡Yn0t|dƒt|dƒf}t   ¡$}|d=|d=t   ¡}Wdƒn1sŠ0Y|  ||¡dS)NZsttyr@zstty invocation failedrhrrþrý)rmrÊrÎrpr«r!rÌr.rqrr?rƒrùr’)rxr@rûrArõrrrÚtest_stty_matchö s ÿ  &z#TestGetTerminalSize.test_stty_matchc Cst ¡ô}|d=|d=t tdd¡tjdd}Wdƒn1sF0Y| |jd¡| |jd¡t t j dƒJ}t td|¡tjd d}Wdƒn1sª0YWdƒn1sÈ0Y| |jd ¡| |jd ¡Wdƒn1s0YdS) NrþrýÚ __stdout__)é é)Úfallbackrrr()éé(rr) rr?rHrkrƒrùr’rúrûr-rÚdevnull)rxrAr@rCrrrÚ test_fallback s * ÿHz!TestGetTerminalSize.test_fallbackN)rzr{r|rürrrårærÚisattyrkrr]rYrr rrrrrøÔ s  ÿ røc@seZdZdd„ZdS)ÚPublicAPITestscCsP| ttdƒ¡gd¢}ttdƒs,tjdkr6| d¡| ttjƒt|ƒ¡dS)NÚ__all__)r¸r‹rNr[rƒr†rðrZrwrrÚ ExecErrorrrrrr rr rrrr rùr Ústatvfsrr ) rrYrƒrrQrNr’rr )rxZ target_apirrrÚtest_module_all_attribute% s  z(PublicAPITests.test_module_all_attributeN)rzr{r|rrrrrr " sr Ú__main__)F)F)NråZ unittest.mockrƒrZrkr¾rZos.pathrr$rrmr6r8rÁrÜrrrrrrrr r r r r r¢r¿röÚ ImportErrorrérZ test.supportrrr/rŠr‹rèrr©rjrÙrÛrØr¢rr&r1rDrHrOreZSUPPORTS_SENDFILErrrsZTestCaser}rérHr—r r rWrXrrªr¨rÃrçrÙrôrør rzÚmainrrrrÚsž8              [PgP< s\Jd v N