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 Cs4| ¡}t|dƒ}| d¡WdQRXt|ƒdS)NÚwr-)Ú get_testfnÚopenÚwriter!)r3ÚtestfnÚfr*r*r,Útest_wait_for_file‡s  z$TestSyncTestUtils.test_wait_for_filec Cs.| ¡}t|dƒWdQRXt|dddS)NrLT)Úempty)rMrNr!)r3rPr*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!)r3rPr*r*r,Útest_wait_for_file_no_file•sz,TestSyncTestUtils.test_wait_for_file_no_filec Cs8| ¡}t|dƒ}| d¡WdQRXt|dddS)NrLr-F)Údelete)rMrNrOr!)r3rPrQr*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@rArBrKrRrTrVrXr[r*r*r*r,rDs rDc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚTestFSTestUtilsc Cs&ttƒ}| |jd¡WdQRXdS)NZrt)rÚ__file__r1Úmode)r3rQr*r*r,Útest_open_text¨s zTestFSTestUtils.test_open_textc Cs&ttƒ}| |jd¡WdQRXdS)NÚrb)rr]r1r^)r3rQr*r*r,Útest_open_binary¬s z TestFSTestUtils.test_open_binarycCs| ¡}t|ƒt|ƒdS)N)rMr)r3rPr*r*r,Útest_safe_mkdir°szTestFSTestUtils.test_safe_mkdirc Cs|| ¡}t|dƒ ¡t|ƒt|ƒt |¡t|ƒtjdtt j dƒd$}|  t¡t|ƒWdQRXWdQRXdS)NrLzpsutil.tests.os.statÚ)Z side_effect) rMrNÚcloserrFÚmkdirrrCÚOSErrorÚerrnoZEINVALr7)r3rPÚmr*r*r,Útest_safe_rmpath·s  z TestFSTestUtils.test_safe_rmpathc Cs\| ¡}t ¡}t |¡t|ƒ | t ¡tj ||¡¡WdQRX| t ¡|¡dS)N)rMrFÚgetcwdrer r1ÚpathÚjoin)r3rPÚbaser*r*r,Ú test_chdirÊs   $zTestFSTestUtils.test_chdirN)r@rArBr_rarbrirnr*r*r*r,r\¦s r\c@s:eZdZdd„Zdd„Ze e d¡dd„ƒZdd „Z d S) ÚTestProcessUtilscCs| ¡}t |j¡}tƒdS)N)Úspawn_testprocrIÚProcessÚpidr)r3ZsubpÚpr*r*r,Útest_reap_childrenÕs z#TestProcessUtils.test_reap_childrencCs¨| ¡\}}| |j|j¡t ¡ ¡}| ||g¡t ¡jdd}| t|ƒd¡| ||¡| ||¡| |  ¡t   ¡¡| |  ¡|j¡t |ƒt |ƒdS)NT)Ú recursiveé) Zspawn_children_pairÚassertNotEqualrrrIrqÚchildrenr1ÚlenZassertInÚppidrFrGr)r3ZchildZ grandchildrxr*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) rprZassertProcessGonerIrqrrrÚPopenÚ subprocessÚPIPErr|)r3rsÚcmdrrr}r~r*r*r,Útest_terminateøs.        zTestProcessUtils.test_terminateN) r@rArBrtr{rÚskipIfrrr†r*r*r*r,roÓs roc@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)Nrc)Úaddrr%)rÚ contextlibÚclosingrr1Ú getsockname)r3ZportÚsr*r*r,rszTestNetUtils.bind_socketz POSIX onlyc Cs–| ¡}t|ƒ}t |¡6| |jtj¡| |jtj ¡| |  ¡|¡WdQRX| ¡}t|tj d}t |¡| |jtj ¡WdQRXdS)N)Útype) rMr rŠr‹r1ÚfamilyÚsocketÚAF_UNIXrŽÚ SOCK_STREAMrŒÚ 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Šr‹r1rŒÚ getpeernamerw)r3r‰ÚserverÚclientr*r*r,Útcp_tcp_socketpair.s   zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultcCsŒt ¡}| ¡}| ¡}t|ƒ\}}zP| | ¡|d¡| t|jddƒd¡| | ¡|¡| |  ¡|¡Wd|  ¡|  ¡XdS)NrvZunix)Úkind) rIrqÚnum_fdsrMr r1ryZ connectionsrŒr—rd)r3rsrœ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%rv)r Ú collectionsÚ defaultdictÚintrZ getsockoptrZ SOL_SOCKETZSO_TYPEZassertGreaterEqualr–rZAF_INET6rrr‘r’r“)r3ZsocksZfamsÚtypesrr*r*r,Útest_create_socketsMs    z TestNetUtils.test_create_socketsN) r@rArBrrr‡rr•ršrrrr¢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,rYirZz1TestMemLeakClass.test_param_err..r)r¨cSsdS)Nrr*r*r*r*r,rYjrZéÿÿÿÿcSsdS)Nrr*r*r*r*r,rYkrZ)r©cSsdS)Nrr*r*r*r*r,rYlrZ)Ú tolerancecSsdS)Nrr*r*r*r*r,rYmrZ)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¨)ÚassertRaisesRegexÚAssertionErrorr«)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 addCleanuprdr±)rQ)Úboxr3r*r,r¥s z1TestMemLeakClass.test_unclosed_files..funÚfdZhandlez unclosed )rr´rµr«)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«r1ry)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_excr8r7rfrµ)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%rzr*)Ú.0Úxr*r*r,ú ¥sz;TestTestingUtils.test_process_namespace..r)rIrqrZtestrJÚgettersr1rz)r3rsÚ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)ÚTestOtherUtilscCsdS)Nr*)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ŠrgrFrÚstatrƒrIrrrZpsutil._commonrrrZ psutil.testsrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#rDr\rorˆr£r½rÆr@Zpsutil.tests.runnerrÉr]r*r*r*r,Ú sl                                 B'-DG @