B Œ=Ý_ ‹ã@szdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl m Z ddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd 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.Gd$d%„d%e)ƒZ/Gd&d'„d'e)ƒZ0Gd(d)„d)e)ƒZ1Gd*d+„d+e)ƒZ2Gd,d-„d-e)ƒZ3Gd.d/„d/e)ƒZ4Gd0d1„d1e)ƒZ5e6d2krvdd3l7m8Z8e8e9ƒdS)4zTests for system APIS.éN)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚFileNotFoundError)Úlong)ÚASCII_FS)Úcheck_net_address)Ú CI_TESTING)ÚDEVNULL)Úenum)ÚGLOBAL_TIMEOUT)Ú HAS_BATTERY)Ú HAS_CPU_FREQ)ÚHAS_GETLOADAVG)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚIS_64BIT)Úmock)ÚPsutilTestCase)ÚPYPY)Úretry_on_failure)ÚGITHUB_ACTIONS)ÚUNICODE_SUFFIX)Úunittestc@s\eZdZdd„Zdd„Ze eo"ed¡dd„ƒZ e eo:ed¡dd „ƒZ d d „Z d d „Z dS)ÚTestProcessAPIsc Csþ| t ¡dd„t ¡Dƒ¡| ¡}| |jdd„t ¡Dƒ¡t |j¡}| ¡|  ¡|  |jdd„t ¡Dƒ¡t j dt  t ¡¡d| tt ¡ƒg¡WdQRXt j dt t ¡¡d*| tj¡tt ¡ƒWdQRXWdQRXdS)NcSsg|] }|j‘qS©)Úpid)Ú.0Úxr$r$úK/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_system.pyú @sz5TestProcessAPIs.test_process_iter..cSsg|] }|j‘qSr$)r%)r&r'r$r$r(r)BscSsg|] }|j‘qSr$)r%)r&r'r$r$r(r)Fszpsutil.Process)Ú side_effect)ÚassertInÚosÚgetpidÚpsutilÚ process_iterÚspawn_testprocr%ÚProcessÚkillÚwaitZ assertNotInrÚpatchZ NoSuchProcessÚ assertEqualÚlistÚ AccessDeniedÚ assertRaises)ÚselfÚsprocÚpr$r$r(Útest_process_iter?s z!TestProcessAPIs.test_process_iterc Cs"x.tjdgdD]}| t|j ¡ƒdg¡qW| t¡ttjdgdƒWdQRXtj dt  dd¡dB}x:tjddgdD]&}|  |jd¡|  |jdd¡q‚WWdQRXtj dt  dd¡dL}t ƒ}x>tjddg|d D](}| |jd|¡|  |jdd¡qèWWdQRXdS) Nr%)ÚattrsZfooz$psutil._psplatform.Process.cpu_timesrÚ)r*Ú cpu_times)r=Zad_value)r.r/r5r6ÚinfoÚkeysr8Ú ValueErrorrr4r7Ú assertIsNoneÚassertGreaterEqualÚobjectÚassertIs)r9r;ÚmÚflagr$r$r(Útest_prcess_iter_w_attrsPs$  z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc sò‡fdd„}g‰ˆ ¡}ˆ ¡}ˆ ¡}dd„|||fDƒ}ˆjttj|ddˆjttj|ddt ¡}tj|d |d \}}ˆ t ¡|d ¡ˆ |g¡ˆ t |ƒd ¡ˆ ˆg¡x|D]} ˆ  t | d ƒ¡qÂWt dƒ‡fdd„ƒ} |  ¡| ||ƒ\}}ˆ |jdd„|Dƒ¡tr:ˆ | ¡jtj ¡nˆ | ¡jd¡ˆ ˆ|jg¡x|D]} ˆ  t | d ƒ¡qbWt dƒ‡fdd„ƒ} |  ¡|  ¡| ||ƒ\}}ˆ tˆƒt|j|j|jgƒ¡x|D]} ˆ t | d ƒ¡qÔWdS)Ncsˆ |j¡dS)N)Úappendr%)r;)Úpidsr$r(Úcallbackgsz1TestProcessAPIs.test_wait_procs..callbackcSsg|]}t |j¡‘qSr$)r.r1r%)r&r'r$r$r(r)nsz3TestProcessAPIs.test_wait_procs..éÿÿÿÿ)Útimeouté)rLg{®Gáz„?)rNrLgà?éÚ returncodeécs<tj|d|d\}}ˆ t|ƒd¡ˆ t|ƒd¡||fS)Ng¸…ëQ¸ž?)rNrLrOé)r.Ú wait_procsr5Úlen)ÚprocsrLÚgoneÚalive)r9r$r(Útest{s  z-TestProcessAPIs.test_wait_procs..testcSsg|] }|j‘qSr$)r%)r&r'r$r$r(r)…scs<tj|d|d\}}ˆ t|ƒd¡ˆ t|ƒd¡||fS)Ng¸…ëQ¸ž?)rNrLrPr)r.rTr5rU)rVrLrWrX)r9r$r(rYŽs  )r0r8rBr.rTÚ TypeErrorÚtimeÚ assertLessr5rUÚ assertFalseÚhasattrrÚ terminater+r%r ÚpoprQÚsignalÚSIGTERMÚsetÚ assertTrue) r9rLÚsproc1Úsproc2Úsproc3rVÚtrWrXr;rYr$)rKr9r(Útest_wait_procsdsB       zTestProcessAPIs.test_wait_procscCsT| ¡}| ¡}| ¡}dd„|||fDƒ}x|D] }| ¡q2Wt |¡\}}dS)NcSsg|]}t |j¡‘qSr$)r.r1r%)r&r'r$r$r(r)£sz>TestProcessAPIs.test_wait_procs_no_timeout..)r0r_r.rT)r9rerfrgrVr;rWrXr$r$r(Útest_wait_procs_no_timeouts  z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv| ¡}| t |j¡¡t |j¡}| ¡| ¡| t |j¡¡| t d¡¡|  t d¡dt  ¡k¡dS)NrMr) r0rdr.Ú pid_existsr%r1r2r3r]r5rK)r9r:r;r$r$r(Útest_pid_exists¨s zTestProcessAPIs.test_pid_existsc Cst ¡}xF|D]>}yWqtk rJt d¡|t ¡krF| |¡YqXqWtt|ƒdt|ƒdƒ}x |D]}|jt  |¡|dqpWdS)Ngš™™™™™¹?iˆip)Úmsg) r.rKÚAssertionErrorr[ZsleepÚfailÚrangeÚmaxr]rk)r9rKr%r$r$r(Útest_pid_exists_2²s    z!TestProcessAPIs.test_pid_exists_2N) Ú__name__Ú __module__Ú __qualname__r<rIr"ÚskipIfrr rirjrlrrr$r$r$r(r#=s 8   r#c@sBeZdZdd„Ze eo e ¡ d¡dd„ƒZ dd„Z dd „Z d S) Ú TestMiscAPIscCs4t ¡}| |t¡| |d¡| |t ¡¡dS)Nr)r.Z boot_timeÚassertIsInstanceÚfloatÚ assertGreaterr\r[)r9Zbtr$r$r(Útest_boot_timeÄs  zTestMiscAPIs.test_boot_timezunreliable on CIcCs¦t ¡}| |g¡xŒ|D]„}| |jt¡| |jttdƒf¡|jdk rb| |jttdƒf¡|j|jt j   |j ¡t s„t r’| |j¡qt |j¡qWdS)N)r.ÚusersÚassertNotEqualrxÚnameÚstrZterminalÚtypeZhostÚdatetimeZ fromtimestampZstartedr rrCr%r1)r9r|Úuserr$r$r(Ú test_usersÊs   zTestMiscAPIs.test_userscCs&tj}tt_z t ¡Wd|t_XdS)N)ÚsysÚstdoutrr.rY)r9r…r$r$r(Ú test_testÝs  zTestMiscAPIs.test_testc Cs8ddddddddd g }x"|D]}|jtt|ƒt|d qWtjd kr| d¡d tj  ¡krj| d¡n˜d tj  ¡krÀ|  tj tj tj g d¡d¡| d¡| d¡| d¡| d¡nBdtj  ¡ksÜdtj  ¡krè| d ¡ndtj  ¡kr| d¡n | d¡x$|D]}|jtt|ƒd|d qWdS)Nr r rrrrrrr )rmÚposixZlinuxZbsdTrOZsunosZsolarisÚdarwinF)rxÚgetattrr.Úboolr,r~Úremover„ÚplatformÚlowerr5rrrÚcountrF)r9Únamesr~r$r$r(Útest_os_constantsæs.               zTestMiscAPIs.test_os_constantsN) rsrtrur{r"rvrr.r|rƒr†rr$r$r$r(rwÂs rwc@seZdZdd„Zdd„ZdS)ÚTestMemoryAPIscCs‚t ¡}xt|jD]j}t||ƒ}|dkr6| |ttf¡|dkr|dksX| d||f¡||jkr| d||j||f¡qWdS)NÚpercentÚtotalrz %r < 0 (%s)z%r > total (total=%s, %s=%s)) r.Zvirtual_memoryÚ_fieldsr‰rxÚintr ror“)r9Úmemr~Úvaluer$r$r(Útest_virtual_memorys   z"TestMemoryAPIs.test_virtual_memorycCs&t ¡}| |jd¡|jdkr"ndS)N)r“ÚusedÚfreer’ZsinZsoutr)r.Z swap_memoryr5r”r“)r9r–r$r$r(Útest_swap_memory s   zTestMemoryAPIs.test_swap_memoryN)rsrtrur˜r›r$r$r$r(r‘ sr‘c@s°eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Ze e d¡d d!„ƒZe e d"¡d#d$„ƒZd%S)&Ú TestCpuAPIsc Cstt ¡}| |¡| |ttjddƒ¡| |d¡tj  d¡rpt dƒ}|  ¡}WdQRXd|krpt   d¡‚dS)NT)ÚpercpurOz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r.Ú cpu_countZassertIsNotNoner5rUr?rDr,ÚpathÚexistsÚopenÚreadr"ZSkipTest)r9ÚlogicalÚfdZ cpuinfo_datar$r$r(Útest_cpu_count_logical3s    z"TestCpuAPIs.test_cpu_count_logicalcCsft ¡}tjdd}|dkr&| d¡‚trJt ¡dd…dkrJ| |¡n| |d¡| ||¡dS)NF)r£zphysical cpu_count() is NonerS)érOrO)r.ržÚskipTestr r„ZgetwindowsversionrCrD)r9r£Zphysicalr$r$r(Útest_cpu_count_physical?s    z#TestCpuAPIs.test_cpu_count_physicalc Csfx`dD]X}tjd|d}| t ¡¡WdQRXtjd|d}| tjdd¡WdQRXqWdS)N)rMrNz$psutil._psplatform.cpu_count_logical)Ú return_valuez%psutil._psplatform.cpu_count_physicalF)r£)rr4rCr.rž)r9ÚvalrGr$r$r(Útest_cpu_count_noneJs    zTestCpuAPIs.test_cpu_count_nonecCs^d}t ¡}t|ƒx,|D]$}| |t¡| |d¡||7}qW| |t|ƒ¡t|ƒdS)Nrg)r.r?ÚsumrxryrDr5r)r9r“ÚtimesÚcp_timer$r$r(Útest_cpu_timesVs    zTestCpuAPIs.test_cpu_timescCsPtt ¡ƒ}t ¡t}x(t ¡|kr@tt ¡ƒ}||krdSqW| d¡dS)Nztime remained the same)r¬r.r?r[rro)r9Út1Zstop_atÚt2r$r$r(Útest_cpu_times_time_increasesss   z)TestCpuAPIs.test_cpu_times_time_increasescCs”xftjddD]V}d}t|ƒx,|D]$}| |t¡| |d¡||7}q$W| |t|ƒ¡t|ƒqW| ttjdddƒttjddƒ¡dS)NT)rrgF) r.r?r¬rxryrDr5rrU)r9r­r“r®r$r$r(Útest_per_cpu_times}s     zTestCpuAPIs.test_per_cpu_timescCs†tjdd}t ¡t}xht ¡|kr0| d¡Stjdd}x@t||ƒD]2\}}t |¡t |¡}}||}|dkrHdSqHWqWdS)NT)rrNgš™™™™™©?)r.r?r[rroÚzipZ_cpu_busy_time)r9Ztot1Z giveup_atZtot2r°r±Ú differencer$r$r(Útest_per_cpu_times_2žs     z TestCpuAPIs.test_per_cpu_times_2cCs\t ¡}tjdd}| dd„t|ŽDƒ¡}x*|jD] }|jt||ƒt||ƒddq4WdS)NT)rcSsg|] }t|ƒ‘qSr$)r¬)r&Znumr$r$r(r)²sz9TestCpuAPIs.test_cpu_times_comparison..rO)Údelta)r.r?Ú_maker´r”ÚassertAlmostEqualr‰)r9ÚbaseZper_cpuZ summed_valuesZfieldr$r$r(Útest_cpu_times_comparison­s   z%TestCpuAPIs.test_cpu_times_comparisonc Cs‚y<| |t¡| |d¡| |d¡| |dt ¡¡Wn@tk r|}z"td|t  |¡t  |¡fƒ‚Wdd}~XYnXdS)Ngg€gY@z %s last=%s new=%s) rxryrDZ assertIsNotÚassertLessEqualr.ržrnÚpprintZpformat)r9r’Zlast_retZnew_retÚerrr$r$r(Ú_test_cpu_percent·s   zTestCpuAPIs._test_cpu_percentc Csbtjdd}x.tdƒD]"}tjdd}| |||¡|}qW| t¡tjddWdQRXdS)Ngü©ñÒMbP?)ÚintervalédrM)r.Ú cpu_percentrpr¿r8rB)r9Úlastr'Únewr$r$r(Útest_cpu_percentÁs   zTestCpuAPIs.test_cpu_percentc CsŠtjddd}| t|ƒt ¡¡x>tdƒD]2}tjddd}x|D]}| |||¡qDW|}q,W| t¡tjdddWdQRXdS)Ngü©ñÒMbP?T)rÀrrÁrM) r.rÂr5rUržrpr¿r8rB)r9rÃr'rÄr’r$r$r(Útest_per_cpu_percentÊs  z TestCpuAPIs.test_per_cpu_percentc Cs‚tjdd}xNtdƒD]B}tjdd}x|D]}| |||¡q,W| t|ƒ||¡|}qW| t¡tjddWdQRXdS)Ngü©ñÒMbP?)rÀrÁrM)r.Úcpu_times_percentrpr¿r¬r8rB)r9rÃr'rÄr’r$r$r(Útest_cpu_times_percentÕs    z"TestCpuAPIs.test_cpu_times_percentcCs†tjddd}| t|ƒt ¡¡x^tdƒD]R}tjddd}x:|D]2}x|D]}| |||¡qNW| t|ƒ||¡qDW|}q,WdS)Ngü©ñÒMbP?T)rÀrrÁ)r.rÇr5rUržrpr¿r¬)r9rÃr'rÄÚcpur’r$r$r(Útest_per_cpu_times_percentàs  z&TestCpuAPIs.test_per_cpu_times_percentc Csrtjdddd„tjddDƒ}tjd|d8x0tjddD] }x|D]}| |dd¡qJWq@WWdQRXdS)NT)rcSs*g|]"}| dd„tt|jƒƒDƒ¡‘qS)cSsg|]}d‘qS)rr$)r&r'r$r$r(r)îszNTestCpuAPIs.test_per_cpu_times_percent_negative...)r¸rprUr”)r&r'r$r$r(r)îszCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r©)r.rÇr?rr4r¿)r9Z zero_timesrÉr’r$r$r(Ú#test_per_cpu_times_percent_negativeës  z/TestCpuAPIs.test_per_cpu_times_percent_negativecCsXt ¡}| |jd¡x<|jD]2}t||ƒ}| |d¡ts|dkr| |d¡qWdS)N)Ú ctx_switchesÚ interruptsZsoft_interruptsZsyscallsr)rÌrÍ)r.Z cpu_statsr5r”r‰rDrrz)r9Zinfosr~r—r$r$r(Útest_cpu_statsõs    zTestCpuAPIs.test_cpu_statsz not suportedcsX‡fdd„}tjdd}tr*|s*ˆ d¡‚|tjddgƒtrTˆ t|ƒt ¡¡dS)Ncsrxl|D]d}ˆ |jd¡|jdkr2ˆ |j|j¡x6|jD],}t||ƒ}ˆ |ttt f¡ˆ  |d¡q:WqWdS)N)ÚcurrentÚminrqgr) r5r”rqr¼rÏr‰rxr•r ryrD)ÚlsÚntr~r—)r9r$r(Úcheck_lss    z+TestCpuAPIs.test_cpu_freq..check_lsT)rzreturns empty list on FreeBSDF)r.Zcpu_freqrr§rr5rUrž)r9rÓrÑr$)r9r(Ú test_cpu_freqs  zTestCpuAPIs.test_cpu_freqz not supportedcCsBt ¡}| t|ƒd¡x$|D]}| |t¡| |d¡qWdS)NrPg)r.Ú getloadavgr5rUrxryrD)r9ZloadavgÚloadr$r$r(Útest_getloadavgs   zTestCpuAPIs.test_getloadavgN)rsrtrur¥r¨r«r¯r²r³r¶r»r¿rÅrÆrÈrÊrËrÎr"rvrrÔrr×r$r$r$r(rœ1s"    !        rœc@sŒeZdZe eoe d¡dd„ƒZe e d¡dd„ƒZ dd„Z d d „Z e e o\e j d ¡ d ¡e eope ¡ d ¡dd„ƒƒZdd„ZdS)Ú TestDiskAPIszunreliable on PYPY32 + 32BITc Csœt t ¡¡}| |jd¡ttdƒrpt t ¡¡}d}| |j|j¡|j |j |j |d|j |j |j |d|  ¡}|  t¡t |¡WdQRXdS)N)r“r™ršr’Ú disk_usageiP)r·)r.rÙr,Úgetcwdr5r”r^Úshutilr“r¹ršr™Z get_testfnr8r )r9ZusageZ shutil_usageZ toleranceZfnamer$r$r(Útest_disk_usage#s    zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$| t¡t t¡WdQRXdS)N)r8ÚUnicodeEncodeErrorr.rÙr!)r9r$r$r(Útest_disk_usage_unicode>s z$TestDiskAPIs.test_disk_usage_unicodecCst d¡dS)Nó.)r.rÙ)r9r$r$r(Útest_disk_usage_bytesDsz"TestDiskAPIs.test_disk_usage_bytesc s.‡fdd„}tjdd}ˆj||dx0|D](}||ƒtrHd|jkrHq,tsNq,|jq,Wtjdd}ˆj||dx„tjddD]t}||ƒts€|jr€yt  |j¡Wq€t k rò}z.t rÎt rÎ|j t jkrÎw€|j t jt jfkrâ‚Wdd}~XYq€Xq€Wdd „}|tƒ}d d „tjddDƒ}ˆ ||¡dS) Ncsœˆ |jt¡ˆ |jt¡ˆ |jt¡ˆ |jt¡ˆ |jttdƒf¡ˆ |j ttdƒf¡|jdk r€t s€ˆ  |jd¡|j dk r˜ˆ  |j d¡dS)Nr) rxÚdevicerÚ mountpointZfstypeÚoptsZmaxfiler•r€Zmaxpathr rz)rÒ)r9r$r(Ú check_ntupleHs z7TestDiskAPIs.test_disk_partitions..check_ntupleF)Úall)rmZcdromTcSs2tj |¡}xtj |¡s(tj |¡}qW| ¡S)N)r,rŸÚabspathÚismountÚdirnamer)rŸr$r$r(Úfind_mount_pointys z;TestDiskAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jr|j ¡‘qSr$)râr)r&r'r$r$r(r)€sz5TestDiskAPIs.test_disk_partitions..)r.Zdisk_partitionsrdr rãr rárâr,ÚstatÚOSErrorr rÚerrnoZEIOZEPERMZEACCESÚ__file__r+)r9rärÑZdiskr¾réZmountZmountsr$)r9r(Útest_disk_partitionsGs:    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIcsb‡fdd„}tjdd}||ƒtjdd}ˆ t|ƒtt|ƒƒ¡x|D]}|||ƒqJWdS)NcsÚˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡tsÆtsƈ |d|j¡ˆ |d|j¡t r°ˆ |d|j ¡ˆ |d|j ¡ˆ |d |j ¡nt rƈ |d|j ¡x|jD]}qÎWdS) NrrOrSrPéér¦éé)r5Z read_countZ write_countZ read_bytesZ write_bytesrrZ read_timeZ write_timerZread_merged_countZwrite_merged_countZ busy_timerr”)rÒr~)r9r$r(rä‰s z8TestDiskAPIs.test_disk_io_counters..check_ntupleF)ÚperdiskT)r.Údisk_io_countersr5rUrc)r9räÚretÚkeyr$)r9r(Útest_disk_io_counters„s    z"TestDiskAPIs.test_disk_io_countersc CsDtjdid,}| tjdd¡| tjddi¡WdQRXdS)Nz#psutil._psplatform.disk_io_counters)r©F)róT)rr4rCr.rôr5)r9rGr$r$r(Útest_disk_io_counters_no_disks¤s  z+TestDiskAPIs.test_disk_io_counters_no_disksN)rsrtrur"rvrrrÜrrÞràrîrr,rŸr rr.rôr÷rør$r$r$r(rØ!s=rØc@sneZdZe e d¡dd„ƒZe e d¡dd„ƒZdd„Zdd „Z d d „Z e e pZe pZe d ¡d d„ƒZdS)Ú TestNetAPIsz not supportedcsl‡fdd„}tjdd}||ƒtjdd}ˆ |g¡x.|D]&}ˆ |¡ˆ |t¡|||ƒq>WdS)Ncs”ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡ˆ |d|j¡dS) NrrOrSrPrïrðr¦rñ) r5Z bytes_sentZ bytes_recvZ packets_sentZ packets_recvZerrinZerroutZdropinZdropout)rÒ)r9r$r(rä²sz6TestNetAPIs.test_net_io_counters..check_ntupleF)ÚpernicT)r.Únet_io_countersr}rdrxr)r9rärõrör$)r9r(Útest_net_io_counters°s       z TestNetAPIs.test_net_io_countersc CsDtjdid,}| tjdd¡| tjddi¡WdQRXdS)Nz"psutil._psplatform.net_io_counters)r©F)rúT)rr4rCr.rûr5)r9rGr$r$r(Útest_net_io_counters_no_nicsÍs  z(TestNetAPIs.test_net_io_counters_no_nicsc Cslt ¡}t ¡}ttjtjtjgƒ}xä| ¡D]Ö\}}|  |t ¡|  t t|ƒƒt |ƒ¡x¦|D]œ}|  |j t¡|  |jt ¡|  |jt tdƒf¡|  |jt tdƒf¡| |j |¡tjdkràtsà|  |j tj¡||jr˜|j tjkr.t |j ¡}t |¡| |jdf¡WdQRXnj|j tjkr˜t |jdtjtjdtj¡d}|\} } } } } t | | | ¡}t |¡| | ¡WdQRXxB|j|j|j|j fD]*}|dk r®|j tjkr®t!||j ƒq®W|jrò| "|j ¡qf|j rf| "|j¡qfWq0Wt#st$st%r)r*)rr4rërìZENODEVr.rr5)r9rGrõr$r$r(Útest_net_if_stats_enodev3s  z$TestNetAPIs.test_net_if_stats_enodevN)rsrtrur"rvrrürýr rrrrrrr$r$r$r(rù®s <rùc@sreZdZe e d¡dd„ƒZe e d¡dd„ƒZe e d¡e e d¡dd„ƒƒZ e e d¡d d „ƒZ d S) ÚTestSensorsAPIsz not supportedcCs’t ¡}x„| ¡D]x\}}| |t¡xb|D]Z}| |jt¡|jdk rV| |jd¡|jdk rn| |jd¡|j dk r,| |j d¡q,WqWdS)Nr) r.Úsensors_temperaturesrrxrÚlabelrÏrDÚhighÚcritical)r9Útempsr~ÚentriesÚentryr$r$r(Útest_sensors_temperatures@s     z)TestSensorsAPIs.test_sensors_temperaturesc Csfddgi}tjd|dD}tjdddd}| |jd¡| |jd ¡| |jd ¡WdQRXdS) NZcoretemp)rgI@gN@g€Q@z'psutil._psplatform.sensors_temperatures)r©T)Z fahrenheitrg€^@g€a@gÀc@)rr4r.rr5rÏrr)r9ÚdrGrr$r$r(Ú#test_sensors_temperatures_fahreneitNs  z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz no batterycCspt ¡}| |jd¡| |jd¡|jtjtjfkrF| |jd¡n|jtjkr^| |j ¡|  |j t ¡dS)NrrÁ) r.Zsensors_batteryrDr’r¼ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrdZ power_pluggedrxrŠ)r9rõr$r$r(Útest_sensors_batteryZs   z$TestSensorsAPIs.test_sensors_batterycCsjt ¡}x\| ¡D]P\}}| |t¡x:|D]2}| |jt¡| |jttf¡|  |jd¡q,WqWdS)Nr) r.Z sensors_fansrrxrrrÏr•r rD)r9Zfansr~rrr$r$r(Útest_sensors_fanshs  z!TestSensorsAPIs.test_sensors_fansN) rsrtrur"rvrrrrrrrrr$r$r$r(r>s   rÚ__main__)Ú run_from_name):Ú__doc__rrrìr,r½rÛrarr„r[r.rrrrrrrr r r Zpsutil._compatr r Z psutil.testsrrrrrrrrrrrrrrrrrrr r!r"r#rwr‘rœrØrùrrsZpsutil.tests.runnerr rír$r$r$r(Úst                                 J%q5