3 JZ@s|dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#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.dd$lm/Z/dd%lm0Z0dd&lm1Z1dd'lm2Z2dd(lm3Z3dd)lm4Z4dd*lm5Z5dd+lm6Z6dd,lm7Z7dd-lm8Z8dd.lm9Z9dd/lm:Z:dd0lm;Z;dd1lmej?d4d5Z@Gd6d7d7e8j=ZAe8jBe6d8e8jBe7oejCjDe2 d9Gd:d;d;e8j=ZEGdd?d?e8j=ZGGd@dAdAe8j=ZHGdBdCdCe8j=ZIGdDdEdEe8j=ZJGdFdGdGe8j=ZKeLdHkrxe0eMdS)Iz Miscellaneous tests. N)LINUX)POSIX)WINDOWS)memoize)memoize_when_activated) supports_ipv6) wrap_numbers)PY3)APPVEYOR) bind_socket)bind_unix_socket) call_until)chdir)create_proc_children_pair)create_sockets)create_zombie_proc)DEVNULL) get_free_port)get_test_subprocess) HAS_BATTERY)HAS_CONNECTIONS_UNIX)HAS_MEMORY_FULL_INFO)HAS_MEMORY_MAPS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)import_module_by_path) is_namedtuple)mock) PYTHON_EXE) reap_children) reload_module)retry)ROOT_DIR)run_test_module_by_name) safe_rmpath) SCRIPTS_DIR)sh)tcp_socketpair)TESTFN)TOX)TRAVIS)unittest)unix_socket_path)unix_socketpair) wait_for_file) wait_for_pidc@seZdZefddZddZefddZefddZefd d Zefd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)*TestMisccCsntj}||}|jd||jd|j||jd||j|j|tjjtjdtjt j d@tj}||}|jd|j||jd||j d|WdQRXtjjtjdtj t j d@tj}||}|jd|j||jd||j d|WdQRXtjjtjdtj t j d4tj}||}|jd|j||j d|WdQRXdS)Nzpsutil.Processzpid=%szname=name) side_effectZzombieZ terminated)psutilProcessassertInpidr2rpatchobject ZombieProcessosgetpid assertNotIn NoSuchProcess AccessDenied)selffuncprrD!/usr/lib64/python3.6/test_misc.pytest_process__repr__Os4       zTestMisc.test_process__repr__cCs|jtddS)N)rA)rFstr)r@rDrDrEtest_process__str__kszTestMisc.test_process__str__cCsN|jttjdd|jttjdddd|jttjdddddS)NiAz7psutil.NoSuchProcess process no longer exists (pid=321)foo)r2zCpsutil.NoSuchProcess process no longer exists (pid=321, name='foo'))msgzpsutil.NoSuchProcess foo) assertEqualreprr4r>)r@rArDrDrEtest_no_such_process__repr__ns z%TestMisc.test_no_such_process__repr__cCsj|jttjdd|jttjdddd|jttjddddd|jttjddd d dS) NiAzEpsutil.ZombieProcess process still exists but it's a zombie (pid=321)rI)r2zQpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo'))r2ppidzYpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo', ppid=1))rJzpsutil.ZombieProcess foo)rKrLr4r:)r@rArDrDrEtest_zombie_process__repr__zs z$TestMisc.test_zombie_process__repr__cCsN|jttjdd|jttjdddd|jttjdddddS)NiAzpsutil.AccessDenied (pid=321)rI)r2z)psutil.AccessDenied (pid=321, name='foo'))rJzpsutil.AccessDenied foo)rKrLr4r?)r@rArDrDrEtest_access_denied__repr__s z#TestMisc.test_access_denied__repr__cCsP|jttjdd|jttjdddd|jttjddddddS) NiAz/psutil.TimeoutExpired timeout after 321 secondso)r7z9psutil.TimeoutExpired timeout after 321 seconds (pid=111)rI)r7r2zEpsutil.TimeoutExpired timeout after 321 seconds (pid=111, name='foo'))rKrLr4ZTimeoutExpired)r@rArDrDrEtest_timeout_expired__repr__s z%TestMisc.test_timeout_expired__repr__cCs>tj}tj}|j||d|_|j|||j|ddS)NrrI)rr)r4r5rKZ_identassertNotEqual)r@p1p2rDrDrEtest_process__eq__s   zTestMisc.test_process__eq__cCs(ttjtjg}|jt|ddS)NrN)setr4r5rKlen)r@srDrDrEtest_process__hash__szTestMisc.test_process__hash__c Cstt}x|D]~}|d krq|jd sy t|Wqtk r|tjkrtt|}|dkr`w|jdk rd |jjkr|j d |YqXqWxtjD]}|j ||qWdS)Ncallableerror namedtupletestslongtestNUM_CPUS BOOT_TIME TOTAL_PHYMEM_Z deprecatedz%r not in psutil.__all__) r\r]r^r_r`rarbrcrd) dirr4 startswith __import__ ImportError__all__getattr__doc__lowerfailr6)r@Z dir_psutilr2ZfunrDrDrE test__all__s&       zTestMisc.test__all__cCs$|jdjddtjDtjdS)N.cSsg|] }t|qSrD)rG).0xrDrDrE sz)TestMisc.test_version..)rKjoinr4 version_info __version__)r@rDrDrE test_versionszTestMisc.test_versioncCs"tj}d|_|jd|jdS)N1rI)r4r5rIr=as_dict)r@rBrDrDrE!test_process_as_dict_no_new_namessz*TestMisc.test_process_as_dict_no_new_namescstfdd}gx:tdD].}|}fif}|j|||jtdqWx.foorN)barrz foo docstring)rN)rN)rrangerKrY cache_clearrl)r@rIrrretZexpectedrD)r~rE test_memoizes.      zTestMisc.test_memoizecsGfddd}|}g|j|j|jtdg|jj|j|j|jtdg|jj|j|j|jtddS)NcseZdZefddZdS)z1TestMisc.test_memoize_when_activated..FoocsjddS)N)r{)r@)r~rDrErIsz5TestMisc.test_memoize_when_activated..Foo.fooN)__name__ __module__ __qualname__rrIrD)r~rDrEFoosrrrN)rIrKrYZcache_activateZcache_deactivate)r@rfrD)r~rEtest_memoize_when_activateds   z$TestMisc.test_memoize_when_activatedcCsddlm}dd}|j|d|ddi|j|d|dd|d d i|j|d |dd|d d i|j|d |dd|d d i|j|d|ddi|j|d|ddi|j|d|ddidS)Nr)parse_environ_blockcSstr |jS|S)N)rupper)rZrDrDrEksz,TestMisc.test_parse_environ_block..kza=1arxz a=1b=2b2za=1b=z a=1b=2c=3zxxxa=1z a=1=b=2za=1b=2)psutil._commonrrK)r@rrrDrDrEtest_parse_environ_blocks     z!TestMisc.test_parse_environ_blockcCs|jtjtrtjd}d|_tjWdQRXtjtjdtjd}WdQRXtjtjdtjd}tjWdQRXtjtjdtjd}tjWdQRXn0|j t  tjtj tj }|j dWdQRXdS) Nzpsutil._common.socketFzpsutil._common.socket.socket)r3z!psutil._common.socket.socket.bind::1r)rr) addCleanuprrrr8Zhas_ipv6socketr]Zgaierror assertRaises ExceptionAF_INET6 SOCK_STREAMZbind)r@rZsockrDrDrEtest_supports_ipv6%s.          zTestMisc.test_supports_ipv6cCsddlm}tjjt}tjdtt j dd|j t||WdQRXtjdtt j dd|j t||WdQRXtjdtt j ddWdQRXtjdddWdQRXdS) Nr) isfile_strictzpsutil._common.os.statrI)r3zpsutil._common.stat.S_ISREGF) return_value)rrr;pathabspath__file__rr8OSErrorerrnoZEPERMrZEACCESEINVAL)r@rZ this_filerDrDrEtest_isfile_strictEs   zTestMisc.test_isfile_strictcsfdd}|tjj|tj|tj|tj|tjdd|tjtrpt j j d rpnt s|tj |tj|tjt j|tjdS)Ncs<tdk rtjtj|tj|}tj|}j||dS)N)jsonloadsdumpspicklerK)rrr)r@rDrEcheckWs   z*TestMisc.test_serialization..checkr)intervalz/proc/diskstats)r4r5ryZvirtual_memoryZ swap_memoryZ cpu_timesZcpu_times_percentnet_io_countersrr;rexistsr disk_io_countersZdisk_partitionsZ disk_usagegetcwdusers)r@rrD)r@rEtest_serializationVs       zTestMisc.test_serializationcCsVtjjtd}tr*tjj| r*|jdSt|}|jt |j |j |j t jdS)Nzsetup.pyzcan't find setup.py)r;rrtr#r+rZskipTestrr SystemExitZsetuprKZ get_versionr4rv)r@Zsetup_pymodulerDrDrEtest_setup_scriptms  zTestMisc.test_setup_scriptcCstjjtjdtjd}tjWdQRXtjjtjdtjdd}tjWdQRXtjjtjdtd$}|jttjWdQRXWdQRXdS)NZ create_time)r3rN) rr8r9r4r5r?r: ValueErrorr)r@methrDrDrEtest_ad_on_process_creationus        z$TestMisc.test_ad_on_process_creationcCsRtjddd:|jt}ttWdQRX|jdt|jj WdQRXdS)Nzpsutil._psplatform.cext.versionz0.0.0)rzversion conflict) rr8rrir!r4r6rG exceptionrm)r@cmrDrDrEtest_sanity_version_checks   z"TestMisc.test_sanity_version_checkN)rrrrLrFrHrMrPrQrSrWr[rorwrzrrrrrrrrrrDrDrDrEr1Ms(   # r1rIza b cc@seZdZddZeZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZejej pej dddZdS)TestWrapNumberscCs tjdS)N)rr)r@rDrDrEsetUpszTestWrapNumbers.setUpcCs&dtdddi}|jt|d|dS)Ndisk1disk_io)ntrKr)r@inputrDrDrEtest_first_callszTestWrapNumbers.test_first_callcCs8dtdddi}|jt|d||jt|d|dS)Nrrr)rrKr)r@rrDrDrEtest_input_hasnt_changedsz(TestWrapNumbers.test_input_hasnt_changedcCsdtdddi}|jt|d|dtdddi}|jt|d|dtdddi}|jt|d|dtdddi}|jt|d|dS) Nrrr )rrKr)r@rrDrDrEtest_increase_but_no_wrapsz)TestWrapNumbers.test_increase_but_no_wrapcCsdtdddi}|jt|d|dtdddi}|jt|ddtdddidtdddi}|jt|ddtdddidtdddi}|jt|ddtdddidtdddi}|jt|ddtddd idtdddi}|jt|ddtddd idtd ddi}|jt|ddtd dd idtd ddi}|jt|ddtddd idtd ddi}|jt|ddtddd idS) NrdrrnZr2()rrKr)r@rrDrDrE test_wraps4        zTestWrapNumbers.test_wrapcCstdtdddi}|jt|d|tdddtdddd}|jt|d|dtdddi}|jt|d|dS)Nrrr)rdisk2)rrKr)r@rrDrDrEtest_changing_keyss z"TestWrapNumbers.test_changing_keyscCs.tdddtdddd}|jt|d|tdddtdddd}|jt|dtdddtdddddtdddi}|jt|d|tdddtdddd}|jt|d|tdddtdddd}|jt|d|tdddtdddd}|jt|dtdddtdddddS)Nrr)rrrrrr)rrKr)r@rrDrDrEtest_changing_keys_w_wraps*         z)TestWrapNumbers.test_changing_keys_w_wrapc Csbd'd(d)d*d"}|jt|d#||jt|d#|d+d,d-d.d"}t|d#}|j|d%dd&dS)/N,#RȷrtUrr6$NrrU "r4\)nvme0n1Z nvme0n1p1Z nvme0n1p2Z nvme0n1p3rrri) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr) rrrrrrrrr)rKr)r@doutrDrDrEtest_real_datas zTestWrapNumbers.test_real_datacCsbdtdddi}t|dtj}|j|dd|i|j|ddii|j|ddiidS)NrrrrrNr)rr cache_inforK)r@rcacherDrDrEtest_cache_first_calls  z%TestWrapNumbers.test_cache_first_callc Csdtdddi}t|ddtdddi}t|dtj}|j|dd|i|j|ddddd dd dii|j|ddiidS) NrrrrrrNr)rr)rrN)rr)rrrrK)r@rrrDrDrEtest_cache_call_twices  z%TestWrapNumbers.test_cache_call_twicec sdtdddi}t|ddtdddi}t|dtj}j|dd|ij|ddd dddddiij|dddtdgiifdd }dtdddi}t|dtj}j|dd|i|dtddd i}t|dtj}j|dd|i|dtddd i}t|dtj}j|dd|ij|dddddddd iij|dddtdgiidS)NrrrrrrNrc sJtj}j|ddddddd diij|dddtd giidS) NrNrrrrr)rr)rrN)rr)rr)rrrKrX)r)r@rDrEassert_4s   z0TestWrapNumbers.test_cache_wrap..assert_rrr)rr)rrN)rr)rr)rr)rrN)rr)rr)rrrrKrX)r@rrrrD)r@rEtest_cache_wrap%s:      zTestWrapNumbers.test_cache_wrapc Csdtdddi}t|dtdddtdddd}t|dtj}|j|dd|i|j|ddd dd dd dii|j|ddiidS) Nrrrr)rrrrNr)rr)rrN)rr)rrrrK)r@rrrDrDrEtest_cache_changing_keysUs   z(TestWrapNumbers.test_cache_changing_keyscCs\dtdddi}t|dt|dtjd|jtjiiiftjdtjddS)Nrrrz?!?)rrrrKr)r@rrDrDrEtest_cache_clearbs    z TestWrapNumbers.test_cache_clearzno disks or NICs availablecCstjtjtj}x$|D]}|jd||jd|qWtjjtj}x$|D]}|jd||jd|qVWtjjtj}|j|iiifdS)Nzpsutil.disk_io_counterszpsutil.net_io_counters) r4rrrrr6rr=rK)r@ZcachesrrDrDrEtest_cache_clear_public_apisks      z,TestWrapNumbers.test_cache_clear_public_apisN)rrrrtearDownrrrrrrrrrrrrr,skipIfr4rrrrDrDrDrErs" %  0  rzcan't test on TOXzcan't locate scripts directoryc@seZdZdZeddZed=ddZddZej e d d d Z d d Z ddZ ddZddZej epxeoxej dddZddZddZddZej edddZej e d d!d"Zej e d d#d$Zd%d&Zd'd(Zd)d*Zd+d,Z d-d.Z!ej e" d/d0d1Z#d2d3Z$ej e% d ej edd4d5Z&ej e' d ej edd6d7Z(ej e) d ej e* d8d9d:Z+d;d<Z,dS)> TestScriptsz-Tests for scripts in the "scripts" directory.cOsdtjjt|}t|g}x|D]}|j|q Wyt|f|j}Wn8tk r~}zdt |krlt |SWYdd}~XnX|S)Nz%sr?) r;rrtr&rr{r'strip RuntimeErrorrG)exer|r}cmdargrerrrDrDrE assert_stdouts  zTestScripts.assert_stdoutNc CsRtjjt|}tr"t|ddd}n t|d}||j}WdQRXtj|dS)NZrtutf8)encoding) r;rrtr&r openreadastparse)rr|rsrcrDrDrE assert_syntaxs zTestScripts.assert_syntaxcCsZt|}xLtjtD]>}|jdrdtjj|d|kr|jdtjjt|qWdS)Nz.pyZtest_rzno test defined for %r script) rfr;listdirr&endswithrsplitextrnrt)r@Zmethsr2rDrDrE test_coverages  zTestScripts.test_coveragez POSIX onlycCsTxNtjtD]@}|jdr tjjt|}tjtj|tj@s |j d|q WdS)Nz.pyz%r is not executable) r;rr&rrrtstatS_IXUSRST_MODErn)r@r2rrDrDrEtest_executables  zTestScripts.test_executablecCs|jddS)Nz disk_usage.py)r )r@rDrDrEtest_disk_usageszTestScripts.test_disk_usagecCs|jddS)Nzfree.py)r )r@rDrDrE test_freeszTestScripts.test_freecCs|jddS)Nz meminfo.py)r )r@rDrDrE test_meminfoszTestScripts.test_meminfocCs|jdttjdS)Nz procinfo.py)r rGr;r<)r@rDrDrE test_procinfoszTestScripts.test_procinfoz unreliable on APPVEYOR or TRAVIScCs|jddS)Nzwho.py)r )r@rDrDrEtest_whoszTestScripts.test_whocCs|jddS)Nzps.py)r )r@rDrDrEtest_psszTestScripts.test_pscCs|jddS)Nz pstree.py)r )r@rDrDrE test_pstreeszTestScripts.test_pstreecCs|jddS)Nz netstat.py)r )r@rDrDrE test_netstatszTestScripts.test_netstatzunreliable on TRAVIScCs|jddS)Nz ifconfig.py)r )r@rDrDrE test_ifconfigszTestScripts.test_ifconfigz not supportedcCs|jdttjdS)Nzpmap.py)r rGr;r<)r@rDrDrE test_pmapszTestScripts.test_pmapcCs|jdtddS)Nz procsmem.py)stderr)r r)r@rDrDrE test_procsmemszTestScripts.test_procsmemcCs|jddS)Nz killall.py)r)r@rDrDrE test_killallszTestScripts.test_killallcCs|jddS)Nz nettop.py)r)r@rDrDrE test_nettopszTestScripts.test_nettopcCs|jddS)Nztop.py)r)r@rDrDrEtest_topszTestScripts.test_topcCs|jddS)Nziotop.py)r)r@rDrDrE test_iotopszTestScripts.test_iotopcCs,|jdtjj}|jttj|dS)Nzpidof.py)r r4r5r2r6rGr;r<)r@outputrDrDrE test_pidofszTestScripts.test_pidofz WINDOWS onlycCs|jddS)Nzwinservices.py)r )r@rDrDrEtest_winservicesszTestScripts.test_winservicescCs|jddS)Nzcpu_distribution.py)r)r@rDrDrEtest_cpu_distributionsz!TestScripts.test_cpu_distributioncCs|jddS)Nztemperatures.py)r )r@rDrDrEtest_temperaturesszTestScripts.test_temperaturescCs|jddS)Nzfans.py)r )r@rDrDrE test_fansszTestScripts.test_fansz no batterycCs|jddS)Nz battery.py)r )r@rDrDrE test_batteryszTestScripts.test_batterycCs|jddS)Nz sensors.py)r )r@rDrDrE test_sensorsszTestScripts.test_sensors)N)-rrrrl staticmethodr rrr,rrrrrrrr r+r4rr r!r"r#r$rr%rr'r(r)r*r+r-rr.r/rr0rr1rrr2r3rDrDrDrErs@      rc@sxeZdZejdddZejdddZejdddZejddd Zejdd d Z ejdd d Z dS)TestRetryDecoratorz time.sleepcsFtddddfdd}ttd|j|d|j|jddS)NrrN)retriesrlogfuncsxrjddqWdS)NrNr)poprD)queuerDrErIs z2TestRetryDecorator.test_retry_success..foor)r"listrrK call_count)r@sleeprIrD)r9rEtest_retry_successs z%TestRetryDecorator.test_retry_successcsDtddddfdd}ttd|jt||j|jddS)NrrN)r6rr7csxrjddqWdS)NrNr)r8rD)r9rDrErI&s z2TestRetryDecorator.test_retry_failure..foo)r"r:rrZeroDivisionErrorrKr;)r@r<rIrD)r9rEtest_retry_failure"s  z%TestRetryDecorator.test_retry_failurecCs2ttdddd}|jt||j|jddS)NrN)rrcSstdS)N) TypeErrorrDrDrDrErI3sz2TestRetryDecorator.test_exception_arg..foor)r"rrrArKr;)r@r<rIrDrDrEtest_exception_arg1s z%TestRetryDecorator.test_exception_argcCs4tdddddd}|jt||j|jddS)Nr)r6rr7cSs dddS)NrNrrDrDrDrDrErI>sz4TestRetryDecorator.test_no_interval_arg..foor)r"rr?rKr;)r@r<rIrDrDrEtest_no_interval_arg:s z'TestRetryDecorator.test_no_interval_argcCs4tdddddd}|jt||j|jddS)NrrN)r6rr7cSs dddS)NrNrrDrDrDrDrErIHsz0TestRetryDecorator.test_retries_arg..foo)r"rr?rKr;)r@r<rIrDrDrEtest_retries_argEs z#TestRetryDecorator.test_retries_argcCs|jttddddS)NrrN)r6Ztimeout)rrr")r@r<rDrDrEtest_retries_and_timeout_argsOsz0TestRetryDecorator.test_retries_and_timeout_argsN) rrrrr8r=r@rBrCrDrErDrDrDrEr5s    r5c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)TestSyncTestUtilscCs ttdS)N)r%r))r@rDrDrErVszTestSyncTestUtils.tearDownc CsPttjttjd}tjdtdgd|j tj t|WdQRXdS)Nizpsutil.tests.retry.__iter__r)r) r0r;r<maxr4Zpidsrr8iterrr>)r@ZnopidrDrDrEtest_wait_for_pidYs z#TestSyncTestUtils.test_wait_for_pidc Cs,ttd}|jdWdQRXttdS)NwrI)rr)writer/)r@rrDrDrEtest_wait_for_file_s z$TestSyncTestUtils.test_wait_for_filec Cs&ttdWdQRXttdddS)NrJT)empty)rr)r/)r@rDrDrEtest_wait_for_file_emptyes   z*TestSyncTestUtils.test_wait_for_file_emptyc Cs2tjdtdgd|jtttWdQRXdS)Nzpsutil.tests.retry.__iter__r)r)rr8rHrIOErrorr/r))r@rDrDrEtest_wait_for_file_no_fileksz,TestSyncTestUtils.test_wait_for_file_no_filec Cs0ttd}|jdWdQRXttdddS)NrJrIF)delete)rr)rKr/)r@rrDrDrEtest_wait_for_file_no_deleteos  z.TestSyncTestUtils.test_wait_for_file_no_deletecCstddd}|j|ddS)NcSsdS)NrNrDrDrDrDrEvsz3TestSyncTestUtils.test_call_until..zret == 1rN)r rK)r@rrDrDrEtest_call_untilusz!TestSyncTestUtils.test_call_untilN) rrrrrIrLrNrPrRrTrDrDrDrErFTsrFc@s(eZdZddZeZddZddZdS)TestFSTestUtilscCs ttdS)N)r%r))r@rDrDrEr|szTestFSTestUtils.setUpcCstttdjtttttjttttjdtt j dd$}|j tttWdQRXWdQRXdS)NrJzpsutil.tests.os.statr)r3) rr)closer%r;mkdirrr8rrrr)r@mrDrDrEtest_safe_rmpaths  z TestFSTestUtils.test_safe_rmpathc CsTtj}tjttt |jtjtjj|tWdQRX|jtj|dS)N)r;rrWr)rrKrrt)r@baserDrDrE test_chdirs   $zTestFSTestUtils.test_chdirN)rrrrrrYr[rDrDrDrErUzsrUc@s2eZdZddZddZeje dddZdS) TestProcessUtilscCst}tj|j}tdS)N)rr4r5r7r )r@ZsubprBrDrDrEtest_reap_childrens z#TestProcessUtils.test_reap_childrencCst\}}|j|j|jtjjdd}|jt|d|j|||j|||j|j t j |j|j |jt dS)NT) recursiver) rrTr7r4r5childrenrKrYr6rOr;r<r )r@rUrVr_rDrDrEtest_create_proc_children_pairs   z/TestProcessUtils.test_create_proc_children_pairz POSIX onlycCs4t}|jtddtj|}|j|jtjdS)NT)r^)rrr r4r5rKZstatusZ STATUS_ZOMBIE)r@ZzpidrBrDrDrEtest_create_zombie_procs z(TestProcessUtils.test_create_zombie_procN) rrrr]r`r,rrrarDrDrDrEr\s r\c@sPeZdZddZeje dddZddZeje ddd Z d d Z d S) TestNetUtilsc Cs>t}tjtd|fd}|j|jd|WdQRXdS)Nr)addrrN)r contextlibclosingr rK getsockname)r@ZportrZrDrDrEr szTestNetUtils.bind_socketz POSIX onlycCstT}t|}tj|6|j|jtj|j|jtj |j|j |WdQRXWdQRXt:}t|tj d}tj||j|jtj WdQRXWdQRXdS)N)type) r-r rdrerKfamilyrAF_UNIXrgrrf SOCK_DGRAM)r@r2rrDrDrEtest_bind_unix_sockets  z"TestNetUtils.test_bind_unix_socketcCs|dtf}ttj|d\}}tj|Ltj|6|j|j||j|j||j |j|WdQRXWdQRXdS)Nz 127.0.0.1)rc) rr(rAF_INETrdrerKrf getpeernamerT)r@rcserverclientrDrDrEtcp_tcp_socketpairs   zTestNetUtils.tcp_tcp_socketpaircCstj}|j}tv}t|\}}zP|j|j|d|jt|jddd|j|j||j|j |Wd|j |j XWdQRXdS)NrZunix)Zkind) r4r5num_fdsr-r.rKrYZ connectionsrfrmrV)r@rBrqr2rnrorDrDrEtest_unix_socketpairs 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)NrNr)r collections defaultdictintrhZ getsockoptrZ SOL_SOCKETZSO_TYPEZassertGreaterEqualrlrrrrrirrj)r@ZsocksZfamstypesrZrDrDrEtest_create_socketss    z TestNetUtils.test_create_socketsN) rrrr r,rrrkrprrrwrDrDrDrErbs  rbc@seZdZddZdS)TestOtherUtilscCsdS)NrD)r@rDrDrEtest_is_namedtuplesz!TestOtherUtils.test_is_namedtupleN)rrrryrDrDrDrErxsrx__main__)Nrlrrsrdrrr;rrrr4rrrrrrrrZpsutil._compatr Z psutil.testsr r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0ZTestCaser1r^rrrrrrr5rFrUr\rbrxrrrDrDrDrE s                                               I p  C&!&E