U Ã|ýf‘“ã@s²dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"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#lm0Z0dd$lm1Z1dd%lm2Z2Gd&d'„d'e.ƒZ3Gd(d)„d)e.ƒZ4Gd*d+„d+e.ƒZ5Gd,d-„d-e.ƒZ6Gd.d/„d/e.ƒZ7Gd0d1„d1e.ƒZ8Gd2d3„d3e.ƒZ9Gd4d5„d5e.ƒZ:e;d6kr®dd7lƒdS)8zTests for system APIS.éN)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚPY3)ÚFileNotFoundError)Úlong)ÚASCII_FS)Ú CI_TESTING)ÚDEVNULL)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)Ú HAS_BATTERY)Ú HAS_CPU_FREQ)ÚHAS_GETLOADAVG)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚIS_64BIT)Ú MACOS_12PLUS)ÚPYPY)Ú QEMU_USER)ÚUNICODE_SUFFIX)ÚPsutilTestCase)Úcheck_net_address)Úenum)Úmock)Úretry_on_failurec@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestProcessItercCs~| t ¡dd„t ¡Dƒ¡| ¡}| |jdd„t ¡Dƒ¡t |j¡}| ¡|  ¡|  |jdd„t ¡Dƒ¡dS)NcSsg|] }|j‘qS©©Úpid©Ú.0Úxr&r&úK/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_system.pyÚ Csz5TestProcessIter.test_pid_presence..cSsg|] }|j‘qSr&r'r)r&r&r,r-EscSsg|] }|j‘qSr&r'r)r&r&r,r-Is) ÚassertInÚosÚgetpidÚpsutilÚ process_iterÚspawn_testprocr(ÚProcessÚkillÚwaitÚ assertNotIn©ÚselfZsprocÚpr&r&r,Útest_pid_presenceBs z!TestProcessIter.test_pid_presencecCs>dd„t ¡Dƒ}| t|dd„dtt|ƒdd„d¡dS)NcSsg|]}|‘qSr&r&r)r&r&r,r-Lsz6TestProcessIter.test_no_duplicates..cSs|jS©Nr'©r+r&r&r,ÚNóz4TestProcessIter.test_no_duplicates..)ÚkeycSs|jSr<r'r=r&r&r,r>Or?)r1r2Ú assertEqualÚsortedÚset)r9Úlsr&r&r,Útest_no_duplicatesKs þz"TestProcessIter.test_no_duplicatesc Csftt ¡ƒtdƒD]L}tjdt t ¡¡d |  ttjdgdƒg¡W5QRXtj  ¡qdS©Nézpsutil.Process.as_dict©Z side_effectÚ cpu_times©Úattrs) Úlistr1r2Úranger#ÚpatchZ NoSuchProcessr/r0rAÚ cache_clear©r9r+r&r&r,Útest_emulate_nspRs   þÿz TestProcessIter.test_emulate_nspc Csvtt ¡ƒtdƒD]\}tjdt t ¡¡d0|  tj¡ttjdgdƒW5QRXW5QRXtj  ¡qdSrF) rLr1r2rMr#rNÚ AccessDeniedr/r0Ú assertRaisesrOrPr&r&r,Útest_emulate_access_denied^s   þ&z*TestProcessIter.test_emulate_access_deniedc CsZtjdgdD]}| t|j ¡ƒdg¡qtjdgdD]}| t|j ¡ƒdg¡q:| t¡ttjdgdƒW5QRXtj dt  dd¡dH}tjddgdD]&}|  |jd¡|  |jdd¡q¨|j sÚt‚W5QRXtj dt  dd¡dV}tƒ}tjddg|d D]*}| |jd|¡|  |jdd¡q|j sLt‚W5QRXdS) Nr(rJZfooz$psutil._psplatform.Process.cpu_timesrÚrHrI)rKZad_value)r1r2rArLÚinfoÚkeysrSÚ ValueErrorr#rNrRÚ assertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectZassertIs)r9r:ÚmÚflagr&r&r,Ú test_attrsis8  þ þÿ zTestProcessIter.test_attrscCs.tt ¡ƒtjst‚tj ¡tjr*t‚dSr<)rLr1r2Z_pmapr\rO©r9r&r&r,Útest_cache_clear…s   z TestProcessIter.test_cache_clearN) Ú__name__Ú __module__Ú __qualname__r;rErQrTr`rbr&r&r&r,r%As    r%c@sLeZdZe eoed¡dd„ƒZe eo*ed¡dd„ƒZdd„Z dd „Z d S) ÚTestProcessAPIsz-spawn_testproc() unreliable on PYPY + WINDOWSc sæ‡fdd„}g‰ˆ ¡}ˆ ¡}ˆ ¡}dd„|||fDƒ}ˆjttj|ddˆjttj|ddt ¡}tj|d |d \}}ˆ t ¡|d ¡ˆ |g¡ˆ t |ƒd ¡ˆ ˆg¡|D]} ˆ  t | d ƒ¡qÀt dƒ‡fdd„ƒ} |  ¡| ||ƒ\}}ˆ |jdd„|Dƒ¡tr6ˆ | ¡jtj ¡nˆ | ¡jd¡ˆ ˆ|jg¡|D]} ˆ  t | d ƒ¡q\t dƒ‡fdd„ƒ} |  ¡|  ¡| ||ƒ\}}ˆ tˆƒt|j|j|jgƒ¡|D]} ˆ t | d ƒ¡qÊdS)Ncsˆ |j¡dSr<)Úappendr()r:)Úpidsr&r,Úcallback‘sz1TestProcessAPIs.test_wait_procs..callbackcSsg|]}t |j¡‘qSr&©r1r4r(r)r&r&r,r-˜sz3TestProcessAPIs.test_wait_procs..éÿÿÿÿ)Útimeouté)rig{®Gáz„?©rlrigà?éÚ returncodeécs<tj|d|d\}}ˆ t|ƒd¡ˆ t|ƒd¡||fS)N縅ëQ¸ž?rnrmrG©r1Ú wait_procsrAÚlen©ÚprocsriÚgoneÚaliverar&r,Útest_1¥sÿ z/TestProcessAPIs.test_wait_procs..test_1cSsg|] }|j‘qSr&r'r)r&r&r,r-°scs<tj|d|d\}}ˆ t|ƒd¡ˆ t|ƒd¡||fS)Nrrrnrorrsrvrar&r,Útest_2¹sÿ z/TestProcessAPIs.test_wait_procs..test_2)r3rSrXr1rtÚ TypeErrorÚtimeÚ assertLessrAruÚ assertFalseÚhasattrr$Ú terminater.r(r ÚpoprpÚsignalÚSIGTERMrCÚ assertTrue) r9riÚsproc1Úsproc2Úsproc3rwÚtrxryr:rzr{r&)rhr9r,Útest_wait_procssF    zTestProcessAPIs.test_wait_procscCsL| ¡}| ¡}| ¡}dd„|||fDƒ}|D] }| ¡q0t |¡dS)NcSsg|]}t |j¡‘qSr&rjr)r&r&r,r-Ðsz>TestProcessAPIs.test_wait_procs_no_timeout..)r3rr1rt)r9r†r‡rˆrwr:r&r&r,Útest_wait_procs_no_timeoutÉs z*TestProcessAPIs.test_wait_procs_no_timeoutcCsv| ¡}| t |j¡¡t |j¡}| ¡| ¡| t |j¡¡| t d¡¡|  t d¡dt  ¡k¡dS)Nrkr) r3r…r1Ú pid_existsr(r4r5r6rrArhr8r&r&r,Útest_pid_existsÕs zTestProcessAPIs.test_pid_existsc Cst ¡}|D]F}zt |¡s t‚Wq tk rPt d¡| |t ¡¡Yq Xq tt|ƒdt|ƒdƒ}|D]}|j t |¡|dqrdS)Ngš™™™™™¹?i˜:i€>©Úmsg) r1rhrŒr\r}Úsleepr7rMÚmaxr)r9rhr(r&r&r,Útest_pid_exists_2ßs z!TestProcessAPIs.test_pid_exists_2N) rcrdreÚunittestÚskipIfrr rŠr‹rr’r&r&r&r,rfŒsÿ 9ÿ  rfc@sBeZdZdd„Ze eo e ¡ d¡dd„ƒZ dd„Z dd „Z d S) Ú TestMiscAPIscCs4t ¡}| |t¡| |d¡| |t ¡¡dS©Nr)r1Z boot_timeÚassertIsInstanceÚfloatÚ assertGreaterr~r})r9Zbtr&r&r,Útest_boot_timeïs  zTestMiscAPIs.test_boot_timeúunreliable on CIc CsÒt ¡}| |g¡|D]´}|j|dž|js4t‚| |jt¡| |jtt dƒf¡|j dk rx| |j tt dƒf¡|j|j |  |j d¡t j  |j ¡ts¨tr¶| |j¡n t |j¡W5QRXqdS)N)Úuserç)r1ÚusersÚassertNotEqualÚsubTestÚnamer\r—ÚstrZterminalÚtypeÚhostr™ÚstartedÚdatetimeÚ fromtimestampr rrYr(r4)r9ržrœr&r&r,Ú test_usersõs    zTestMiscAPIs.test_userscCs&tj}tt_z t ¡W5|t_XdSr<)ÚsysÚstdoutrr1Útest)r9rªr&r&r,Ú test_test s  zTestMiscAPIs.test_testc CsŠddddddddd g }|D]}|jtt|ƒt|d qtjd krDtjsLt‚tjrVt‚|  d¡d t j   ¡kr„tj sxt‚|  d¡n¾d t j   ¡krätjsœt‚| tjtjtjg d¡d¡|  d¡|  d¡|  d¡|  d¡n^dt j   ¡ksdt j   ¡krtjst‚|  d ¡n&dt j   ¡krftjs8t‚|  d¡n"tjsPt‚tjr\t‚|  d¡|D]}|jtt|ƒ|d qjdS)Nr r rrrrrrr rŽÚposixÚlinuxZbsdTrmÚsunosÚsolarisÚdarwin)r—Úgetattrr1Úboolr/r¡r r\r Úremover©ÚplatformÚlowerrrrArrrÚcountr rr)r9Únamesr¡r&r&r,Útest_os_constantssZ÷        ÿü     ÿ þ       zTestMiscAPIs.test_os_constantsN) rcrdreršr“r”rr1ržr¨r¬r¹r&r&r&r,r•îs   r•c@seZdZdd„Zdd„ZdS)ÚTestMemoryAPIscCsæt ¡}|jdkst|ƒ‚|jdks,t|ƒ‚d|jkrBdksLnt|ƒ‚|jdks^t|ƒ‚|jdkspt|ƒ‚|jD]j}t ||ƒ}|dkrœ|  |t t f¡|dkrv|dks¾|  d||f¡‚||jkrv|  d||j||f¡‚qvdS)NrédÚpercentÚtotalz %r < 0 (%s)z%r > total (total=%s, %s=%s))r1Zvirtual_memoryr½r\Ú availabler¼ÚusedÚfreeÚ_fieldsr²r—ÚintrÚfail)r9Úmemr¡Úvaluer&r&r,Útest_virtual_memoryHs&     ÿÿz"TestMemoryAPIs.test_virtual_memorycCs²t ¡}| |jd¡|jdks(t|ƒ‚|jdks:t|ƒ‚|jdkrX|jdksjt|ƒ‚n|jdksjt|ƒ‚d|jkr€dksŠnt|ƒ‚|j dksœt|ƒ‚|j dks®t|ƒ‚dS)N)r½r¿rÀr¼ÚsinÚsoutrr») r1Z swap_memoryrArÁr½r\r¿rÀr¼rÇrÈ)r9rÄr&r&r,Útest_swap_memory\sÿ  zTestMemoryAPIs.test_swap_memoryN)rcrdrerÆrÉr&r&r&r,rºGsrºc@sØeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e   e oJe d¡dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Ze   eo¢e ¡d kd!¡e   e d"¡d#d$„ƒƒZe   e d"¡d%d&„ƒZd'S)(Ú TestCpuAPIsc Cstt ¡}| |¡| |ttjddƒ¡| |d¡tj  d¡rpt dƒ}|  ¡}W5QRXd|krpt   d¡‚dS)NT©Úpercpurmz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r1Ú cpu_countZassertIsNotNonerArurIrZr/ÚpathÚexistsÚopenÚreadr“ÚSkipTest)r9ÚlogicalÚfdZ cpuinfo_datar&r&r,Útest_cpu_count_logicalos    z"TestCpuAPIs.test_cpu_count_logicalcCsft ¡}tjdd}|dkr&t d¡‚trJt ¡dd…dkrJ| |¡n| |d¡| ||¡dS)NF©rÓzcpu_count_cores() is NonerG)érmrm) r1rÍr“rÒr r©ÚgetwindowsversionrYrZ)r9rÓZcoresr&r&r,Útest_cpu_count_cores{s    z TestCpuAPIs.test_cpu_count_coresc CsvdD]l}tjd|d}| t ¡¡|js0t‚W5QRXtjd|d"}| tjdd¡|jsft‚W5QRXqdS)N)rkrNz$psutil._psplatform.cpu_count_logical©Z return_valuez"psutil._psplatform.cpu_count_coresFrÖ)r#rNrYr1rÍr[r\)r9Úvalr^r&r&r,Útest_cpu_count_none†sÿÿzTestCpuAPIs.test_cpu_count_nonecCs^d}t ¡}t|ƒ|D]$}| |t¡| |d¡||7}q|j|t|ƒddt|ƒdS)NrrrשZplaces)r1rIÚsumr—r˜rZÚassertAlmostEqualr¢)r9r½ÚtimesÚcp_timer&r&r,Útest_cpu_times”s   zTestCpuAPIs.test_cpu_timescCsLtt ¡ƒ}t ¡t}t ¡|kr>tt ¡ƒ}||krdSq| d¡‚dS)Nztime remained the same)rÞr1rIr}rrÃ)r9Út1Zstop_atÚt2r&r&r,Útest_cpu_times_time_increases±s    z)TestCpuAPIs.test_cpu_times_time_increasescCstjddD]V}d}t|ƒ|D]$}| |t¡| |d¡||7}q |j|t|ƒddt|ƒq | t tjdddƒt tjddƒ¡dS)NTrËrrr×rÝF) r1rIrÞr—r˜rZrßr¢rAru)r9ràr½rár&r&r,Útest_per_cpu_times»s    þzTestCpuAPIs.test_per_cpu_timescCs€tjdd}t ¡t}t ¡|kr.| d¡Stjdd}t||ƒD]4\}}t |¡t |¡}}||}|dkrDdSqDqdS)NTrËrlgš™™™™™©?)r1rIr}rrÃÚzipZ_cpu_busy_time)r9Ztot1Z giveup_atZtot2rãräÚ differencer&r&r,Útest_per_cpu_times_2Þs     z TestCpuAPIs.test_per_cpu_times_2zunreliable on OPENBSD + CIc Cstt ¡}tjdd}| dd„t|ŽDƒ¡}|jD]<}|j|||d"|jt||ƒt||ƒddW5QRXq2dS)NTrËcSsg|] }t|ƒ‘qSr&)rÞ)r*Únumr&r&r,r-ôsz9TestCpuAPIs.test_cpu_times_comparison..)ÚfieldÚbaseÚper_cpurm©Údelta)r1rIÚ_makerçrÁr rßr²)r9rìríZ summed_valuesrër&r&r,Útest_cpu_times_comparisonís  ýz%TestCpuAPIs.test_cpu_times_comparisonc Cs‚z<| |t¡| |d¡| |d¡| |dt ¡¡Wn@tk r|}z"td|t  |¡t  |¡fƒ‚W5d}~XYnXdS)Nrg€gY@z %s last=%s new=%s) r—r˜rZZ assertIsNotÚassertLessEqualr1rÍr\ÚpprintÚpformat)r9r¼Zlast_retZnew_retÚerrr&r&r,Ú_test_cpu_percentýs   ÿÿzTestCpuAPIs._test_cpu_percentc Cs^tjdd}tdƒD]"}tjdd}| |||¡|}q| t¡tjddW5QRXdS©Nçü©ñÒMbP?)Úintervalr»rk)r1Ú cpu_percentrMrörSrX)r9ÚlastÚ_Únewr&r&r,Útest_cpu_percent s    zTestCpuAPIs.test_cpu_percentc Cs‚tjddd}| t|ƒt ¡¡tdƒD].}tjddd}|D]}| |||¡q@|}q*| t¡tjdddW5QRXdS)NrøT©rùrÌr»rk) r1rúrArurÍrMrörSrX©r9rûrürýr¼r&r&r,Útest_per_cpu_percents  z TestCpuAPIs.test_per_cpu_percentc Csztjdd}tdƒD]>}tjdd}|D]}| |||¡q(| t|ƒ||¡|}q| t¡tjddW5QRXdSr÷)r1Úcpu_times_percentrMrörÞrSrXrr&r&r,Útest_cpu_times_percents    z"TestCpuAPIs.test_cpu_times_percentcCsztjddd}| t|ƒt ¡¡tdƒD]J}tjddd}|D].}|D]}| |||¡qH| t|ƒ||¡q@|}q*dS)NrøTrÿr»)r1rrArurÍrMrörÞ)r9rûrürýÚcpur¼r&r&r,Útest_per_cpu_times_percent(s z&TestCpuAPIs.test_per_cpu_times_percentc Csjtjdddd„tjddDƒ}tjd|d0tjddD]}|D]}| |dd¡qFq>W5QRXdS)NTrËcSs*g|]"}| dd„tt|jƒƒDƒ¡‘qS)cSsg|]}d‘qS)rr&r)r&r&r,r-7szNTestCpuAPIs.test_per_cpu_times_percent_negative...)rðrMrurÁr)r&r&r,r-6sÿzCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_timesrÚ)r1rrIr#rNrö)r9Z zero_timesrr¼r&r&r,Ú#test_per_cpu_times_percent_negative3s  þz/TestCpuAPIs.test_per_cpu_times_percent_negativecCsTt ¡}| |jd¡|jD]2}t||ƒ}| |d¡ts|dkr| |d¡qdS)N)Ú ctx_switchesÚ interruptsZsoft_interruptsZsyscallsr)rr)r1Z cpu_statsrArÁr²rZrr™)r9Úinfosr¡rÅr&r&r,Útest_cpu_stats?sþ    zTestCpuAPIs.test_cpu_statsÚarm64zskipped due to #1892ú not supportedcsd‡fdd„}tjdd}tr*|s*t d¡‚|s6t|ƒ‚|tjddgƒtr`ˆ t|ƒt  ¡¡dS)Ncsj|D]`}ˆ |jd¡|jdkr0ˆ |j|j¡|jD],}t||ƒ}ˆ |ttt f¡ˆ  |d¡q6qdS)N)ÚcurrentÚminr‘rr) rArÁr‘ròr r²r—rÂrr˜rZ)rDÚntr¡rÅrar&r,Úcheck_lsSs   z+TestCpuAPIs.test_cpu_freq..check_lsTrËzreturns empty list on FreeBSDF) r1Zcpu_freqrr“rÒr\rrArurÍ)r9rrDr&rar,Ú test_cpu_freqNs   zTestCpuAPIs.test_cpu_freqcCs>t ¡}| t|ƒd¡|D]}| |t¡| |d¡qdS)Nror)r1Ú getloadavgrArur—r˜rZ)r9ZloadavgÚloadr&r&r,Útest_getloadavggs  zTestCpuAPIs.test_getloadavgN)rcrdrerÕrÙrÜrârårærér“r”rrrñrörþrrrrr rrµÚmachinerrrrr&r&r&r,rÊns0   #       ÿ   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¡|jdks.t|ƒ‚|jdks@t|ƒ‚|j dksRt|ƒ‚|j|jksft|ƒ‚|j|j kszt|ƒ‚d|j krdksœnt|j ƒ‚t t dƒrôt  t ¡¡}d}| |j|j¡|j |j |j |dtsô|j |j|j|d| ¡}| t¡t |¡W5QRXdS)N)r½r¿rÀr¼rr»Ú disk_usageiPrî)r1rr/ÚgetcwdrArÁr½r\r¿rÀr¼r€ÚshutilrßrZ get_testfnrSr )r9ÚusageZ shutil_usageZ toleranceÚfnamer&r&r,Útest_disk_usageqs4" ÿÿ zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$| t¡t t¡W5QRXdSr<)rSÚUnicodeEncodeErrorr1rrrar&r&r,Útest_disk_usage_unicodes z$TestDiskAPIs.test_disk_usage_unicodecCst d¡dS)Nó.)r1rrar&r&r,Útest_disk_usage_bytes–sz"TestDiskAPIs.test_disk_usage_bytesc s†‡fdd„}tjdd}ˆj||d|D]b}||ƒtrFd|jkrFq*tsbtj |j ¡sht |ƒ‚n|j tj |j ¡s~t |ƒ‚|j s*t |ƒ‚q*tjdd}ˆj||dtjddD]š}||ƒts´|j r´zt  |j ¡Wn\tk r6}z.check_ntupleF)ÚallrŽZcdromTcSs.tj |¡}tj |¡s&tj |¡}q | ¡Sr<)r/rÎÚabspathÚismountÚdirnamer¶)rÎr&r&r,Úfind_mount_pointÅs  z;TestDiskAPIs.test_disk_partitions..find_mount_pointcSsg|]}|jr|j ¡‘qSr&)r"r¶r)r&r&r,r-Ìsþz5TestDiskAPIs.test_disk_partitions..)r1Zdisk_partitionsr…r r$r r/rÎrÏr!r\r"r#ÚstatÚOSErrorrrÚerrnoÚEIOÚEPERMÚEACCESÚ__file__r.)r9r&rDZdiskrõr+ÚmountZmountsr&rar,Útest_disk_partitions™s>     þz!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionr›csz‡fdd„}tjdd}|dk s(tdƒ‚||ƒtjdd}ˆ t|ƒtt|ƒƒ¡|D]}|sht|ƒ‚|||ƒqXdS)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 ¡|jD]}t||ƒdksÌt|ƒ‚qÌdS) NrrmrGroéér×éé)rAZ read_countZ write_countÚ read_bytesÚ write_bytesrrZ read_timeZ write_timerZread_merged_countZwrite_merged_countZ busy_timerrÁr²r\)rr¡rar&r,r&Ûs z8TestDiskAPIs.test_disk_io_counters..check_ntupleF©Zperdiskzno disks on this system?T)r1Údisk_io_countersr\rArurC©r9r&Úretr@r&rar,Útest_disk_io_countersÓs    z"TestDiskAPIs.test_disk_io_countersc CsNtjdid6}| tjdd¡| tjddi¡|js@t‚W5QRXdS)Nz#psutil._psplatform.disk_io_countersrÚFr;T)r#rNrYr1r<rAr[r\©r9r^r&r&r,Útest_disk_io_counters_no_disksösÿz+TestDiskAPIs.test_disk_io_counters_no_disksN)rcrdrer“r”rrrrrr r4rr/rÎrÏrr1r<r?rAr&r&r&r,rps    :þ ÿ rc@s†eZdZe e d¡dd„ƒZe e d¡dd„ƒZe ed¡dd„ƒZ d d „Z e ed¡d d „ƒZ e e pre pre d ¡dd„ƒZdS)Ú TestNetAPIsr csh‡fdd„}tjdd}||ƒtjdd}ˆ |g¡|D]&}ˆ |¡ˆ |t¡|||ƒq.check_ntupleF©ZpernicT)r1Únet_io_countersrŸr…r—r¢r=r&rar,Útest_net_io_counterss      z TestNetAPIs.test_net_io_countersc CsNtjdid6}| tjdd¡| tjddi¡|js@t‚W5QRXdS)Nz"psutil._psplatform.net_io_countersrÚFrCT)r#rNrYr1rDrAr[r\r@r&r&r,Útest_net_io_counters_no_nicssÿz(TestNetAPIs.test_net_io_counters_no_nicszQEMU user not supportedc Csbt ¡}|st|ƒ‚t ¡}ttjtjtjgƒ}|  ¡D]Æ\}}|  |t ¡|  t t|ƒƒt |ƒ¡|D]’}|  |jt¡|  |jt ¡|  |jt tdƒf¡|  |jt tdƒf¡| |j|¡trÞtsÞ|  |jtj¡||jr–|jtjkr,t |j¡}t |¡| |jdf¡W5QRXnj|jtjkr–t |jdtjtjdtj¡d}|\} } } } } t | | | ¡}t |¡| | ¡W5QRX|j|j|j|j fD]*}|dk rª|jtjkrªt!||jƒqª|jrì| "|j ¡qj|j rj| "|j¡qjq8t#st$st%r2t&tdƒr^|  tjtj¡n,t'rJ|  tjtj(¡nt)r^|  tjd¡dS)NrÚAF_LINKrk)*r1Ú net_if_addrsr\Ú net_if_statsrCÚsocketÚAF_INETÚAF_INET6rGÚitemsr—r¢rAruÚfamilyrÂÚaddressÚnetmaskr£Ú broadcastr.r rr"ÚIntEnumÚisupÚ contextlibÚclosingÚbindÚ getaddrinfoÚ SOCK_STREAMÚ AI_PASSIVEZptpr!rYrrr r€rÚ AF_PACKETr )r9ÚnicsZ nic_statsZfamiliesZnicÚaddrsÚaddrÚsrVÚafÚsocktypeÚprotoZ _canonnameÚsaÚipr&r&r,Útest_net_if_addrs*sl      úù ü  zTestNetAPIs.test_net_if_addrsc Csztrdtjddddfg}ndg}tjd|dB}t ¡dd}|jsJt‚tr^| |j d¡n| |j d¡W5QRXdS) NÚem1z06:3d:29)rerkz06-3d-29NNNzpsutil._psplatform.net_if_addrsrÚrz06:3d:29:00:00:00z06-3d-29-00-00-00) r r1rGr#rNrHr[r\rArO)r9r>r^r]r&r&r,Ú test_net_if_addrs_mac_null_bytespsÿ z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc Csœt ¡}|st|ƒ‚tjtjtjf}| ¡D]j\}}| |t¡|\}}}}} | |t ¡|  ||¡|  ||¡|  |d¡|  |d¡| | t¡q,dSr–) r1rIr\ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrMr—r¢r³r.rZ) r9r[Z all_duplexesr¡ÚstatsrSZduplexÚspeedZmtuÚflagsr&r&r,Útest_net_if_stats‚s ý      zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc CsDtjdttjdƒd$}t ¡}| |i¡|js6t ‚W5QRXdS)Nzpsutil._psutil_posix.net_if_mturUrH) r#rNr-r.ZENODEVr1rIrAr[r\)r9r^r>r&r&r,Útest_net_if_stats_enodev•s þ z$TestNetAPIs.test_net_if_stats_enodevN)rcrdrer“r”rrErFrrdrfrjrrrrkr&r&r&r,rBs     E   ÿrBc@sreZdZe e d¡dd„ƒZe e d¡dd„ƒZe e d¡e e d¡dd„ƒƒZ e e d¡d d „ƒZ d S) ÚTestSensorsAPIsr cCsŠt ¡}| ¡D]t\}}| |t¡|D]Z}| |jt¡|jdk rR| |jd¡|jdk rj| |jd¡|j dk r(| |j d¡q(qdSr–) r1Úsensors_temperaturesrMr—r¢Úlabelr rZÚhighÚcritical)r9Útempsr¡ÚentriesÚentryr&r&r,Útest_sensors_temperatures¤s    z)TestSensorsAPIs.test_sensors_temperaturesc Cspddgi}tjd|dN}tjdddd}|js8t‚| |jd¡| |jd ¡| |j d ¡W5QRXdS) NZcoretemp)rngI@gN@g€Q@z'psutil._psplatform.sensors_temperaturesrÚT)Z fahrenheitrg€^@g€a@gÀc@) r#rNr1rmr[r\rAr rorp)r9Údr^rqr&r&r,Ú#test_sensors_temperatures_fahreneit²s ÿ z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz no batterycCspt ¡}| |jd¡| |jd¡|jtjtjfkrF| |jd¡n|jtjkr^| |j ¡|  |j t ¡dS)Nrr») r1Zsensors_batteryrZr¼ròZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDr…Z power_pluggedr—r³)r9r>r&r&r,Útest_sensors_battery¾sþ  z$TestSensorsAPIs.test_sensors_batterycCsbt ¡}| ¡D]L\}}| |t¡|D]2}| |jt¡| |jttf¡|  |jd¡q(qdSr–) r1Z sensors_fansrMr—r¢rnr rÂrrZ)r9Zfansr¡rrrsr&r&r,Útest_sensors_fansÎs z!TestSensorsAPIs.test_sensors_fansN) rcrdrer“r”rrtrvrrrwrrxr&r&r&r,rl£s      rlÚ__main__)Ú run_from_name)?Ú__doc__rTr¦r.r/rµrórrƒrJr©r}r“r1rrrrrrrr r r Zpsutil._compatr r rZ psutil.testsrrrrrrrrrrrrrrrrrr r!r"r#r$r%rfr•rºrÊrrBrlrcZpsutil.tests.runnerrzr2r&r&r&r,Ús~                                   KbY'#6