3 ̪e9@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl m Z ddl m Z ddlmZddlmZddlmZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl m Z ddl m!Z!ddl m"Z"ddl m#Z#ddl m$Z$ddl m%Z%ddl m&Z&ddl m'Z'ddl m(Z(dd l m)Z)dd!l m*Z*dd"l m+Z+dd#l m,Z,dd$l m-Z-dd%l m.Z.Gd&d'd'eZ/Gd(d)d)eZ0Gd*d+d+eZ1Gd,d-d-eZ2Gd.d/d/eZ3e(Gd0d1d1eZ4Gd2d3d3eZ5Gd4d5d5eZ6e7d6krdd7l8m9Z9e9e:dS)8z1Tests for testing utils (psutil.tests namespace).N)FREEBSD)NETBSD)POSIX) open_binary) open_text) supports_ipv6) CI_TESTING)COVERAGE)HAS_CONNECTIONS_UNIX) PYTHON_EXE)PYTHON_EXE_ENV)PsutilTestCase)TestMemoryLeak) bind_socket)bind_unix_socket) call_until)chdir)create_sockets)filter_proc_connections) get_free_port) is_namedtuple)mock)process_namespace) reap_children)retry)retry_on_failure) safe_mkdir) safe_rmpath) serialrun)system_namespace)tcp_socketpair) terminate)unix_socketpair) wait_for_file) wait_for_pidc@sxeZdZejdddZejdddZejdddZejddd Zejdd d Z ejdd d Z dS)TestRetryDecoratorz time.sleepcsFtddddfdd}ttd|j|d|j|jddS)N)retriesintervallogfuncsxrjddqWdS)Nr'r)pop)queuer,G/usr/local/lib64/python3.6/site-packages/psutil/tests/test_testutils.pyfooDs z2TestRetryDecorator.test_retry_success..foo)rlistrange assertEqual call_count)selfsleepr/r,)r-r.test_retry_success@s z%TestRetryDecorator.test_retry_successcsDtddddfdd}ttd|jt||j|jddS)Nr&r')r(r)r*csxrjddqWdS)Nr'r)r+r,)r-r,r.r/Rs z2TestRetryDecorator.test_retry_failure..foo)rr1r2 assertRaisesZeroDivisionErrorr3r4)r5r6r/r,)r-r.test_retry_failureOs  z%TestRetryDecorator.test_retry_failurecCs2ttdddd}|jt||j|jddS)Nr') exceptionr)cSstdS)N) TypeErrorr,r,r,r.r/_sz2TestRetryDecorator.test_exception_arg..foor)r ValueErrorr9r=r3r4)r5r6r/r,r,r.test_exception_arg]s z%TestRetryDecorator.test_exception_argcCs4tdddddd}|jt||j|jddS)Nr&)r(r)r*cSs dddS)Nr'rr,r,r,r,r.r/jsz4TestRetryDecorator.test_no_interval_arg..foor)rr9r:r3r4)r5r6r/r,r,r.test_no_interval_argfs z'TestRetryDecorator.test_no_interval_argcCs4tdddddd}|jt||j|jddS)Nr&r')r(r)r*cSs dddS)Nr'rr,r,r,r,r.r/ssz0TestRetryDecorator.test_retries_arg..foo)rr9r:r3r4)r5r6r/r,r,r.test_retries_argqs z#TestRetryDecorator.test_retries_argcCs|jttddddS)Nr&r')r(timeout)r9r>r)r5r6r,r,r.test_retries_and_timeout_argszsz0TestRetryDecorator.test_retries_and_timeout_argsN) __name__ __module__ __qualname__rpatchr7r;r?r@rArCr,r,r,r.r%?s    r%c@s<eZdZddZddZddZddZd d Zd d Zd S)TestSyncTestUtilsc CsPttjttjd}tjdtdgd|j tj t|WdQRXdS)Nizpsutil.tests.retry.__iter__r) return_value) r$osgetpidmaxpsutilZpidsrrGiterr9 NoSuchProcess)r5Znopidr,r,r.test_wait_for_pids z#TestSyncTestUtils.test_wait_for_pidc CsF|j}t|d}|jdWdQRXt|tjj| sBtdS)Nwr/) get_testfnopenwriter#rJpathexistsAssertionError)r5testfnfr,r,r.test_wait_for_files  z$TestSyncTestUtils.test_wait_for_filec Cs@|j}t|dWdQRXt|ddtjj| ssz3TestSyncTestUtils.test_call_until..zret == 1r')rr3)r5retr,r,r.test_call_untilsz!TestSyncTestUtils.test_call_untilN) rDrErFrPrZr\r^r`rcr,r,r,r.rHs rHc@s4eZdZddZddZddZddZd d Zd S) TestFSTestUtilsc Cs&tt}|j|jdWdQRXdS)Nr)r__file__r3mode)r5rYr,r,r.test_open_texts zTestFSTestUtils.test_open_textc Cs&tt}|j|jdWdQRXdS)Nrb)rrfr3rg)r5rYr,r,r.test_open_binarys z TestFSTestUtils.test_open_binarycCs<|j}t|tjj|s tt|tjj|s8tdS)N)rRrrJrUisdirrW)r5rXr,r,r.test_safe_mkdirs zTestFSTestUtils.test_safe_mkdircCs|j}t|djt|tjj| s0tt|tj|t|tjj| s\tt j dt t j dd.}|jt t|WdQRX|jstWdQRXdS)NrQzpsutil.tests.os.stat) side_effect)rRrScloserrJrUrVrWmkdirrrGOSErrorerrnoEINVALr9called)r5rXmr,r,r.test_safe_rmpaths  z TestFSTestUtils.test_safe_rmpathc Cs\|j}tj}tj|t| |jtjtjj||WdQRX|jtj|dS)N)rRrJgetcwdrprr3rUjoin)r5rXbaser,r,r. test_chdirs   $zTestFSTestUtils.test_chdirN)rDrErFrhrjrlrvrzr,r,r,r.rds rdc@s:eZdZddZddZeje dddZdd Z d S) TestProcessUtilscCsT|j}tj|j}|js tt|j s4ttjj sBttjj sPtdS)N) spawn_testprocrMProcesspid is_runningrWrtestsZ _pids_startedZ_subprocesses_started)r5Zsubppr,r,r.test_reap_childrens  z#TestProcessUtils.test_reap_childrencCs|j\}}|j|j|j|js(t|js4ttjj}|j||gtjjdd}|jt |d|j |||j |||j|j t j |j|j |jt||j st|jstt||j stdS)NT) recursive)Zspawn_children_pairassertNotEqualr~rrWrMr}childrenr3lenZassertInppidrJrKr!)r5childZ grandchildrr,r,r.test_spawn_children_pairs"       z)TestProcessUtils.test_spawn_children_pairz POSIX onlycCs"|j\}}|j|jtjdS)N) spawn_zombier3statusrM STATUS_ZOMBIE)r5parentzombier,r,r.test_spawn_zombies z"TestProcessUtils.test_spawn_zombiecCs|j}t||j|jt|tj|jj}t||j|jt|tddg}tj|tj tj t d}t||j|jt||jj}t||j|jt|t r|j \}}t|t||j|j|j|jdS)Nz-czimport time; time.sleep(60);)stdoutstderrenv) r|r!Z assertPidGoner~rMr}r Popen subprocessPIPEr rr)r5rcmdr~rrr,r,r.test_terminates6        zTestProcessUtils.test_terminateN) rDrErFrrunittestskipIfrrrr,r,r,r.r{s r{c@s`eZdZddZeje dddZddZeje deje pDe dd d Z d d Z d S) TestNetUtilsc Cs>t}tjtd|fd}|j|jd|WdQRXdS)Nrm)addrr')r contextlibclosingrr3 getsockname)r5portsr,r,r.rszTestNetUtils.bind_socketz POSIX onlycCs|j}t|}tj|\|j|jtj|j|jtj |j|j |t j j |s\ttjt j|jsrtWdQRX|j}t|tjd}tj||j|jtjWdQRXdS)N)type)rRrrrr3familysocketAF_UNIXr SOCK_STREAMrrJrUrVrWstatS_ISSOCKst_mode SOCK_DGRAM)r5namesockr,r,r.test_bind_unix_socket s   z"TestNetUtils.test_bind_unix_socketcCs|dtf}ttj|d\}}tj|Ltj|6|j|j||j|j||j |j|WdQRXWdQRXdS)Nz 127.0.0.1)r) rr rAF_INETrrr3r getpeernamer)r5rserverclientr,r,r.tcp_tcp_socketpair0s   zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc Cstj}|j}|jt|jddg|j}t|\}}zztj j |sNt t j tj |jsdt |j|j|d|jtt|jddd|j|j||j|j|Wd|j|jXdS)Nunix)kindr)rMr}num_fdsr3rZ connectionsrRr"rJrUrVrWrrrrrrro)r5rrrrrr,r,r.test_unix_socketpair;s  z!TestNetUtils.test_unix_socketpairc Cst}tjt}tjt}x:|D]2}||jd7<||jtjtjd7<q"W|j |tj dt r|j |tj dt rtr|j |tjd|j |tjd|j |tjdWdQRXdS)Nr'r)r collections defaultdictintr getsockoptr SOL_SOCKETSO_TYPEZassertGreaterEqualrrAF_INET6rr rrr)r5ZsocksZfamstypesrr,r,r.test_create_socketsTs    z TestNetUtils.test_create_socketsN) rDrErFrrrrrrrrrrr,r,r,r.rs rc@s`eZdZeddZddZeejedeje dddZ d d Z d d Z d dZ dS)TestMemLeakClasscs8fdd}ddi|j|ddd|jdddS) Ncsdd7<dS)Ncntr'r,r,)rr,r.funisz(TestMemLeakClass.test_times..funrr )times warmup_times)executer3)r5rr,)rr. test_timesgs zTestMemLeakClass.test_timescCs||jt|jdddd|jt|jddd d|jt|jdddd|jt|jd ddd |jt|jd ddd dS)NcSsdS)Nrr,r,r,r,r.raqsz1TestMemLeakClass.test_param_err..r)rcSsdS)Nrr,r,r,r,r.rarsr'cSsdS)Nrr,r,r,r,r.rass)rcSsdS)Nrr,r,r,r,r.rats) tolerancecSsdS)Nrr,r,r,r,r.raus)r(rrr)r9r>r)r5r,r,r.test_param_errps zTestMemLeakClass.test_param_errz skipped on CIzskipped during test coveragec Cs4g}|fdd}z|jtd|j|ddWd~XdS)NcSs|jddddS)Nx|i)append)lsr,r,r.r}sz+TestMemLeakClass.test_leak_mem..funz extra-mem2)r)assertRaisesRegexrWr)r5rrr,r,r. test_leak_memws  zTestMemLeakClass.test_leak_memcs8fdd}gtrdnd}jtd|j|dS)Ncs"tt}j|jj|dS)N)rSrfZ addCleanupror)rY)boxr5r,r.rs z1TestMemLeakClass.test_unclosed_files..funfdhandlez unclosed )rrrWr)r5rrr,)rr5r.test_unclosed_filess  z$TestMemLeakClass.test_unclosed_filescs>fdd}gd}|j||dd d|jt|ddS) NcsjddddS)Nri)rr,)rr,r.rsz,TestMemLeakClass.test_tolerance..fundri)rrrr'i i )rr3r)r5rrr,)rr.test_tolerances  zTestMemLeakClass.test_tolerancecCsddd}|jt||jt|jt|WdQRXdd}|jt|jt|WdQRXdS)NcSs dddS)Nr'rr,r,r,r,r.fun_1sz2TestMemLeakClass.test_execute_w_exc..fun_1cSsdS)Nr,r,r,r,r.fun_2sz2TestMemLeakClass.test_execute_w_exc..fun_2)Z execute_w_excr:r9rqrW)r5rrr,r,r.test_execute_w_excs   z#TestMemLeakClass.test_execute_w_excN)rDrErFrrrrrrr rrrrr,r,r,r.res    rc@seZdZddZddZdS)TestTestingUtilscCsLtj}t|}|jdd|j|jDdd}|j||jdS)NcSsg|]}|ddkr|qS)r'rr,).0rr,r,r. sz;TestTestingUtils.test_process_namespace..r)rMr}rtestrNgettersr3r)r5rnsrr,r,r.test_process_namespaces z'TestTestingUtils.test_process_namespacecCs:t}dd|j|jDdd}|j|tjdS)NcSsg|]}|ddkr|qS)r' net_if_addrsr,)rrr,r,r.rsz:TestTestingUtils.test_system_namespace..r)rrNrr3rMr)r5rrr,r,r.test_system_namespacesz&TestTestingUtils.test_system_namespaceN)rDrErFrrr,r,r,r.rsrc@seZdZddZdS)TestOtherUtilscCs0ttjdddddsttt s,tdS)Nr/za b cr'rr0)rr namedtuplerWtuple)r5r,r,r.test_is_namedtuplesz!TestOtherUtils.test_is_namedtupleN)rDrErFrr,r,r,r.rsr__main__) run_from_name);__doc__rrrrrJrrrrrMZ psutil.testsrrrZpsutil._commonrrrrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%rHrdr{rrrrrDZpsutil.tests.runnerrrfr,r,r,r.sr                                   @&-HK H