3 ̪e-@shdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddl 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(ddl m)Z)ddl m*Z*dd l m+Z+Gd!d"d"e(Z,Gd#d$d$e(Z-Gd%d&d&e(Z.Gd'd(d(e(Z/ej0d)d*Z1Gd+d,d,e(Z2e j3ej4j5e' d-Gd.d/d/e(Z6e7d0krddd1l8m9Z9e9e:dS)2zMiscellaneous tests.N)LINUX)POSIX)WINDOWS)bcat)cat)debug) isfile_strict)memoize)memoize_when_activated)parse_environ_block) supports_ipv6) wrap_numbers)PY3)FileNotFoundError)redirect_stderr)APPVEYOR) CI_TESTING) HAS_BATTERY)HAS_MEMORY_MAPS)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES) PYTHON_EXE)PYTHON_EXE_ENV) SCRIPTS_DIR)PsutilTestCase)mock) reload_module)shc@seZdZddZefddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdS) TestSpecialMethodscCsR|jttjjjddWdQRX|jtjtjddWdQRXdS)N) assertRaises OverflowErrorpsutilZ _psplatformZcextZcheck_pid_range NoSuchProcessProcess)selfr)B/usr/local/lib64/python3.6/site-packages/psutil/tests/test_misc.pytest_check_pid_range<s z'TestSpecialMethods.test_check_pid_rangecCstj|jj}||}|jd||jd|j||jdt|j|jdd|jd||jd||j |j ||}|jd||jd|t j j tjd tjtjd @tj}||}|jd|j||jd ||jd |WdQRXt j j tjd tjtjd @tj}||}|jd|j||jd ||jd |WdQRXt j j tjd tjtjd 4tj}||}|jd|j||jd |WdQRXdS)Nzpsutil.Processzpid=%sz name='%s'zname=u'zname='zstatus=z exitcode=zstatus='terminated'name) side_effectzstatus='zombie'zname=Z terminated)r%r'Zspawn_testprocpidassertInstrr,replace assertNotIn terminatewaitrpatchobject ZombieProcessosgetpidr& AccessDenied)r(funcprr)r)r*test_process__repr__BsN       z'TestSpecialMethods.test_process__repr__cCs|jtddS)N)r;)r>r0)r(r)r)r*test_process__str__psz&TestSpecialMethods.test_process__str__cCs|jttjddS)Nzpsutil.Error()) assertEqualreprr%Error)r(r)r)r*test_error__repr__ssz%TestSpecialMethods.test_error__repr__cCs|jttjddS)N)r@r0r%rB)r(r)r)r*test_error__str__vsz$TestSpecialMethods.test_error__str__cCs6|jttjdd|jttjddddddS)NiAz=psutil.NoSuchProcess(pid=321, msg='process no longer exists')r,msg)r,rFz5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))r@rAr%r&)r(r)r)r*test_no_such_process__repr__ys  z/TestSpecialMethods.test_no_such_process__repr__cCs6|jttjdd|jttjddddddS)NiAz"process no longer exists (pid=321)r,rF)r,rFzmsg (pid=321, name='name'))r@r0r%r&)r(r)r)r*test_no_such_process__str__s  z.TestSpecialMethods.test_no_such_process__str__cCs8|jttjdd|jttjdddddddS)NiAzGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r,i@foo)r,ppidrFz?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))r@rAr%r7)r(r)r)r*test_zombie_process__repr__s  z.TestSpecialMethods.test_zombie_process__repr__cCs8|jttjdd|jttjdddddddS)NiAz,PID still exists but it's a zombie (pid=321)r,i@rI)r,rJrFz$foo (pid=321, ppid=320, name='name'))r@r0r%r7)r(r)r)r*test_zombie_process__str__s  z-TestSpecialMethods.test_zombie_process__str__cCs6|jttjdd|jttjddddddS)NiAzpsutil.AccessDenied(pid=321)r,rF)r,rFz4psutil.AccessDenied(pid=321, name='name', msg='msg'))r@rAr%r:)r(r)r)r*test_access_denied__repr__s z-TestSpecialMethods.test_access_denied__repr__cCs6|jttjdd|jttjddddddS)NiAz (pid=321)r,rF)r,rFzmsg (pid=321, name='name'))r@r0r%r:)r(r)r)r*test_access_denied__str__sz,TestSpecialMethods.test_access_denied__str__cCs6|jttjdd|jttjddddddS)Nz?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')iAr,)r.r,zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))r@rAr%TimeoutExpired)r(r)r)r*test_timeout_expired__repr__s  z/TestSpecialMethods.test_timeout_expired__repr__cCs6|jttjdd|jttjddddddS)NrOztimeout after 5 secondsiAr,)r.r,z.timeout after 5 seconds (pid=321, name='name'))r@r0r%rP)r(r)r)r*test_timeout_expired__str__s z.TestSpecialMethods.test_timeout_expired__str__cCs>tj}tj}|j||d|_|j|||j|ddS)NrrI)rr)r%r'r@_identassertNotEqual)r(p1p2r)r)r*test_process__eq__s   z%TestSpecialMethods.test_process__eq__cCs(ttjtjg}|jt|ddS)N)setr%r'r@len)r(sr)r)r*test_process__hash__sz'TestSpecialMethods.test_process__hash__N)__name__ __module__ __qualname__r+rAr>r?rCrErGrHrKrLrMrNrQrRrWr\r)r)r)r*r ;s .       r c@s<eZdZddZddZddZddZd d Zd d Zd S)TestMiscc Cstt}x|D]~}|d krq|jdsy t|Wqtk r|tjkrtt|}|dkr`w|jdk rd|jjkr|j d|YqXqWxtjD]}|j ||qWdS) NlongteststestPermissionErrorProcessLookupError_Z deprecatedz%r not in psutil.__all__)rarbrcrdre) dirr% startswith __import__ ImportError__all__getattr__doc__lowerfailr/)r(Z dir_psutilr,funr)r)r* test__all__s,       zTestMisc.test__all__cCs$|jdjddtjDtjdS)N.cSsg|] }t|qSr))r0).0xr)r)r* sz)TestMisc.test_version..)r@joinr% version_info __version__)r(r)r)r* test_versionszTestMisc.test_versioncCs"tj}d|_|jd|jdS)N1rI)r%r'rIr2as_dict)r(r<r)r)r*!test_process_as_dict_no_new_namessz*TestMisc.test_process_as_dict_no_new_namescsfdd}|tjj|tj|tj|tj|tjdd|tjtrpt j j d rpnt s|tj |tj|tjt j|tjdS)Ncs<tdk rtjtj|tj|}tj|}j||dS)N)jsonloadsdumpspickler@)retab)r(r)r*checks   z*TestMisc.test_serialization..checkr)intervalz/proc/diskstats)r%r'r{Zvirtual_memoryZ swap_memoryZ cpu_timesZcpu_times_percentnet_io_countersrr8pathexistsrdisk_io_countersZdisk_partitions disk_usagegetcwdusers)r(rr))r(r*test_serializations       zTestMisc.test_serializationcCstjjtjdtjd}tj|js*tWdQRXtjjtjdtjdd}tj|jsbtWdQRXtjjtjdt d.}|j t tjWdQRX|jstWdQRXdS)NZ create_time)r-rX) rr5r6r%r'r:calledAssertionErrorr7 ValueErrorr#)r(methr)r)r*test_ad_on_process_creation%s  z$TestMisc.test_ad_on_process_creationcCsRtjddd:|jt}ttWdQRX|jdt|jj WdQRXdS)Nzpsutil._psplatform.cext.versionz0.0.0) return_valuezversion conflict) rr5r#rjrr%r/r0 exceptionrn)r(cmr)r)r*test_sanity_version_check9s   z"TestMisc.test_sanity_version_checkN) r]r^r_rqryr|rrrr)r)r)r*r`s  !r`c@sReZdZddZeZdddZddZdd Zd d Zd d Z ddZ ddZ dS)TestMemoizeDecoratorcCs g|_dS)N)calls)r(r)r)r*setUpIszTestMemoizeDecorator.setUpNcCs8x>tdD]2}|}|j|jfifg|dk r |j||q WxFtdD]:}|d}|j|jfifdifg|dk rJ|j||qJWxTtdD]H}|ddd}|j|jfifd ifd ddifg|dk r|j||qW|jt|jd|j|}|dk r|j|||jt|jd|j|jddS) Nr!rX)barrz My docstring.)rX)rX)rX)ranger@rrZ cache_clearrm)r(objexpected_retvalrfrr)r)r* run_againstNs.    z TestMemoizeDecorator.run_againstcs&tfdd}||j|dddS)Ncsjj||fdS)z My docstring.)rappend)argskwargs) baseclassr)r*rInsz/TestMemoizeDecorator.test_function..foor)r)r r)r(rIr))rr* test_functionmsz"TestMemoizeDecorator.test_functioncs>tGfddd}||j|dd|j|jddS)Ncs$eZdZdZfddZddZdS)z,TestMemoizeDecorator.test_class..Fooz My docstring.csjj||fdS)N)rr)r(rr)rr)r*__init__|sz5TestMemoizeDecorator.test_class..Foo.__init__cSsdS)Nrr))r(r)r)r*rsz0TestMemoizeDecorator.test_class..Foo.barN)r]r^r_rmrrr))rr)r*Fooxs r)rr)r rr@r)r(rr))rr* test_classws zTestMemoizeDecorator.test_classcCstGddd}|j|||jt|t||jt|dt|d|jt|dddt|ddd|jt|dt|ddS)Nc@seZdZddZdS)z6TestMemoizeDecorator.test_class_singleton..Barc_sdS)Nr))r(rrr)r)r*rsz?TestMemoizeDecorator.test_class_singleton..Bar.__init__N)r]r^r_rr)r)r)r*BarsrrXr)rIr!)r ZassertIsr@idrT)r(rr)r)r*test_class_singletons $z)TestMemoizeDecorator.test_class_singletoncs,Gfddd}||j|jdddS)Ncs eZdZeefddZdS)z3TestMemoizeDecorator.test_staticmethod..Foocsjj||fdS)z My docstring.r)rr)rr)rr)r*rsz7TestMemoizeDecorator.test_staticmethod..Foo.barN)r]r^r_ staticmethodr rr))rr)r*rsrr)r)rr)r(rr))rr*test_staticmethodsz&TestMemoizeDecorator.test_staticmethodcs,Gfddd}||j|jdddS)Ncs eZdZeefddZdS)z2TestMemoizeDecorator.test_classmethod..Foocsjj||fdS)z My docstring.r)rr)clsrr)rr)r*rsz6TestMemoizeDecorator.test_classmethod..Foo.barN)r]r^r_ classmethodr rr))rr)r*rsrr)r)rr)r(rr))rr*test_classmethodsz%TestMemoizeDecorator.test_classmethodcstfdd}gx:tdD].}|}fif}|j|||jtdqWx.foor!rX)rrrrzFoo docstring.)rX)rX)r rr@rZrrm)r(rIrfrZexpectedr))rr* test_originals.      z"TestMemoizeDecorator.test_original)N) r]r^r_rtearDownrrrrrrrr)r)r)r*rHs     rc@s<eZdZddZddZddZddZd d Zd d Zd S)TestCommonModulecsGfddd}|}g|j|j|jtdg|jj||j|j|jtdg|jj||j|j|jtddS)NcseZdZefddZdS)z9TestCommonModule.test_memoize_when_activated..FoocsjddS)N)r)r()rr)r*rIsz=TestCommonModule.test_memoize_when_activated..Foo.fooN)r]r^r_r rIr))rr)r*rsrr!rX)rIr@rZcache_activatecache_deactivate)r(rfr))rr*test_memoize_when_activateds   z,TestCommonModule.test_memoize_when_activatedcCsdd}|jtd|ddi|jtd|dd|ddi|jtd |dd|dd i|jtd |dd|ddi|jtd |ddi|jtd |ddi|jtd|ddidS)NcSstr |jS|S)N)rupper)r[r)r)r*ksz4TestCommonModule.test_parse_environ_block..kza=1rrzz a=1b=2r2za=1b=rDz a=1b=2c=3zxxxa=1z a=1=b=2za=1b=2)r@r )r(rr)r)r*test_parse_environ_blocksz)TestCommonModule.test_parse_environ_blockcCsJ|jtjtrtjd }d|_tjt s:tWdQRXtjtjdtjd}t sjt|j sttWdQRXtjtjdtj d$}t sttj|j stWdQRXtjtjdtj d$}t sttj|j stWdQRXnB|j tj0tjtj tj }z|jdWd|jXWdQRXdS) Nzpsutil._common.socketFzpsutil._common.socket.socket)r-z!psutil._common.socket.socket.bind::1r)rr)Z addCleanupr rrr5has_ipv6rsocketerrorrgaierrorr#AF_INET6 SOCK_STREAMbindclose)r(r[sockr)r)r*test_supports_ipv6s@        z#TestCommonModule.test_supports_ipv6cCstjjt}t|stttjj| s.ttjdt t j dd|j t t|WdQRXtjdt t j dd|j t t|WdQRXtjdt t jddt| stWdQRXtjdddt| stWdQRXdS)Nzpsutil._common.os.statrI)r-zpsutil._common.stat.S_ISREGF)r)r8rabspath__file__rrdirnamerr5OSErrorerrnoEPERMr#EACCESENOENT)r(Z this_filer)r)r*test_isfile_strict)s  z#TestCommonModule.test_isfile_strictcCs trddlm}n ddlm}t|}tdWdQRX|j}|jdsVt||jd||jt j dd|t|}tt dWdQRX|j}|jd||jd |t|}t d d }d |_ t|WdQRX|j}|jd ||jd |dS) Nr)StringIOZhelloz psutil-debugz.pycz.pyzthis is an errorzignoring ValueErrorz'this is an error'r!z no such filez/foo)riorrrgetvaluerhrr/rr1rrfilename)r(rrrFexcr)r)r* test_debug<s*         zTestCommonModule.test_debugc Cs|j}t|d}|jdWdQRX|jt|d|jt|d|jtt|d|jtt|d|jt|dddd|jt|dddddS)NwrIsfooz-invalidr)fallback)Z get_testfnopenwriter@rrr#r)r(Ztestfnrr)r)r* test_cat_bcatYs zTestCommonModule.test_cat_bcatN) r]r^r_rrrrrrr)r)r)r*rs 'rrIza b cc@seZdZddZeZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZeje dddZdS)TestWrapNumberscCs tjdS)N)r r)r(r)r)r*rnszTestWrapNumbers.setUpcCs&dtdddi}|jt|d|dS)Ndisk1rOdisk_io)ntr@r )r(inputr)r)r*test_first_callsszTestWrapNumbers.test_first_callcCs8dtdddi}|jt|d||jt|d|dS)NrrOr)rr@r )r(rr)r)r*test_input_hasnt_changedwsz(TestWrapNumbers.test_input_hasnt_changedcCsdtdddi}|jt|d|dtdddi}|jt|d|dtdddi}|jt|d|dtdddi}|jt|d|dS) NrrOr )rr@r )r(rr)r)r*test_increase_but_no_wrap|sz)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()rr@r )r(rr)r)r* test_wraps4zTestWrapNumbers.test_wrapcCstdtdddi}|jt|d|tdddtdddd}|jt|d|dtdddi}|jt|d|dS)NrrOr)rdisk2)rr@r )r(rr)r)r*test_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)rr@r )r(rr)r)r*test_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ȷr!tUrr6$NrrU "r4\)nvme0n1Z nvme0n1p1Z nvme0n1p2Z nvme0n1p3rrri) rrrrrrrrr) rr!rrrrrrr) rrrrrrrr r ) r r r rrrrrr) rrrrrrrrr) rr!rrrrrrr) rrrrrrrr r ) r r r rrrrrr)r@r )r(doutr)r)r*test_real_datas zTestWrapNumbers.test_real_datacCsbdtdddi}t|dtj}|j|dd|i|j|ddii|j|ddiidS)NrrOrrrXr!)rr cache_infor@)r(rcacher)r)r*test_cache_first_calls  z%TestWrapNumbers.test_cache_first_callc Csdtdddi}t|ddtdddi}t|dtj}|j|dd|i|j|ddddd dd dii|j|ddiidS) NrrOrrrrXr!)rr)rrX)rr!)rr rr@)r(rrr)r)r*test_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)NrrrrrrXr!c sJtj}j|ddddddd diij|dddtd giidS) NrXrrrr!r)rr)rrX)rr!)rr!)r rr@rY)r)r(r)r*check_cache_infos z9TestWrapNumbers.test_cache_wrap..check_cache_inforrr)rr)rrX)rr!)rr!)rr)rrX)rr!)rr!)rr rr@rY)r(rrrr))r(r*test_cache_wraps:      zTestWrapNumbers.test_cache_wrapc Csdtdddi}t|dtdddtdddd}t|dtj}|j|dd|i|j|ddd dd dd dii|j|ddiidS) NrrOrr)rrrrXr!)rr)rrX)rr!)rr rr@)r(rrr)r)r*test_cache_changing_keys<s  z(TestWrapNumbers.test_cache_changing_keyscCs\dtdddi}t|dt|dtjd|jtjiiiftjdtjddS)NrrOrz?!?)rr rr@r)r(rr)r)r*test_cache_clearIs    z TestWrapNumbers.test_cache_clearz not supportedcCstj stj r|jdStjtjtj}x$|D]}|jd||jd|q}|jdrdtjj|d|kr|jdtjjt|qWdS)Nz.pyZtest_rzno test defined for %r script) rgr8listdirrendswithrsplitextrorv)r(Zmethsr,r)r)r* test_coverages zTestScripts.test_coveragez POSIX onlycCshxbtjtD]T\}}}xH|D]@}|jdrtjj||}tjtj|tj@s|j d|qWq WdS)Nz.pyz%r is not executable) r8walkrr5rrvstatS_IXUSRST_MODEro)r(rootdirsfilesfilerr)r)r*test_executables   zTestScripts.test_executablecCs|jddS)Nz disk_usage.py)r,)r(r)r)r*test_disk_usageszTestScripts.test_disk_usagecCs|jddS)Nzfree.py)r,)r(r)r)r* test_freeszTestScripts.test_freecCs|jddS)Nz meminfo.py)r,)r(r)r)r* test_meminfoszTestScripts.test_meminfocCs|jdttjdS)Nz procinfo.py)r,r0r8r9)r(r)r)r* test_procinfoszTestScripts.test_procinfozno userscCs|jddS)Nzwho.py)r,)r(r)r)r*test_whoszTestScripts.test_whocCs|jddS)Nzps.py)r,)r(r)r)r*test_psszTestScripts.test_pscCs|jddS)Nz pstree.py)r,)r(r)r)r* test_pstreeszTestScripts.test_pstreecCs|jddS)Nz netstat.py)r,)r(r)r)r* test_netstatszTestScripts.test_netstatcCs|jddS)Nz ifconfig.py)r,)r(r)r)r* test_ifconfigszTestScripts.test_ifconfigz not supportedcCs|jdttjdS)Nzpmap.py)r,r0r8r9)r(r)r)r* test_pmapszTestScripts.test_pmapcCs*dtjjjkr|jd|jddS)NZussz not supportedz procsmem.py)r%r'Zmemory_full_info_fieldsrr,)r(r)r)r* test_procsmems zTestScripts.test_procsmemcCs|jddS)Nz killall.py)r3)r(r)r)r* test_killallszTestScripts.test_killallcCs|jddS)Nz nettop.py)r3)r(r)r)r* test_nettopszTestScripts.test_nettopcCs|jddS)Nztop.py)r3)r(r)r)r*test_topszTestScripts.test_topcCs|jddS)Nziotop.py)r3)r(r)r)r* test_iotopszTestScripts.test_iotopcCs,|jdtjj}|jttj|dS)Nzpidof.py)r,r%r'r,r/r0r8r9)r(outputr)r)r* test_pidofszTestScripts.test_pidofz WINDOWS onlycCs|jddS)Nzwinservices.py)r,)r(r)r)r*test_winservicesszTestScripts.test_winservicescCs|jddS)Nzcpu_distribution.py)r3)r(r)r)r*test_cpu_distributionsz!TestScripts.test_cpu_distributioncCs tjs|jd|jddS)Nzno temperaturesztemperatures.py)r%Zsensors_temperaturesrr,)r(r)r)r*test_temperaturess zTestScripts.test_temperaturescCs tjs|jd|jddS)Nzno fanszfans.py)r%Z sensors_fansrr,)r(r)r)r* test_fanss zTestScripts.test_fansz no batterycCs|jddS)Nz battery.py)r,)r(r)r)r* test_batteryszTestScripts.test_batterycCs|jddS)Nz sensors.py)r,)r(r)r)r* test_sensorsszTestScripts.test_sensorsN)+r]r^r_rmrr,r3r7r!r"rr@rArBrCrDrr%rrErFrGrHrIrrJrLrMrNrOrPrRrrSrTrrUrrVrrrWrXr)r)r)r*r#ms:      r#__main__) run_from_name);rmr0 collectionsrr}r8rrr9r!r%Z psutil.testsrrrZpsutil._commonrrrrr r r r r Zpsutil._compatrrrrrrrrrrrrrrrrrrr r`rr namedtuplerrr"rrr#r]Zpsutil.tests.runnerrZrr)r)r)r*sv                              p