U Ã|ýf†:ã@sždZddlZddlZddlZddlZddlZddlZddlZddlZddl 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'eƒZ/Gd(d)„d)eƒZ0Gd*d+„d+eƒZ1Gd,d-„d-eƒZ2Gd.d/„d/eƒZ3e(Gd0d1„d1eƒƒZ4Gd2d3„d3eƒZ5Gd4d5„d5eƒZ6e7d6kršdd7l8m9Z9e9e:ƒdS)8z1Tests for testing utils (psutil.tests namespace).éN)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Ú open_binary)Ú open_text)Ú supports_ipv6)Ú CI_TESTING)ÚCOVERAGE)ÚHAS_NET_CONNECTIONS_UNIX)Ú PYTHON_EXE)ÚPYTHON_EXE_ENV)ÚPsutilTestCase)ÚTestMemoryLeak)Ú bind_socket)Úbind_unix_socket)Ú call_until)Úchdir)Úcreate_sockets)Úfilter_proc_net_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@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ÚintervalZlogfuncsˆrˆ ¡ddqdS©Nr'r©Úpop©©Úqueuer.úN/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_testutils.pyÚfooDs z2TestRetryDecorator.test_retry_success..fooé)rÚlistÚrangeÚ assertEqualÚ call_count©ÚselfÚsleepr2r.r/r1Útest_retry_success@s   z%TestRetryDecorator.test_retry_successcsDtdddd‡fdd„ƒ}ttdƒƒ‰| t|¡| |jd¡dS)Nr&r'r(csˆrˆ ¡ddqdSr+r,r.r/r.r1r2Rs z2TestRetryDecorator.test_retry_failure..fooé)rr4r5Ú assertRaisesÚZeroDivisionErrorr6r7r8r.r/r1Útest_retry_failureOs    z%TestRetryDecorator.test_retry_failurecCs2ttdddd„ƒ}| t|¡| |jd¡dS)Nr')Ú exceptionr*cSst‚dS©N)Ú TypeErrorr.r.r.r1r2_sz2TestRetryDecorator.test_exception_arg..foor)rÚ ValueErrorr=rBr6r7r8r.r.r1Útest_exception_arg]s   z%TestRetryDecorator.test_exception_argcCs4tdddddd„ƒ}| t|¡| |jd¡dS)Nr&r(cSs dddSr+r.r.r.r.r1r2jsz4TestRetryDecorator.test_no_interval_arg..foor©rr=r>r6r7r8r.r.r1Útest_no_interval_argfs   z'TestRetryDecorator.test_no_interval_argcCs4tdddddd„ƒ}| t|¡| |jd¡dS)Nr&r'r(cSs dddSr+r.r.r.r.r1r2ssz0TestRetryDecorator.test_retries_arg..foorEr8r.r.r1Útest_retries_argqs   z#TestRetryDecorator.test_retries_argcCs|jttddddS)Nr&r')r)Útimeout)r=rCr)r9r:r.r.r1Útest_retries_and_timeout_argszsz0TestRetryDecorator.test_retries_and_timeout_argsN) Ú__name__Ú __module__Ú __qualname__rÚpatchr;r?rDrFrGrIr.r.r.r1r%?s     r%c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestSyncTestUtilsc CsPtt ¡ƒtt ¡ƒd}tjdtdgƒd|  tj t|¡W5QRXdS)NiŸ†úpsutil.tests.retry.__iter__r©Z return_value) r$ÚosÚgetpidÚmaxÚpsutilZpidsrrMÚiterr=Z NoSuchProcess)r9Znopidr.r.r1Útest_wait_for_pid€s z#TestSyncTestUtils.test_wait_for_pidc CsD| ¡}t|dƒ}| d¡W5QRXt|ƒtj |¡r@t‚dS)NÚwr2©Ú get_testfnÚopenÚwriter#rQÚpathÚexistsÚAssertionError©r9ÚtestfnÚfr.r.r1Útest_wait_for_file†s  z$TestSyncTestUtils.test_wait_for_filec Cs>| ¡}t|dƒW5QRXt|ddtj |¡r:t‚dS)NrWT)Úempty)rYrZr#rQr\r]r^©r9r`r.r.r1Útest_wait_for_file_emptys    z*TestSyncTestUtils.test_wait_for_file_emptyc Cs:| ¡}tjdtdgƒd| tt|¡W5QRXdS)NrOrrP)rYrrMrUr=ÚIOErrorr#rdr.r.r1Útest_wait_for_file_no_file”sz,TestSyncTestUtils.test_wait_for_file_no_filec CsH| ¡}t|dƒ}| d¡W5QRXt|ddtj |¡sDt‚dS)NrWr2F)ÚdeleterXr_r.r.r1Útest_wait_for_file_no_delete™s   z.TestSyncTestUtils.test_wait_for_file_no_deletecCstdd„dƒ}| |d¡dS)NcSsdS)Nr'r.r.r.r.r1Ú¡óz3TestSyncTestUtils.test_call_until..zret == 1r')rr6)r9Úretr.r.r1Útest_call_until sz!TestSyncTestUtils.test_call_untilN) rJrKrLrVrbrergrirmr.r.r.r1rNs rNc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚTestFSTestUtilsc Cs&ttƒ}| |jd¡W5QRXdS)NÚr)rÚ__file__r6Úmode©r9rar.r.r1Útest_open_text¦s zTestFSTestUtils.test_open_textc Cs&ttƒ}| |jd¡W5QRXdS)NÚrb)rrpr6rqrrr.r.r1Útest_open_binaryªs z TestFSTestUtils.test_open_binarycCs<| ¡}t|ƒtj |¡s t‚t|ƒtj |¡s8t‚dSrA)rYrrQr\Úisdirr^rdr.r.r1Ú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|ƒW5QRX|js˜t‚W5QRXdS)NrWzpsutil.tests.os.statÚ)Z side_effect)rYrZÚcloserrQr\r]r^ÚmkdirrrMÚOSErrorÚerrnoÚEINVALr=Úcalled)r9r`Úmr.r.r1Útest_safe_rmpathµs   ÿ z TestFSTestUtils.test_safe_rmpathc Cs\| ¡}t ¡}t |¡t|ƒ | t ¡tj ||¡¡W5QRX| t ¡|¡dSrA)rYrQÚgetcwdrzrr6r\Újoin)r9r`Úbaser.r.r1Ú test_chdirÉs   $zTestFSTestUtils.test_chdirN)rJrKrLrsrurwr€r„r.r.r.r1rn¥s rnc@s:eZdZdd„Zdd„Ze e d¡dd„ƒZdd „Z d S) ÚTestProcessUtilscCsN| ¡}t |j¡}| ¡s t‚tƒ| ¡r2t‚tjjr>t‚tjj rJt‚dSrA) Úspawn_testprocrTÚProcessÚpidÚ is_runningr^rÚtestsZ _pids_startedZ_subprocesses_started)r9ZsubpÚpr.r.r1Ú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‰r^rTr‡Úchildrenr6ÚlenZassertInÚppidrQrRr!)r9ÚchildZ grandchildrr.r.r1Útest_spawn_children_pairÜs"        z)TestProcessUtils.test_spawn_children_pairú POSIX onlycCs"| ¡\}}| | ¡tj¡dSrA)Ú spawn_zombier6ÚstatusrTZ STATUS_ZOMBIE)r9Ú_parentÚzombier.r.r1Útest_spawn_zombieñs z"TestProcessUtils.test_spawn_zombiecCsî| ¡}t|ƒ| |j¡t|ƒt | ¡j¡}t|ƒ| |j¡t|ƒtddg}tj|tj tj t d}t|ƒ| |j¡t|ƒ| ¡j}t|ƒ| |j¡t|ƒt rê|  ¡\}}t|ƒt|ƒ| |j¡| |j¡dS)Nz-cz3import time; [time.sleep(0.1) for x in range(100)];)ÚstdoutÚstderrÚenv) r†r!Z assertPidGonerˆrTr‡r ÚPopenÚ subprocessÚPIPEr rr–)r9r‹ÚcmdrˆÚparentr™r.r.r1Útest_terminateös>  ýü     zTestProcessUtils.test_terminateN) rJrKrLrŒr”ÚunittestÚskipIfrršr£r.r.r.r1r…Òs    r…c@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|¡W5QRXdS)Nrx©Úaddrr')rÚ contextlibÚclosingrr6Ú getsockname)r9ÚportÚsr.r.r1rszTestNetUtils.bind_socketr•c Cs¼| ¡}t|ƒ}t |¡\| |jtj¡| |jtj ¡| |  ¡|¡t j   |¡s\t‚t t  |¡j¡srt‚W5QRX| ¡}t|tjd}t |¡| |jtj¡W5QRXdS)N)Útype)rYrr©rªr6ÚfamilyÚsocketÚAF_UNIXr®Ú SOCK_STREAMr«rQr\r]r^ÚstatÚS_ISSOCKÚst_modeÚ SOCK_DGRAM)r9ÚnameÚsockr.r.r1Útest_bind_unix_socket$s   z"TestNetUtils.test_bind_unix_socketc Cs|dtƒf}ttj|d\}}t |¡Lt |¡6| | ¡|¡| | ¡|¡|  | ¡|¡W5QRXW5QRXdS)Nz 127.0.0.1r§) rr r°ÚAF_INETr©rªr6r«Ú getpeernamer)r9r¨ÚserverÚclientr.r.r1Útcp_tcp_socketpair4s   zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultcCsÎt ¡}| ¡}| t|jddƒg¡| ¡}t|ƒ\}}zzt j   |¡sNt ‚t  t   |¡j¡sdt ‚| | ¡|d¡| tt|jddƒƒd¡| | ¡|¡| | ¡|¡W5| ¡| ¡XdS)NÚunix)ÚkindrŽ)rTr‡Únum_fdsr6rZnet_connectionsrYr"ryrQr\r]r^r³r´rµr‘r«r»)r9r‹rÁr·r¼r½r.r.r1Útest_unix_socketpair?s,ÿ ÿüz!TestNetUtils.test_unix_socketpairc CsÊtƒº}t t¡}t t¡}|D]2}||jd7<|| tjtj¡d7<q |  |tj d¡t ƒr~|  |tj d¡t r˜tr˜|  |tjd¡|  |tjd¡|  |tjd¡W5QRXdS)Nr'rŽ)rÚ collectionsÚ defaultdictÚintr¯Ú getsockoptr°Ú SOL_SOCKETÚSO_TYPEZassertGreaterEqualrºrÚAF_INET6rr r±r²r¶)r9ÚsocksZfamsÚtypesr­r.r.r1Útest_create_sockets[s  z TestNetUtils.test_create_socketsN) rJrKrLrr¤r¥rr¹r¾rrrÂrÌr.r.r.r1r¦s   ÿ r¦c@s`eZdZeƒdd„ƒZdd„Zeƒe ed¡e e d¡dd„ƒƒƒZ d d „Z d d „Z d d„Z dS)ÚTestMemLeakClasscs8‡fdd„}ddi‰|j|ddd| ˆdd¡dS) Ncsˆdd7<dS)NÚcntr'r.r.©rÎr.r1Úfunpsz(TestMemLeakClass.test_times..funrÎré é)ÚtimesÚ warmup_timesé)Úexecuter6)r9rÐr.rÏr1Ú test_timesns 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.r1rjxrkz1TestMemLeakClass.test_param_err..r©rÓcSsdSrØr.r.r.r.r1rjyrkéÿÿÿÿcSsdSrØr.r.r.r.r1rjzrk)rÔcSsdSrØr.r.r.r.r1rj{rk)Ú tolerancecSsdSrØr.r.r.r.r1rj|rk)r))r=rCrÖ©r9r.r.r1Útest_param_errws zTestMemLeakClass.test_param_errz skipped on CIzskipped during test coveragecCs4g}|fdd„}z|jtd|j|ddW5~XdS)NcSs| dd¡dS)NZ|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé©Úappend©Úlsr.r.r1rЄsz+TestMemLeakClass.test_leak_mem..funz extra-memé2rÙ)ÚassertRaisesRegexr^rÖ)r9rârÐr.r.r1Ú test_leak_mem~s ÿ zTestMemLeakClass.test_leak_memcs8‡‡fdd„}g‰trdnd}ˆ td|ˆj|¡dS)Ncs"ttƒ}ˆ |j¡ˆ |¡dSrA)rZrpZ addCleanupryrà)ra©Úboxr9r.r1rÐs z1TestMemLeakClass.test_unclosed_files..funÚfdÚhandlez unclosed )rrär^rÖ)r9rÐrÀr.rær1Útest_unclosed_filess ÿz$TestMemLeakClass.test_unclosed_filescs>‡fdd„}g‰d}|j||ddd| tˆƒ|d¡dS)Ncsˆ dd¡dS)NZxxxxxxxxxxxxxxxxxxxxxxxxrÞrßr.rár.r1rМsz,TestMemLeakClass.test_tolerance..funédri€ )rÓrÔrÛr')rÖr6r‘)r9rÐrÓr.rár1Útest_tolerance›s ÿzTestMemLeakClass.test_tolerancec Csddd„}| t|¡| t¡| t|¡W5QRXdd„}| t¡| t|¡W5QRXdS)NcSs dddSr+r.r.r.r.r1Úfun_1§sz2TestMemLeakClass.test_execute_w_exc..fun_1cSsdSrAr.r.r.r.r1Úfun_2®sz2TestMemLeakClass.test_execute_w_exc..fun_2)Z execute_w_excr>r=r{r^)r9rírîr.r.r1Útest_execute_w_exc¦s   z#TestMemLeakClass.test_execute_w_excN)rJrKrLrr×rÝr¤r¥rr rårêrìrïr.r.r.r1rÍls     rÍc@seZdZdd„Zdd„ZdS)ÚTestTestingUtilscCsLt ¡}t|ƒ}| ¡dd„| |j¡Dƒdd}| |ƒ| ¡¡dS)NcSsg|]}|ddkr|‘qS)r'r’r.©Ú.0Úxr.r.r1Ú ºs z;TestTestingUtils.test_process_namespace..r)rTr‡rÚtestrUÚgettersr6r’)r9r‹ÚnsrÐr.r.r1Ú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.r1rô¿s z:TestTestingUtils.test_system_namespace..r)rrUrör6rTrù)r9r÷rÐr.r.r1Útest_system_namespace½sz&TestTestingUtils.test_system_namespaceN)rJrKrLrørúr.r.r.r1rðµsrðc@seZdZdd„ZdS)ÚTestOtherUtilscCs.tt dd¡dddƒƒst‚ttƒƒr*t‚dS)Nr2za b cr'rŽr3)rrÃÚ namedtupler^ÚtuplerÜr.r.r1Útest_is_namedtupleÄsz!TestOtherUtils.test_is_namedtupleN)rJrKrLrþr.r.r.r1rûÃsrûÚ__main__)Ú run_from_name);Ú__doc__rÃr©r|rQr°r³rŸr¤rTZ psutil.testsrrrZpsutil._commonrrrrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%rNrnr…r¦rÍrðrûrJZpsutil.tests.runnerrrpr.r.r.r1Úsr                                   @&-LNH