B xeº_T8ã@s~dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddl m Z ddl mZddl mZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'dd lm(Z(dd!lm)Z)dd"lm*Z*dd#lm+Z+ddlZddlZGd$d%„d%eƒZ,Gd&d'„d'eƒZ-Gd(d)„d)eƒZ.Gd*d+„d+eƒZ/Gd,d-„d-eƒZ0e#Gd.d/„d/e'ƒƒZ1Gd0d1„d1eƒZ2Gd2d3„d3eƒZ3e4d4krzdd5l5m6Z6e6e7ƒdS)6z3 Tests for testing utils (psutil.tests namespace). éN)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Ú open_binary)Ú open_text)Ú supports_ipv6)Ú bind_socket)Úbind_unix_socket)Ú call_until)Úchdir)Ú CI_TESTING)Úcreate_sockets)Ú get_free_port)ÚHAS_CONNECTIONS_UNIX)Ú is_namedtuple)Úmock)Úprocess_namespace)ÚPsutilTestCase)Ú PYTHON_EXE)Ú reap_children)Úretry)Úretry_on_failure)Ú safe_mkdir)Ú safe_rmpath)Ú serialrun)Úsystem_namespace)Útcp_socketpair)Ú terminate)ÚTestMemoryLeak)Úunittest)Úunix_socketpair)Ú wait_for_file)Ú wait_for_pidc@sxeZdZe d¡dd„ƒZe d¡dd„ƒZe d¡dd„ƒZe d¡dd „ƒZe d¡d d „ƒZ e d¡d d „ƒZ dS)ÚTestRetryDecoratorz time.sleepcsFtdddd‡fdd„ƒ}ttdƒƒ‰| |ƒd¡| |jd¡dS)Néé)ÚretriesÚintervalÚlogfuncsxˆrˆ ¡ddqWdS)Nr%r)Úpop©)Úqueuer*úN/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_testutils.pyÚfooCs z2TestRetryDecorator.test_retry_success..fooé)rÚlistÚrangeÚ assertEqualÚ call_count)ÚselfÚsleepr-r*)r+r,Útest_retry_success?s z%TestRetryDecorator.test_retry_successcsDtdddd‡fdd„ƒ}ttdƒƒ‰| t|¡| |jd¡dS)Nr$r%)r&r'r(csxˆrˆ ¡ddqWdS)Nr%r)r)r*)r+r*r,r-Qs z2TestRetryDecorator.test_retry_failure..fooé)rr/r0Ú assertRaisesÚZeroDivisionErrorr1r2)r3r4r-r*)r+r,Útest_retry_failureNs  z%TestRetryDecorator.test_retry_failurecCs2ttdddd„ƒ}| t|¡| |jd¡dS)Nr%)Ú exceptionr'cSst‚dS)N)Ú TypeErrorr*r*r*r,r-^sz2TestRetryDecorator.test_exception_arg..foor)rÚ ValueErrorr7r;r1r2)r3r4r-r*r*r,Útest_exception_arg\s z%TestRetryDecorator.test_exception_argcCs4tdddddd„ƒ}| t|¡| |jd¡dS)Nr$)r&r'r(cSs dddS)Nr%rr*r*r*r*r,r-isz4TestRetryDecorator.test_no_interval_arg..foor)rr7r8r1r2)r3r4r-r*r*r,Útest_no_interval_arges z'TestRetryDecorator.test_no_interval_argcCs4tdddddd„ƒ}| t|¡| |jd¡dS)Nr$r%)r&r'r(cSs dddS)Nr%rr*r*r*r*r,r-ssz0TestRetryDecorator.test_retries_arg..foo)rr7r8r1r2)r3r4r-r*r*r,Útest_retries_argps z#TestRetryDecorator.test_retries_argcCs|jttddddS)Nr$r%)r&Útimeout)r7r<r)r3r4r*r*r,Útest_retries_and_timeout_argszsz0TestRetryDecorator.test_retries_and_timeout_argsN) Ú__name__Ú __module__Ú __qualname__rÚpatchr5r9r=r>r?rAr*r*r*r,r#=s    r#c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestSyncTestUtilsc CsPtt ¡ƒtt ¡ƒd}tjdtdgƒd|  tj t|¡WdQRXdS)NiŸ†zpsutil.tests.retry.__iter__r)Ú return_value) r"ÚosÚgetpidÚmaxÚpsutilZpidsrrEÚiterr7Ú NoSuchProcess)r3Znopidr*r*r,Útest_wait_for_pids z#TestSyncTestUtils.test_wait_for_pidc CsD| ¡}t|dƒ}| d¡WdQRXt|ƒtj |¡r@t‚dS)NÚwr-)Ú get_testfnÚopenÚwriter!rHÚpathÚexistsÚAssertionError)r3ÚtestfnÚfr*r*r,Útest_wait_for_file‡s  z$TestSyncTestUtils.test_wait_for_filec Cs>| ¡}t|dƒWdQRXt|ddtj |¡r:t‚dS)NrOT)Úempty)rPrQr!rHrSrTrU)r3rVr*r*r,Útest_wait_for_file_emptyŽs    z*TestSyncTestUtils.test_wait_for_file_emptyc Cs:| ¡}tjdtdgƒd| tt|¡WdQRXdS)Nzpsutil.tests.retry.__iter__r)rG)rPrrErLr7ÚIOErrorr!)r3rVr*r*r,Útest_wait_for_file_no_file•sz,TestSyncTestUtils.test_wait_for_file_no_filec CsH| ¡}t|dƒ}| d¡WdQRXt|ddtj |¡sDt‚dS)NrOr-F)Údelete)rPrQrRr!rHrSrTrU)r3rVrWr*r*r,Útest_wait_for_file_no_deletešs   z.TestSyncTestUtils.test_wait_for_file_no_deletecCstdd„dƒ}| |d¡dS)NcSsdS)Nr%r*r*r*r*r,Ú¢óz3TestSyncTestUtils.test_call_until..zret == 1r%)r r1)r3Úretr*r*r,Útest_call_until¡sz!TestSyncTestUtils.test_call_untilN) rBrCrDrNrXrZr\r^rbr*r*r*r,rFs rFc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚTestFSTestUtilsc Cs&ttƒ}| |jd¡WdQRXdS)NÚrt)rÚ__file__r1Úmode)r3rWr*r*r,Útest_open_text¨s zTestFSTestUtils.test_open_textc Cs&ttƒ}| |jd¡WdQRXdS)NÚrb)rrer1rf)r3rWr*r*r,Útest_open_binary¬s z TestFSTestUtils.test_open_binarycCs<| ¡}t|ƒtj |¡s t‚t|ƒtj |¡s8t‚dS)N)rPrrHrSÚisdirrU)r3rVr*r*r,Útest_safe_mkdir°s zTestFSTestUtils.test_safe_mkdirc Cs¦| ¡}t|dƒ ¡t|ƒtj |¡r.t‚t|ƒt |¡t|ƒtj |¡rXt‚t j dt t j dƒd.}| t ¡t|ƒWdQRX|js˜t‚WdQRXdS)NrOzpsutil.tests.os.statÚ)Ú side_effect)rPrQÚcloserrHrSrTrUÚmkdirrrEÚOSErrorÚerrnoÚEINVALr7Úcalled)r3rVÚmr*r*r,Útest_safe_rmpath·s  z TestFSTestUtils.test_safe_rmpathc Cs\| ¡}t ¡}t |¡t|ƒ | t ¡tj ||¡¡WdQRX| t ¡|¡dS)N)rPrHÚgetcwdror r1rSÚjoin)r3rVÚbaser*r*r,Ú test_chdirÊs   $zTestFSTestUtils.test_chdirN)rBrCrDrgrirkruryr*r*r*r,rc¦s rcc@s:eZdZdd„Zdd„Ze e d¡dd„ƒZdd „Z d S) ÚTestProcessUtilscCsN| ¡}t |j¡}| ¡s t‚tƒ| ¡r2t‚tjjr>t‚tjj rJt‚dS)N) Úspawn_testprocrKÚProcessÚpidÚ is_runningrUrÚtestsZ _pids_startedZ_subprocesses_started)r3ZsubpÚpr*r*r,Útest_reap_childrenÕs    z#TestProcessUtils.test_reap_childrencCsä| ¡\}}| |j|j¡| ¡s(t‚| ¡s4t‚t ¡ ¡}| ||g¡t ¡jdd}| t |ƒd¡|  ||¡|  ||¡| |  ¡t   ¡¡| |  ¡|j¡t|ƒ| ¡rÀt‚| ¡sÌt‚t|ƒ| ¡ràt‚dS)NT)Ú recursiveé)Zspawn_children_pairÚassertNotEqualr}r~rUrKr|Úchildrenr1ÚlenZassertInÚppidrHrIr)r3ÚchildZ grandchildr…r*r*r,Útest_spawn_children_pairÞs"        z)TestProcessUtils.test_spawn_children_pairz POSIX onlycCs"| ¡\}}| | ¡tj¡dS)N)Ú spawn_zombier1ÚstatusrKÚ STATUS_ZOMBIE)r3ÚparentÚzombier*r*r,Útest_spawn_zombieós z"TestProcessUtils.test_spawn_zombiecCsà| ¡}t|ƒ| |¡t|ƒt | ¡j¡}t|ƒ| |¡t|ƒtddg}tj|tj tj d}t|ƒ| |¡t|ƒ| ¡j}t|ƒ| |¡t|ƒt rÜ|  ¡\}}t|ƒt|ƒ| |¡| |¡dS)Nz-czimport time; time.sleep(60);)ÚstdoutÚstderr) r{rZassertProcessGonerKr|r}rÚPopenÚ subprocessÚPIPErrŠ)r3r€Úcmdr}rrŽr*r*r,Útest_terminateøs.        zTestProcessUtils.test_terminateN) rBrCrDrr‰rÚskipIfrrr–r*r*r*r,rzÓs rzc@s`eZdZdd„Ze e d¡dd„ƒZdd„Ze e d¡e e pDe d¡d d „ƒƒZ d d „Z d S)Ú TestNetUtilsc Cs>tƒ}t td|fd¡}| | ¡d|¡WdQRXdS)Nrl)Úaddrr%)rÚ contextlibÚclosingrr1Ú getsockname)r3ÚportÚsr*r*r,rszTestNetUtils.bind_socketz POSIX onlyc Cs¼| ¡}t|ƒ}t |¡\| |jtj¡| |jtj ¡| |  ¡|¡t j   |¡s\t‚t t  |¡j¡srt‚WdQRX| ¡}t|tjd}t |¡| |jtj¡WdQRXdS)N)Útype)rPr ršr›r1ÚfamilyÚsocketÚAF_UNIXrŸÚ SOCK_STREAMrœrHrSrTrUÚstatÚS_ISSOCKÚst_modeÚ SOCK_DGRAM)r3ÚnameÚsockr*r*r,Útest_bind_unix_sockets   z"TestNetUtils.test_bind_unix_socketc Cs|dtƒf}ttj|d\}}t |¡Lt |¡6| | ¡|¡| | ¡|¡|  | ¡|¡WdQRXWdQRXdS)Nz 127.0.0.1)r™) rrr¡ÚAF_INETršr›r1rœÚ getpeernamer„)r3r™ÚserverÚclientr*r*r,Útcp_tcp_socketpair.s   zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultcCsÂt ¡}| ¡}|jddr t‚| ¡}t|ƒ\}}zvtj  |¡sFt‚t   t  |¡j ¡s\t‚|  | ¡|d¡|  t|jddƒd¡|  | ¡|¡|  | ¡|¡Wd| ¡| ¡XdS)NÚunix)Úkindrƒ)rKr|Únum_fdsZ connectionsrUrPr rHrSrTr¤r¥r¦r1r†rœr¬rn)r3r€r²r¨r­r®r*r*r,Útest_unix_socketpair9s z!TestNetUtils.test_unix_socketpairc CsÎtƒ¾}t t¡}t t¡}x:|D]2}||jd7<|| tjtj¡d7<q"W|  |tj d¡t ƒr‚|  |tj d¡t rœtrœ|  |tjd¡|  |tjd¡|  |tjd¡WdQRXdS)Nr%rƒ)r Ú collectionsÚ defaultdictÚintr Ú getsockoptr¡Ú SOL_SOCKETÚSO_TYPEZassertGreaterEqualr«rÚAF_INET6rrr¢r£r§)r3ZsocksZfamsÚtypesržr*r*r,Útest_create_socketsMs    z TestNetUtils.test_create_socketsN) rBrCrDrrr—rrªr¯rrr³r¼r*r*r*r,r˜s  r˜c@sNeZdZdd„Zdd„Zeƒe ed¡dd„ƒƒZ dd „Z d d „Z d d „Z dS)ÚTestMemLeakClasscs8‡fdd„}ddi‰|j|ddd| ˆdd¡dS) Ncsˆdd7<dS)NÚcntr%r*r*)r¾r*r,Úfunbsz(TestMemLeakClass.test_times..funr¾ré é)ÚtimesÚ warmup_timesé)Úexecuter1)r3r¿r*)r¾r,Ú test_timesas zTestMemLeakClass.test_timescCs||jt|jdd„dd|jt|jdd„dd|jt|jdd„dd|jt|jd d„dd |jt|jd d„dd dS) NcSsdS)Nrr*r*r*r*r,r_ir`z1TestMemLeakClass.test_param_err..r)rÂcSsdS)Nrr*r*r*r*r,r_jr`éÿÿÿÿcSsdS)Nrr*r*r*r*r,r_kr`)rÃcSsdS)Nrr*r*r*r*r,r_lr`)Ú tolerancecSsdS)Nrr*r*r*r*r,r_mr`)r&)r7r<rÅ)r3r*r*r,Útest_param_errhs zTestMemLeakClass.test_param_errz skipped on CIcCs4g}|fdd„}z|jtd|j|ddWd~XdS)NcSs| dd¡dS)NÚxxxxxxxxxxxxxxxxxxxxxxxxi)Úappend)Úlsr*r*r,r¿tsz+TestMemLeakClass.test_leak_mem..funz extra-memé2)rÂ)ÚassertRaisesRegexrUrÅ)r3rÌr¿r*r*r,Ú test_leak_memos  zTestMemLeakClass.test_leak_memcs8‡‡fdd„}g‰trdnd}ˆ td|ˆj|¡dS)Ncs"ttƒ}ˆ |j¡ˆ |¡dS)N)rQreZ addCleanuprnrË)rW)Úboxr3r*r,r¿s z1TestMemLeakClass.test_unclosed_files..funÚfdÚhandlez unclosed )rrÎrUrÅ)r3r¿r±r*)rÐr3r,Útest_unclosed_files~s   z$TestMemLeakClass.test_unclosed_filescs>‡fdd„}g‰d}|j||ddd| tˆƒ|d¡dS)Ncsˆ dd¡dS)NrÊi)rËr*)rÌr*r,r¿Šsz,TestMemLeakClass.test_tolerance..funédri€ )rÂrÃrÈr%)rÅr1r†)r3r¿rÂr*)rÌr,Útest_tolerance‰s   zTestMemLeakClass.test_tolerancec Csddd„}| t|¡| t¡| t|¡WdQRXdd„}| t¡| t|¡WdQRXdS)NcSs dddS)Nr%rr*r*r*r*r,r¿“sz0TestMemLeakClass.test_execute_w_exc..funcSsdS)Nr*r*r*r*r,r¿™s)Z execute_w_excr8r7rprU)r3r¿r*r*r,Útest_execute_w_exc’s   z#TestMemLeakClass.test_execute_w_excN) rBrCrDrÆrÉrrr—r rÏrÓrÕrÖr*r*r*r,r½^s  r½c@seZdZdd„Zdd„ZdS)ÚTestTestingUtilscCsLt ¡}t|ƒ}| ¡dd„| |j¡Dƒdd}| |ƒ| ¡¡dS)NcSsg|]}|ddkr|‘qS)r%r‡r*)Ú.0Úxr*r*r,ú ¥sz;TestTestingUtils.test_process_namespace..r)rKr|rÚtestrLÚgettersr1r‡)r3r€Únsr¿r*r*r,Útest_process_namespace¡s z'TestTestingUtils.test_process_namespacecCs:tƒ}dd„| |j¡Dƒdd}| |ƒt ¡¡dS)NcSsg|]}|ddkr|‘qS)r%Ú net_if_addrsr*)rØrÙr*r*r,rÚªsz:TestTestingUtils.test_system_namespace..r)rrLrÜr1rKrß)r3rÝr¿r*r*r,Útest_system_namespace¨sz&TestTestingUtils.test_system_namespaceN)rBrCrDrÞràr*r*r*r,rןsr×c@seZdZdd„ZdS)ÚTestOtherUtilscCs.tt dd¡dddƒƒst‚ttƒƒr*t‚dS)Nr-za b cr%rƒr.)rr´Ú namedtuplerUÚtuple)r3r*r*r,Útest_is_namedtuple°sz!TestOtherUtils.test_is_namedtupleN)rBrCrDrär*r*r*r,rá®sráÚ__main__)Ú run_from_name)8Ú__doc__r´ršrqrHr¡r¤r“rKrrrZpsutil._commonrrrZ psutil.testsrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#rFrcrzr˜r½r×rárBZpsutil.tests.runnerrærer*r*r*r,Ú sl                                 B'-DG @