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%)Z 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&Ztimeout)r7r;r)r3r4r*r*r,Útest_retries_and_timeout_argszsz0TestRetryDecorator.test_retries_and_timeout_argsN) Ú__name__Ú __module__Ú __qualname__rÚpatchr5r9r<r=r>r?r*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ÚpsutilZpidsrrCÚiterr7Z 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!rFÚ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)NrLT)Úempty)rMrNr!rFrPrQrR)r3rSr*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)rE)rMrrCrJr7ÚIOErrorr!)r3rSr*r*r,Útest_wait_for_file_no_file•sz,TestSyncTestUtils.test_wait_for_file_no_filec CsH| ¡}t|dƒ}| d¡WdQRXt|ddtj |¡sDt‚dS)NrLr-F)Údelete)rMrNrOr!rFrPrQrR)r3rSrTr*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)r3Zretr*r*r,Útest_call_until¡sz!TestSyncTestUtils.test_call_untilN) r@rArBrKrUrWrYr[r^r*r*r*r,rDs rDc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚTestFSTestUtilsc Cs&ttƒ}| |jd¡WdQRXdS)NZrt)rÚ__file__r1Úmode)r3rTr*r*r,Útest_open_text¨s zTestFSTestUtils.test_open_textc Cs&ttƒ}| |jd¡WdQRXdS)NÚrb)rr`r1ra)r3rTr*r*r,Útest_open_binary¬s z TestFSTestUtils.test_open_binarycCs<| ¡}t|ƒtj |¡s t‚t|ƒtj |¡s8t‚dS)N)rMrrFrPÚisdirrR)r3rSr*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)NrLzpsutil.tests.os.statÚ)Z side_effect)rMrNÚcloserrFrPrQrRÚmkdirrrCÚOSErrorÚerrnoZEINVALr7Zcalled)r3rSÚmr*r*r,Útest_safe_rmpath·s  z TestFSTestUtils.test_safe_rmpathc Cs\| ¡}t ¡}t |¡t|ƒ | t ¡tj ||¡¡WdQRX| t ¡|¡dS)N)rMrFÚgetcwdrir r1rPÚjoin)r3rSÚbaser*r*r,Ú test_chdirÊs   $zTestFSTestUtils.test_chdirN)r@rArBrbrdrfrmrqr*r*r*r,r_¦s r_c@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_testprocrIÚProcessÚpidÚ is_runningrRrZtestsZ _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ÚassertNotEqualrurvrRrIrtÚchildrenr1ÚlenZassertInÚppidrFrGr)r3ZchildZ grandchildr|r*r*r,Útest_spawn_children_pairÞs"        z)TestProcessUtils.test_spawn_children_pairz POSIX onlycCs"| ¡\}}| | ¡tj¡dS)N)Ú spawn_zombier1ZstatusrIZ 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) rsrZassertProcessGonerIrtrurÚPopenÚ subprocessÚPIPErr€)r3rwÚcmdrurr‚r*r*r,Útest_terminateøs.        zTestProcessUtils.test_terminateN) r@rArBrxrrÚskipIfrrƒrŠr*r*r*r,rrÓs rrc@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)Nrg)Úaddrr%)rÚ contextlibÚclosingrr1Ú getsockname)r3ZportÚ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)rMr rŽrr1ÚfamilyÚsocketÚAF_UNIXr’Ú SOCK_STREAMrrFrPrQrRÚstatÚS_ISSOCKÚst_modeÚ SOCK_DGRAM)r3ÚnameZsockr*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Žrr1rÚ 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)NZunix)Úkindrz)rIrtÚnum_fdsZ connectionsrRrMr rFrPrQr—r˜r™r1r}rržrh)r3rwr£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%rz)r Ú collectionsÚ defaultdictÚintr“Z getsockoptr”Z SOL_SOCKETZSO_TYPEZassertGreaterEqualrrZAF_INET6rrr•r–rš)r3ZsocksZfamsÚtypesr‘r*r*r,Útest_create_socketsMs    z TestNetUtils.test_create_socketsN) r@rArBrrr‹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¯)ÚassertRaisesRegexrRr²)r3r¹r¬r*r*r,Ú test_leak_memos  zTestMemLeakClass.test_leak_memcs8‡‡fdd„}g‰trdnd}ˆ td|ˆj|¡dS)Ncs"ttƒ}ˆ |j¡ˆ |¡dS)N)rNr`Z addCleanuprhr¸)rT)Úboxr3r*r,r¬s z1TestMemLeakClass.test_unclosed_files..funÚfdZhandlez unclosed )rr»rRr²)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_excr8r7rjrR)r3r¬r*r*r,Útest_execute_w_exc’s   z#TestMemLeakClass.test_execute_w_excN) r@rArBr³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)rIrtrZtestrJÚgettersr1r~)r3rwÚ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)rrJrÇr1rIrÊ)r3rÈr¬r*r*r,Útest_system_namespace¨sz&TestTestingUtils.test_system_namespaceN)r@rArBrÉrËr*r*r*r,rßsrÃc@seZdZdd„ZdS)ÚTestOtherUtilscCs.tt dd¡dddƒƒst‚ttƒƒr*t‚dS)Nr-za b cr%rzr.)rr¥Ú namedtuplerRÚtuple)r3r*r*r,Útest_is_namedtuple°sz!TestOtherUtils.test_is_namedtupleN)r@rArBrÏr*r*r*r,rÌ®srÌÚ__main__)Ú run_from_name)8Ú__doc__r¥rŽrkrFr”r—r‡rIrrrZpsutil._commonrrrZ psutil.testsrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#rDr_rrrŒrªrÃrÌr@Zpsutil.tests.runnerrÑr`r*r*r*r,Ú sl                                 B'-DG @