o
    h7t                    @   s  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ erddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ej12ej13e4Z5d Z6d!Z7d"Z8d#Z9d$Z:erd%Z;ed& Z<d'd( Z=d)d* Z>d+d, Z?d-d. Z@d/d0 ZAd1d2 ZBd3d4 ZCd5d6 ZDd7d8 ZEejFd9d: ZGejFd;d< ZHeIe d=G d>d? d?e"ZJeIe d=G d@dA dAe"ZKeIe d=G dBdC dCe"ZLeIe d=G dDdE dEe"ZMeIe d=G dFdG dGe"ZNeIe d=G dHdI dIe"ZOeIe d=G dJdK dKe"ZPeIe d=G dLdM dMe"ZQeIe d=G dNdO dOe"ZReIe d=G dPdQ dQe"ZSeIe d=G dRdS dSe"ZTeIe d=G dTdU dUe"ZUeIe d=G dVdW dWe"ZVeIe d=G dXdY dYe"ZWeIe d=G dZd[ d[e"ZXeIe d=G d\d] d]e"ZYeIe d=G d^d_ d_e"ZZeIe d=G d`da dae"Z[eIe d=eIe dbG dcdd dde"Z\eIe d=G dedf dfe"Z]eIe d=G dgdh dhe"Z^eIe d=G didj dje"Z_eIe d=G dkdl dle"Z`eIe d=G dmdn dne"ZaeIe d=G dodp dpe"ZbecdqkrddrldmeZe eee4 dS dS )szLinux specific tests.    )divisionN)LINUX)PY3)FileNotFoundError)
basestring)u)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)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  i   z/sys/class/hwmon/hwmon*c                 C      dd l }| d d } trt| d} ttjtj}t| t|	|
 ttd| dd W  d    S 1 s=w   Y  d S Nr      ascii256s      )fcntlr   bytessocketAF_INET
SOCK_DGRAM
contextlibclosing	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer&   s r6   n/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-packages/psutil/tests/test_linux.pyget_ipv4_addressL      


$r8   c                 C   r   r    )r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   SIOCGIFNETMASKr1   r2   r3   r6   r6   r7   get_ipv4_netmaskY   r9   r;   c                 C   r   r    )r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   SIOCGIFBRDADDRr1   r2   r3   r6   r6   r7   get_ipv4_broadcastf   r9   r=   c                 C   s   t dd,}g }| D ]}| }|d | kr|| qt|dkr*td|  W d    n1 s4w   Y  tdt|D ]5}|| d }g }tdt|dD ]}||||d   qRd|}	t	tj
|	}
ttj
|
||< q@|S )Nz/proc/net/if_inet6rtr   zcould not find interface %r   :)open	readlinessplitappendlen
ValueErrorrangejoinr(   	inet_ptonAF_INET6	inet_ntop)r4   fZ
all_fieldslinefieldsiZunformattedgroupsj	formattedpackedr6   r6   r7   get_ipv6_addressess   s(   


rU   c              	      s   dd l }| d d } trt| d} ttjtj}t|7 ||	 t
td| }tr3dd  ndd l}|j d fdd	|d
d D d d W  d    S 1 sXw   Y  d S )Nr   r!   r"   r#   c                 S   s   | S Nr6   xr6   r6   r7   ord      zget_mac_address.<locals>.ord c                    s   g | ]}d  | qS )z%02x:r6   ).0charrY   r6   r7   
<listcomp>       z#get_mac_address.<locals>.<listcomp>   r%   r?   )r&   r   r'   r(   r)   r*   r+   r,   r.   r/   SIOCGIFHWADDRr1   r2   __builtin__rY   rI   )r4   r&   r5   inforc   r6   r^   r7   get_mac_address   s   

&$re   c                  C   s|   t ddgddid} | d}|D ]#}|dr4| \}}}}tdd}|t|t|t|  S qtd	d| )
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
ZSwapztotal used freez&can't find 'Swap' in 'free' output:
%s)r   rD   
startswithcollections
namedtupleintrG   rI   )outlinesrN   _totalusedrf   ntr6   r6   r7   	free_swap   s   

rw   c                  C   s   t ddgddid} | d}|D ](}|dr9dd	 | d
d D \}}}}tdd}||||||   S qtdd| )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rf   rg   rh   ri   rj   rl   ZMemc                 S   s   g | ]}t |qS r6   )rp   r\   rX   r6   r6   r7   r_      s    z free_physmem.<locals>.<listcomp>      ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%s)r   rD   rm   rn   ro   rG   rI   )rq   rr   rN   rt   ru   rf   sharedrv   r6   r6   r7   free_physmem   s   


r|   c                 C   sV   t ddgddid}|dD ]}| }| |v r$t|dd   S qtd	|  )
Nvmstatz-srh   ri   rj   rl    r   z can't find %r in 'vmstat' output)r   rD   striprp   rG   )statrq   rN   r6   r6   r7   r}      s   r}   c                  C   s@   t ddg } d| v rtdttttd| 	 d S )Nrf   z-VUNKNOWNzcan't determine free versionz\d+r?   )
r   r   unittestSkipTesttuplemaprp   refindallrD   )rq   r6   r6   r7   get_free_version_info   s   
r   c                 #   ^     fdd}t trdnd}tj|d|d}|V  W d   dS 1 s(w   Y  dS )zMock open() builtin and forces it to return a certain `content`
    on read() if the path being opened matches `for_path`.
    c                    sJ   | krt rt trt S t S t S | g|R i |S rV   )r   
isinstancer   ioStringIOBytesIOnameargskwargscontentfor_path	orig_openr6   r7   	open_mock   s   



z$mock_open_content.<locals>.open_mockbuiltins.open__builtin__.openTcreateside_effectNrB   r   r   patch)r   r   r   patch_pointmr6   r   r7   mock_open_content   s   "r   c                 #   r   )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s"   | kr | g|R i |S rV   r6   r   excr   r   r6   r7   r      s   z&mock_open_exception.<locals>.open_mockr   r   Tr   Nr   )r   r   r   r   r   r6   r   r7   mock_open_exception   s   "r   z
LINUX onlyc                   @   sL   e Zd Zdd Ze dd Ze dd Ze dd Ze d	d
 ZdS )"TestSystemVirtualMemoryAgainstFreec                 C   s"   t  j}t j}| || d S rV   )r|   rt   psutilvirtual_memoryassertEqualselfZ	cli_valuepsutil_valuer6   r6   r7   
test_total   s   
z-TestSystemVirtualMemoryAgainstFree.test_totalc                 C   s:   t  dk r
| dt j}t j}| j||td d S )N   r      old free versiondelta)r   skipTestr|   ru   r   r   assertAlmostEqualr   r   r6   r6   r7   	test_used  s   



z,TestSystemVirtualMemoryAgainstFree.test_usedc                 C   s&   t  j}t j}| j||td d S Nr   )r|   rf   r   r   r   r   r   r6   r6   r7   	test_free  s
   

z,TestSystemVirtualMemoryAgainstFree.test_freec                 C   sJ   t  }|j}|dkrtdt j}| j||td|||jf d d S )Nr   z%free does not support 'shared' column	%s %s 
%sr   msg)	r|   r{   r   r   r   r   r   r   output)r   rf   
free_valuer   r6   r6   r7   test_shared  s   


z.TestSystemVirtualMemoryAgainstFree.test_sharedc                 C   sj   t ddg}|d}d|d vrtdt|d  d }t j}| j||t	d	|||f d
 d S )Nrf   rg   rl   	availabler   z(free does not support 'available' columnry   r?   r   r   )
r   rD   r   r   rp   r   r   r   r   r   )r   rq   rr   r   r   r6   r6   r7   test_available#  s   



z1TestSystemVirtualMemoryAgainstFree.test_availableN)	__name__
__module____qualname__r   r   r   r   r   r   r6   r6   r6   r7   r      s    



r   c                   @   sZ   e Zd Zdd Ze dd Ze dd Ze dd Ze d	d
 Ze dd Z	dS )$TestSystemVirtualMemoryAgainstVmstatc                 C   *   t dd }t j}| j||td d S )Nztotal memory   r   )r}   r   r   rt   r   r   r   Zvmstat_valuer   r6   r6   r7   r   6  s
   

z/TestSystemVirtualMemoryAgainstVmstat.test_totalc                 C   s>   t  dk r
| dtdd }t j}| j||td d S )Nr   r   zused memoryr   r   )r   r   r}   r   r   ru   r   r   r   r6   r6   r7   r   <  s   



z.TestSystemVirtualMemoryAgainstVmstat.test_usedc                 C   r   )Nzfree memoryr   r   )r}   r   r   rf   r   r   r   r6   r6   r7   r   I  
   

z.TestSystemVirtualMemoryAgainstVmstat.test_freec                 C   r   )Nzbuffer memoryr   r   )r}   r   r   buffersr   r   r   r6   r6   r7   test_buffersP  r   z1TestSystemVirtualMemoryAgainstVmstat.test_buffersc                 C   r   )Nzactive memoryr   r   )r}   r   r   activer   r   r   r6   r6   r7   test_activeW  r   z0TestSystemVirtualMemoryAgainstVmstat.test_activec                 C   r   )Nzinactive memoryr   r   )r}   r   r   inactiver   r   r   r6   r6   r7   test_inactive^  r   z2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r   3  s    



r   c                   @   sB   e Zd Zdd Ze dd Zdd Zdd Zd	d
 Zdd Z	dS )TestSystemVirtualMemoryMocksc              	   C   s  t dtd }tjdd}td t }|j	s J | 
t|d |d }| dt|j | d	t|j | d
t|j | dt|j | dt|j | dt|j | dt|j | 
|jd | 
|jd | 
|jd | 
|jd | 
|jd | 
|jd | 
|jd W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )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
                Trecordalwaysry   r   z#memory stats couldn't be determinedcachedr{   r   r   r   r   )r   textwrapdedentencodewarningscatch_warningssimplefilterr   r   calledr   rF   assertInstrmessager   r   r   r{   r   r   slabr   r   wsretwr6   r6   r7   test_warnings_on_missesi  s@   	


"z4TestSystemVirtualMemoryMocks.test_warnings_on_missesc                 C   s   i }t d}|D ]}| }t|d d ||d < q	W d    n1 s&w   Y  t|}d|v rI|d }t|| | d }| |d d S d S )Nr   ry   r   r   s   MemAvailable:d   r!   )r   rD   rp   r   absZ
assertLess)r   ZmemsrM   rN   rO   abZdiff_percentr6   r6   r7   test_avail_old_percent  s   
z3TestSystemVirtualMemoryMocks.test_avail_old_percentc              	   C      t dtd <}tjdd}t }W d    n1 s w   Y  |js*J | 	|j
d |d }| dt|j W d    d S 1 sIw   Y  d S )Nr   aL                  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
                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   r6   r6   r7    test_avail_old_comes_from_kernel  s    


"z=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc              	   C   r   )Nr   a                      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       `LG r   r   r   r   r6   r6   r7   test_avail_old_missing_fields  s    



"z:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc              
   C   s   t dtd X tdttjd6 tj	dd }t
 }| |jd |d }| d	t|j W d    n1 s>w   Y  W d    n1 sMw   Y  W d    d S W d    d S 1 sew   Y  d S )
Nr   aT                      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/zoneinfono such file or directoryTr   r   r   r   )r   r   r   r   r   IOErrorerrnoENOENTr   r   r   r   r   r   r   r   r   )r   r   r   r   r6   r6   r7   test_avail_old_missing_zoneinfo  s2   
"z<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfoc                    s    fdd}t  trdnd}tj|d|dQ}t }|js J | |jd | |j	d | |j
d	 | |jd
 | |jd | |jd | |jd | |jd | |jd W d    d S 1 sjw   Y  d S )Nc                    s2   | dkrt td S  | g|R i |S )Nr   a=	                      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   r   r   r   r   r   r6   r7   r     s
   13zJTestSystemVirtualMemoryMocks.test_virtual_memory_mocked.<locals>.open_mockr   r   Tr   i  i      i p  i T  i   i    i X     )rB   r   r   r   r   r   r   r   rt   rf   r   r   r{   r   r   r   r   )r   r   r   r   Zmemr6   r   r7   test_virtual_memory_mocked  s    7
"z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   r   f  s    &
r   c                   @   s\   e Zd Zedd Zdd Ze dd Ze dd Zd	d
 Z	dd Z
dd Zdd ZdS )TestSystemSwapMemoryc                  C   s@   t d} |  }W d   n1 sw   Y  d|v od|v S )z3Return True if /proc/meminfo provides swap metrics.r   Nz
SwapTotal:z	SwapFree:)rB   read)rM   datar6   r6   r7   meminfo_has_swap_infoE  s   

z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   "   t  j}t j}| j||tdS r   )rw   rt   r   swap_memoryr   r   r   r   r   r6   r6   r7   r   L  s
   
zTestSystemSwapMemory.test_totalc                 C   r   r   )rw   ru   r   r   r   r   r   r6   r6   r7   r   R  
   
zTestSystemSwapMemory.test_usedc                 C   r   r   )rw   rf   r   r   r   r   r   r6   r6   r7   r   Y  r   zTestSystemSwapMemory.test_freec              	   C   s   t jdddX}tjdd9}td t }|jsJ | t	|d |d }| 
dt|j | |jd | |jd W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S )	Npsutil._common.openTr   r   r   ry   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r   r   r   rF   r   r   r   sinsoutr   r6   r6   r7   test_missing_sin_sout`  s"   

"z*TestSystemSwapMemory.test_missing_sin_soutc              	   C   s   t dttjdX}tjdd9}td t }|j	sJ | 
t|d |d }| dt|j | 
|jd | 
|jd W d    n1 sLw   Y  W d    d S W d    d S 1 sdw   Y  d S )	Nz/proc/vmstatr   Tr   r   ry   r   zK'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   rF   r   r   r   r  r  r   r6   r6   r7   test_no_vmstat_mockedn  s*   


"z*TestSystemSwapMemory.test_no_vmstat_mockedc                 C   s   |   s	tdS td}t }W d    n1 sw   Y  |jr'J dd lm	} |
 \}}}}}}}||9 }||9 }| |j| | j|j|td d S )Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   r   )r   r   skipr   r   r   r   r   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinfor   rt   r   rf   r   )r   r   swapZcextrs   rt   rf   Zunit_multiplierr6   r6   r7   test_meminfo_against_sysinfo  s   


z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   sB   t dd}t  |jsJ W d    d S 1 sw   Y  d S )Nr       )r   r   r   r   r   r   r6   r6   r7   #test_emulate_meminfo_has_no_metrics  s   "z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)r   r   r   staticmethodr   r   r   r   r   r  r  r  r
  r6   r6   r6   r7   r   B  s    


r   c                   @      e Zd Zdd ZdS )TestSystemCPUTimesc                 C   s   t  j}tdt d d }ttt	|
d}|dkr&| d| n| d| |dkr7| d| n| d| |d	krI| d
| d S | d
| d S )Nz\d+\.\d+\.\d+   r   .)r        steal)r  r  r%   Zguest)r   r  r   Z
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   rp   rD   r   assertNotIn)r   rO   Z
kernel_verZkernel_ver_infor6   r6   r7   test_fields  s   
zTestSystemCPUTimes.test_fieldsN)r   r   r   r  r6   r6   r6   r7   r        r  c                   @   s   e Zd Zeejd ddd Zeejd ddd Z	ee
d	 d
dd Zee
d ddd Zdd ZdS )TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc                 C   sn   t d}|  }W d    n1 sw   Y  dt|v r5t|dd d }| t | d S d S )Nr  -ry   )	rB   r   r   r   rp   rD   r   r   	cpu_count)r   rM   valuer6   r6   r7   test_against_sysdev_cpu_online  s   
z8TestSystemCPUCountLogical.test_against_sysdev_cpu_online/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc                 C   s0   t d}tdd |D }| t | d S )Nr   c                 S   s    g | ]}t d |dur|qS )zcpu\d+$N)r   searchrx   r6   r6   r7   r_     s     zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r  listdirrF   r   r   r  )r   Zlscountr6   r6   r7   test_against_sysdev_cpu_num  s   
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablec                 C   s$   t td}| tjdd| d S )Nznproc --allTZlogical)rp   r   r   r   r  )r   numr6   r6   r7   test_against_nproc  s   z,TestSystemCPUCountLogical.test_against_nproclscpulscpu utility not availablec                 C   s8   t d}tdd |dD }| tjdd| d S )Nlscpu -pc                 S   s   g | ]	}| d s|qS )#rm   rx   r6   r6   r7   r_     s    z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rl   Tr%  )r   rF   rD   r   r   r  )r   rq   r&  r6   r6   r7   test_against_lscpu  s   z,TestSystemCPUCountLogical.test_against_lscpuc              	   C   s  dd l }|j }tjdtd}| |j | |jsJ tjddd"}| |j  | |j	d | |j
d d d W d    n1 sKw   Y  td	d
}| }W d    n1 sdw   Y  t|}tjd|dd}| |j | W d    n1 sw   Y  td	d}| |j | |jsJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   zpsutil._pslinux.os.sysconfr   r   Tr   r  
/proc/stat/proc/cpuinforbreturn_valuer   r  )psutil._pslinux_pslinuxZcpu_count_logicalr   r   rG   r   r   assertIsNoneZ
call_countZ	call_argsrB   r   r   r   r   )r   r   originalr   rM   Zcpuinfo_data	fake_filer6   r6   r7   test_emulate_fallbacks  s<   



"z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r   r   r   r   skipIfr  pathexistsr  r$  r   r'  r-  r9  r6   r6   r6   r7   r    s    



r  c                   @   s6   e Zd Zeed ddd Zdd Zdd Zd	S )
TestSystemCPUCountCoresr(  r)  c                 C   s\   t d}t }|dD ]}|ds|d}||d  q| tjddt| d S )Nr*  rl   r+  ,ry   Fr%  )	r   setrD   rm   addr   r   r  rF   )r   rq   Zcore_idsrN   rO   r6   r6   r7   r-    s   

z*TestSystemCPUCountCores.test_against_lscpuc                 C   sh   t j }tjdg d}t j }|jsJ W d    n1 s!w   Y  |d ur2| || d S d S )N	glob.globr3  )r   r5  cpu_count_coresr   r   r   r   )r   Zmeth_1r   Zmeth_2r6   r6   r7   test_method_2   s   

z%TestSystemCPUCountCores.test_method_2c              	   C   s   t jdg d'}t jddd}| tj  W d    n1 s"w   Y  W d    n1 s1w   Y  |js;J |js@J d S )NrA  rB  r   Tr   )r   r   r6  r   r5  rC  r   )r   m1m2r6   r6   r7   test_emulate_none  s   
z)TestSystemCPUCountCores.test_emulate_noneN)	r   r   r   r   r:  r   r-  rD  rG  r6   r6   r6   r7   r=    s
    
	r=  c                   @   sz   e Zd Zee ddd Zee ddd Zee ddd Zee ddd	 Z	ee dd
d Z
dS )TestSystemCPUFrequencynot supportedc                    sV    fdd}t jj tjd|dd t sJ W d    d S 1 s$w   Y  d S )Nc                       |  drdS  | S )N&/sys/devices/system/cpu/cpufreq/policyFr,  r;  Zorig_existsr6   r7   path_exists_mock     
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockos.path.existsT)r   r   )r  r;  r<  r   r   r   cpu_freq)r   rN  r6   rM  r7   test_emulate_use_second_file  s   "z3TestSystemCPUFrequency.test_emulate_use_second_filec                    s    fdd}t jj zatjd|d: ttj t }|s J | 	|j
d | 	|jd tjddD ]}| 	|j
d | 	|jd q4W d    n1 sOw   Y  W ttj tt d S W ttj tt d S ttj tt w )Nc                    rJ  )Nz/sys/devices/system/cpu/Fr,  rL  Zos_path_existsr6   r7   rN  %  rO  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockrP  r.          TZpercpu)r  r;  r<  r   r   r   r   r5  rQ  r   maxmin)r   rN  r   freqr6   rS  r7   test_emulate_use_cpuinfo!  s*   






z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      s    fdd}t  trdnd}tj||dK tjddd+ t }| |jd	 |jd
kr5| |jd |j	d
krA| |j	d W d    n1 sKw   Y  W d    d S W d    d S 1 scw   Y  d S )Nc                    s   |  dr| drtdS |  dr| drtdS |  dr-| dr-tdS | dkr6td	S  | g|R i |S )
N/scaling_cur_freqrK     500000/scaling_min_freq   600000/scaling_max_freqs   700000r0  s   cpu MHz     : 500endswithrm   r   r   r   r   r6   r7   r   <  s   






z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr   r   r.  rP  TrB       @@rT       @g     @
rB   r   r   r   r   rQ  r   currentrW  rV  r   r   r   rX  r6   r   r7   test_emulate_data:  s$   

"z(TestSystemCPUFrequency.test_emulate_datac              
      sl   fdd}t  trdnd}tj||d tjdddw tjd	d
d` tjdd}| |d jd |d jdkrE| |d jd |d j	dkrU| |d j	d | |d jd |d jdkrn| |d jd |d j	dkr~| |d j	d W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                    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rM|drMtd
S | dr\|dr\tdS | dkretdS  | g|R i |S )NrZ  z'/sys/devices/system/cpu/cpufreq/policy0s   100000r\     200000r^  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000r[  r]  r0  s#   cpu MHz     : 100
cpu MHz     : 400r_  )r   r   r   nr   r6   r7   r   [  s8   












z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr   r   r.  rP  TrB  !psutil._pslinux.cpu_count_logicalr  rU  r         Y@rT  g      i@g     r@ry   g      y@ra  rb  rc  re  r6   r   r7   test_emulate_multi_cpuY  s4   "z-TestSystemCPUFrequency.test_emulate_multi_cpuc              
      s    fdd}t  trdnd}tj||dJ tjddd* tjd	d
d t }| |jd W d    n1 s;w   Y  W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S )Nc                    sR   |  drttjd|  drtdS | dkrtdS  | g|R i |S )NrZ  r[   z/cpuinfo_cur_freqrg  r0  s   cpu MHz     : 200)r`  r   r   r   r   r   r   r   r6   r7   r     s   



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr   r   r.  rP  TrB  ri  ry      )rB   r   r   r   r   rQ  r   rd  re  r6   r   r7   %test_emulate_no_scaling_cur_freq_file  s    
"z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r   r   r   r   r:  r   rR  rY  rf  rk  rm  r6   r6   r6   r7   rH    s    



-rH  c                   @      e Zd Zdd Zdd ZdS )TestSystemCPUStatsc                 C   &   t d}t j}| j||dd d S )Nzcontext switches  r   )r}   r   	cpu_statsZctx_switchesr   r   r6   r6   r7   test_ctx_switches     
z$TestSystemCPUStats.test_ctx_switchesc                 C   rp  )N
interruptsrq  r   )r}   r   rr  ru  r   r   r6   r6   r7   test_interrupts  rt  z"TestSystemCPUStats.test_interruptsN)r   r   r   rs  rv  r6   r6   r6   r7   ro    s    ro  c                   @   s"   e Zd Zee ddd ZdS )TestLoadAvgrI  c                 C   s   t  }tdd}|  }W d    n1 sw   Y  | jt|d |d dd | jt|d |d dd | jt|d |d dd d S )Nz/proc/loadavgrr   ry   r   r  )r   
getloadavgrB   r   rD   r   float)r   r   rM   Z
proc_valuer6   r6   r7   test_getloadavg  s    zTestLoadAvg.test_getloadavgN)r   r   r   r   r:  r   r{  r6   r6   r6   r7   rw    s    rw  c                   @   r  )TestSystemNetIfAddrsc                 C   s   t   D ]_\}}|D ]X}|jt jkr| |jt| q|jtj	krN| |jt
| | |jt| |jd urE| |jt| q| t|d q|jtjkrd|jdd }| |t| qqd S )Nz0.0.0.0%r   )r   Znet_if_addrsitemsfamilyAF_LINKr   addressre   r(   r)   r8   netmaskr;   	broadcastr=   rK   rD   r   rU   )r   r   addrsaddrr  r6   r6   r7   test_ips  s$   
zTestSystemNetIfAddrs.test_ipsN)r   r   r   r  r6   r6   r6   r7   r|    r  r|  c                   @   sH   e Zd Zeed ddd Zdd Zeed ddd Zd	S )
TestSystemNetIfStatsifconfigifconfig utility not availablec              	   C   sr   t   D ]0\}}ztd| }W n	 ty   Y qw | j|jd|v |d | |jtt	
d|d  qd S )Nifconfig %sRUNNING)r   z(?i)MTU[: ](\d+)r   )r   net_if_statsr~  r   RuntimeErrorr   Zisupmturp   r   r   )r   r   statsrq   r6   r6   r7   test_against_ifconfig  s   z*TestSystemNetIfStats.test_against_ifconfigc              	   C   sb   t   D ](\}}td| d}| |jt|   W d    n1 s)w   Y  qd S )Nz/sys/class/net/%s/mtur>   )	r   r  r~  rB   r   r  rp   r   r   )r   r   r  rM   r6   r6   r7   test_mtu  s   zTestSystemNetIfStats.test_mtuc              	   C   s  d}t   D ]r\}}ztd| }W n	 ty   Y qw td|}|rMt| dkrM|d7 }t	|
d d}t	|jd}| || qtd|}|rzt| dkrz|d7 }t	|
d  }t	|jd}| || q|s| d	d S )
Nr   r  zflags=(\d+)?<(.*?)>r  ry   r>  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r~  r   r  r   r!  rF   rQ   r?  grouplowerrD   flagsr   fail)r   Zmatches_foundr   r  rq   matchZifconfig_flagsZpsutil_flagsr6   r6   r7   
test_flags  s.   
zTestSystemNetIfStats.test_flagsN)	r   r   r   r   r:  r   r  r  r  r6   r6   r6   r7   r    s    
r  c                   @   s,   e Zd Zeed de dd ZdS )TestSystemNetIOCountersr  r  c              	   C   s   dd }t jddd}| D ]l\}}z||}W n	 ty"   Y qw | j|j|d dd | j|j|d	 dd | j|j|d
 dd | j|j|d dd | j|j	|d dd | j|j
|d dd | j|j|d dd | j|j|d dd qd S )Nc                 S   s   i }t d|  }ttd|d |d< ttd|d |d< ttd|d |d< ttd|d	 |d
< ttd|d |d< ttd|d	 |d< ttd|d |d< ttd|d |d< |S )Nr  zRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinry   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   rp   r   r   )Znicr   rq   r6   r6   r7   r  "  s&   z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernicnowrapr  i   r   r  r  r   r  r  
   r  r  r  )r   net_io_countersr~  r  r   r  r  r  r  r  r  r  r  )r   r  Znior   r  Zifconfig_retr6   r6   r7   r    sB   z-TestSystemNetIOCounters.test_against_ifconfigN)r   r   r   r   r:  r   r   r  r6   r6   r6   r7   r    s    r  c                   @   s8   e Zd Zejdedejddddd Zdd	 Zd
S )TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr.  zpsutil._pslinux.supports_ipv6FrB  c                 C   sP   zt  t jt j}| |j |d W n
 t jy   Y nw tjdd d S )N)z::1r   Zinet6kind)	r(   rK   SOCK_STREAMZ
addCleanupclosebinderrorr   net_connections)r   Zsupports_ipv6rL   r5   r6   r6   r7   test_emulate_ipv6_unsupportedN  s   z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc                 C   sL   t dtd}tjdd |jsJ W d    d S 1 sw   Y  d S )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
                unixr  )r   r   r   r   r  r   r	  r6   r6   r7   test_emulate_unixZ  s   "z*TestSystemNetConnections.test_emulate_unixN)r   r   r   r   r   rG   r  r  r6   r6   r6   r7   r  K  s
    
r  c                   @   s>   e Zd Zeeed de dd Zdd Z	dd Z
d	S )
TestSystemDiskPartitionsstatvfszos.statvfs() not availablec                 C   sn   dd }t jddD ]*}t |j}||j\}}}}| |j| | j|j|td | j|j	|td q
d S )Nc                 S   sz   t d|   }|d}|d |d}| d d \}}}}|dkr)d}t|t|t|}}}||||fS )Nzdf -P -B 1 "%s"rl   r   r@   noner[   )r   r   rD   poprp   )r;  rq   rr   rN   devrt   ru   rf   r6   r6   r7   dft  s   


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)allr   )
r   disk_partitions
disk_usageZ
mountpointr   rt   r   rf   r   ru   )r   r  partusagers   rt   ru   rf   r6   r6   r7   test_against_dfo  s   

z(TestSystemDiskPartitions.test_against_dfc              	   C   s  t dd}| }W d    n1 sw   Y  d|v r1t D ]
}|jdkr+ d S q!| dttd}t	j
d|ddD}t	j
d	d
gd#}t }|jsSJ |jsXJ |s\J | |d jd W d    n1 sow   Y  W d    d S W d    d S 1 sw   Y  d S )Nz/proc/filesystemsrx  zfszcouldn't find any ZFS partitionz
nodev	zfs
r   Tr2  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r  rwrB  r   )rB   r   r   r  Zfstyper  r   r   r   r   r   r   r   )r   rM   r   r  r8  rE  rF  r   r6   r6   r7   test_zfs_fs  s8   




"z$TestSystemDiskPartitions.test_zfs_fsc              	   C   s   zAt jddd&}| t t  W d    n1 sw   Y  |js'J W d    n1 s1w   Y  W dt_d S W dt_d S dt_w )Nzos.path.realpathz/non/existentrB  /proc)r   r   assertRaisesr   r   r  r   PROCFS_PATHr	  r6   r6   r7   test_emulate_realpath_fail  s   

z3TestSystemDiskPartitions.test_emulate_realpath_failN)r   r   r   r   r:  hasattrr  r   r  r  r  r6   r6   r6   r7   r  l  s    r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSystemDiskIoCountersc              	   C      t ddq tjdddQ tjdd}| |jd | |jd	 | |jd
t	  | |j
d | |jd | |jd | |jdt	  | |jd | |jd W d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )N/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12!psutil._pslinux.is_storage_deviceTrB  Fr  ry   r  r   r@   rz   r        r  r   r   r   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   r6   r6   r7   test_emulate_kernel_2_4  s*   "z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c              	   C   r  )Nr  z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r  TrB  Fr  ry   r  r   r@   rz   r  r  r  r  r  r  r6   r6   r7   test_emulate_kernel_2_6_full  s*   "z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc              	   C   s   t ddq tjdddQ tjdd}| |jd | |jd	t  | |j	d
 | |j
dt  | |jd | |jd | |jd | |jd | |jd W d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )Nr  z   3    1   hda 1 2 3 4r  TrB  Fr  ry   r  r   r@   r   )r   r   r   r   r  r   r  r  r  r  r  r  r  r  r  r  r  r6   r6   r7   test_emulate_kernel_2_6_limited  s*   "z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc              	   C   s   t dtd[ tjddd; tjddd}| t|d | |d	 j	d
 | |d j	d
 | |d	 j
d | |d j
d W d    n1 sNw   Y  W d    d S W d    d S 1 sfw   Y  d S )Nr                      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  FrB  Tperdiskr  r  nvme0n1ry   Z	nvme0n1p1rz   )r   r   r   r   r   r   r  r   rF   r  r  r  r6   r6   r7   test_emulate_include_partitions  s"   "z8TestSystemDiskIoCounters.test_emulate_include_partitionsc              	   C   s  t dtd+ tjddd tjddd}| | W d    n1 s'w   Y  W d    n1 s6w   Y  dd }t dtd> tjdd	|d
 tjddd}| |j	d | |j
d W d    n1 spw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr  r  r  FrB  r  c                 S   s   | dkS )Nr  r6   )r   r6   r6   r7   is_storage_device  s   zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr   ry   rz   )r   r   r   r   r   r   r  r6  r   r  r  )r   r   r  r6   r6   r7   test_emulate_exclude_partitions   s6   "z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc                 C   sh   dd }t jdd}tjdd|d t jdd}W d    n1 s#w   Y  | t|t| d S )Nc                 S   s   | dkrdS dS )Nr  FTr6   rL  r6   r6   r7   r<     s   z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r  psutil._pslinux.os.path.existsr   )r   r  r   r   r   rF   )r   r<  ZwprocfsZwsysfsr6   r6   r7   test_emulate_use_sysfs  s   z/TestSystemDiskIoCounters.test_emulate_use_sysfsc                 C   sL   dd }t jdd|d | ttj W d    d S 1 sw   Y  d S )Nc                 S   s   dS )NFr6   rL  r6   r6   r7   r<  ,  rZ   z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr  Tr   )r   r   r  NotImplementedErrorr   r  )r   r<  r6   r6   r7   test_emulate_not_impl+  s   "z.TestSystemDiskIoCounters.test_emulate_not_implN)
r   r   r   r  r  r  r  r  r  r  r6   r6   r6   r7   r    s    r  c                   @   s^   e Zd Zdd Zdd Zeeddd Zee	d d	eedd
d Z
dd ZdS )TestRootFsDeviceFinderc                 C   s(   t dj}t || _t || _d S )Nr  )r  r   st_devmajorminor)r   r  r6   r6   r7   setUp7  s   zTestRootFsDeviceFinder.setUpc                 C   sf   t  }tjdr|  n| t|j tjd| j| jf r&|	  n| t|j	 |
  d S Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)r   r  r;  r<  ask_proc_partitionsr  r   r  r  ask_sys_dev_blockask_sys_class_block)r   finderr6   r6   r7   test_call_methods<  s   

z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSc                 C   s   t  }| |  d  } }}tjdr| }tjd| j| jf r*|	 }|
 }|p3|p3|}|r>|r>| || |rH|rH| || |rT|rV| || d S d S d S r  )r   assertIsNotNonefindr  r;  r<  r  r  r  r  r  r   )r   r  r   r   cbaser6   r6   r7   test_comparisonsI  s$   z'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablec                 C   s"   t   }td}| || d S )Nzfindmnt -o SOURCE -rn /)r   r  r   r   )r   r   Zfindmnt_valuer6   r6   r7   test_against_findmnt^  s   
z+TestRootFsDeviceFinder.test_against_findmntc                 C   s   t jddgd7}t d }|jsJ ts(| |jd | |jt	 
  n| |jd W d    d S W d    d S 1 sBw   Y  d S )Nr  )	/dev/rootr  Zext4r  rB  r   r  )r   r   r   r  r   r   assertNotEqualZdevicer   r   r  )r   r   r  r6   r6   r7   test_disk_partitions_mockede  s   
"z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)r   r   r   r  r  r   r:  r   r  r   r  r  r6   r6   r6   r7   r  4  s    


r  c                   @   sR   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	 dd Z
dd ZdS )TestMiscc                 C   s(   t d}t }| t|t| d S )Nz	boot time)r}   r   	boot_timer   rp   r   r6   r6   r7   test_boot_timez  s   zTestMisc.test_boot_timec              	      sj  |   }t| ttj|dd}|d |d |d W d    n1 s-w   Y  zt  fdd}tr?dnd	}tj	||d
 t
t | ttj | jttjdd | ttj | jttjdd | ttj | jttjdd |t_| t d | tt d tjdd}| t|d tjdd}| ttt|d ttj|dd}|d |d |d W d    n1 sw   Y  | t d | ttjddd | tt d | ttttjddd W d    n	1 sw   Y  W t| t
t n
t| t
t w | tjd d S )Nr   r   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                    s,   |  drttjd | g|R i |S )Nr  zrejecting access for test)rm   r   r   r   r   r   r6   r7   r     s   
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr   r   r.  TrU  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r  )
get_testfnr  mkdirrB   r;  rI   writer   r   r   r   r   r  r   r  cpu_percentcpu_times_percentr  r   sumr   r  shutilrmtree)r   Z	my_procfsrM   r   r   Zper_cpu_percentZper_cpu_times_percentr6   r   r7   test_no_procfs_on_import  s`   





&


z!TestMisc.test_no_procfs_on_importc                 C   sV  t dtd !}t  |jsJ tjdd t  tjdd W d    n1 s.w   Y  t dtd d}t }|jsGJ tjdd}t }tjdd}| |d | t	|d | t	|d | t	|d | t	t
t	|d | t	t
t	|d | |jd | |jd W d    d S 1 sw   Y  d S )Nr/  z                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
                TrU  z                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
                r   rj  )r   r   r   r   r   r  r   r  r  r  r   r   r  user)r   r   r  Zcpu_percent_percpur  Zcpu_times_percent_percpur6   r6   r7   test_cpu_steal_decrease  s@   

"z TestMisc.test_cpu_steal_decreasec                 C   sN   t jddd}| ttjj |jsJ W d    d S 1 s w   Y  d S )Nr   Tr   )r   r   r  r  r   r5  r  r   r	  r6   r6   r7   test_boot_time_mocked  s   "zTestMisc.test_boot_time_mockedc                 C   s   t jddgd}| t d jd |jsJ W d    n1 s#w   Y  t jddgd}| t d jd |jsAJ W d    n1 sKw   Y  t jddgd}| t d jd |jsiJ W d    d S 1 stw   Y  d S )	Nzpsutil._pslinux.cext.users)	giampaolopts/2z:0   hATr  rB  r   	localhost)r
  r  z:0.0r  Tr  )r
  r  foor  Tr  r  )r   r   r   r   Zusershostr   r	  r6   r6   r7   test_users_mocked  s*   "zTestMisc.test_users_mockedc                 C   s   |   }t| zK|t_| ttj | ttj | jttjdd | ttj	 | ttj
 | ttj | ttj | ttj | tjtj W dt_d S dt_w )NTrU  r  )r  r  r  r   r  r  r   r   r  r  r  r  r  r  ZNoSuchProcessProcess)r   Ztdirr6   r6   r7   test_procfs_path   s   
zTestMisc.test_procfs_pathc                 C   s   t  < t }| }| t|d t|dd dd j}| |j	| t|}|
  | |t  W d    d S 1 sBw   Y  d S )Nr  c                 S   s   | j S rV   )idrW   r6   r6   r7   <lambda>  s    z)TestMisc.test_issue_687.<locals>.<lambda>)keyry   )r   r   r  threadsr   rF   sortedr  r  pidas_dictr  Zpids)r   pr  tidptr6   r6   r7   test_issue_687  s   
"zTestMisc.test_issue_687c                 C   sL   t dd}tt sJ |jsJ W d    d S 1 sw   Y  d S )N/proc/%s/statusr[   )r   r   Z
pid_existsr  getpidr   r	  r6   r6   r7   test_pid_exists_no_proc_status$  s   "z'TestMisc.test_pid_exists_no_proc_statusN)r   r   r   r  r  r  r	  r  r  r   r  r   r6   r6   r6   r7   r  w  s    =)
r  z
no batteryc                   @   sf   e Zd Zeed ddd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd ZdS )TestSensorsBatteryZacpizacpi utility not availablec                 C   sD   t d}t|dd  dd}t j}| j||dd d S )Nzacpi -br>  ry   r}  r[   r   )	r   rp   rD   r   replacer   sensors_batterypercentr   )r   rq   Z
acpi_valuer   r6   r6   r7   test_percent6  s   
zTestSensorsBattery.test_percentc                    s    fdd}t  trdnd}tj||d!}| t jd | t jtj	 |j
s.J W d    d S 1 s9w   Y  d S )Nc                    4   |  ds
|  drtdS  | g|R i |S )N
AC0/online	AC/online   1r`  r   r   r   r   r6   r7   r   ?     
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr   r   r.  T)rB   r   r   r   r   r   r#  power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDr   r   r   r   r   r6   r   r7   test_emulate_power_plugged=  s   "z-TestSensorsBattery.test_emulate_power_pluggedc                    l    fdd}t  trdnd}tj||d}| t jd |js$J W d    d S 1 s/w   Y  d S )Nc                    N   |  ds
|  drttjd|  drttdS  | g|R i |S )Nr'  r(  r[   /statusZchargingr`  r   r   r   r   r   r   r   r   r6   r7   r   P  
   
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr   r   r.  T	rB   r   r   r   r   r   r#  r,  r   r-  r6   r   r7   test_emulate_power_plugged_2M     "z/TestSensorsBattery.test_emulate_power_plugged_2c                    r/  )Nc                    r&  )Nr'  r(     0r*  r   r   r6   r7   r   `  r+  zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr   r   r.  Fr4  r-  r6   r   r7   test_emulate_power_not_plugged^  s   "z1TestSensorsBattery.test_emulate_power_not_pluggedc                    r/  )Nc                    r0  )Nr'  r(  r[   r1  Zdischargingr2  r   r   r6   r7   r   o  r3  zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr   r   r.  Fr4  r-  r6   r   r7    test_emulate_power_not_plugged_2l  r6  z3TestSensorsBattery.test_emulate_power_not_plugged_2c                    sj    fdd}t  trdnd}tj||d}| t j |js#J W d    d S 1 s.w   Y  d S )Nc                    sJ   |  ds
|  drttjd|  drtdS  | g|R i |S )N"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/onliner[   #/sys/class/power_supply/BAT0/statuss   ???)rm   r   r   r   r   r   r   r   r6   r7   r     s   


zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr   r   r.  )	rB   r   r   r   r6  r   r#  r,  r   r-  r6   r   r7   test_emulate_power_undetermined}  s   	"z2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sL   t dd}| t jd |jsJ W d    d S 1 sw   Y  d S )N(/sys/class/power_supply/BAT0/energy_fullr7  r   )r   r   r   r#  r$  r   r	  r6   r6   r7   test_emulate_energy_full_0  s   "z-TestSensorsBattery.test_emulate_energy_full_0c              
   C   s   t dttjdH t dttjd& tdd | t jd W d    n1 s-w   Y  W d    n1 s<w   Y  W d    d S W d    d S 1 sTw   Y  d S )Nr>  r[   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )	r   r   r   r   r   r   r   r#  r$  r   r6   r6   r7   "test_emulate_energy_full_not_avail  s$   

"z5TestSensorsBattery.test_emulate_energy_full_not_availc              
   C   s   t dttjdK t dttjd) t dttjd | t j W d    n1 s0w   Y  W d    n1 s?w   Y  W d    d S W d    d S 1 sWw   Y  d S )Nr;  r[   r:  r<  )r   r   r   r   r6  r   r#  r,  rA  r6   r6   r7   test_emulate_no_power  s&   


"z(TestSensorsBattery.test_emulate_no_powerN)r   r   r   r   r:  r   r%  r.  r5  r8  r9  r=  r?  rB  rC  r6   r6   r6   r7   r!  2  s    
r!  c                   @   r  )TestSensorsBatteryEmulatedc              	      s    fdd}t  trdnd}tjddgd&}tj||d}| t  W d    n1 s0w   Y  W d    n1 s?w   Y  |jsIJ |jsNJ d S )	Nc                    ^   |  drttdS |  drttdS |  dr$ttdS  | g|R i |S )Nz/energy_nowZ60000000z
/power_now0z/energy_fullZ60000001r`  r   r   r   r   r   r6   r7   r        


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr   r   z
os.listdirZBAT0rB  r.  )rB   r   r   r   r  r   r#  r   )r   r   r   ZmlistdirZmopenr6   r   r7   test_it  s   

z"TestSensorsBatteryEmulated.test_itN)r   r   r   rI  r6   r6   r6   r7   rD    r  rD  c                   @   rn  )TestSensorsTemperaturesc              	      s    fdd}t  trdnd}tj||dM tjddgd, t d	 d
 }| |jd | |jd | |j	d | |j
d W d    n1 sMw   Y  W d    d S W d    d S 1 sew   Y  d S )Nc                    s   |  drttdS |  drttdS |  dr"tdS |  dr,tdS |  d	r6td
S  | g|R i |S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)r`  r   r   r   r   r   r   r6   r7   r     s   







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr   r   r.  rA  z/sys/class/hwmon/hwmon0/temp1rB  r   r   rL        >@g      D@      I@rB   r   r   r   r   Zsensors_temperaturesr   rL  rd  highcritical)r   r   r   tempr6   r   r7   test_emulate_class_hwmon  s    "z0TestSensorsTemperatures.test_emulate_class_hwmonc              	      s    fdd}dd }t  trdnd}tj||dM tjdd	|d
, t d d }| |jd | |jd | |j	d | |j
d W d    n1 sQw   Y  W d    d S W d    d S 1 siw   Y  d S )Nc                    sn   |  dr
tdS |  drtdS |  dr ttdS |  dr,ttdS  | g|R i |S )	NZ0_temprN  rT  rM  Z0_typerS  typer   )r`  r   r   r   r   r   r   r6   r7   r     s   





zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockc                 S   s:   | dkrg S | dkrg S | dkrdgS | dkrddgS g S )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_tempr6   rL  r6   r6   r7   	glob_mock  s   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr   r   r.  rA  Tr   r   r   r[   rO  rP  rQ  )r   r   rW  r   rT  r6   r   r7   test_emulate_class_thermal  s   "z2TestSensorsTemperatures.test_emulate_class_thermalN)r   r   r   rU  rX  r6   r6   r6   r7   rJ    s    rJ  c                   @   r  )TestSensorsFansc              	      s    fdd}t  trdnd}tj||d? tjddgd t d	 d
 }| |jd | |jd W d    n1 s?w   Y  W d    d S W d    d S 1 sWw   Y  d S )Nc                    rE  )NrK  r   z/fan1_labelrL  z/fan1_input2000rG  r   r   r6   r7   r     rH  z4TestSensorsFans.test_emulate_data.<locals>.open_mockr   r   r.  rA  z/sys/class/hwmon/hwmon2/fan1rB  r   r   rL  i  )	rB   r   r   r   r   Zsensors_fansr   rL  rd  )r   r   r   fanr6   r   r7   rf    s   
"z!TestSensorsFans.test_emulate_dataN)r   r   r   rf  r6   r6   r6   r7   rY  
  r  rY  c                   @   s   e Zd Ze dd Zdd Zeeddd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zee ddd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*TestProcessc                 C   s   |   }tj|j \}}}t|jjdd}| j|tdd |D dd | j|tdd |D dd | j|tdd |D dd d S )	NF)groupedc                 S   s   g | ]}|j |j qS r6   )Zprivate_dirtyZprivate_cleanrx   r6   r6   r7   r_   0  r`   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>r   r   c                 S      g | ]}|j qS r6   )pssrx   r6   r6   r7   r_   3      c                 S   r^  r6   )r  rx   r6   r6   r7   r_   5  r`  )	Zspawn_testprocr   r5  r  r  _parse_smapsmemory_mapsr   r  )r   Zsprocussr_  r  mapsr6   r6   r7   test_parse_smaps_vs_memory_maps*  s   
z+TestProcess.test_parse_smaps_vs_memory_mapsc                 C   s   t dt  td /}tjt }|	 \}}}|j
s#J | |d | |d | |d W d    d S 1 s@w   Y  d S )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
                i l  r   i <  )r   r  r  r   r   r   r   r5  r  ra  r   r   )r   r   r  rc  r_  r  r6   r6   r7   test_parse_smaps_mocked7  s   

"z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYc                 C   s  dd }|   }t|d | ||jd W d    n1 s!w   Y  t|d | ||jd W d    n1 s?w   Y  t|d | ||jd W d    n1 s]w   Y  t|d | ||jd W d    n1 s{w   Y  t|d | ||jd W d    n1 sw   Y  t|d | ||jd W d    n1 sw   Y  trt| t|d	 | ||jd W d    n1 sw   Y  t| t|d
 | ||jd W d    d S 1 sw   Y  d S d S )Nc                 S   sP   t  }t t }	 | D ]}|jtj| kr|  S t |kr& nqqrV   )	r   r  timer	   
open_filesr;  r  abspathr  )fnamer  Z	giveup_atfiler6   r6   r7   get_test_file\  s   z7TestProcess.test_open_files_mode.<locals>.get_test_filer   rx  r   zr+zw+za+rX   zx+)r  rB   r   moder   r   )r   rm  Ztestfnr6   r6   r7   test_open_files_modeZ  s<   "z TestProcess.test_open_files_modec              	   C   s  t  }| }t|  dk t|jdt|  tjdt	t
jdd}| }|r.J |js3J W d    n1 s=w   Y  tjdt	t
jdd}| | g  |js[J W d    n1 sew   Y  W d    d S W d    d S 1 s}w   Y  d S )Nr   len(ret) != %ipsutil._pslinux.os.readlinkr[   r.  )r   r  ri  rB   r  r   rF   r   r   OSErrorr   r   r   EINVALr   )r   r  filesr   r6   r6   r7   test_open_files_file_gone  s,   


"z%TestProcess.test_open_files_file_gonec              	   C   s   t  }| }t|  dI t|jdt|  trdnd}tj	|t
tjdd}| }|r4J |js9J W d    n1 sCw   Y  W d    d S W d    d S 1 s[w   Y  d S )Nr   rp  r   r   r[   r.  )r   r  ri  rB   r  r   rF   r   r   r   r   r   r   r   r   r  rt  r   r   r6   r6   r7   test_open_files_fd_gone  s    
"z#TestProcess.test_open_files_fd_gonec              
   C   s   t  }| }t|  dZ t|jdt|  d}tj|t	t
jdd*}td | }|r6J |js;J W d    n1 sEw   Y  W d    n1 sTw   Y  W d    d S W d    d S 1 slw   Y  d S )Nr   rp  rq  r[   r.  psutil._pslinux.debug)r   r  ri  rB   r  r   rF   r   r   rr  r   ENAMETOOLONGr   rv  r6   r6   r7   test_open_files_enametoolong  s&   
"z(TestProcess.test_open_files_enametoolongc                 C   sX   t jdi d}| tjt   |j	sJ W d    d S 1 s%w   Y  d S )Nz)psutil._pslinux._psposix.get_terminal_maprB  )
r   r   r6  r   r5  r  r  r  Zterminalr   r	  r6   r6   r7   test_terminal_mocked  s   "z TestProcess.test_terminal_mockedc                 C      t  }ttd}tjd|dd}| | ddg |j	s#J W d    n1 s-w   Y  ttd}tjd|dd}| | g d |j	sQJ W d    d S 1 s\w   Y  d S )	Nzfoo bar r   Tr2  r  barz	foo bar  r  r}  r[   
r   r  r   r   r   r   r   r   Zcmdliner   r   r  r8  r   r6   r6   r7   test_cmdline_mocked  "   "zTestProcess.test_cmdline_mockedc                 C   r|  )	Nzfoo bar r   Tr2  r  r}  z	foo bar  r~  r  r  r6   r6   r7   test_cmdline_spaces_mocked  r  z&TestProcess.test_cmdline_spaces_mockedc                 C   sj   t  }ttd}tjd|dd}| | ddg |j	s#J W d    d S 1 s.w   Y  d S )Nzfoo bar r   Tr2  r  r}  r  r  r6   r6   r7   test_cmdline_mixed_separators  s   "z)TestProcess.test_cmdline_mixed_separatorsc                 C   s\   t jddd | t  d | t  d W d    d S 1 s'w   Y  d S )Nrq  z/home/foo (deleted)rB  z	/home/foo)r   r   r   r   r  execwdrA  r6   r6   r7   !test_readlink_path_deleted_mocked  s   "z-TestProcess.test_readlink_path_deleted_mockedc                    s    fdd}t  trdnd}tj||d}t  }|js!J | |g  W d    n1 s1w   Y   fdd}tj||d | 	tj
t j W d    d S 1 sYw   Y  d S )Nc                    4   |  dt  rttjd | g|R i |S Nz/proc/%s/taskr[   )rm   r  r  r   r   r   r   r   r6   r7   open_mock_1     z4TestProcess.test_threads_mocked.<locals>.open_mock_1r   r   r.  c                    r  r  )rm   r  r  r   r   ZEPERMr   r   r6   r7   open_mock_2  r  z4TestProcess.test_threads_mocked.<locals>.open_mock_2)rB   r   r   r   r   r  r  r   r   r  AccessDenied)r   r  r   r   r   r  r6   r   r7   test_threads_mocked  s   
"zTestProcess.test_threads_mockedc              
   C   s   t jdttjddc}t jdtddd?}t  }|j	s#J |j	s(J | 
|d t jddd | tjt j W d    n1 sJw   Y  W d    n1 sYw   Y  W d    d S W d    d S 1 sqw   Y  d S )	Nzpsutil._pslinux.readlinkr[   r.  zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFrB  )r   r   rr  r   r   r   r  r  r  r   r   r  ZombieProcess)r   rE  rF  r   r6   r6   r7   test_exe_mocked  s0   



"zTestProcess.test_exe_mockedc              	   C   s   t dt  ttjd+}t }| t	 |
  W d    n1 s&w   Y  |js0J W d    d S 1 s;w   Y  d S )Nrf  r[   )r   r  r  r   r   r   r   r  r  r   rb  r   r   r   r  r6   r6   r7   test_issue_1014"  s   


"zTestProcess.test_issue_1014rI  c              	   C   s   t jdttjdd1}t }|  | tj	}|
tj W d    n1 s+w   Y  |js5J W d    n1 s?w   Y  | |jj|j | |jj|  d S )Nzpsutil._pslinux.prlimitr[   r.  )r   r   rr  r   ZENOSYSr   r  r   r  r  ZrlimitZRLIMIT_NOFILEr   r   	exceptionr  r   r   r  r   r6   r6   r7   test_rlimit_zombie-  s   
zTestProcess.test_rlimit_zombiec              	   C   s   t jdttjdd/}t }|  | tj	}|
  W d    n1 s)w   Y  |js3J W d    n1 s=w   Y  | |jj|j | |jj|  d S )Nrq  r[   r.  )r   r   rr  r   r   r   r  r   r  r  r  r   r   r  r  r  r6   r6   r7   test_cwd_zombie<  s   

zTestProcess.test_cwd_zombiec                 C   s  g d}d | }tdt  |m t }| | d | |	 tj
 | | d | | dt t   | }| |jdt  | |jdt  | |jd	t  | |jd
t  | |jdt  | | d W d    d S 1 sw   Y  d S )N)*rF  z(cat)Z1rF  rF  rF  rF  rF  rF  rF  rF  rF  2345rF  rF  rF  rF  6rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  rF  r  rF  rF  7r~   z/proc/%s/statcatry   r  r  r   r@   rz   r  )rI   r   r   r  r  r   r  r   r   statusZSTATUS_ZOMBIEppidZcreate_timer   r  r  r  systemchildren_userchildren_systemZiowaitZcpu_num)r   r   r   r  cpur6   r6   r7   test_stat_file_parsingG  s$   ,"z"TestProcess.test_stat_file_parsingc                 C   s   t dt  td g t }| |	 j
d | |	 jd | | d | }| |jd | |jd | |jd | }| |jd	 | |jd
 | |jd | |j ttdd W d    d S 1 sxw   Y  d S )Nr  a                  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      B   i  i  i  i  i  i  r   r  )r   r  r  r   r   r   r   r  r   num_ctx_switches	voluntaryinvoluntarynum_threadsuidsrealZ	effectivesavedgids_proc_get_eligible_cpuslistrH   )r   r  r  r  r6   r6   r7   test_status_file_parsing  s&   

"z$TestProcess.test_status_file_parsingc              	   C   s   t jdttjdd5}t }t d | rJ |js!J W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S )Nrq  r[   r.  rx  )	r   r   rr  r   ry  r   r  connectionsr   r  r6   r6   r7   test_connections_enametoolong  s   
"z)TestProcess.test_connections_enametoolongN)r   r   r   r   re  rg  r   r:  r   ro  ru  rw  rz  r{  r  r  r  r  r  r  r  r   r  r  r  r  r  r6   r6   r6   r7   r\  '  s.    

#
$

=r\  c                   @   sr   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Ze dd Zdd Zdd ZdS )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.
    c                 C   s   t  | _d S rV   )r   r  proc)clsr6   r6   r7   
setUpClass  s   z#TestProcessAgainstStatus.setUpClassc              
   C   s   t jd| jj ?}|D ]5}| }||rB|dd }zt|W   W  d    S  t	yA   | Y   W  d    S w qt	d| 1 sLw   Y  d S )Nr  	r  zcan't find %r)
r   _psplatform	open_textr  r  r   rm   	partitionrp   rG   )r   Z	linestartrM   rN   r  r6   r6   r7   read_status_file  s$   


z)TestProcessAgainstStatus.read_status_filec                 C       |  d}| | j | d S )NzName:)r  r   r  r   r   r  r6   r6   r7   	test_name     
z"TestProcessAgainstStatus.test_namec                 C   sH   |  d}||dd |d }|dd}| | j | d S )NzState:(ry   )r~   r  )r  r  rfindr"  r   r  r  r  r6   r6   r7   test_status  s   
z$TestProcessAgainstStatus.test_statusc                 C   r  )NzPPid:)r  r   r  r  r  r6   r6   r7   	test_ppid  r  z"TestProcessAgainstStatus.test_ppidc                 C   r  )NzThreads:)r  r   r  r  r  r6   r6   r7   test_num_threads  r  z)TestProcessAgainstStatus.test_num_threadsc                 C   :   |  d}ttt| dd }| | j | d S )NzUid:ry   r@   )r  r   r   rp   rD   r   r  r  r  r6   r6   r7   	test_uids     
z"TestProcessAgainstStatus.test_uidsc                 C   r  )NzGid:ry   r@   )r  r   r   rp   rD   r   r  r  r  r6   r6   r7   	test_gids  r  z"TestProcessAgainstStatus.test_gidsc                 C   s@   |  d}| | j j| |  d}| | j j| d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r   r  r  r  r  r  r6   r6   r7   test_num_ctx_switches  s   

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sR   |  d}dt|v r'tt|d\}}| | j tt	||d  d S d S )NCpus_allowed_list:r  ry   )
r  r   r   rp   rD   r   r  Zcpu_affinityr  rH   )r   r  Zmin_Zmax_r6   r6   r7   test_cpu_affinity  s   
z*TestProcessAgainstStatus.test_cpu_affinityc                 C   sh   |  d}td}| jj  W d    n1 sw   Y  dt|v r-|jr+J d S |js2J d S )Nr  zpsutil._pslinux.per_cpu_timesr  )r  r   r   r  r  r  r   r   )r   r  r   r6   r6   r7   test_cpu_affinity_eligible_cpus  s   
z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)r   r   r   __doc__classmethodr  r  r  r  r  r  r  r  r   r  r  r  r6   r6   r6   r7   r    s    

r  c                   @   r  )	TestUtilsc                 C   sR   t jddd}| tjdd |jsJ W d    d S 1 s"w   Y  d S )Nzos.readlinkzfoo (deleted)rB  r}  r  )r   r   r   r   r  readlinkr   r	  r6   r6   r7   test_readlink  s   "zTestUtils.test_readlinkN)r   r   r   r  r6   r6   r6   r7   r    r  r  __main__)run_from_name)fr  
__future__r   rn   r+   r   globr   r  r   r  r(   r1   r   rh  r   r   r   r   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4  r   r   r   r   r;  rj  dirname__file__ZHEREr0   ZSIOCGIFCONFrb   r:   r<   r  ZEMPTY_TEMPERATURESr8   r;   r=   rU   re   rw   r|   r}   r   contextmanagerr   r   r:  r   r   r   r   r  r  r=  rH  ro  rw  r|  r  r  r  r  r  r  r  r!  rD  rJ  rY  r\  r  r  r   Zpsutil.tests.runnerr  r6   r6   r6   r7   <module>   s  	

62 \[? )2. ? B ;}A   R
