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ÚpatchÚ NoSuchProcessÚ assertEqualÚlistÚ AccessDeniedÚ assertRaises)ÚselfÚsprocÚpr$r$r(Útest_process_iter?s z!TestProcessAPIs.test_process_iterc Cs8x.tjdgdD]}| t|j ¡ƒdg¡qW| t¡ttjdgdƒWdQRXtj dt  dd¡dL}x:tjddgdD]&}|  |jd¡|  |jdd¡q‚W|j s¶t‚WdQRXtj dt  dd¡dX}tƒ}x>tjddg|d D](}| |jd|¡|  |jdd¡qòW|j s*t‚WdQRXdS) Nr%)ÚattrsZfooz$psutil._psplatform.Process.cpu_timesrÚ)r*Ú cpu_times)r>Zad_value)r.r/r6r7ÚinfoÚkeysr9Ú ValueErrorrr4r8Ú assertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectÚassertIs)r:r<Ú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é)rOg{®Gáz„?)rQrOgà?éÚ returncodeécs<tj|d|d\}}ˆ t|ƒd¡ˆ t|ƒd¡||fS)Ng¸…ëQ¸ž?)rQrOrRé)r.Ú wait_procsr6Úlen)ÚprocsrOÚgoneÚalive)r:r$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¸ž?)rQrOrSr)r.rWr6rX)rYrOrZr[)r:r$r(r\Žs  )r0r9rCr.rWÚ TypeErrorÚtimeÚ assertLessr6rXÚ assertFalseÚhasattrrÚ terminater+r%r ÚpoprTÚsignalÚSIGTERMÚsetÚ assertTrue) r:rOÚsproc1Úsproc2Úsproc3rYÚtrZr[r<r\r$)rNr:r(Ú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..)r0rbr.rW)r:rhrirjrYr<rZr[r$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)NrPr) r0rgr.Ú pid_existsr%r1r2r3r`r6rN)r:r;r<r$r$r(Útest_pid_exists¨s zTestProcessAPIs.test_pid_existsc Csžt ¡}xT|D]L}yt |¡s"t‚Wqtk rXt d¡|t ¡krT| |¡YqXqWtt|ƒdt|ƒdƒ}x |D]}|j t |¡|dq~WdS)Ngš™™™™™¹?iˆip)Úmsg) r.rNrnrGr^ÚsleepÚfailÚrangeÚmaxr`)r:rNr%r$r$r(Útest_pid_exists_2²s    z!TestProcessAPIs.test_pid_exists_2N) Ú__name__Ú __module__Ú __qualname__r=rLr"ÚskipIfrr rlrmrorur$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^)r:Zbtr$r$r(Útest_boot_timeÄs  zTestMiscAPIs.test_boot_timezunreliable on CIcCsÆt ¡}| |g¡x¬|D]¤}|js,t|ƒ‚| |jt¡| |jttdƒf¡|j dk rp| |j ttdƒf¡|j|j |j dksŽt|ƒ‚t j   |j ¡t s¤tr²| |j¡qt |j¡qWdS)Ng)r.ÚusersÚassertNotEqualÚnamerGr{ÚstrÚterminalÚtypeÚhostÚstartedÚdatetimeÚ fromtimestampr rrDr%r1)r:rÚuserr$r$r(Ú test_usersÊs   zTestMiscAPIs.test_userscCs&tj}tt_z t ¡Wd|t_XdS)N)ÚsysÚstdoutrr.r\)r:rŒr$r$r(Ú test_testÝs  zTestMiscAPIs.test_testc Cs”ddddddddd g }x"|D]}|jtt|ƒt|d qWtjd krHtjsPt‚tjrZt‚|  d¡d t j   ¡krˆtj s|t‚|  d¡n¾d t j   ¡krètjs t‚| tjtjtjg d¡d¡|  d¡|  d¡|  d¡|  d¡n^dt j   ¡ksdt j   ¡kr tjst‚|  d ¡n&dt j   ¡krjtjs                       zTestMiscAPIs.test_os_constantsN) rvrwrxr~r"ryrr.rrŠrršr$r$r$r(rzÂs rzc@seZdZdd„Zdd„ZdS)ÚTestMemoryAPIscCsêt ¡}|jdkst|ƒ‚|jdks,t|ƒ‚d|jkrBdksLnt|ƒ‚|jdks^t|ƒ‚|jdkspt|ƒ‚xt|jD]j}t ||ƒ}|dkrž|  |t t f¡|dkrx|dksÀ|  d||f¡||jkrx|  d||j||f¡qxWdS)NrédÚpercentÚtotalz %r < 0 (%s)z%r > total (total=%s, %s=%s))r.Zvirtual_memoryržrGZ availablerÚusedÚfreeÚ_fieldsr“r{Úintr rr)r:ÚmemrÚvaluer$r$r(Útest_virtual_memorys     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œ) r.Z swap_memoryr6r¡ržrGrŸr rr¦r§)r:r£r$r$r(Útest_swap_memory s   zTestMemoryAPIs.test_swap_memoryN)rvrwrxr¥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)ÚpercpurRz /proc/cpuinfoz physical idz#cpuinfo doesn't include physical id)r.Ú cpu_countZassertIsNotNoner6rXr@rEr,ÚpathÚexistsÚopenÚreadr"ZSkipTest)r:Ú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 NonerV)érRrR)r.r«ÚskipTestr r‹ÚgetwindowsversionrDrE)r:r°Zphysicalr$r$r(Útest_cpu_count_physical?s    z#TestCpuAPIs.test_cpu_count_physicalc CszxtdD]l}tjd|d}| t ¡¡|js2t‚WdQRXtjd|d"}| tjdd¡|jsht‚WdQRXqWdS)N)rPrNz$psutil._psplatform.cpu_count_logical)Ú return_valuez%psutil._psplatform.cpu_count_physicalF)r°)rr4rDr.r«rFrG)r:ÚvalrJr$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@Úsumr{r|rEr6r‚)r:ržÚ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^rrr)r:Ú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)rªrgF) r.r@rºr{r|rEr6r‚rX)r:r»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)rªrQgš™™™™™©?)r.r@r^rrrÚzipZ_cpu_busy_time)r:Ztot1Z 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)rªcSsg|] }t|ƒ‘qSr$)rº)r&Únumr$r$r(r)²sz9TestCpuAPIs.test_cpu_times_comparison..rR)Údelta)r.r@Ú_makerÂr¡ÚassertAlmostEqualr“)r:ÚbaseZper_cpuZ summed_valuesÚfieldr$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) r{r|rEZ assertIsNotÚassertLessEqualr.r«rGÚpprintÚpformat)r:rZlast_retZnew_retÚerrr$r$r(Ú_test_cpu_percent·s   zTestCpuAPIs._test_cpu_percentc Csbtjdd}x.tdƒD]"}tjdd}| |||¡|}qW| t¡tjddWdQRXdS)Ngü©ñÒMbP?)ÚintervalrœrP)r.Ú cpu_percentrsrÐr9rC)r:Ú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ÑrªrœrP) r.rÒr6rXr«rsrÐr9rC)r:rÓr'rÔrr$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œrP)r.Úcpu_times_percentrsrÐrºr9rC)r:rÓr'rÔrr$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Ñrªrœ)r.r×r6rXr«rsrÐrº)r:rÓr'rÔÚcpurr$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)rªcSs*g|]"}| dd„tt|jƒƒDƒ¡‘qS)cSsg|]}d‘qS)rr$)r&r'r$r$r(r)îszNTestCpuAPIs.test_per_cpu_times_percent_negative...)rÇrsrXr¡)r&r'r$r$r(r)îszCTestCpuAPIs.test_per_cpu_times_percent_negative..zpsutil.cpu_times)r·)r.r×r@rr4rÐ)r:Z zero_timesrÙrr$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Ú interruptsÚsoft_interruptsÚsyscallsr)rÜrÝ)r.Z cpu_statsr6r¡r“rErr})r:Zinfosrr¤r$r$r(Útest_cpu_statsõs    zTestCpuAPIs.test_cpu_statsz not suportedcsd‡fdd„}tjdd}tr*|s*ˆ d¡‚|s6t|ƒ‚|tjddgƒtr`ˆ t|ƒt ¡¡dS)Ncsrxl|D]d}ˆ |jd¡|jdkr2ˆ |j|j¡x6|jD],}t||ƒ}ˆ |ttt f¡ˆ  |d¡q:WqWdS)N)ÚcurrentÚminrtgr) r6r¡rtrÌrár“r{r¢r r|rE)ÚlsÚntrr¤)r:r$r(Úcheck_lss    z+TestCpuAPIs.test_cpu_freq..check_lsT)rªzreturns empty list on FreeBSDF) r.Zcpu_freqrr´rGrr6rXr«)r:rårãr$)r:r(Ú test_cpu_freqs   zTestCpuAPIs.test_cpu_freqz not supportedcCsBt ¡}| t|ƒd¡x$|D]}| |t¡| |d¡qWdS)NrSg)r.Ú getloadavgr6rXr{r|rE)r:ZloadavgÚloadr$r$r(Útest_getloadavgs   zTestCpuAPIs.test_getloadavgN)rvrwrxr²r¶r¹r½rÀrÁrÄrËrÐrÕrÖrØrÚrÛràr"ryrræ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 Cst 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 |d|j |j|j|d| ¡}| t¡t |¡WdQRXdS)N)ržrŸr rrrœÚ disk_usageiP)rÆ)r.rër,Úgetcwdr6r¡ržrGrŸr rraÚshutilrÈZ get_testfnr9r )r:ÚusageZ shutil_usageZ toleranceÚfnamer$r$r(Útest_disk_usage#s&"    zTestDiskAPIs.test_disk_usageznot an ASCII fsc Cs$| t¡t t¡WdQRXdS)N)r9ÚUnicodeEncodeErrorr.rër!)r:r$r$r(Útest_disk_usage_unicode>s z$TestDiskAPIs.test_disk_usage_unicodecCst d¡dS)Nó.)r.rë)r:r$r$r(Útest_disk_usage_bytesDsz"TestDiskAPIs.test_disk_usage_bytesc sˆ‡fdd„}tjdd}ˆj||dxj|D]b}||ƒtrHd|jkrHq,tsdtj |j ¡sjt |ƒ‚n|j tj |j ¡s€t |ƒ‚|j s,t |ƒ‚q,Wtjdd}ˆj||dx¤tjddD]”}||ƒtsº|j rºyt  |j ¡WnVtk r6}z6trtr|jtjkrwº|jtjtjfkr&‚Wdd}~XYqºXtj |j ¡sºt |ƒ‚qº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) r{Údevicer‚Ú mountpointÚfstypeÚoptsÚmaxfiler¢r„Úmaxpathr r})rä)r:r$r(Ú check_ntupleHs z7TestDiskAPIs.test_disk_partitions..check_ntupleF)Úall)rpZcdromTcSs2tj |¡}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_partitionsrgr rør r,r¬r­rõrGrör÷ÚstatÚOSErrorr rÚerrnoZEIOÚEPERMÚEACCESÚ__file__r+)r:rûrãZdiskrÏrZmountZmountsr$)r:r(Útest_disk_partitionsGs<    z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIcs~‡fdd„}tjdd}|dk s(tdƒ‚||ƒtjdd}ˆ t|ƒtt|ƒƒ¡x$|D]}|sjt|ƒ‚|||ƒqZWdS)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]}t||ƒdksÎt|ƒ‚qÎWdS) NrrRrVrSéér³éé)r6Ú read_countÚ write_countÚ read_bytesÚ write_bytesrrÚ read_timeÚ write_timerZread_merged_countZwrite_merged_countZ busy_timerr¡r“rG)rär)r:r$r(rû‰s z8TestDiskAPIs.test_disk_io_counters..check_ntupleF)Úperdiskzno disks on this system?T)r.Údisk_io_countersrGr6rXrf)r:rûÚretÚkeyr$)r:r(Útest_disk_io_counters„s     z"TestDiskAPIs.test_disk_io_countersc CsNtjdid6}| tjdd¡| tjddi¡|js@t‚WdQRXdS)Nz#psutil._psplatform.disk_io_counters)r·F)rT)rr4rDr.rr6rFrG)r:rJr$r$r(Útest_disk_io_counters_no_disks¤s  z+TestDiskAPIs.test_disk_io_counters_no_disksN)rvrwrxr"ryrrrðrròrôrrr,r¬r­rr.rrrr$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¡|jdks¢t |ƒ‚|jdks´t |ƒ‚|jdksÆt |ƒ‚|jdksØt |ƒ‚|jdksêt |ƒ‚|jdksüt |ƒ‚|jdkst |ƒ‚|jdks$t |ƒ‚dS) NrrRrVrSrr r³r ) r6Ú bytes_sentÚ bytes_recvÚ packets_sentÚ packets_recvÚerrinÚerroutÚdropinÚdropoutrG)rä)r:r$r(rû²s z6TestNetAPIs.test_net_io_counters..check_ntupleF)ÚpernicT)r.Únet_io_countersr€rgr{r‚)r:rûrrr$)r:r(Útest_net_io_counters°s       z TestNetAPIs.test_net_io_countersc CsNtjdid6}| tjdd¡| tjddi¡|js@t‚WdQRXdS)Nz"psutil._psplatform.net_io_counters)r·F)r!T)rr4rDr.r"r6rFrG)r:rJr$r$r(Útest_net_io_counters_no_nicsÍs  z(TestNetAPIs.test_net_io_counters_no_nicsc Csxt ¡}|st|ƒ‚t ¡}ttjtjtjgƒ}xä|  ¡D]Ö\}}|  |t ¡|  t t|ƒƒt |ƒ¡x¦|D]œ}|  |jt¡|  |jt ¡|  |jt tdƒf¡|  |jt tdƒf¡| |j|¡tjdkrìtsì|  |jtj¡||jr¤|jtjkr:t |j¡}t |¡| |jdf¡WdQRXnj|jtjkr¤t |jdtjtjdtj ¡d}|\} } } } } t | | | ¡}t |¡| | ¡WdQRXxB|j|j|j|j!fD]*}|dk rº|jtjkrºt"||jƒqºW|jrþ| #|j!¡qr|j!rr| #|j¡qrWqs   rPÚ__main__)Ú run_from_name):Ú__doc__r3r‡rr,rÍrírdr(r‹r^r.rrrrrrrr r r Zpsutil._compatr r Z psutil.testsrrrrrrrrrrrrrrrrrrr r!r"r#rzr›r©rêrrPrvZpsutil.tests.runnerrbrr$r$r$r(Úst                                 J%q5