U =_o@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl 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&ddl Z ddlZ e j'dddkZ(Gddde Z)e*d d!Z+Gd"d#d#e Z,e&-ej./e$ d$Gd%d&d&e Z0e1d'kr dd(l2m3Z3e3e4dS))z Miscellaneous tests. N)LINUX)POSIX)WINDOWS)memoize)memoize_when_activated) supports_ipv6) wrap_numbers)PY3)APPVEYOR) CI_TESTING) HAS_BATTERY)HAS_MEMORY_MAPS)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)import_module_by_path)mock)PsutilTestCase) PYTHON_EXE) reload_module)ROOT_DIR) SCRIPTS_DIR)sh)unittest) c@seZdZefddZddZefddZefddZefd d Zefd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)*TestMiscc Cst|j}||}|d||d|j||dt||dd|d||d|| | ||}|d||d|t j j tjd ttd @t}||}|d|j||d ||d |W5QRXt j j tjd ttd @t}||}|d|j||d ||d |W5QRXt j j tjd ttd 4t}||}|d|j||d |W5QRXdS)Nzpsutil.Processzpid=%sz name='%s'zname=u'zname='zstatus=z exitcode=zstatus='terminated'nameZ side_effectzstatus='zombie'zname=Z terminated)psutilProcessZspawn_testprocpidassertInstrrreplace assertNotInZ terminatewaitrpatchobject ZombieProcessosgetpid NoSuchProcess AccessDenied)selffuncprr4I/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_misc.pytest_process__repr__=sJ              zTestMisc.test_process__repr__cCs|jtddS)N)r1)r6r%r0r4r4r5test_process__str__aszTestMisc.test_process__str__cCsN|ttdd|ttjdddd|ttjdddddS)NAz7psutil.NoSuchProcess process no longer exists (pid=321)foorzCpsutil.NoSuchProcess process no longer exists (pid=321, name='foo')msgzpsutil.NoSuchProcess foo) assertEqualreprr!r.r0r1r4r4r5test_no_such_process__repr__ds z%TestMisc.test_no_such_process__repr__cCsj|ttdd|ttjdddd|ttjddddd|ttjddd d dS) Nr9zEpsutil.ZombieProcess process still exists but it's a zombie (pid=321)r:r;zQpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo'))rZppidzYpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo', ppid=1)r<zpsutil.ZombieProcess foo)r>r?r!r+r@r4r4r5test_zombie_process__repr__ps  z$TestMisc.test_zombie_process__repr__cCsN|ttdd|ttjdddd|ttjdddddS)Nr9zpsutil.AccessDenied (pid=321)r:r;z)psutil.AccessDenied (pid=321, name='foo')r<zpsutil.AccessDenied foo)r>r?r!r/r@r4r4r5test_access_denied__repr__s z#TestMisc.test_access_denied__repr__cCsP|ttdd|ttjdddd|ttjddddddS) Nr9z/psutil.TimeoutExpired timeout after 321 secondso)r#z9psutil.TimeoutExpired timeout after 321 seconds (pid=111)r:)r#rzEpsutil.TimeoutExpired timeout after 321 seconds (pid=111, name='foo'))r>r?r!ZTimeoutExpiredr@r4r4r5test_timeout_expired__repr__s z%TestMisc.test_timeout_expired__repr__cCs>t}t}|||d|_|||||ddS)N)rrr:)r!r"r>Z_identZassertNotEqual)r0Zp1Zp2r4r4r5test_process__eq__s   zTestMisc.test_process__eq__cCs(tttg}|t|ddS)NrB)setr!r"r>len)r0sr4r4r5test_process__hash__szTestMisc.test_process__hash__c Cstt}|D]}|dkrq |ds z t|Wq tk r|tjkrtt|}|dkr`Yq |jdk rd|jkr| d|Yq Xq tjD]}| ||qdS)N)ZlongZtestsZtestPermissionErrorProcessLookupError_Z deprecatedz%r not in psutil.__all__) dirr! startswith __import__ ImportError__all__getattr__doc__lowerfailr$)r0Z dir_psutilrZfunr4r4r5 test__all__s$       zTestMisc.test__all__cCs$|dddtjDtjdS)N.cSsg|] }t|qSr4)r%).0xr4r4r5 sz)TestMisc.test_version..)r>joinr! version_info __version__r7r4r4r5 test_versionszTestMisc.test_versioncCs"t}d|_|d|dS)N1r:)r!r"r:r'as_dict)r0r2r4r4r5!test_process_as_dict_no_new_namessz*TestMisc.test_process_as_dict_no_new_namescs tfdd}gtdD].}|}dif}||||tdqtdD]0}|d}dif}||||tdqTtdD]8}|ddd}dddif}||||td q||}dif}||||td ||jd dS) Ncsd||fS) foo docstringNappend)argskwargsZcallsr4r5r:s z"TestMisc.test_memoize..foorr4rB)rB)barrjrrd)rranger>rI cache_clearrU)r0r:r[retZexpectedr4rir5 test_memoizes0         zTestMisc.test_memoizecsGfddd}|}g|||tdg|j||||tdg|j||||tddS)NcseZdZefddZdS)z1TestMisc.test_memoize_when_activated..FoocsddSNrer7rir4r5r:sz5TestMisc.test_memoize_when_activated..Foo.fooN)__name__ __module__ __qualname__rr:r4rir4r5FoosrtrrB)r:r>rIZcache_activateZcache_deactivate)r0rtfr4rir5test_memoize_when_activateds   z$TestMisc.test_memoize_when_activatedcCsddlm}dd}||d|ddi||d|dd|d d i||d |dd|d d i||d |dd|d d i||d|ddi||d|ddi||d|ddidS)Nr)parse_environ_blockcSstr |S|Srp)rupper)rJr4r4r5ksz,TestMisc.test_parse_environ_block..kza=1araz a=1b=2b2za=1b=z a=1b=2c=3zxxxa=1z a=1=b=2za=1b=2)psutil._commonrwr>)r0rwryr4r4r5test_parse_environ_blocks"      z!TestMisc.test_parse_environ_blockc Cs>|tjtrtd}d|_ttr6tW5QRXttjdtjd}trdt|j sntW5QRXttjdtj d"}trtt|j stW5QRXttjdtj d"}trtt|j stW5QRXn@| t 0ttj tj}z|dW5|XW5QRXdS)Nzpsutil._common.socketFzpsutil._common.socket.socketr z!psutil._common.socket.socket.bind)z::1r)Z addCleanuprrmrr)Zhas_ipv6AssertionErrorsocketerrorcalledZgaierror assertRaises ExceptionZAF_INET6Z SOCK_STREAMcloseZbind)r0rJZsockr4r4r5test_supports_ipv6sD      zTestMisc.test_supports_ipv6c Csddlm}tjt}||s$t|tj|r8ttj dt t j dd| t ||W5QRXtj dt t jdd| t ||W5QRXtj dt t jdd||rtW5QRXtj ddd||rtW5QRXdS) Nr) isfile_strictzpsutil._common.os.statr:r zpsutil._common.stat.S_ISREGFZ return_value)r~rr,pathabspath__file__rdirnamerr)OSErrorerrnoZEPERMrZEACCESZENOENT)r0rZ this_filer4r4r5test_isfile_strict=s$      zTestMisc.test_isfile_strictcsfdd}|t|t|t|t|tjdd|ttrnt j dsnnt s~|t |t|tt |tdS)Ncs<tdk rtt|t|}t|}||dSrp)jsonloadsdumpspickler>)rnrzr{r7r4r5checkOs   z*TestMisc.test_serialization..checkr)Zintervalz/proc/diskstats)r!r"rbZvirtual_memoryZ swap_memoryZ cpu_timesZcpu_times_percentnet_io_countersrr,rexistsr disk_io_countersZdisk_partitionsZ disk_usagegetcwdusers)r0rr4r7r5test_serializationNs       zTestMisc.test_serializationcCsTtjtd}tr(tj|s(|dSt|}|t |j | | t jdS)Nzsetup.pyzcan't find setup.py)r,rr]rr rskipTestrr SystemExitZsetupr>Z get_versionr!r_)r0Zsetup_pymoduler4r4r5test_setup_scriptes  zTestMisc.test_setup_scriptc Cstjjtjdtjd}t|js*tW5QRXtjjtjdtdd}t|jsbtW5QRXtjjtjdt d.}| t tW5QRX|jstW5QRXdS)NZ create_timer rB) rr)r*r!r"r/rrr+ ValueErrorr)r0Zmethr4r4r5test_ad_on_process_creationms&    z$TestMisc.test_ad_on_process_creationc CsRtjddd:|t}ttW5QRX|dt|j W5QRXdS)Nzpsutil._psplatform.cext.versionz0.0.0rzversion conflict) rr)rrRrr!r$r%Z exceptionrV)r0cmr4r4r5test_sanity_version_check~s z"TestMisc.test_sanity_version_checkN)rqrrrsr?r6r8rArCrDrFrGrKrXr`rcrorvrrrrrrrr4r4r4r5r;s( $  ##rr:za b cc@seZdZddZeZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZee dddZdS)TestWrapNumberscCs tdSrp)rrmr7r4r4r5setUpszTestWrapNumbers.setUpcCs&dtdddi}|t|d|dSNdisk1disk_iontr>rr0inputr4r4r5test_first_callszTestWrapNumbers.test_first_callcCs8dtdddi}|t|d||t|d|dSrrrr4r4r5test_input_hasnt_changedsz(TestWrapNumbers.test_input_hasnt_changedcCsdtdddi}|t|d|dtdddi}|t|d|dtdddi}|t|d|dtdddi}|t|d|dS) Nrrr rrr4r4r5test_increase_but_no_wrapsz)TestWrapNumbers.test_increase_but_no_wrapcCsdtdddi}|t|d|dtdddi}|t|ddtdddidtdddi}|t|ddtdddidtdddi}|t|ddtdddidtdddi}|t|ddtddd idtdddi}|t|ddtddd idtd ddi}|t|ddtd dd idtd ddi}|t|ddtddd idtd ddi}|t|ddtddd idS) NrdrrnZr2(rrr4r4r5 test_wrapsD        zTestWrapNumbers.test_wrapcCstdtdddi}|t|d|tdddtdddd}|t|d|dtdddi}|t|d|dS)NrrrrZdisk2rrr4r4r5test_changing_keyss  z"TestWrapNumbers.test_changing_keyscCs.tdddtdddd}|t|d|tdddtdddd}|t|dtdddtdddddtdddi}|t|d|tdddtdddd}|t|d|tdddtdddd}|t|d|tdddtdddd}|t|dtdddtdddddS)Nrrrrrrrrrr4r4r5test_changing_keys_w_wraps<                z)TestWrapNumbers.test_changing_keys_w_wrapcCsbddddd}|t|d||t|d|ddddd}t|d}||dd d dS) N) i,#Rȷ) iritUiirrrr) 6ri$iNrkri) iU ii"rii4iii\)nvme0n1Z nvme0n1p1Z nvme0n1p2Z nvme0n1p3r) rrrrrrrrrrri)r>r)r0doutr4r4r5test_real_datas zTestWrapNumbers.test_real_datacCsbdtdddi}t|dt}||dd|i||ddii||ddiidS)NrrrrrBrrr cache_infor>r0rcacher4r4r5test_cache_first_call s  z%TestWrapNumbers.test_cache_first_callcCsdtdddi}t|ddtdddi}t|dt}||dd|i||ddddddi||ddiidS) NrrrrrrB)rr)rrBrrrrrr4r4r5test_cache_call_twices  z%TestWrapNumbers.test_cache_call_twicecsdtdddi}t|ddtdddi}t|dt}|dd|i|ddddddi|dddtd giifd d }dtdddi}t|dt}|dd|i|dtddd i}t|dt}|dd|i|dtddd i}t|dt}|dd|i|ddddddi|dddtd giidS)NrrrrrrBrrrcsFt}|ddddddi|dddtdgiidS) NrBrrrrrrr)rrr>rH)rr7r4r5assert_,s z0TestWrapNumbers.test_cache_wrap..assert_rrr)rrrr>rH)r0rrrr4r7r5test_cache_wraps>      zTestWrapNumbers.test_cache_wrapcCsdtdddi}t|dtdddtdddd}t|dt}||dd|i||ddddddi||d diidS) NrrrrrrrBrrrrr4r4r5test_cache_changing_keysMs    z(TestWrapNumbers.test_cache_changing_keyscCs\dtdddi}t|dt|dtd|tiiiftdtddS)Nrrrz?!?)rrrmr>rrr4r4r5test_cache_clearZs    z TestWrapNumbers.test_cache_clear not supportedcCstrts|dSttt}|D]}|d||d|q6tjt}|D]}|d||d|qjtjt}| |iiifdS)Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters) r!rrrrrr$rmr'r>)r0Zcachesrr4r4r5test_cache_clear_public_apiscs      z,TestWrapNumbers.test_cache_clear_public_apisN)rqrrrsrZtearDownrrrrrrrrrrrrrskipIfrrr4r4r4r5rs  %  0  rzcan't locate scripts directoryc@s~eZdZdZeddZed}|drdtj|d|kr|dtjt|qdS)N.pyZtest_rzno test defined for %r script) rOr,listdirrendswithrsplitextrWr])r0Zmethsrr4r4r5 test_coverages  zTestScripts.test_coveragez POSIX onlycCsPttD]@}|dr tjt|}tjt|tj@s | d|q dS)Nrz%r is not executable) r,rrrrr]statS_IXUSRST_MODErW)r0rrr4r4r5test_executables  zTestScripts.test_executablecCs|ddS)Nz disk_usage.pyrr7r4r4r5test_disk_usageszTestScripts.test_disk_usagecCs|ddS)Nzfree.pyrr7r4r4r5 test_freeszTestScripts.test_freecCs|ddS)Nz meminfo.pyrr7r4r4r5 test_meminfoszTestScripts.test_meminfocCs|dttdS)Nz procinfo.pyrr%r,r-r7r4r4r5 test_procinfoszTestScripts.test_procinfozno userscCs|ddS)Nzwho.pyrr7r4r4r5test_whoszTestScripts.test_whocCs|ddS)Nzps.pyrr7r4r4r5test_psszTestScripts.test_pscCs|ddS)Nz pstree.pyrr7r4r4r5 test_pstreeszTestScripts.test_pstreecCs|ddS)Nz netstat.pyrr7r4r4r5 test_netstatszTestScripts.test_netstatcCs|ddS)Nz ifconfig.pyrr7r4r4r5 test_ifconfigszTestScripts.test_ifconfigrcCs|dttdS)Nzpmap.pyrr7r4r4r5 test_pmapszTestScripts.test_pmapcCs*dtjkr|d|ddS)NZussrz procsmem.py)r!r"Zmemory_full_info_fieldsrrr7r4r4r5 test_procsmems zTestScripts.test_procsmemcCs|ddS)Nz killall.pyrr7r4r4r5 test_killallszTestScripts.test_killallcCs|ddS)Nz nettop.pyr r7r4r4r5 test_nettopszTestScripts.test_nettopcCs|ddS)Nztop.pyr r7r4r4r5test_topszTestScripts.test_topcCs|ddS)Nziotop.pyr r7r4r4r5 test_iotopszTestScripts.test_iotopcCs,|dt}|tt|dS)Nzpidof.py)rr!r"rr$r%r,r-)r0outputr4r4r5 test_pidofszTestScripts.test_pidofz WINDOWS onlycCs|ddS)Nzwinservices.pyrr7r4r4r5test_winservicesszTestScripts.test_winservicescCs|ddS)Nzcpu_distribution.pyr r7r4r4r5test_cpu_distributionsz!TestScripts.test_cpu_distributioncCs ts|d|ddS)Nzno temperaturesztemperatures.py)r!Zsensors_temperaturesrrr7r4r4r5test_temperaturess zTestScripts.test_temperaturescCs ts|d|ddS)Nzno fanszfans.py)r!Z sensors_fansrrr7r4r4r5 test_fanss zTestScripts.test_fansz no batterycCs|ddS)Nz battery.pyrr7r4r4r5 test_batteryszTestScripts.test_batterycCs|ddS)Nz sensors.pyrr7r4r4r5 test_sensorsszTestScripts.test_sensors)N)+rqrrrsrU staticmethodrrrrrrrrrrrr r!rrrrrrr rrr r r r rrrrrrrrrr rrr4r4r4r5r~sN                  r__main__) run_from_name)5rUr collectionsrrr,rrrsysr!rrrr~rrrrZpsutil._compatr Z psutil.testsr r r r rrrrrrrrrrrrrr^Z PYTHON_39r namedtuplerrrrrrrqZpsutil.tests.runnerrrr4r4r4r5sf                         S p