U Ã|ýflã@s¶dZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlm 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,erêddl-m.Z.ddl-m/Z/ddl-m0Z0dd l-m1Z1ej2 3ej2 4e5¡¡Z6d!Z7d"Z8d#Z9d$Z:d%Z;erd&Zd*d+„Z?d,d-„Z@d.d/„ZAd0d1„ZBd2d3„ZCd4d5„ZDd6d7„ZEd8d9„ZFejGd:d;„ƒZHejGd¡Gd?d@„d@e#ƒƒZKe Je d>¡GdAdB„dBe#ƒƒZLe Je d>¡GdCdD„dDe#ƒƒZMe Je d>¡GdEdF„dFe#ƒƒZNe Je d>¡GdGdH„dHe#ƒƒZOe Je d>¡GdIdJ„dJe#ƒƒZPe Je d>¡GdKdL„dLe#ƒƒZQe Je d>¡GdMdN„dNe#ƒƒZRe Je d>¡GdOdP„dPe#ƒƒZSe Je d>¡GdQdR„dRe#ƒƒZTe Je d>¡GdSdT„dTe#ƒƒZUe Je d>¡e Je dU¡GdVdW„dWe#ƒƒƒZVe Je d>¡GdXdY„dYe#ƒƒZWe Je d>¡GdZd[„d[e#ƒƒZXe Je d>¡Gd\d]„d]e#ƒƒZYe Je d>¡Gd^d_„d_e#ƒƒZZe Je d>¡Gd`da„dae#ƒƒZ[e Je d>¡Gdbdc„dce#ƒƒZ\e Je d>¡e Je dd¡Gdedf„dfe#ƒƒƒZ]e Je d>¡Gdgdh„dhe#ƒƒZ^e Je d>¡Gdidj„dje#ƒƒZ_e Je d>¡Gdkdl„dle#ƒƒZ`e Je d>¡Gdmdn„dne#ƒƒZae Je d>¡Gdodp„dpe#ƒƒZbe Je d>¡Gdqdr„dre#ƒƒZceddskr²ddtlemfZfefe5ƒdS)uzLinux specific tests.é)ÚdivisionN)ÚLINUX)ÚPY3)ÚFileNotFoundError)Ú basestring)ÚAARCH64)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)Ú HAS_BATTERY)Ú HAS_CPU_FREQ)ÚHAS_GETLOADAVG)Ú HAS_RLIMIT)ÚPYPY)Ú QEMU_USER)ÚTOLERANCE_DISK_USAGE)ÚTOLERANCE_SYS_MEM)ÚPsutilTestCase)Ú ThreadTask)Ú call_until)Úmock)Ú reload_module)Úretry_on_failure)Ú safe_rmpath)Úsh)Úskip_on_not_implemented)Úwhich)Ú CLOCK_TICKS)ÚRootFsDeviceFinder)Úcalculate_avail_vmem)Ú open_binaryi‰i‰i'‰i‰i‰iz/sys/class/hwmon/hwmon*c Cs|ddl}|dd…}tr"t|dƒ}t tjtj¡}t |¡6t |  |  ¡t t   d|¡¡dd…¡W5QR£SQRXdS©NréÚasciiÚ256séé)ÚfcntlrÚbytesÚsocketÚAF_INETÚ SOCK_DGRAMÚ contextlibÚclosingÚ inet_ntoaÚioctlÚfilenoÚ SIOCGIFADDRÚstructÚpack©Úifnamer&Ús©r6úJ/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_linux.pyÚget_ipv4_addressMs   ÿÿr8c Cs|ddl}|dd…}tr"t|dƒ}t tjtj¡}t |¡6t |  |  ¡t t   d|¡¡dd…¡W5QR£SQRXdSr )r&rr'r(r)r*r+r,r-r.r/ÚSIOCGIFNETMASKr1r2r3r6r6r7Úget_ipv4_netmask\s     ÿþÿr:c Cs|ddl}|dd…}tr"t|dƒ}t tjtj¡}t |¡6t |  |  ¡t t   d|¡¡dd…¡W5QR£SQRXdSr )r&rr'r(r)r*r+r,r-r.r/ÚSIOCGIFBRDADDRr1r2r3r6r6r7Úget_ipv4_broadcastks     ÿþÿr<c CsÔtdƒJ}g}|D]"}| ¡}|d|kr| |¡qt|ƒdkrNtd|ƒ‚W5QRXtt|ƒƒD]j}||d}g}tdt|ƒdƒD]}| |||d…¡qˆd |¡} t tj | ¡} t  tj | ¡||<qd|S)Nz/proc/net/if_inet6éÿÿÿÿrzcould not find interface %réú:) ÚopenÚsplitÚappendÚlenÚ ValueErrorÚrangeÚjoinr(Ú inet_ptonÚAF_INET6Ú inet_ntop) r4ÚfZ all_fieldsÚlineÚfieldsÚiZ unformattedÚgroupsÚjÚ formattedÚpackedr6r6r7Úget_ipv6_addresseszs"      rRc s²ddl}|dd…}tr"t|dƒ}t tjtj¡}t |¡l| |  ¡t t   d|¡¡}trfdd„‰nddl }|j‰d ‡fdd „|d d …Dƒ¡dd …W5QR£SQRXdS) Nrr!r"r#cSs|S©Nr6©Úxr6r6r7Úordszget_mac_address..ordÚcsg|]}dˆ|ƒ‘qS)z%02x:r6)Ú.0Úchar©rVr6r7Ú ¤sz#get_mac_address..ér%r=)r&rr'r(r)r*r+r,r.r/Ú SIOCGIFHWADDRr1r2Ú __builtin__rVrF)r4r&r5Úinfor^r6rZr7Úget_mac_addresss     ÿ r`cCs€tddgddid}| d¡}|D]F}| d¡r"| ¡\}}}}t dd¡}|t|ƒt|ƒt|ƒƒSq"td d |¡ƒ‚d S) zQParse 'free' cmd and return swap memory's s total, used and free values. Úfreeú-bÚLANGúC.UTF-8©ÚenvÚ ZSwapztotal used freez&can't find 'Swap' in 'free' output: %sN)rrAÚ startswithÚ collectionsÚ namedtupleÚintrDrF)ÚoutÚlinesrKÚ_ÚtotalÚusedraÚntr6r6r7Ú free_swap§s    ÿrrcCsŠtddgddid}| d¡}|D]P}| d¡r"dd „| ¡d d …Dƒ\}}}}t dd ¡}||||||ƒSq"td d |¡ƒ‚dS)zSParse 'free' cmd and return physical memory's total, used and free values. rarbrcrdrergZMemcss|]}t|ƒVqdSrS)rk©rXrUr6r6r7Ú Ãszfree_physmem..ééztotal used free shared outputz%can't find 'Mem' in 'free' output: %sN)rrArhrirjrDrF)rlrmrKrorpraÚsharedrqr6r6r7Ú free_physmem·s  "ÿ ÿrxcCsZtddgddid}| d¡D]*}| ¡}||krt| d¡dƒSqtd |ƒ‚dS) NÚvmstatz-srcrdrergú rz can't find %r in 'vmstat' output)rrAÚstriprkrD)ÚstatrlrKr6r6r7ryÍs rycCs@tddgƒ ¡}d|kr"t d¡‚tttt d|  ¡d¡ƒƒS)Nraz-VÚUNKNOWNzcan't determine free versionz\d+r=) rr{ÚunittestÚSkipTestÚtupleÚmaprkÚreÚfindallrA)rlr6r6r7Úget_free_version_infoÖs r„c #sD‡‡fdd„}t‰trdnd}tj|d|d }|VW5QRXdS)z„Mock open() builtin and forces it to return a certain content for a given path. `pairs` is a {"path": "content", ...} dict. csT|ˆkr@ˆ|}tr4t|tƒr(t |¡St |¡SqPt |¡Snˆ|f|ž|ŽSdSrS)rÚ isinstancerÚioÚStringIOÚBytesIO)ÚnameÚargsÚkwargsÚcontent©Ú orig_openÚpairsr6r7Ú open_mockãs    z$mock_open_content..open_mockú builtins.openú__builtin__.openT©ÚcreateÚ side_effectN©r@rrÚpatch)rrÚ patch_pointÚmr6rr7Úmock_open_contentÝs   ršc #sF‡‡‡fdd„}t‰trdnd}tj|d|d }|VW5QRXdS)zZMock open() builtin and raises `exc` if the path being opened matches `for_path`. cs"|ˆkrˆ‚nˆ|f|ž|ŽSdSrSr6©r‰rŠr‹©ÚexcÚfor_pathrŽr6r7rüsz&mock_open_exception..open_mockr‘r’Tr“Nr–)ržrrr˜r™r6rœr7Úmock_open_exceptionös  rŸz LINUX onlyc@sLeZdZdd„Zeƒdd„ƒZeƒdd„ƒZeƒdd„ƒZeƒd d „ƒZd S) Ú"TestSystemVirtualMemoryAgainstFreecCs"tƒj}t ¡j}| ||¡dSrS)rxroÚpsutilÚvirtual_memoryÚ assertEqual©ÚselfZ cli_valueÚ psutil_valuer6r6r7Ú test_totals z-TestSystemVirtualMemoryAgainstFree.test_totalcCsNtƒdkrt d¡‚tƒdkr(t d¡‚tƒj}t ¡j}|j||tddS)N©ér©é úfree version too old©r>rrúfree version too recent©Údelta) r„r~rrxrpr¡r¢ÚassertAlmostEqualrr¤r6r6r7Ú test_useds     ÿz,TestSystemVirtualMemoryAgainstFree.test_usedcCs&tƒj}t ¡j}|j||tddS©Nr®)rxrar¡r¢r°rr¤r6r6r7Ú test_free(s ÿz,TestSystemVirtualMemoryAgainstFree.test_freecCsJtƒ}|j}|dkrt d¡‚t ¡j}|j||td|||jfddS)Nrz%free does not support 'shared' columnú %s %s %s©r¯Úmsg) rxrwr~rr¡r¢r°rÚoutput)r¥raÚ free_valuer¦r6r6r7Ú test_shared0s  üz.TestSystemVirtualMemoryAgainstFree.test_sharedcCsltddgƒ}| d¡}d|dkr.t d¡‚n:t|d ¡dƒ}t ¡j}|j||t d |||fd dS) NrarbrgÚ availablerz(free does not support 'available' columnrur=r´rµ) rrAr~rrkr¡r¢rºr°r)r¥rlrmr¸r¦r6r6r7Útest_available>s      üz1TestSystemVirtualMemoryAgainstFree.test_availableN) Ú__name__Ú __module__Ú __qualname__r§rr±r³r¹r»r6r6r6r7r  s   r c@sZeZdZdd„Zeƒdd„ƒZeƒdd„ƒZeƒdd„ƒZeƒd d „ƒZeƒd d „ƒZ d S)Ú$TestSystemVirtualMemoryAgainstVmstatcCs*tdƒd}t ¡j}|j||tddS)Nz total memoryér®)ryr¡r¢ror°r©r¥Z vmstat_valuer¦r6r6r7r§Ss  ÿz/TestSystemVirtualMemoryAgainstVmstat.test_totalcCsRtƒdkrt d¡‚tƒdkr(t d¡‚tdƒd}t ¡j}|j||tddS)Nr¨r«r¬r­z used memoryrÀr®) r„r~rryr¡r¢rpr°rrÁr6r6r7r±Zs      ÿz.TestSystemVirtualMemoryAgainstVmstat.test_usedcCs*tdƒd}t ¡j}|j||tddS)Nz free memoryrÀr®)ryr¡r¢rar°rrÁr6r6r7r³ns  ÿz.TestSystemVirtualMemoryAgainstVmstat.test_freecCs*tdƒd}t ¡j}|j||tddS)Nz buffer memoryrÀr®)ryr¡r¢Úbuffersr°rrÁr6r6r7Ú test_buffersvs  ÿz1TestSystemVirtualMemoryAgainstVmstat.test_bufferscCs*tdƒd}t ¡j}|j||tddS)Nz active memoryrÀr®)ryr¡r¢Úactiver°rrÁr6r6r7Ú test_active~s  ÿz0TestSystemVirtualMemoryAgainstVmstat.test_activecCs*tdƒd}t ¡j}|j||tddS)Nzinactive memoryrÀr®)ryr¡r¢Úinactiver°rrÁr6r6r7Ú test_inactive†s  ÿz2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN) r¼r½r¾r§rr±r³rÃrÅrÇr6r6r6r7r¿Qs    r¿c@sBeZdZdd„Zeƒdd„ƒZdd„Zdd„Zd d „Zd d „Z d S)ÚTestSystemVirtualMemoryMocksc CsZt d¡ ¡}td|iƒ4}tjdd}t d¡t ¡}|j sJt ‚|  t |ƒd¡|d}|  dt|jƒ¡|  d t|jƒ¡|  d t|jƒ¡|  d t|jƒ¡|  d t|jƒ¡|  d t|jƒ¡|  dt|jƒ¡|  |jd¡|  |jd¡|  |jd¡|  |jd¡|  |jd¡|  |jd¡|  |jd¡W5QRXW5QRXdS)NaL Active(anon): 6145416 kB Active(file): 2950064 kB Inactive(anon): 574764 kB Inactive(file): 1567648 kB MemAvailable: -1 kB MemFree: 2057400 kB MemTotal: 16325648 kB SReclaimable: 346648 kB ú /proc/meminfoT©ÚrecordÚalwaysrurz#memory stats couldn't be determinedÚcachedrwrÄrÆrÂrº)ÚtextwrapÚdedentÚencoderšÚwarningsÚcatch_warningsÚ simplefilterr¡r¢ÚcalledÚAssertionErrorr£rCÚassertInÚstrÚmessagerÍrÄrÆrwrÂrºÚslab©r¥rŒr™ÚwsÚretÚwr6r6r7Útest_warnings_on_misses‘s2   ÿz4TestSystemVirtualMemoryMocks.test_warnings_on_missesc Cs~i}tdƒ0}|D]$}| ¡}t|dƒd||d<qW5QRXt|ƒ}d|krz|d}t||ƒ|d}| |d¡dS)NrÉrurÀrs MemAvailable:édr!)rrArkrÚabsZ assertLess)r¥ZmemsrJrKrLÚaÚbZ diff_percentr6r6r7Útest_avail_old_percent·s $z3TestSystemVirtualMemoryMocks.test_avail_old_percentc Cs|t d¡ ¡}td|iƒX}tjdd}t ¡}W5QRX|jsFt ‚|  |j d¡|d}|  dt |jƒ¡W5QRXdS)Na Active: 9444728 kB Active(anon): 6145416 kB Active(file): 2950064 kB Buffers: 287952 kB Cached: 4818144 kB Inactive(file): 1578132 kB Inactive(anon): 574764 kB Inactive(file): 1567648 kB MemAvailable: 6574984 kB MemFree: 2057400 kB MemTotal: 16325648 kB Shmem: 577588 kB SReclaimable: 346648 kB rÉTrÊl œ"rú,inactive memory stats couldn't be determined©rÎrÏrÐršrÑrÒr¡r¢rÔrÕr£rºrÖr×rØrÚr6r6r7Ú test_avail_old_comes_from_kernelÇs ÿz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc Cs|t d¡ ¡}td|iƒX}tjdd}t ¡}W5QRX|jsFt ‚|  |j d¡|d}|  dt |jƒ¡W5QRXdS)Nat Active: 9444728 kB Active(anon): 6145416 kB Buffers: 287952 kB Cached: 4818144 kB Inactive(file): 1578132 kB Inactive(anon): 574764 kB MemFree: 2057400 kB MemTotal: 16325648 kB Shmem: 577588 kB rÉTrÊì`LGrrärårÚr6r6r7Útest_avail_old_missing_fieldsãs  ÿz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc Cst d¡ ¡}td|iƒltdttjdƒƒNtj dd6}t   ¡}|  |j d¡|d}| d t|jƒ¡W5QRXW5QRXW5QRXdS) Naì Active: 9444728 kB Active(anon): 6145416 kB Active(file): 2950064 kB Buffers: 287952 kB Cached: 4818144 kB Inactive(file): 1578132 kB Inactive(anon): 574764 kB Inactive(file): 1567648 kB MemFree: 2057400 kB MemTotal: 16325648 kB Shmem: 577588 kB SReclaimable: 346648 kB rÉz/proc/zoneinfoúno such file or directoryTrÊrçrrä)rÎrÏrÐršrŸÚIOErrorÚerrnoÚENOENTrÑrÒr¡r¢r£rºrÖr×rØ)r¥rŒrÛrÜrÝr6r6r7Útest_avail_old_missing_zoneinfoüs" þÿþzt ‚|  t |ƒd¡|d}|  dt|jƒ¡|  |jd¡|  |jd¡W5QRXW5QRXdS) Nz /proc/vmstatréTrÊrÌrurzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)rŸrêrërìrÑrÒrÓr¡rõrÔrÕr£rCrÖr×rØrùrúrûr6r6r7Útest_no_vmstat_mocked•s" ÿ  ýz*TestSystemSwapMemory.test_no_vmstat_mockedc Cs| ¡st d¡St d¡}t ¡}W5QRX|jr:t‚ddl m }|  ¡\}}}}}}}||9}||9}|  |j |¡|j|j|tddS)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinforr®)rôr~Úskiprr—r¡rõrÔrÕZpsutil._psutil_linuxZ _psutil_linuxZ linux_sysinfor£ror°rar)r¥r™ÚswapZcextrnroraZunit_multiplierr6r6r7Útest_meminfo_against_sysinfo¨s    z1TestSystemSwapMemory.test_meminfo_against_sysinfoc Cs.tddiƒ}t ¡|js t‚W5QRXdS)NrÉó)ršr¡rõrÔrÕ©r¥r™r6r6r7Ú#test_emulate_meminfo_has_no_metrics¹sz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN) r¼r½r¾Ú staticmethodrôr§rr±r³rürýrrr6r6r6r7rñes   rñc@seZdZdd„ZdS)ÚTestSystemCPUTimescCs t ¡j}t dt ¡d¡d}ttt |  d¡ƒƒ}|dkrL|  d|¡n |  d|¡|dkrn|  d|¡n |  d|¡|d kr|  d |¡n |  d |¡dS) Nz \d+\.\d+\.\d+érÚ.)réé Ústeal)rrr%Zguest)r©rrZ guest_nice) r¡Ú cpu_timesÚ_fieldsr‚rƒÚosÚunamer€rrkrArÖÚ assertNotIn)r¥rLZ kernel_verZkernel_ver_infor6r6r7Ú test_fieldsÉs   zTestSystemCPUTimes.test_fieldsN)r¼r½r¾rr6r6r6r7rÇsrc@s„eZdZe ej d¡ d¡dd„ƒZe ej d¡ d¡dd„ƒZ e e d ƒ d ¡d d „ƒZ e e d ƒ d¡dd„ƒZ dd„Z dS)ÚTestSystemCPUCountLogicalú/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc CsVtdƒ}| ¡ ¡}W5QRXdt|ƒkrRt| d¡dƒd}| t ¡|¡dS)Nrú-ru) r@ròr{r×rkrAr£r¡Ú cpu_count)r¥rJÚvaluer6r6r7Útest_against_sysdev_cpu_onlineÝs   z8TestSystemCPUCountLogical.test_against_sysdev_cpu_onlineú/sys/devices/system/cpuz&/sys/devices/system/cpu does not existcCs0t d¡}tdd„|Dƒƒ}| t ¡|¡dS)NrcSs g|]}t d|¡dk r|‘qS)zcpu\d+$N)r‚Úsearchrsr6r6r7r[îszITestSystemCPUCountLogical.test_against_sysdev_cpu_num..)r ÚlistdirrCr£r¡r)r¥ZlsÚcountr6r6r7Útest_against_sysdev_cpu_numès z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablecCs$ttdƒƒ}| tjdd|¡dS)Nz nproc --allT©Zlogical)rkrr£r¡r)r¥Únumr6r6r7Útest_against_nprocñs z,TestSystemCPUCountLogical.test_against_nprocÚlscpuúlscpu utility not availablecCs8tdƒ}tdd„| d¡Dƒƒ}| tjdd|¡dS)Núlscpu -pcSsg|]}| d¡s|‘qS)ú#©rhrsr6r6r7r[ùs z@TestSystemCPUCountLogical.test_against_lscpu..rgTr)rrCrAr£r¡r)r¥rlrr6r6r7Útest_against_lscpuösz,TestSystemCPUCountLogical.test_against_lscpuc Cs&ddl}|j ¡}tjdtdü}| |j ¡|¡|js>t‚tjddd:}|  |j ¡¡| |j d¡| |j ddd¡W5QRXt d d ƒ}|  ¡}W5QRXt |¡}tjd|dd }| |j ¡|¡W5QRXtd d iƒ$}| |j ¡|¡|jst‚W5QRXW5QRXdS) Nrzpsutil._pslinux.os.sysconf©r•r÷Trørú /proc/statú /proc/cpuinfoÚrb©Ú return_valuer”r)Úpsutil._pslinuxÚ_pslinuxZcpu_count_logicalrr—rDr£rÔrÕÚ assertIsNoneZ call_countZ call_argsr@ròr†rˆrš)r¥r¡Úoriginalr™rJZ cpuinfo_dataÚ fake_filer6r6r7Útest_emulate_fallbacksüs4 ÿ    ÿz0TestSystemCPUCountLogical.test_emulate_fallbacksN)r¼r½r¾r~ÚskipIfr ÚpathÚexistsrrrrr$r0r6r6r6r7rÛs þ  þ   rc@s6eZdZe edƒ d¡dd„ƒZdd„Zdd„Zd S) ÚTestSystemCPUCountCoresrr cCs\tdƒ}tƒ}| d¡D]&}| d¡s| d¡}| |d¡q| tjddt|ƒ¡dS)Nr!rgr"ú,ruFr) rÚsetrArhÚaddr£r¡rrC)r¥rlZcore_idsrKrLr6r6r7r$#s  z*TestSystemCPUCountCores.test_against_lscpuc CsPtj ¡}tjdgd}tj ¡}|js.t‚W5QRX|dk rL| ||¡dS)Nú glob.glob©r*)r¡r,Úcpu_count_coresrr—rÔrÕr£)r¥Zmeth_1r™Zmeth_2r6r6r7Ú test_method_2-s   z%TestSystemCPUCountCores.test_method_2c Cs\tjdgd0}tjddd}| tj ¡¡W5QRXW5QRX|jsNt‚|jsXt‚dS)Nr8r9r÷Trø)rr—r-r¡r,r:rÔrÕ)r¥Úm1Úm2r6r6r7Útest_emulate_none5s $ z)TestSystemCPUCountCores.test_emulate_noneN) r¼r½r¾r~r1rr$r;r>r6r6r6r7r4!s r4c@s†eZdZe e d¡dd„ƒZe e d¡e ed¡dd„ƒƒZe e d¡dd„ƒZ e e d¡d d „ƒZ e e d¡d d „ƒZ d S)ÚTestSystemCPUFrequencyú not supportedc s@‡fdd„}tjj‰tjd|ddt ¡s2t‚W5QRXdS)Ncs| d¡rdSˆ|ƒSdS)Nú&/sys/devices/system/cpu/cpufreq/policyFr#©r2©Z orig_existsr6r7Úpath_exists_mockBs zMTestSystemCPUFrequency.test_emulate_use_second_file..path_exists_mockúos.path.existsT)r•r”)r r2r3rr—r¡Úcpu_freqrÕ)r¥rDr6rCr7Útest_emulate_use_second_file?s ÿz3TestSystemCPUFrequency.test_emulate_use_second_filez,aarch64 does not report mhz in /proc/cpuinfoc s´‡fdd„}tjj‰z†tjd|dnttjƒt ¡}|sDt |ƒ‚|  |j d¡|  |j d¡tjddD] }|  |j d¡|  |j d¡qlW5QRXW5ttjƒttƒXdS)Ncs| d¡rdSˆ|ƒSdS)Nz/sys/devices/system/cpu/Fr#rB©Zos_path_existsr6r7rDSs zITestSystemCPUFrequency.test_emulate_use_cpuinfo..path_exists_mockrEr%çT©Zpercpu) r r2r3rr¡r,rr—rFrÕr£ÚmaxÚmin)r¥rDrÜÚfreqr6rHr7Útest_emulate_use_cpuinfoNs    z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc sš‡fdd„}t‰trdnd}tj||dftjdddLt ¡}| |jd ¡|jd krj| |jd ¡|j d kr‚| |j d ¡W5QRXW5QRXdS) Ncs€| d¡r| d¡rt d¡S| d¡r<| d¡r.open_mockr‘r’r%rETr9ç@@rIçÀ‚@gà…@© r@rrr—r¡rFr£ÚcurrentrLrK©r¥rr˜rMr6rVr7Útest_emulate_datahs    z(TestSystemCPUFrequency.test_emulate_datac s‡fdd„}t‰trdnd}tj||dêtjdddÐtjd d d¶tjdd }| |d jd ¡|d jdkrŠ| |d jd¡|d j dkrª| |d j d¡| |djd¡|djdkrÜ| |djd¡|dj dkrü| |dj d¡W5QRXW5QRXW5QRXdS)NcsÞ|}| d¡r"| d¡r"t d¡S| d¡r@| d¡r@t d¡S| d¡r^| d¡r^t d¡S| d¡r|| d¡r|t d ¡S| d¡rš| d¡ršt d ¡S| d¡r¸| d¡r¸t d ¡S|d krÊt d ¡Sˆ|f|ž|ŽSdS)NrOz'/sys/devices/system/cpu/cpufreq/policy0s100000rQó200000rSs300000z'/sys/devices/system/cpu/cpufreq/policy1s400000rPrRr's#cpu MHz : 100 cpu MHz : 400rT)r‰rŠr‹ÚnrVr6r7r‹s8ÿ ÿ ÿ ÿ ÿ ÿ  z@TestSystemCPUFrequency.test_emulate_multi_cpu..open_mockr‘r’r%rETr9ú!psutil._pslinux.cpu_count_logicalrrJrçY@rIgi@gÀr@rugy@rWrXrYr[r6rVr7Útest_emulate_multi_cpu‰s(  ÿ z-TestSystemCPUFrequency.test_emulate_multi_cpuc s„‡fdd„}t‰trdnd}tj||dPtjddd6tjd d dt ¡}| |jd ¡W5QRXW5QRXW5QRXdS) NcsR| d¡rttjdƒ‚n6| d¡r,t d¡S|dkr>t d¡Sˆ|f|ž|ŽSdS)NrOrWz/cpuinfo_cur_freqr]r'scpu MHz : 200)rUrêrërìr†rˆr›rVr6r7rÀs    zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file..open_mockr‘r’r%rETr9r_ruéÈ)r@rrr—r¡rFr£rZr[r6rVr7Ú%test_emulate_no_scaling_cur_freq_file½s  ÿzrrur5z(.*) MTU:(\d+) Metric:(\d+)r©zno matches were found)r¡r~rprrr‚rrCrNr6ÚgroupÚlowerrAÚflagsr£Úfail)r¥Z matches_foundr‰rrlÚmatchZifconfig_flagsZ psutil_flagsr6r6r7Ú test_flags3s(  zTestSystemNetIfStats.test_flagsN) r¼r½r¾r~r1rr‚rƒr‰r6r6r6r7rys  ryc@s,eZdZe edƒ d¡eƒdd„ƒƒZdS)ÚTestSystemNetIOCountersrzr{c Csdd„}tjddd}| ¡D]Þ\}}z ||ƒ}Wntk rJYqYnX|j|j|ddd|j|j|d dd|j|j|d d d|j|j|d d d|j|j |d dd|j|j |ddd|j|j |ddd|j|j |dddqdS)NcSsÔi}td|ƒ}tt d|¡dƒ|d<tt d|¡dƒ|d<tt d|¡dƒ|d<tt d|¡d ƒ|d <tt d |¡dƒ|d <tt d |¡d ƒ|d <tt d|¡dƒ|d<tt d|¡dƒ|d<|S)Nr|zRX packets[: ](\d+)rÚ packets_recvzTX packets[: ](\d+)Ú packets_sentzerrors[: ](\d+)ÚerrinruÚerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú bytes_sent)rrkr‚rƒ)ZnicrÜrlr6r6r7rzWs& ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig..ifconfigTF)ZpernicÚnowrapr‘i(r®r’r‹rÀrŒré rŽrr) r¡Únet_io_countersrprr°r‘r’r‹rŒrrŽrr)r¥rzZnior‰rZ ifconfig_retr6r6r7r‚Ts^  ÿÿÿÿÿÿÿÿz-TestSystemNetIOCounters.test_against_ifconfigN)r¼r½r¾r~r1rrr‚r6r6r6r7rŠRsrŠc@s8eZdZejdedejddddd„ƒƒZdd „Zd S) ÚTestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr%zpsutil._pslinux.supports_ipv6Fr9cCsRz*t tjtj¡}| |j¡| d¡Wntjk r@YnXtjdddS)N)z::1rZinet6©Úkind) r(rHÚ SOCK_STREAMZ addCleanupÚcloseÚbindÚerrorr¡Únet_connections)r¥Z supports_ipv6rIr5r6r6r7Útest_emulate_ipv6_unsupportedŽs z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc Cs<t d¡}td|iƒ}tjdd|js.t‚W5QRXdS)Na 0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n 0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ 0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O 000000000000000000000000000000000000000000000000000000 z/proc/net/unixÚunixr—)rÎrÏršr¡rrÔrÕ)r¥rŒr™r6r6r7Útest_emulate_unixšs  z*TestSystemNetConnections.test_emulate_unixN)r¼r½r¾rr—rDržr r6r6r6r7r–Œs   r–c@s>eZdZe eedƒ d¡eƒdd„ƒƒZdd„Z dd„Z d S) ÚTestSystemDiskPartitionsÚstatvfszos.statvfs() not availablecCsndd„}tjddD]T}t |j¡}||jƒ\}}}}| |j|¡|j|j|td|j|j |tdqdS)NcSsztd|ƒ ¡}| d¡}| d¡| d¡}| ¡dd…\}}}}|dkrRd}t|ƒt|ƒt|ƒ}}}||||fS)Nzdf -P -B 1 "%s"rgrr>ÚnonerW)rr{rAÚpoprk)r2rlrmrKÚdevrorprar6r6r7Údf²s   z4TestSystemDiskPartitions.test_against_df..dfF)Úallr®) r¡Údisk_partitionsÚ disk_usageZ mountpointr£ror°rarrp)r¥r¦ÚpartÚusagernrorprar6r6r7Útest_against_df­s  ÿÿz(TestSystemDiskPartitions.test_against_dfc CsÈtdƒ}| ¡}W5QRXd|krLt ¡D]}|jdkr,qÄq,| d¡‚nxt d¡}tj d|ddX}tj dd gd <}t ¡}|j sŒt ‚|j s–t ‚|sžt ‚|  |d jd¡W5QRXW5QRXdS) Nz/proc/filesystemsÚzfszcouldn't find any ZFS partitionz nodev zfs r÷Tr)ú$psutil._pslinux.cext.disk_partitions)z /dev/sdb3ú/r­Úrwr9r) r@ròr¡r¨Zfstyper‡r†r‡rr—rÔrÕr£)r¥rJrórªr/r<r=rÜr6r6r7Ú test_zfs_fsÈs0     ÿþ  z$TestSystemDiskPartitions.test_zfs_fsc CsTzFtjddd.}| t¡t ¡W5QRX|js:t‚W5QRXW5dt_XdS)Nú/proczos.path.realpathz /non/existentr9) r¡Ú PROCFS_PATHrr—Ú assertRaisesrr¨rÔrÕrr6r6r7Útest_emulate_realpath_failâsÿ z3TestSystemDiskPartitions.test_emulate_realpath_failN) r¼r½r¾r~r1Úhasattrr rr¬r±rµr6r6r6r7r¡«s  r¡c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚTestSystemDiskIoCountersc CsÌd}td|iƒ²tjddd˜tjdd}| |jd¡| |jd ¡| |jd t ¡| |j d ¡| |j d ¡| |j d ¡| |j dt ¡| |jd¡| |jd¡W5QRXW5QRXdS)Nz+ 3 0 1 hda 2 3 4 5 6 7 8 9 10 11 12ú/proc/diskstatsú!psutil._pslinux.is_storage_deviceTr9F©r“rurr©r>rvréér”©ršrr—r¡Údisk_io_countersr£Ú read_countÚread_merged_countÚ read_bytesÚ SECTOR_SIZEÚ read_timeÚ write_countÚwrite_merged_countÚ write_bytesÚ write_timeÚ busy_time©r¥rŒrÜr6r6r7Útest_emulate_kernel_2_4ñs ÿ z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c CsÌd}td|iƒ²tjddd˜tjdd}| |jd¡| |jd ¡| |jd t ¡| |j d ¡| |j d ¡| |j d ¡| |j dt ¡| |jd¡| |jd¡W5QRXW5QRXdS)Nz' 3 0 hda 1 2 3 4 5 6 7 8 9 10 11r¸r¹Tr9Frºrurr©r>rvrr»r¼r”r½rÉr6r6r7Útest_emulate_kernel_2_6_fulls ÿ z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc CsÈtddiƒ²tjddd˜tjdd}| |jd¡| |jd t¡| |j d ¡| |j d t¡| |j d ¡| |j d ¡| |j d ¡| |jd ¡| |jd ¡W5QRXW5QRXdS) Nr¸z 3 1 hda 1 2 3 4r¹Tr9Frºrurr©r>r)ršrr—r¡r¾r£r¿rÁrÂrÄrÆrÀrÃrÅrÇrÈ)r¥rÜr6r6r7Útest_emulate_kernel_2_6_limitedsÿ z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc Cs¦t d¡}td|iƒ†tjdddltjddd}| t|ƒd¡| |d j d ¡| |d j d ¡| |d j d ¡| |d j d ¡W5QRXW5QRXdS) Núx 3 0 nvme0n1 1 2 3 4 5 6 7 8 9 10 11 3 0 nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11 r¸r¹Fr9T©Úperdiskr“rÚnvme0n1ruZ nvme0n1p1rv) rÎrÏršrr—r¡r¾r£rCr¿rÄrÉr6r6r7Útest_emulate_include_partitions.s ÿz8TestSystemDiskIoCounters.test_emulate_include_partitionsc CsÈt d¡}td|iƒ8tjdddtjddd}| |¡W5QRXW5QRXdd„}t d¡}td|iƒLtjdd |d 0tjddd}| |j d ¡| |j d ¡W5QRXW5QRXdS) NrÍr¸r¹Fr9rÎcSs|dkS)NrÐr6)r‰r6r6r7Úis_storage_devicePszSTestSystemDiskIoCounters.test_emulate_exclude_partitions..is_storage_deviceTr“rurv) rÎrÏršrr—r¡r¾r-r£r¿rÄ)r¥rŒrÜrÒr6r6r7Útest_emulate_exclude_partitionsAs& ÿ ýz8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc CsTdd„}tjdd}tjdd|dtjdd}W5QRX| t|ƒt|ƒ¡dS)NcSs|dkS)Nr¸r6rBr6r6r7r3bsz?TestSystemDiskIoCounters.test_emulate_use_sysfs..existsT)rÏúpsutil._pslinux.os.path.existsr“)r¡r¾rr—r£rC)r¥r3ZwprocfsZwsysfsr6r6r7Útest_emulate_use_sysfsas ÿz/TestSystemDiskIoCounters.test_emulate_use_sysfsc Cs6dd„}tjdd|d| ttj¡W5QRXdS)NcSsdS)NFr6rBr6r6r7r3msz>TestSystemDiskIoCounters.test_emulate_not_impl..existsrÔTr“)rr—r´ÚNotImplementedErrorr¡r¾)r¥r3r6r6r7Útest_emulate_not_impllsÿz.TestSystemDiskIoCounters.test_emulate_not_implN) r¼r½r¾rÊrËrÌrÑrÓrÕr×r6r6r6r7r·ïs  r·c@s^eZdZdd„Zdd„Ze ed¡dd„ƒZe e dƒ d ¡e ed¡d d „ƒƒZ d d „Z dS)ÚTestRootFsDeviceFindercCs(t d¡j}t |¡|_t |¡|_dS)Nr¯)r r|Úst_devÚmajorÚminor)r¥r¥r6r6r7ÚsetUpxs  zTestRootFsDeviceFinder.setUpcCsftƒ}tj d¡r| ¡n| t|j¡tj d|j|jf¡rL|  ¡n| t|j ¡|  ¡dS©Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent) rr r2r3Úask_proc_partitionsr´rrÚrÛÚask_sys_dev_blockÚask_sys_class_block)r¥Úfinderr6r6r7Útest_call_methods}s  ÿ z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONScCs¨tƒ}| | ¡¡d}}}tj d¡r4| ¡}tj d|j|jf¡rT|  ¡}|  ¡}|pf|pf|}|r||r||  ||¡|r|r|  ||¡|r¤|r¤|  ||¡dSrÝ) rÚassertIsNotNoneÚfindr r2r3rÞrÚrÛràrßr£)r¥rárárâÚcÚbaser6r6r7Útest_comparisons‹s"  ÿ   z'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablecCs"tƒ ¡}tdƒ}| ||¡dS)Nzfindmnt -o SOURCE -rn /)rrärr£)r¥r¦Z findmnt_valuer6r6r7Útest_against_findmnt¡s z+TestRootFsDeviceFinder.test_against_findmntc CsltjddgdR}t ¡d}|js(t‚tsP| |jd¡|  |jt ƒ  ¡¡n|  |jd¡W5QRXdS)Nr®)ú /dev/rootr¯Zext4r°r9rré) rr—r¡r¨rÔrÕrÚassertNotEqualZdevicer£rrä)r¥r™rªr6r6r7Útest_disk_partitions_mocked¨sþ  z2TestRootFsDeviceFinder.test_disk_partitions_mockedN) r¼r½r¾rÜrâr~r1rrçrrèrër6r6r6r7rØvs    rØc@sReZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze ƒd d„ƒZ dd„Z dS)ÚTestMisccCs(tdƒ}t ¡}| t|ƒt|ƒ¡dS)Nz boot time)ryr¡Ú boot_timer£rkrÁr6r6r7Útest_boot_time½szTestMisc.test_boot_timec s| ¡}t |¡ttj |d¡dƒ$}| d¡| d¡| d¡W5QRXz¤t‰‡fdd„}t rldnd }t j ||d nt t ƒ| tt j¡|jtt jd d | tt j¡|jtt jd d | tt j¡|jtt jd d |t _| t  ¡d ¡| tt  ¡ƒd ¡t jd d }| t|ƒd ¡t jd d }| ttt|ƒƒd ¡ttj |d¡dƒ$}| d¡| d¡| d¡W5QRX| t  ¡d ¡| tt jd d ƒd ¡| tt  ¡ƒd ¡| tttt jd d ƒƒd ¡W5QRXW5t |¡t t ƒX| t jd¡dS)Nr|rÝzcpu 0 0 0 0 0 0 0 0 0 0 zcpu0 0 0 0 0 0 0 0 0 0 0 zcpu1 0 0 0 0 0 0 0 0 0 0 cs&| d¡rttjdƒ‚ˆ|f|ž|ŽS)Nr²zrejecting access for test)rhrêrërìr›rVr6r7rÎs  z4TestMisc.test_no_procfs_on_import..open_mockr‘r’r%TrJrzcpu 1 0 0 0 0 0 0 0 0 0 zcpu0 1 0 0 0 0 0 0 0 0 0 zcpu1 1 0 0 0 0 0 0 0 0 0 r²)Ú get_testfnr Úmkdirr@r2rFÚwriteÚshutilÚrmtreerr¡rrr—r´rêr Ú cpu_percentÚcpu_times_percentr³r£Úsumrrê)r¥Z my_procfsrJrr˜Zper_cpu_percentZper_cpu_times_percentr6rVr7Útest_no_procfs_on_importÂsV     ÿ    ÿ  z!TestMisc.test_no_procfs_on_importc Cs8t d¡ ¡}td|iƒ8}t ¡|js.t‚tjddt ¡tjddW5QRXt d¡ ¡}td|iƒ¼t ¡}|js†t‚tjdd}t ¡}tjdd}|  |d¡|  t |ƒd¡|  t |ƒd¡|  t |ƒd¡|  t t t |ƒƒd¡|  t t t |ƒƒd¡|  |j d¡|  |jd¡W5QRXdS)Nz~ cpu 0 0 0 0 0 0 0 1 0 0 cpu0 0 0 0 0 0 0 0 1 0 0 cpu1 0 0 0 0 0 0 0 1 0 0 r&TrJz~ cpu 1 0 0 0 0 0 0 0 0 0 cpu0 1 0 0 0 0 0 0 0 0 0 cpu1 1 0 0 0 0 0 0 0 0 0 rr`)rÎrÏrÐršr¡rôrÔrÕrõrêrörr£r Úuser)r¥rŒr™rôZcpu_percent_percpurõZcpu_times_percent_percpur6r6r7Útest_cpu_steal_decreases,      z TestMisc.test_cpu_steal_decreasec Cs8tjddd }| ttjj¡|js*t‚W5QRXdS)Nr÷Trø) rr—r´rr¡r,rírÔrÕrr6r6r7Útest_boot_time_mocked'szTestMisc.test_boot_time_mockedcCs t ¡D]}| |jd¡qdS)N)z:0z:0.0)r¡ZusersrÚhost)r¥rør6r6r7Ú test_users,s zTestMisc.test_userscCs®| ¡}t |¡zŽ|t_| ttj¡| ttj¡|jttjdd| ttj ¡| ttj ¡| ttj ¡| ttj ¡| ttj ¡| tjtj¡W5dt_XdS)Nr²TrJ)rïr rðr¡r³r´rêr¢r rírr•r~r¨Z NoSuchProcessÚProcess)r¥Ztdirr6r6r7Útest_procfs_path2s zTestMisc.test_procfs_pathc Cs„tƒtt ¡}| ¡}| t|ƒtr*dnd¡t|dd„ddj}|  |j |¡t |¡}|  ¡|  |t  ¡¡W5QRXdS)Nr©rcSs|jSrS)ÚidrTr6r6r7ÚPrz)TestMisc.test_issue_687..)Úkeyru)rr¡rýÚthreadsr£rCrÚsortedrÿrêÚpidÚas_dictrZpids)r¥ÚprÚtidÚptr6r6r7Útest_issue_687Es zTestMisc.test_issue_687c Cs8tddiƒ"}t t ¡¡s t‚|js*t‚W5QRXdS)Nú/proc/%s/statusrW)ršr¡Z pid_existsr ÚgetpidrÕrÔrr6r6r7Útest_pid_exists_no_proc_statusVsz'TestMisc.test_pid_exists_no_proc_statusN) r¼r½r¾rîr÷rùrúrürþrr r r6r6r6r7rì»s>' rìz no batteryc@sfeZdZe edƒ d¡dd„ƒZdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„ZdS)ÚTestSensorsBatteryZacpizacpi utility not availablecCsDtdƒ}t| d¡d ¡ dd¡ƒ}t ¡j}|j||dddS)Nzacpi -br5rurorWr®) rrkrAr{Úreplacer¡Úsensors_batteryÚpercentr°)r¥rlZ acpi_valuer¦r6r6r7Ú test_percentgs zTestSensorsBattery.test_percentc sj‡fdd„}t‰trdnd}tj||d6}| t ¡jd¡| t ¡jtj ¡|j s\t ‚W5QRXdS)Ncs(| d¡rt d¡Sˆ|f|ž|ŽSdS)N©z AC0/onlinez AC/onlineó1©rUr†rˆr›rVr6r7rps  z@TestSensorsBattery.test_emulate_power_plugged..open_mockr‘r’r%T) r@rrr—r£r¡rÚ power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDrÔrÕ©r¥rr˜r™r6rVr7Útest_emulate_power_pluggedns  ÿz-TestSensorsBattery.test_emulate_power_pluggedc sV‡fdd„}t‰trdnd}tj||d"}| t ¡jd¡|jsHt ‚W5QRXdS)Ncs@| d¡rttjdƒ‚n$| d¡r,t d¡Sˆ|f|ž|ŽSdS)NrrWú/statusZcharging©rUrêrërìr†r‡r›rVr6r7r‚s    zBTestSensorsBattery.test_emulate_power_plugged_2..open_mockr‘r’r%T© r@rrr—r£r¡rrrÔrÕrr6rVr7Útest_emulate_power_plugged_2s   z/TestSensorsBattery.test_emulate_power_plugged_2c sV‡fdd„}t‰trdnd}tj||d"}| t ¡jd¡|jsHt ‚W5QRXdS)Ncs(| d¡rt d¡Sˆ|f|ž|ŽSdS)Nró0rr›rVr6r7r’s  zDTestSensorsBattery.test_emulate_power_not_plugged..open_mockr‘r’r%Frrr6rVr7Útest_emulate_power_not_pluggeds   z1TestSensorsBattery.test_emulate_power_not_pluggedc sV‡fdd„}t‰trdnd}tj||d"}| t ¡jd¡|jsHt ‚W5QRXdS)Ncs@| d¡rttjdƒ‚n$| d¡r,t d¡Sˆ|f|ž|ŽSdS)NrrWrZ dischargingrr›rVr6r7r¡s    zFTestSensorsBattery.test_emulate_power_not_plugged_2..open_mockr‘r’r%Frrr6rVr7Ú test_emulate_power_not_plugged_2žs   z3TestSensorsBattery.test_emulate_power_not_plugged_2c sT‡fdd„}t‰trdnd}tj||d }| t ¡j¡|jsFt ‚W5QRXdS)Ncs@| d¡rttjdƒ‚n$| d¡r,t d¡Sˆ|f|ž|ŽSdS)N)ú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onlinerWú#/sys/class/power_supply/BAT0/statuss???)rhrêrërìr†rˆr›rVr6r7r²s    zETestSensorsBattery.test_emulate_power_undetermined..open_mockr‘r’r%) r@rrr—r-r¡rrrÔrÕrr6rVr7Útest_emulate_power_undetermined¯s   z2TestSensorsBattery.test_emulate_power_undeterminedc Cs8tddiƒ"}| t ¡jd¡|js*t‚W5QRXdS)Nú(/sys/class/power_supply/BAT0/energy_fullrr)ršr£r¡rrrÔrÕrr6r6r7Útest_emulate_energy_full_0Ãs ÿz-TestSensorsBattery.test_emulate_energy_full_0c CsjtdttjdƒƒNtdttjdƒƒ0tddiƒ| t ¡jd¡W5QRXW5QRXW5QRXdS)Nr#rWz(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys88éX) rŸrêrërìršr£r¡rr©r¥r6r6r7Ú"test_emulate_energy_full_not_availËs þ þÿz5TestSensorsBattery.test_emulate_energy_full_not_availc CsntdttjdƒƒRtdttjdƒƒ4tdttjdƒƒ| t ¡j¡W5QRXW5QRXW5QRXdS)Nr rWrr!)rŸrêrërìr-r¡rrr&r6r6r7Útest_emulate_no_powerÛs ÿ ÿ þz(TestSensorsBattery.test_emulate_no_powerN)r¼r½r¾r~r1rrrrrrr"r$r'r(r6r6r6r7r ds r c@seZdZdd„ZdS)ÚTestSensorsBatteryEmulatedc sx‡fdd„}t‰trdnd}tjddgd.}tj||d}| t ¡¡W5QRXW5QRX|jsjt‚|jstt‚dS) NcsP| d¡rt d¡S| d¡r(t d¡S| d¡r.open_mockr‘r’z os.listdirZBAT0r9r%) r@rrr—rãr¡rrÔrÕ)r¥rr˜ZmlistdirZmopenr6rVr7Útest_itìs  " z"TestSensorsBatteryEmulated.test_itN)r¼r½r¾r,r6r6r6r7r)êsr)c@seZdZdd„Zdd„ZdS)ÚTestSensorsTemperaturesc sž‡fdd„}t‰trdnd}tj||djtjddgdNt ¡d d }| |jd ¡| |jd ¡| |j d ¡| |j d¡W5QRXW5QRXdS)Ncsx| d¡rt d¡S| d¡r(t d¡S| d¡r.open_mockr‘r’r%r8z/sys/class/hwmon/hwmon0/temp1r9r‰rr/ç>@gD@çI@© r@rrr—r¡Zsensors_temperaturesr£r/rZÚhighÚcritical)r¥rr˜Útempr6rVr7Útest_emulate_class_hwmons  ÿz0TestSensorsTemperatures.test_emulate_class_hwmonc s¦‡fdd„}dd„}t‰tr dnd}tj||djtjdd |d Nt ¡d d }| |jd ¡| |jd¡| |j d¡| |j d¡W5QRXW5QRXdS)Ncsd| d¡rt d¡S| d¡r(t d¡S| d¡r.open_mockcSs:|dkr gS|dkrgS|dkr&dgS|dkr6ddgSgS)Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr6rBr6r6r7Ú glob_mock+sþzETestSensorsTemperatures.test_emulate_class_thermal..glob_mockr‘r’r%r8Tr“r‰rrWr2r3r4)r¥rr:r˜r7r6rVr7Útest_emulate_class_thermals  z2TestSensorsTemperatures.test_emulate_class_thermalN)r¼r½r¾r8r;r6r6r6r7r-sr-c@seZdZdd„ZdS)ÚTestSensorsFansc s‚‡fdd„}t‰trdnd}tj||dNtjddgd2t ¡d d }| |jd ¡| |jd ¡W5QRXW5QRXdS) NcsP| d¡rt d¡S| d¡r(t d¡S| d¡r.open_mockr‘r’r%r8z/sys/class/hwmon/hwmon2/fan1r9r‰rr/iÐ) r@rrr—r¡Z sensors_fansr£r/rZ)r¥rr˜Úfanr6rVr7r\Fs  ÿz!TestSensorsFans.test_emulate_dataN)r¼r½r¾r\r6r6r6r7r<Dsr<c@s¼eZdZeƒdd„ƒZdd„Ze ed¡dd„ƒZ dd „Z d d „Z d d „Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Ze e d¡dd „ƒZd!d"„Zd#d$„Zd%d&„Zd'S)(Ú TestProcesscCs’| ¡}tj |j¡ ¡\}}}t |j¡jdd}|j|tdd„|Dƒƒdd|j|tdd„|Dƒƒdd|j|tdd„|DƒƒdddS) NF)ÚgroupedcSsg|]}|j|j‘qSr6)Z private_dirtyZ private_cleanrsr6r6r7r[jsz?TestProcess.test_parse_smaps_vs_memory_maps..rîr®cSsg|] }|j‘qSr6)Úpssrsr6r6r7r[mscSsg|] }|j‘qSr6)rÿrsr6r6r7r[ns) Zspawn_testprocr¡r,rýrÚ _parse_smapsÚ memory_mapsr°rö)r¥ZsprocÚussrArÿÚmapsr6r6r7Útest_parse_smaps_vs_memory_mapscsýz+TestProcess.test_parse_smaps_vs_memory_mapsc Cs~t d¡ ¡}tdt ¡|iƒR}tj t ¡¡}|  ¡\}}}|j sLt ‚|  |d¡|  |d¡|  |d¡W5QRXdS)Nan fffff0 r-xp 00000000 00:00 0 [vsyscall] Size: 1 kB Rss: 2 kB Pss: 3 kB Shared_Clean: 4 kB Shared_Dirty: 5 kB Private_Clean: 6 kB Private_Dirty: 7 kB Referenced: 8 kB Anonymous: 9 kB LazyFree: 10 kB AnonHugePages: 11 kB ShmemPmdMapped: 12 kB Shared_Hugetlb: 13 kB Private_Hugetlb: 14 kB Swap: 15 kB SwapPss: 16 kB KernelPageSize: 17 kB MMUPageSize: 18 kB Locked: 19 kB VmFlags: rd ex ú/proc/%s/smapsilrïi<) rÎrÏrÐršr r r¡r,rýrBrÔrÕr£)r¥rŒr™rrDrArÿr6r6r7Útest_parse_smaps_mockedps   z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYc Cshdd„}| ¡}t|dƒ| ||ƒjd¡W5QRXt|ƒ| ||ƒjd¡W5QRXt|dƒ| ||ƒjd¡W5QRXt|dƒ| ||ƒjd¡W5QRXt|dƒ| ||ƒjd¡W5QRXt|dƒ| ||ƒjd¡W5QRXtrdt|ƒt|d ƒ| ||ƒjd¡W5QRXt|ƒt|d ƒ| ||ƒjd¡W5QRXdS) NcSsZt ¡}t ¡t}| ¡D].}|jtj |¡kr:|St ¡|krqqqtdƒ‚dS)Nztimeout looking for test file) r¡rýÚtimer Ú open_filesr2r Úabspathr)ÚfnamerZ giveup_atÚfiler6r6r7Ú get_test_file”s   z7TestProcess.test_open_files_mode..get_test_filerÝÚrrázr+zw+za+rUzx+)rïr@r£Úmoderr)r¥rNZtestfnr6r6r7Útest_open_files_mode’s*         z TestProcess.test_open_files_modec Csºt ¡}| ¡}t| ¡dƒ’t|jdt|ƒƒtjdt t j dƒd }|  | ¡g¡|j sft‚W5QRXtjdt t jdƒd }|  | ¡g¡|j s¢t‚W5QRXW5QRXdS)NrÝúlen(ret) != %iúpsutil._pslinux.os.readlinkrWr%)r¡rýrJr@rïrrCrr—ÚOSErrorrërìr£rÔrÕÚEINVAL)r¥rÚfilesr™r6r6r7Útest_open_files_file_goneµs$ þ þz%TestProcess.test_open_files_file_gonec CsŠt ¡}| ¡}t| ¡dƒbt|jdt|ƒƒtr.open_mock_1r‘r’r%cs4| dt ¡¡r ttjdƒ‚nˆ|f|ž|ŽSdSrh)rhr r rêrëÚEPERMr›rVr6r7Ú open_mock_2Dsz4TestProcess.test_threads_mocked..open_mock_2) r@rrr—r¡rýrrÔrÕr£r´Z AccessDenied)r¥rir˜r™rÜrkr6rVr7Útest_threads_mocked0s     zTestProcess.test_threads_mockedc CsHtjdttjdƒd(}t ¡ ¡}|js.t ‚|  |d¡W5QRXdS)Nzpsutil._pslinux.readlinkrWr%) rr—rTrërìr¡rýrerÔrÕr£)r¥r™rÜr6r6r7Útest_exe_mockedMs ÿ  zTestProcess.test_exe_mockedc CsZtdt ¡ttjdƒƒ6}t ¡}| t ¡|  ¡W5QRX|j sLt ‚W5QRXdS)NrGrW) rŸr r rêrërìr¡rýr´rrCrÔrÕ©r¥r™rr6r6r7Útest_issue_1014Us ÿ zTestProcess.test_issue_1014r@c Cs®tjdttjdƒdT}tjddd:}t ¡}| ¡| tj ¡}|  tj ¡W5QRXW5QRXW5QRX|j szt ‚|j s„t ‚| |jj|j¡| |jj| ¡¡dS)Nzpsutil._pslinux.prlimitrWr%z"psutil._pslinux.Process._is_zombieTr9)rr—rTrëZENOSYSr¡rýr‰r´Z ZombieProcessZrlimitZ RLIMIT_NOFILErÔrÕr£Ú exceptionr)r¥r<r=rrr6r6r7Útest_rlimit_zombie`s$ ÿÿ*  zTestProcess.test_rlimit_zombiec*CsRdddddddddddddddddddddd ddddddddddddddddd ddd g*}d  |¡ ¡}td t ¡|iƒÎt ¡}| | ¡d ¡| |  ¡tj ¡| |  ¡d¡| |  ¡dt t ¡¡| ¡}| |jdt ¡| |jdt ¡| |jdt ¡| |jdt ¡| |jdt ¡| | ¡d¡W5QRXdS)Nr*z(cat)ÚZÚ1Ú2Ú3Ú4Ú5Ú6Ú7rzz /proc/%s/statÚcatrurrr©r>rvr»)rFrÐršr r r¡rýr£r‰ÚstatusZ STATUS_ZOMBIEÚppidZ create_timerrír røÚsystemÚ children_userÚchildren_systemZiowaitZcpu_num)r¥rŠrŒrÚcpur6r6r7Útest_stat_file_parsingtsxÖ,ÿz"TestProcess.test_stat_file_parsingc Csìt d¡ ¡}tdt ¡|iƒÀt ¡}| |  ¡j d¡| |  ¡j d¡| |  ¡d¡|  ¡}| |jd¡| |jd¡| |jd¡| ¡}| |jd ¡| |jd ¡| |jd ¡| |j ¡ttd ƒƒ¡W5QRXdS) Nzó Uid: 1000 1001 1002 1003 Gid: 1004 1005 1006 1007 Threads: 66 Cpus_allowed: f Cpus_allowed_list: 0-7 voluntary_ctxt_switches: 12 nonvoluntary_ctxt_switches: 13r rªé éBièiéiêiìiíiîr¼)rÎrÏrÐršr r r¡rýr£Únum_ctx_switchesÚ voluntaryÚ involuntaryÚ num_threadsÚuidsÚrealZ effectiveZsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistrE)r¥rŒrrˆrŠr6r6r7Útest_status_file_parsing²sz$TestProcess.test_status_file_parsingc Cs^tjdttjdƒd>}t ¡}t d¡ | | ¡g¡|j sFt ‚W5QRXW5QRXdS)NrSrWr%rZ) rr—rTrër[r¡rýr£rrÔrÕrnr6r6r7Ú!test_net_connections_enametoolongÊs þ z-TestProcess.test_net_connections_enametoolongN)r¼r½r¾rrFrHr~r1rrQrWrYr\r]rbrcrdrgrlrmror rqrrŽrr6r6r6r7r?as* "  "   >r?c@s~eZdZdZedd„ƒZdd„Zdd„Ze  e d¡d d „ƒZ d d „Z d d„Z dd„Zdd„Zeƒdd„ƒZdd„Zdd„ZdS)ÚTestProcessAgainstStatusa /proc/pid/stat and /proc/pid/status have many values in common. Whenever possible, psutil uses /proc/pid/stat (it's faster). For all those cases we check that the value found in /proc/pid/stat (by psutil) matches the one found in /proc/pid/status. cCst ¡|_dSrS)r¡rýÚproc)Úclsr6r6r7Ú setUpClassász#TestProcessAgainstStatus.setUpClassc Csžtj d|jj¡€}|D]h}| ¡}| |¡r| d¡d}zt|ƒWW5QR£St k r€|YW5QR£SXqt d|ƒ‚W5QRXdS)Nr ú rz can't find %r) r¡Ú _psplatformÚ open_textr‘rr{rhÚ partitionrkrD)r¥Z linestartrJrKrr6r6r7Úread_status_fileås ÿ z)TestProcessAgainstStatus.read_status_filecCs | d¡}| |j ¡|¡dS)NzName:)r˜r£r‘r‰©r¥rr6r6r7Ú test_nameós z"TestProcessAgainstStatus.test_namerxcCsH| d¡}|| d¡d| d¡…}| dd¡}| |j ¡|¡dS)NzState:ú(ruú)rzr)r˜räÚrfindrr£r‘r{r™r6r6r7Ú test_status÷s  z$TestProcessAgainstStatus.test_statuscCs | d¡}| |j ¡|¡dS)NzPPid:)r˜r£r‘r|r™r6r6r7Ú test_ppidþs z"TestProcessAgainstStatus.test_ppidcCs | d¡}| |j ¡|¡dS)NzThreads:)r˜r£r‘r‡r™r6r6r7Útest_num_threads s z)TestProcessAgainstStatus.test_num_threadscCs:| d¡}ttt| ¡dd…ƒƒ}| |j ¡|¡dS)NzUid:rur>)r˜r€rrkrAr£r‘rˆr™r6r6r7Ú test_uids s z"TestProcessAgainstStatus.test_uidscCs:| d¡}ttt| ¡dd…ƒƒ}| |j ¡|¡dS)NzGid:rur>)r˜r€rrkrAr£r‘rŠr™r6r6r7Ú test_gids s z"TestProcessAgainstStatus.test_gidscCs@| d¡}| |j ¡j|¡| d¡}| |j ¡j|¡dS)Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r˜r£r‘r„r…r†r™r6r6r7Útest_num_ctx_switches s  z.TestProcessAgainstStatus.test_num_ctx_switchescCsN| d¡}dt|ƒkrJtt| d¡ƒ\}}| |j ¡tt ||dƒƒ¡dS)NúCpus_allowed_list:rru) r˜r×rrkrAr£r‘Z cpu_affinityrrE)r¥rZmin_Zmax_r6r6r7Útest_cpu_affinity s  ÿz*TestProcessAgainstStatus.test_cpu_affinityc CsR| d¡}t d¡}|jj ¡W5QRXdt|ƒkrD|jrNt‚n |jsNt‚dS)Nr¤zpsutil._pslinux.per_cpu_timesr) r˜rr—r‘r‹rŒr×rÔrÕ)r¥rr™r6r6r7Útest_cpu_affinity_eligible_cpus s     z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)r¼r½r¾Ú__doc__Ú classmethodr“r˜ršr~r1rržrŸr r¡r¢rr£r¥r¦r6r6r6r7rØs    rc@seZdZdd„ZdS)Ú TestUtilsc Cs<tjddd$}| tj d¡d¡|js.t‚W5QRXdS)Nz os.readlinkz foo (deleted)r9r_r^)rr—r£r¡r•ÚreadlinkrÔrÕrr6r6r7Ú test_readlink0 szTestUtils.test_readlinkN)r¼r½r¾r«r6r6r6r7r©. sr©Ú__main__)Ú run_from_name)gr§Ú __future__rrir+rëÚglobr†r r‚ròr(r1rÎrIr~rÑr¡rZpsutil._compatrrrZ psutil.testsrrr r r r r rrrrrrrrrrrrrrr+rrrrr2rKÚdirnameÚ__file__ZHEREr0Z SIOCGIFCONFr]r9r;rÂZEMPTY_TEMPERATURESr8r:r<rRr`rrrxryr„ÚcontextmanagerršrŸr1r r¿rÈrñrrr4r?rdrjrnryrŠr–r¡r·rØrìr r)r-r<r?rr©r¼Zpsutil.tests.runnerr­r6r6r6r7Ús                                   C = V a  E     )  2 9  C  D )    C  x U