U =_^@sdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ej+,ej+-e.Z/dZ0dZ1dZ2dZ3d Z4erd!Z5ed" Z6d#d$Z7d%d&Z8d'd(Z9d)d*Z:d+d,Z;d-d.Zd3d4Z?ej@d5d6ZAej@d7d8ZBe)Ce d9Gd:d;d;eZDe)Ce d9Gdd?d?eZFe)Ce d9Gd@dAdAeZGe)Ce d9GdBdCdCeZHe)Ce d9GdDdEdEeZIe)Ce d9GdFdGdGeZJe)Ce d9GdHdIdIeZKe)Ce d9GdJdKdKeZLe)Ce d9GdLdMdMeZMe)Ce d9GdNdOdOeZNe)Ce d9GdPdQdQeZOe)Ce d9GdRdSdSeZPe)Ce d9GdTdUdUeZQe)Ce d9GdVdWdWeZRe)Ce d9e)Ce dXGdYdZdZeZSe)Ce d9Gd[d\d\eZTe)Ce d9Gd]d^d^eZUe)Ce d9Gd_d`d`eZVe)Ce d9GdadbdbeZWe)Ce d9GdcddddeZXe)Ce d9GdedfdfeZYeZdgkrddhl[m\Z\e\e.dS)izLinux specific tests.)divisionN)LINUX) basestring)FileNotFoundError)PY3)u) call_until)GLOBAL_TIMEOUT) HAS_BATTERY) HAS_CPU_FREQ)HAS_GETLOADAVG) HAS_RLIMIT)mock)PsutilTestCase)PYPY) reload_module)retry_on_failure) safe_rmpath)sh)skip_on_not_implemented) ThreadTask)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)unittest)whichiii'iiiz/sys/class/hwmon/hwmon*c Cs|ddl}|dd}tr"t|d}ttjtj}t|6t| | t t d|ddW5QRSQRXdSNrascii256s)fcntlrbytessocketAF_INET SOCK_DGRAM contextlibclosing inet_ntoaioctlfileno SIOCGIFADDRstructpackifnamer!sr1J/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_linux.pyget_ipv4_addressBs     r3c Cs|ddl}|dd}tr"t|d}ttjtj}t|6t| | t t d|ddW5QRSQRXdSr)r!rr"r#r$r%r&r'r(r)r*SIOCGIFNETMASKr,r-r.r1r1r2get_ipv4_netmaskOs     r5c Cs|ddl}|dd}tr"t|d}ttjtj}t|6t| | t t d|ddW5QRSQRXdSr)r!rr"r#r$r%r&r'r(r)r*SIOCGIFBRDADDRr,r-r.r1r1r2get_ipv4_broadcast\s     r7c Cstdd8}|D]}|}|d|krq>qtd|W5QRX|d}g}tdt|dD]}||||dqdd|}t tj |}t tj |S)Nz/proc/net/if_inet6rtzcould not find interface %rr:) open readlinessplit ValueErrorrangelenappendjoinr#Z inet_ptonAF_INET6 inet_ntop) r/flinefieldsZ unformattedgroupsiZ formattedZpackedr1r1r2get_ipv6_addressis    rKc sddl}|dd}tr"t|d}ttjtj}t|l|| t t d|}trfddnddl }|jdfdd |d d Ddd W5QRSQRXdS) NrrrrcSs|SNr1xr1r1r2ordszget_mac_address..ordcsg|]}d|qS)z%02x:r1).0charrOr1r2 sz#get_mac_address..r r9)r!rr"r#r$r%r&r'r)r* SIOCGIFHWADDRr,r- __builtin__rOrC)r/r!r0inforWr1rSr2get_mac_addresszs      rYcCs|tdddid}|d}|D]F}|dr|\}}}}tdd}|t|t|t|Sqtd d|d S) zQParse 'free' cmd and return swap memory's s total, used and free values. free -bLANGC.UTF-8env ZSwapfreeztotal used freez&can't find 'Swap' in 'free' output: %sN)rr> startswith collections namedtupleintr?rC)outlinesrG_totalusedr`ntr1r1r2 free_swaps    rkcCstdddid}|d}|D]P}|drdd|d d D\}}}}td d }||||||Sqtd d|dS)zSParse 'free' cmd and return physical memory's total, used and free values. rZr[r\r]r_ZMemcSsg|] }t|qSr1)rdrQrNr1r1r2rTsz free_physmem..r`ztotal used free shared outputz%can't find 'Mem' in 'free' output: %sN)rr>rarbrcr?rC)rerfrGrhrir`sharedrjr1r1r2 free_physmems    rpcCsVtdddid}|dD]*}|}||krt|ddSqtd|dS) Nz vmstat -sr[r\r]r_ rz can't find %r in 'vmstat' output)rr>striprdr?)statrerGr1r1r2vmstats rtcCs:td}d|krtdttt|ddS)Nzfree -VZUNKNOWNzcan't determine free versionr9.)rrrrSkipTesttuplemaprdr>)rer1r1r2get_free_version_infos  ryc #sFfdd}ttrdnd}tj|d|d }|VW5QRXdS)zMock open() builtin and forces it to return a certain `content` on read() if the path being opened matches `for_path`. csL|kr8tr,ttr tStSqHtSn|f||SdSrL)r isinstancerioStringIOBytesIOnameargskwargscontentfor_path orig_openr1r2 open_mocks    z$mock_open_content..open_mock builtins.open__builtin__.openTcreate side_effectNr<rrpatch)rrr patch_pointmr1rr2mock_open_contents   rc #sFfdd}ttrdnd}tj|d|d }|VW5QRXdS)zZMock open() builtin and raises `exc` if the path being opened matches `for_path`. cs"|krn|f||SdSrLr1r~excrrr1r2rsz&mock_open_exception..open_mockrrTrNr)rrrrrr1rr2mock_open_exceptions  rz LINUX onlyc@seZdZddZeddZeddZeddZed d Zed d Z ed dZ eddZ ddZ eddZ ddZddZddZddZdS)TestSystemVirtualMemorycCs&tdd}tj}|||dS)Nz total memory)rtpsutilvirtual_memoryrhassertAlmostEqualselfZ vmstat_value psutil_valuer1r1r2 test_totals  z"TestSystemVirtualMemory.test_totalcCsLtdkr|dt}|j}tj}|j||td|||jfddS)N)r zold free version %s %s %sdeltamsg) ryZskipTestrprirrrroutputrr` free_valuerr1r1r2 test_useds   z!TestSystemVirtualMemory.test_usedcCs*tdd}tj}|j||tddS)Nz free memoryrr)rtrrr`rrrr1r1r2 test_frees  z!TestSystemVirtualMemory.test_freecCs*tdd}tj}|j||tddS)Nz buffer memoryrr)rtrrbuffersrrrr1r1r2 test_bufferss  z$TestSystemVirtualMemory.test_bufferscCs*tdd}tj}|j||tddS)Nz active memoryrr)rtrractiverrrr1r1r2 test_actives  z#TestSystemVirtualMemory.test_activecCs*tdd}tj}|j||tddS)Nzinactive memoryrr)rtrrinactiverrrr1r1r2 test_inactives  z%TestSystemVirtualMemory.test_inactivecCsJt}|j}|dkrtdtj}|j||td|||jfddS)Nrz%free does not support 'shared' columnrr) rprorrvrrrrrrr1r1r2 test_shared#s  z#TestSystemVirtualMemory.test_sharedcCshtd}|d}d|dkr*tdn:t|dd}tj}|j||t d|||fd dS) NrZr_ availablerz(free does not support 'available' columnrmr9rr) rr>rrvrdrrrrr)rrerfrrr1r1r2test_available.s     z&TestSystemVirtualMemory.test_availablec CsJtdtd*}tjdd}tdt}| 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| |jdW5QRXW5QRXdS)N /proc/meminfoap 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 Trecordalwaysrmrz#memory stats couldn't be determinedcachedrorrrr)rtextwrapdedentencodewarningscatch_warnings simplefilterrr assertEqualrAassertInstrmessagerrrrorrslabrrwsretwr1r1r2test_warnings_on_misses=s6   z/TestSystemVirtualMemory.test_warnings_on_missesc Csddlm}ddlm}i}|d0}|D]$}|}t|dd||d<q*W5QRX||}d|kr|d}t|||d} || d dS) Nr)calculate_avail_vmem) open_binaryrrmrs MemAvailable:dr)psutil._pslinuxrrr>rdabsZ assertLess) rrrZmemsrFrGrHabZ diff_percentr1r1r2test_avail_old_percentds   $z.TestSystemVirtualMemory.test_avail_old_percentc CsltdtdN}tjdd}t}W5QRX||j d|d}| dt |j W5QRXdS)NraL 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 Trl "r,inactive memory stats couldn't be determined rrrrrrrrrrrrrrr1r1r2 test_avail_old_comes_from_kernelws z8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc CsltdtdN}tjdd}t}W5QRX||j d|d}| dt |j W5QRXdS)Nra 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 Tr`LGrrrrr1r1r2test_avail_old_missing_fieldss  z5TestSystemVirtualMemory.test_avail_old_missing_fieldsc CstdtdltdttjdNtj dd6}t }| |j d|d}|d t|jW5QRXW5QRXW5QRXdS) NraT 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 z/proc/zoneinfono such file or directoryTrrrr)rrrrrIOErrorerrnoENOENTrrrrrrrrr)rrrrr1r1r2test_avail_old_missing_zoneinfos&  z7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoc sfdd}ttrdnd}tj|d|d}t}||jd||jd||j d ||j d ||j d ||j d ||j d ||jd||jdW5QRXdS)Ncs0|dkrttdS|f||SdS)Nra= MemTotal: 100 kB MemFree: 2 kB MemAvailable: 3 kB Buffers: 4 kB Cached: 5 kB SwapCached: 6 kB Active: 7 kB Inactive: 8 kB Active(anon): 9 kB Inactive(anon): 10 kB Active(file): 11 kB Inactive(file): 12 kB Unevictable: 13 kB Mlocked: 14 kB SwapTotal: 15 kB SwapFree: 16 kB Dirty: 17 kB Writeback: 18 kB AnonPages: 19 kB Mapped: 20 kB Shmem: 21 kB Slab: 22 kB SReclaimable: 23 kB SUnreclaim: 24 kB KernelStack: 25 kB PageTables: 26 kB NFS_Unstable: 27 kB Bounce: 28 kB WritebackTmp: 29 kB CommitLimit: 30 kB Committed_AS: 31 kB VmallocTotal: 32 kB VmallocUsed: 33 kB VmallocChunk: 34 kB HardwareCorrupted: 35 kB AnonHugePages: 36 kB ShmemHugePages: 37 kB ShmemPmdMapped: 38 kB CmaTotal: 39 kB CmaFree: 40 kB HugePages_Total: 41 kB HugePages_Free: 42 kB HugePages_Rsvd: 43 kB HugePages_Surp: 44 kB Hugepagesize: 45 kB DirectMap46k: 46 kB DirectMap47M: 47 kB DirectMap48G: 48 kB )r{r}rrrr~rr1r2rs3zETestSystemVirtualMemory.test_virtual_memory_mocked..open_mockrrTriiipiTii iX )r<rrrrrrrhr`rrrorrrr)rrrrmemr1rr2test_virtual_memory_mockeds 7 z2TestSystemVirtualMemory.test_virtual_memory_mockedN)__name__ __module__ __qualname__rrrrrrrrrrrrrrrr1r1r1r2rs,       ' rc@s\eZdZeddZddZeddZeddZd d Z d d Z d dZ ddZ dS)TestSystemSwapMemoryc Cs,td}|}W5QRXd|ko*d|kS)z3Return True if /proc/meminfo provides swap metrics.rz SwapTotal:z SwapFree:)r<read)rFdatar1r1r2meminfo_has_swap_infos z*TestSystemSwapMemory.meminfo_has_swap_infocCs"tj}tj}|j||tdSNr)rkrhr swap_memoryrrrrrr1r1r2r$s zTestSystemSwapMemory.test_totalcCs"tj}tj}|j||tdSr)rkrirrrrrr1r1r2r*s zTestSystemSwapMemory.test_usedcCs"tj}tj}|j||tdSr)rkr`rrrrrr1r1r2r1s zTestSystemSwapMemory.test_freec Cstjdddv}tjdd^}tdt}|t|d|d}| dt |j ||j d||j dW5QRXW5QRXdS) Npsutil._common.openTrrrrmrz9'sin' and 'sout' swap memory stats couldn't be determined)rrrrrrrrrArrrsinsoutrr1r1r2test_missing_sin_sout8s z*TestSystemSwapMemory.test_missing_sin_soutc Cstdttjdv}tjdd^}tdt}| t |d|d}| dt |j | |jd| |jdW5QRXW5QRXdS) Nz /proc/vmstatrTrrrmrzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)rrrrrrrrrrrArrrrrrr1r1r2test_no_vmstat_mockedGs   z*TestSystemSwapMemory.test_no_vmstat_mockedc Cs|stdStd}t}W5QRXddlm}| \}}}}}}}||9}||9}| |j ||j |j |tddS)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinforr)rrskiprrrrZpsutil._psutil_linuxZ _psutil_linuxZ linux_sysinforrhrr`r)rrswapZcextrgrhr`Zunit_multiplierr1r1r2test_meminfo_against_sysinfoZs   z1TestSystemSwapMemory.test_meminfo_against_sysinfoc Cs"tdd}tW5QRXdS)Nr)rrrrrr1r1r2#test_emulate_meminfo_has_no_metricsjs z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN) rrr staticmethodrrrrrrrrrr1r1r1r2rs   rc@seZdZddZdS)TestSystemCPUTimescCstj}tdtdd}ttt | d}|dkrL| d|n | d||dkrn| d|n | d||d kr| d |n | d |dS) Nz \d+\.\d+\.\d+rru)r steal)rrr Zguest)rrrZ guest_nice) r cpu_times_fieldsrefindallosunamerwrxrdr>r assertNotIn)rrHZ kernel_verZkernel_ver_infor1r1r2 test_fields{s   zTestSystemCPUTimes.test_fieldsN)rrrrr1r1r1r2rxsrc@seZdZeejd dddZeejd dddZ ee d  d d d Z ee d  dddZ ddZ dS)TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc CsVtd}|}W5QRXdt|krRt|ddd}|t|dS)Nr-rm) r<rrrrrdr>rr cpu_count)rrFvaluer1r1r2test_against_sysdev_cpu_onlines   z8TestSystemCPUCountLogical.test_against_sysdev_cpu_online/sys/devices/system/cpuz&/sys/devices/system/cpu does not existcCs0td}tdd|D}|t|dS)NrcSs g|]}td|dk r|qS)zcpu\d+$N)rsearchrlr1r1r2rTszITestSystemCPUCountLogical.test_against_sysdev_cpu_num..)rlistdirrArrr)rZlscountr1r1r2test_against_sysdev_cpu_nums z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablecCs$ttd}|tjdd|dS)Nz nproc --allTZlogical)rdrrrr)rnumr1r1r2test_against_nprocs z,TestSystemCPUCountLogical.test_against_nproclscpulscpu utility not availablecCs8td}tdd|dD}|tjdd|dS)Nlscpu -pcSsg|]}|ds|qS)#rarlr1r1r2rTs z@TestSystemCPUCountLogical.test_against_lscpu..r_Tr )rrAr>rrr)rrerr1r1r2test_against_lscpusz,TestSystemCPUCountLogical.test_against_lscpuc Csddl}|j}tjdtd}||j|tjddd:}||j||jd||j dddW5QRXt d d }| }W5QRXt |}tjd|dd }||j|W5QRXtd d }||j||jW5QRXW5QRXdS) Nrzpsutil._pslinux.os.sysconfrrTrr /proc/stat /proc/cpuinforb return_valuerr)r_pslinuxZcpu_count_logicalrrr?r assertIsNoneZ call_countZ call_argsr<rr{r}rZcalled)rrZoriginalrrFZ cpuinfo_data fake_filer1r1r2test_emulate_fallbackss0     z0TestSystemCPUCountLogical.test_emulate_fallbacksN)rrrrskipIfrpathexistsrr rrrrr1r1r1r2rs    rc@s6eZdZeed dddZddZddZd S) TestSystemCPUCountPhysicalrrcCs\td}t}|dD]&}|ds|d}||dq|tjddt|dS)Nrr_r,rmFr ) rsetr>raaddrrrrA)rreZcore_idsrGrHr1r1r2rs  z-TestSystemCPUCountPhysical.test_against_lscpuc CsFtj}tjdgd}tj}W5QRX|dk rB|||dS)N glob.globr)rrcpu_count_physicalrrr)rZmeth_1rZmeth_2r1r1r2 test_method_2s    z(TestSystemCPUCountPhysical.test_method_2c CsHtjdgd0}tjddd}|tjW5QRXW5QRXdS)Nr'r(rTr)rrrrrr))rm1m2r1r1r2test_emulate_nones$z,TestSystemCPUCountPhysical.test_emulate_noneN) rrrrr rrr*r-r1r1r1r2r#s r#c@szeZdZee dddZee dddZee dddZee ddd Z ee dd d Z d S) TestSystemCPUFrequency not supportedc s4fdd}tjjtjd|ddW5QRXdS)Ncs|drdS|SdS)N&/sys/devices/system/cpu/cpufreq/policyFrr!Z orig_existsr1r2path_exists_mocks zMTestSystemCPUFrequency.test_emulate_use_second_file..path_exists_mockos.path.existsT)rr)rr!r"rr)rr3r1r2r2test_emulate_use_second_files  z3TestSystemCPUFrequency.test_emulate_use_second_filec sfdd}gtjjzztjd|dbttjt}| |j d| |j dtjddD] }| |j d| |j dqfW5QRXW5ttjttXdS)Ncs,|drdS|dkr d|SdS)Nz/sys/devices/system/cpu/Fr)rarBr1flagsZos_path_existsr1r2r3s   zITestSystemCPUFrequency.test_emulate_use_cpuinfo..path_exists_mockr4rTZpercpu) rr!r"rrrrrcpu_freqrmaxmin)rr3rfreqr1r6r2test_emulate_use_cpuinfos  z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc sfdd}ttrdnd}tj||dftjdddLt}||jd |jd krj||jd |j d kr||j d W5QRXW5QRXdS) Ncs|dr|drtdS|dr<|dr.open_mockrrrr4Tr(@@r8@g@ r<rrrrr:rcurrentr<r;rrrr=r1rr2test_emulate_datas    z(TestSystemCPUFrequency.test_emulate_datac sfdd}ttrdnd}tj||dtjdddtjd d dtjdd }||d jd |d jdkr||d jd|d j dkr||d j d||djd|djdkr||djd|dj dkr||dj dW5QRXW5QRXW5QRXdS)Ncs|}|dr"|dr"tdS|dr@|dr@tdS|dr^|dr^tdS|dr||dr|td S|dr|drtd S|dr|drtd S|d krtd S|f||SdS)Nr?z'/sys/devices/system/cpu/cpufreq/policy0s100000rA200000rCs300000z'/sys/devices/system/cpu/cpufreq/policy1s400000r@rBrscpu MHz : 100 cpu MHz : 400rD)rrrnrr1r2r9s8             z@TestSystemCPUFrequency.test_emulate_multi_cpu..open_mockrrrr4Tr(!psutil._pslinux.cpu_count_logicalrr9rY@r8gi@gr@rmgy@rFrGrHrJr1rr2test_emulate_multi_cpu7s&   z-TestSystemCPUFrequency.test_emulate_multi_cpuc sfdd}ttrdnd}tj||dPtjddd6tjd d dt}||jd W5QRXW5QRXW5QRXdS) NcsR|drttjdn6|dr,tdS|dkr>tdS|f||SdS)Nr?rPz/cpuinfo_cur_freqrLrscpu MHz : 200)rErrrr{r}r~rr1r2rhs    zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file..open_mockrrrr4Tr(rNrm)r<rrrrr:rrIrJr1rr2%test_emulate_no_scaling_cur_freq_filees  zrKrPrRr1r1r1r2r.s       - r.c@seZdZddZddZdS)TestSystemCPUStatscCs&td}tj}|j||dddS)Nzcontext switchesr)rtr cpu_statsZ ctx_switchesrrr1r1r2test_ctx_switchess z$TestSystemCPUStats.test_ctx_switchescCs&td}tj}|j||dddS)N interruptsrTr)rtrrUrWrrr1r1r2test_interruptss z"TestSystemCPUStats.test_interruptsN)rrrrVrXr1r1r1r2rS|srSc@s"eZdZee dddZdS) TestLoadAvgr/c Cst}tdd}|}W5QRX|jt|d|ddd|jt|d|ddd|jt|d|ddddS)Nz /proc/loadavgrrrmrr)r getloadavgr<rr>rfloat)rrrFZ proc_valuer1r1r2test_getloadavgs  zTestLoadAvg.test_getloadavgN)rrrrr r r]r1r1r1r2rYs rYc@seZdZddZdS)TestSystemNetIfAddrscCstD]\}}|D]}|jtjkr<||jt|q|jtj kr||jt |||j t ||j dk r||j t|q|t|dq|jtjkr|jdd}||t|qq dS)Nz0.0.0.0%r)rZ net_if_addrsitemsZfamilyZAF_LINKraddressrYr#r$r3Znetmaskr5Z broadcastr7rDr>rK)rrZaddrsZaddrrar1r1r2test_ipss    zTestSystemNetIfAddrs.test_ipsN)rrrrbr1r1r1r2r^sr^c@seZdZddZddZdS)TestSystemNetIfStatsc CsttD]b\}}ztd|}Wntk r8Yq X|j|jd|k|d||jtt d|dq dS)N ifconfig %sZRUNNING)rz(?i)MTU[: ](\d+)r) r net_if_statsr`r RuntimeErrorrZisupmturdrr)rrstatsrer1r1r2test_against_ifconfigsz*TestSystemNetIfStats.test_against_ifconfigc CsNtD]<\}}td|d }||jt|W5QRXq dS)Nz/sys/class/net/%s/mtur8) rrer`r<rrgrdrrr)rrrhrFr1r1r2test_mtuszTestSystemNetIfStats.test_mtuN)rrrrirjr1r1r1r2rcs rcc@seZdZeddZdS)TestSystemNetIOCountersc sfdd}tjddd}|D]\}z |}Wntk rNYq"YnX|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 |dddq"dS)Ncsi}td}ttd|d|d<ttd|d|d<ttd|d|d<ttd|d |d <ttd |d|d <ttd |d |d <ttd|d|d<ttd|d|d<|S)NrdzRX packets[: ](\d+)r packets_recvzTX packets[: ](\d+) packets_sentzerrors[: ](\d+)errinrmerroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+) bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+) bytes_sent)rrdrr)Znicrrerr1r2ifconfigs& z?TestSystemNetIOCounters.test_against_ifconfig..ifconfigTF)Zpernicnowraprrirrsrlrrmrn rorprq) rnet_io_countersr`rfrrrrsrlrmrnrorprq)rruZniorhZ ifconfig_retr1rtr2ris^   z-TestSystemNetIOCounters.test_against_ifconfigN)rrrrrir1r1r1r2rksrkc@s8eZdZejdedejdddddZdd Zd S) TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntoprzpsutil._pslinux.supports_ipv6Fr(cCsRz*ttjtj}||j|dWntjk r@YnXtjdddS)N)z::1rZinet6Zkind) r#rDZ SOCK_STREAMZ addCleanupcloseZbinderrorrnet_connections)rZ supports_ipv6rEr0r1r1r2test_emulate_ipv6_unsupported s z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc Cs,tdtd}tjddW5QRXdS)Nz/proc/net/unixa. 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 Zunixrz)rrrrr}rr1r1r2test_emulate_unixs z*TestSystemNetConnections.test_emulate_unixN)rrrrrr?r~rr1r1r1r2ry s   ryc@s>eZdZeeed deddZddZ ddZ d S) TestSystemDiskPartitionsstatvfszos.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"r_rr:ZnonerP)rrrr>poprd)r!rerfrGdevrhrir`r1r1r2df2s   z4TestSystemDiskPartitions.test_against_df..dfF)allr) rdisk_partitionsZ disk_usageZ mountpointrrhrr`rri)rrpartZusagerrhrir`r1r1r2test_against_df-s    z(TestSystemDiskPartitions.test_against_dfc Cstdd}|}W5QRXd|krNtD]}|jdkr.qq.|dn`ttd}t j d|dd<}t j d d gd  }t}| |d jdW5QRXW5QRXdS) Nz/proc/filesystemsrZzfszcouldn't find any ZFS partitionz nodev zfs rTrz$psutil._pslinux.cext.disk_partitions)z /dev/sdb3/rZrwr(r) r<rrrZfstypeZfailr{r|rrrr)rrFrrrr+r,rr1r1r2 test_zfs_fsFs(    z$TestSystemDiskPartitions.test_zfs_fsc CsJz.is_storage_deviceTrrmrn) rrrrrrrrrrr)rrrr1r1r2test_emulate_exclude_partitionss*z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc CsTdd}tjdd}tjdd|dtjdd}W5QRX|t|t|dS)NcSs|dkr dSdS)NrFTr1r1r1r1r2r"sz?TestSystemDiskIoCounters.test_emulate_use_sysfs..existsT)rpsutil._pslinux.os.path.existsr)rrrrrrA)rr"ZwprocfsZwsysfsr1r1r2test_emulate_use_sysfss z/TestSystemDiskIoCounters.test_emulate_use_sysfsc Cs6dd}tjdd|d|ttjW5QRXdS)NcSsdS)NFr1r1r1r1r2r"sz>TestSystemDiskIoCounters.test_emulate_not_impl..existsrTr)rrrNotImplementedErrorrr)rr"r1r1r2test_emulate_not_impls z.TestSystemDiskIoCounters.test_emulate_not_implN) rrrrrrrrrrr1r1r1r2rjs rc@sReZdZddZddZddZddZd d Zd d Ze d dZ ddZ dS)TestMisccCs(td}t}|t|t|dS)Nz boot time)rtr boot_timerrdrr1r1r2test_boot_timeszTestMisc.test_boot_timec s|}t|ttj|dd$}|d|d|dW5QRXztfdd}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|dd$}|d|d|dW5QRX|t d |tt jd d d |tt d |tttt jd d d W5QRXW5t|t t X|t jddS)Nrsrzcpu 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&|drttjd|f||S)Nrzrejecting access for test)rarrrr~rr1r2r s  z4TestMisc.test_no_procfs_on_import..open_mockrrrTr9rzcpu 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_testfnrmkdirr<r!rCwriteshutilZrmtreerrrrrrrr cpu_percentcpu_times_percentrrsumrxassertNotEqual)rZ my_procfsrFrrZper_cpu_percentZper_cpu_times_percentr1rr2test_no_procfs_on_imports\           z!TestMisc.test_no_procfs_on_importc Cstdtd.}ttjddttjddW5QRXtdtd}t}tjdd}t}tjdd}||d|t|d|t|d|t|d|tt t|d|tt t|d| |j d||j dW5QRXdS)Nrz 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 Tr9z 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 rrO) rrrrrrrrrrxrruser)rrrZcpu_percent_percpurZcpu_times_percent_percpur1r1r2test_cpu_steal_decrease<s4      z TestMisc.test_cpu_steal_decreasec Cs.tjddd}|ttjjW5QRXdS)NrTr)rrrrfrrrrr1r1r2test_boot_time_mockedes zTestMisc.test_boot_time_mockedc Cstjddgd}|tdjdW5QRXtjddgd}|tdjdW5QRXtjddgd}|tdjdW5QRXdS) Nzpsutil._pslinux.cext.users) giampaolopts/2z:0hATrr(rZ localhost)rrz:0.0rTr)rrfoorTrr)rrrrZusersZhostrr1r1r2test_users_mockedls$  zTestMisc.test_users_mockedcCs|}t|z|t_|ttj|ttj|jttjdd|ttj |ttj |ttj |ttj |ttj |tjtjW5dt_XdS)NrTr9)rrrrrrrrrrr}rxrerZ NoSuchProcessProcess)rZtdirr1r1r2test_procfs_paths zTestMisc.test_procfs_pathcCst}|zjt}|}|t|dt|ddddj }| |j |t|}| | |tW5|XdS)NrcSs|jSrL)idrMr1r1r2rz)TestMisc.test_issue_687..)keyrm)rstartstoprrthreadsrrAsortedrrpidZas_dictrZpids)rtprtidZptr1r1r2test_issue_687s zTestMisc.test_issue_687c Cstdd}W5QRXdS)N/proc/%s/statusrP)rrr1r1r2test_pid_exists_no_proc_statuss z'TestMisc.test_pid_exists_no_proc_statusN) rrrrrrrrrrrrr1r1r1r2rs=) rz no batteryc@sfeZdZeed dddZddZddZd d Z d d Z d dZ ddZ ddZ ddZdS)TestSensorsBatteryZacpizacpi utility not availablecCsDtd}t|dddd}tj}|j||dddS)Nzacpi -br$rmr_rPr) rrdr>rrreplacersensors_batterypercentr)rreZ acpi_valuerr1r1r2 test_percents zTestSensorsBattery.test_percentc s`fdd}ttrdnd}tj||d,}|tjd|tjtj W5QRXdS)Ncs2|ds|drtdS|f||SdS)N AC0/online AC/online1rEr{r}r~rr1r2rs z@TestSensorsBattery.test_emulate_power_plugged..open_mockrrrT) r<rrrrrr power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDrrrrr1rr2test_emulate_power_pluggeds  z-TestSensorsBattery.test_emulate_power_pluggedc sLfdd}ttrdnd}tj||d}|tjdW5QRXdS)NcsN|ds|dr"ttjdn(|dr:ttdS|f||SdS)NrrrP/statusZchargingrErrrr{r|rr~rr1r2rs  zBTestSensorsBattery.test_emulate_power_plugged_2..open_mockrrrTr<rrrrrrrrr1rr2test_emulate_power_plugged_2s   z/TestSensorsBattery.test_emulate_power_plugged_2c sLfdd}ttrdnd}tj||d}|tjdW5QRXdS)Ncs2|ds|drtdS|f||SdS)Nrr0rr~rr1r2rs zDTestSensorsBattery.test_emulate_power_not_plugged..open_mockrrrFrrr1rr2test_emulate_power_not_pluggeds   z1TestSensorsBattery.test_emulate_power_not_pluggedc sLfdd}ttrdnd}tj||d}|tjdW5QRXdS)NcsN|ds|dr"ttjdn(|dr:ttdS|f||SdS)NrrrPrZ dischargingrr~rr1r2rs  zFTestSensorsBattery.test_emulate_power_not_plugged_2..open_mockrrrFrrr1rr2 test_emulate_power_not_plugged_2s   z3TestSensorsBattery.test_emulate_power_not_plugged_2c sJfdd}ttrdnd}tj||d}|tjW5QRXdS)NcsJ|ds|dr"ttjdn$|dr6tdS|f||SdS)N"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/onlinerP#/sys/class/power_supply/BAT0/statuss???)rarrrr{r}r~rr1r2rs   zETestSensorsBattery.test_emulate_power_undetermined..open_mockrrr)r<rrrrrrrrr1rr2test_emulate_power_undetermineds   z2TestSensorsBattery.test_emulate_power_undeterminedc Cs,tdd}|tjdW5QRXdS)N(/sys/class/power_supply/BAT0/energy_fullrr)rrrrrrr1r1r2test_emulate_energy_full_0sz-TestSensorsBattery.test_emulate_energy_full_0c CshtdttjdLtdttjd.tdd|tjdW5QRXW5QRXW5QRXdS)NrrPz(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys88X) rrrrrrrrrrr1r1r2"test_emulate_energy_full_not_avails  z5TestSensorsBattery.test_emulate_energy_full_not_availc CsntdttjdRtdttjd4tdttjd|tjW5QRXW5QRXW5QRXdS)NrrPrr)rrrrrrrrrr1r1r2test_emulate_no_power's   z(TestSensorsBattery.test_emulate_no_powerN)rrrrr rrrrrrrrrrr1r1r1r2rs  rc@seZdZddZdS)TestSensorsBatteryEmulatedc sdfdd}ttrdnd}tjddgd.}tj||d}|tW5QRXW5QRXdS) Ncs\|drttdS|dr0ttdS|drHttdS|f||SdS)Nz /energy_nowZ60000000z /power_now0z /energy_fullZ60000001rEr{r|rr~rr1r2r9s   z5TestSensorsBatteryEmulated.test_it..open_mockrrz os.listdirZBAT0r(r)r<rrrZassertIsNotNonerr)rrrZmlistdirZmopenr1rr2test_it8s  "z"TestSensorsBatteryEmulated.test_itN)rrrrr1r1r1r2r5src@seZdZddZddZdS)TestSensorsTemperaturesc sfdd}ttrdnd}tj||djtjddgdNtd d }||jd ||jd ||j d ||j dW5QRXW5QRXdS)Ncs|drttdS|dr0ttdS|drDtdS|drXtdS|d rltd S|f||SdS) N/namerz /temp1_labellabelz /temp1_input30000z /temp1_maxs40000z /temp1_crit50000)rEr{r|rr}r~rr1r2rPs        zCTestSensorsTemperatures.test_emulate_class_hwmon..open_mockrrrr'z/sys/class/hwmon/hwmon0/temp1r(rrr>@gD@I@ r<rrrrZsensors_temperaturesrrrIZhighcritical)rrrtempr1rr2test_emulate_class_hwmonOs  z0TestSensorsTemperatures.test_emulate_class_hwmonc sfdd}dd}ttr dnd}tj||djtjdd |d Ntd d }||jd ||jd||j d||j dW5QRXW5QRXdS)Ncsl|drtdS|dr(tdS|dr@ttdS|drXttdS|f||SdS) NZ0_temprrrZ0_typertyper)rEr{r}r|rr~rr1r2rks      zETestSensorsTemperatures.test_emulate_class_thermal..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_tempr1r1r1r1r2 glob_mockwszETestSensorsTemperatures.test_emulate_class_thermal..glob_mockrrrr'TrrrrPrrr)rrrrrr1rr2test_emulate_class_thermaljs   z2TestSensorsTemperatures.test_emulate_class_thermalN)rrrrrr1r1r1r2rLsrc@seZdZddZdS)TestSensorsFansc sfdd}ttrdnd}tj||dNtjddgd2td d }||jd ||jd W5QRXW5QRXdS) Ncs\|drttdS|dr0ttdS|drHttdS|f||SdS)Nrrz /fan1_labelrz /fan1_inputZ2000rr~rr1r2rs   z4TestSensorsFans.test_emulate_data..open_mockrrrr'z/sys/class/hwmon/hwmon2/fan1r(rrri) r<rrrrZ sensors_fansrrrI)rrrZfanr1rr2rKs  z!TestSensorsFans.test_emulate_dataN)rrrrKr1r1r1r2rsrc@seZdZeddZddZeedddZ dd Z d d Z d d Z ddZ ddZddZddZddZddZddZee dddZdd Zd!d"Zd#d$Zd%S)& TestProcesscCs|}td|}||}tddd|t|j}t d| }|j dd}|j |j tdd |Dd d |j |jtd d |Dd d |j |jtd d |Dd d dS)Nzk import time with open("%s", "w") as f: time.sleep(10) cSs tdS)Nru)rr r1r1r1r2rrz3TestProcess.test_memory_full_info..z'%s' not in retg?F)ZgroupedcSsg|]}|j|jqSr1)Z private_dirtyZ private_cleanrlr1r1r2rTsz5TestProcess.test_memory_full_info..rrcSsg|] }|jqSr1)pssrlr1r1r2rTscSsg|] }|jqSr1)rrlr1r1r2rTs)rrrZpyrunrrrrtimesleepmemory_full_info memory_mapsrussrrr)rtestfnsrcZsprocrrmapsr1r1r2test_memory_full_infos2    z!TestProcess.test_memory_full_infoc Csftdttd@}t}|}| |j d| |j d| |j dW5QRXdS)N/proc/%s/smapsa 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 ilri<) rrgetpidrrrrrr rr rr)rrrrr1r1r2test_memory_full_info_mockeds  z(TestProcess.test_memory_full_info_mockedzunreliable on PYPYc Csjdd}|}t|d|||jdW5QRXt|d|||jdW5QRXt|d|||jdW5QRXt|d|||jdW5QRXt|d|||jdW5QRXt|d|||jdW5QRXtrft|t|d |||jdW5QRXt|t|d |||jdW5QRXdS) NcSsZt}tt}|D].}|jtj|kr:|St|krqqqtddS)Nztimeout looking for test file) rrrr open_filesr!rabspathrf)ZfnamerZ giveup_atfiler1r1r2 get_test_files   z7TestProcess.test_open_files_mode..get_test_filerrZrzr+zw+za+rNzx+)rr<rmoderr)rrr r1r1r2test_open_files_modes*         z TestProcess.test_open_files_modec Cst}|}t|dvt|jdt|tjdt t j dd}|}W5QRXtjdt t j dd}| |gW5QRXW5QRXdS)Nrlen(ret) != %ipsutil._pslinux.os.readlinkrPr)rrrr<rrrArrOSErrorrrZEINVALr)rrfilesrr1r1r2test_open_files_file_gone s    z%TestProcess.test_open_files_file_gonec Csxt}|}t|dPt|jdt|tr.open_mockrrrcs4|dtr ttjdn|f||SdSr*)rarrrrZEPERMr~rr1r2rs) r<rrrrrrrr AccessDenied)rrrrrr1rr2test_threads_mockedls    zTestProcess.test_threads_mockedc Cstjdttjddn}tjdtdddL}t}| |dtjddd| tj tjW5QRXW5QRXW5QRXdS) Nzpsutil._pslinux.readlinkrPrzpsutil.Process.cmdlinerzpsutil._pslinux.os.path.lexistsFr() rrrrrrr+rr'rr ZombieProcess)rr+r,rr1r1r2test_exe_mockeds"    zTestProcess.test_exe_mockedc CsPtdtttjd,}t}|t | W5QRXW5QRXdS)NrrP) rrrrrrrrrrr )rrrr1r1r2test_issue_1014s   zTestProcess.test_issue_1014r/c Cstjdttjdd:}t}||tj }| tj W5QRXW5QRX| |j j|j| |j j|dS)Nzpsutil._pslinux.prlimitrPr)rrrrZENOSYSrrrrr-ZrlimitZ RLIMIT_NOFILEr exceptionrrrrrr1r1r2test_rlimit_zombies  zTestProcess.test_rlimit_zombiec Cs|tjdttjdd6}t}||tj }| W5QRXW5QRX| |j j |j | |j j|dS)NrrPr)rrrrrrrrrr-r(rr0rr1r1r1r2test_cwd_zombies  zTestProcess.test_cwd_zombiec*Cs\ddlm}dddddddddddddddd d ddddd ddddddddddddddddd ddd g*}d |}tdt|t}| | d| | tj | | d| |d|t|}| |jd|| |jd|| |jd|| |jd|| |jd|| |dW5QRXdS)Nr) CLOCK_TICKSrz(cat)Z1234567rqz /proc/%s/statcatrmrrrr:rnr)rr4rCrrrrrrrrstatusZ STATUS_ZOMBIEppidZ create_timerrrsystem children_userchildren_systemZiowaitZcpu_num)rr4rrrZcpur1r1r2test_stat_file_parsingsz ,z"TestProcess.test_stat_file_parsingc Cstdttdt}|| j d|| j d|| d| }||jd||jd||jd|}||jd ||jd ||jd ||jttd d W5QRXdS)Nra 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 Biiiiiirr)rrrrrrrrrnum_ctx_switches voluntary involuntary num_threadsuidsrealZ effectiveZsavedgids_proc_get_eligible_cpuslistr@)rrrJrLr1r1r2test_status_file_parsings"   z$TestProcess.test_status_file_parsingN)rrrrrrrr rrrrr r$r%r&r)r,r.r/r r2r3rCrPr1r1r1r2rs( #  $    ?rc@sreZdZdZeddZddZddZdd Zd d Z d d Z ddZ ddZ e ddZddZddZdS)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|_dSrL)rrproc)clsr1r1r2 setUpClass%sz#TestProcessAgainstStatus.setUpClassc Cstjd|jj}|D]h}|}||r|dd}zt|WW5QRSt k r|YW5QRSXqt d|W5QRXdS)Nr rz can't find %r) r _psplatformZ open_textrRrrrra partitionrdr?)rZ linestartrFrGrr1r1r2read_status_file)s  z)TestProcessAgainstStatus.read_status_filecCs |d}||j|dS)NzName:)rXrrRrrrr1r1r2 test_name6s z"TestProcessAgainstStatus.test_namecCsH|d}||dd|d}|dd}||j|dS)NzState:(rm)rqr)rXfindrfindrrrRr>rYr1r1r2 test_status:s  z$TestProcessAgainstStatus.test_statuscCs |d}||j|dS)NzPPid:)rXrrRr?rYr1r1r2 test_ppid@s z"TestProcessAgainstStatus.test_ppidcCs |d}||j|dS)NzThreads:)rXrrRrIrYr1r1r2test_num_threadsDs z)TestProcessAgainstStatus.test_num_threadscCs:|d}ttt|dd}||j|dS)NzUid:rmr:)rXrwrxrdr>rrRrJrYr1r1r2 test_uidsHs z"TestProcessAgainstStatus.test_uidscCs:|d}ttt|dd}||j|dS)NzGid:rmr:)rXrwrxrdr>rrRrLrYr1r1r2 test_gidsMs z"TestProcessAgainstStatus.test_gidscCs@|d}||jj||d}||jj|dS)Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)rXrrRrFrGrHrYr1r1r2test_num_ctx_switchesRs  z.TestProcessAgainstStatus.test_num_ctx_switchescCsN|d}dt|krJtt|d\}}||jtt ||ddS)NCpus_allowed_list:rrm) rXrrxrdr>rrRZ cpu_affinityrOr@)rrZmin_Zmax_r1r1r2test_cpu_affinityYs  z*TestProcessAgainstStatus.test_cpu_affinityc Cs>|d}td}|jjW5QRXdt|kr:ndS)Nrezpsutil._pslinux.per_cpu_timesr)rXrrrRrMrNr)rrrr1r1r2test_cpu_affinity_eligible_cpus`s    z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)rrr__doc__ classmethodrTrXrZr_r`rarbrcrrdrfrgr1r1r1r2rQs   rQc@seZdZddZddZdS) TestUtilsc Cs2tjddd}|tjddW5QRXdS)Nz os.readlinkz foo (deleted)r(r!r)rrrrrVreadlinkrr1r1r2 test_readlinkrszTestUtils.test_readlinkc Csx|}t|d}|dW5QRX|tjj|ddd|tjj|ddd|tjj|dd d d dS) NZwtzfoo F)ZbinaryrTsfooz??r!)Zfallback)rr<rrrrVr=)rr rFr1r1r2test_catws zTestUtils.test_catN)rrrrlrmr1r1r1r2rjosrj__main__) run_from_name)]rhZ __future__rrbr&rZglobr{rrrr#r,rrrrrZpsutil._compatrrrrZ psutil.testsrr r r r r rrrrrrrrrrrrrr!rdirname__file__ZHEREr+Z SIOCGIFCONFrVr4r6rZEMPTY_TEMPERATURESr3r5r7rKrYrkrprtrycontextmanagerrrr rrrrr#r.rSrYr^rcrkryrrrrrrrrrQrjrZpsutil.tests.runnerror1r1r1r2s                                 . ]  ?     )  -  ?  ?  }  A  r R