£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    =_^                @   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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j+,ej+-e.Z/dZ0dZ1dZ2dZ3d Z4erd!Z5ed" Z6d#d$ Z7d%d& Z8d'd( Z9d)d* Z:d+d, Z;d-d. Z<d/d0 Z=d1d2 Z>d3d4 Z?ej@d5d6 ZAej@d7d8 ZBe)Ce d9G d:d; d;eZDe)Ce d9G d<d= d=eZEe)Ce d9G d>d? d?eZFe)Ce d9G d@dA dAeZGe)Ce d9G dBdC dCeZHe)Ce d9G dDdE dEeZIe)Ce d9G dFdG dGeZJe)Ce d9G dHdI dIeZKe)Ce d9G dJdK dKeZLe)Ce d9G dLdM dMeZMe)Ce d9G dNdO dOeZNe)Ce d9G dPdQ dQeZOe)Ce d9G dRdS dSeZPe)Ce d9G dTdU dUeZQe)Ce d9G dVdW dWeZRe)Ce d9e)Ce dXG dYdZ dZeZSe)Ce d9G d[d\ d\eZTe)Ce d9G d]d^ d^eZUe)Ce d9G d_d` d`eZVe)Ce d9G dadb dbeZWe)Ce d9G dcdd ddeZXe)Ce d9G dedf dfeZYeZdgkrddhl[m\Z\ e\e. dS )izLinux 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)whichi  i  i'  i  i  i   z/sys/class/hwmon/hwmon*c             C   sp   dd l }| d d } tr"t| d} ttjtj}t|* t|	|
 ttd| dd S Q R X d S )Nr      ascii256s      )fcntlr   bytessocketAF_INET
SOCK_DGRAM
contextlibclosing	inet_ntoaioctlfilenoSIOCGIFADDRstructpack)ifnamer    s r/   J/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_linux.pyget_ipv4_addressB   s    

r1   c             C   sp   dd l }| d d } tr"t| d} ttjtj}t|* t|	|
 ttd| dd S Q R X d S )Nr   r   r   r   r   r   )r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFNETMASKr+   r,   )r-   r    r.   r/   r/   r0   get_ipv4_netmaskO   s    

r3   c             C   sp   dd l }| d d } tr"t| d} ttjtj}t|* t|	|
 ttd| dd S Q R X d S )Nr   r   r   r   r   r   )r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFBRDADDRr+   r,   )r-   r    r.   r/   r/   r0   get_ipv4_broadcast\   s    

r5   c       	   	   C   s   t dd:}x2| D ]}| }|d | krP qW td|  W d Q R X |d }g }x.tdt|dD ]}||||d   qhW d|}t	tj
|}ttj
|S )Nz/proc/net/if_inet6rtzcould not find interface %rr      :)open	readlinessplit
ValueErrorrangelenappendjoinr"   	inet_ptonAF_INET6	inet_ntop)	r-   flinefieldsZunformattedgroupsi	formattedZpackedr/   r/   r0   get_ipv6_addressi   s    
rK   c          	      s   dd l }| d d } tr"t| d} ttjtj}t|` ||	 t
td| }trfdd  ndd l}|j d fdd	|d
d D d d S Q R X d S )Nr   r   r   r   c             S   s   | S )Nr/   )xr/   r/   r0   ord   s    zget_mac_address.<locals>.ord c                s   g | ]}d  | qS )z%02x:r/   ).0char)rM   r/   r0   
<listcomp>   s    z#get_mac_address.<locals>.<listcomp>   r   r7   )r    r   r!   r"   r#   r$   r%   r&   r(   r)   SIOCGIFHWADDRr+   r,   __builtin__rM   rA   )r-   r    r.   inforT   r/   )rM   r0   get_mac_addressz   s    

rV   c              C   s|   t dddid} | d}xJ|D ]B}|dr | \}}}}tdd}|t|t|t|S q W td	d| d
S )zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    zfree -bLANGzC.UTF-8)env
ZSwapfreeztotal used freez&can't find 'Swap' in 'free' output:
%sN)r   r<   
startswithcollections
namedtupleintr=   rA   )outlinesrF   _totalusedrZ   ntr/   r/   r0   	free_swap   s    


re   c              C   s   t dddid} | d}xT|D ]L}|dr dd | d	d
 D \}}}}tdd}|||||| S q W tdd| dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    zfree -brW   zC.UTF-8)rX   rY   ZMemc             S   s   g | ]}t |qS r/   )r^   )rO   rL   r/   r/   r0   rQ      s    z free_physmem.<locals>.<listcomp>      rZ   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   r<   r[   r\   r]   r=   rA   )r_   r`   rF   rb   rc   rZ   sharedrd   r/   r/   r0   free_physmem   s    


"ri   c             C   sV   t dddid}x4|dD ]&}| }| |krt|dd S qW td|  d S )	Nz	vmstat -srW   zC.UTF-8)rX   rY    r   z can't find %r in 'vmstat' output)r   r<   stripr^   r=   )statr_   rF   r/   r/   r0   vmstat   s    rm   c              C   s:   t d } d| krtdttt|  d dS )Nzfree -VUNKNOWNzcan't determine free versionr7   .)r   rk   r   SkipTesttuplemapr^   r<   )r_   r/   r/   r0   get_free_version_info   s    
rs   c          	   #   sF    fdd}t trdnd}tj|d|d}|V  W dQ R X 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                sL   | kr8t r,t tr t S t S qHt S n| f||S d S )N)r   
isinstancer   ioStringIOBytesIO)nameargskwargs)contentfor_path	orig_openr/   r0   	open_mock   s    

z$mock_open_content.<locals>.open_mockzbuiltins.openz__builtin__.openT)createside_effectN)r:   r   r   patch)r|   r{   r~   patch_pointmr/   )r{   r|   r}   r0   mock_open_content   s
    r   c          	   #   sF    fdd}t trdnd}tj|d|d}|V  W dQ R X dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                s"   | kr n| f||S d S )Nr/   )rx   ry   rz   )excr|   r}   r/   r0   r~      s    z&mock_open_exception.<locals>.open_mockzbuiltins.openz__builtin__.openT)r   r   N)r:   r   r   r   )r|   r   r~   r   r   r/   )r   r|   r}   r0   mock_open_exception   s
    r   z
LINUX onlyc               @   s   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	e dd Z
e dd Zdd Ze dd Zdd Zdd Zdd Zdd ZdS )TestSystemVirtualMemoryc             C   s&   t dd }t j}| || d S )Nztotal memoryi   )rm   psutilvirtual_memoryrb   assertAlmostEqual)selfvmstat_valuepsutil_valuer/   r/   r0   
test_total   s    
z"TestSystemVirtualMemory.test_totalc             C   sL   t  dk r| dt }|j}t j}| j||td|||jf d d S )N)   r      zold free versionz	%s %s 
%s)deltamsg)	rs   ZskipTestri   rc   r   r   r   r   output)r   rZ   
free_valuer   r/   r/   r0   	test_used   s    


z!TestSystemVirtualMemory.test_usedc             C   s*   t dd }t j}| j||td d S )Nzfree memoryi   )r   )rm   r   r   rZ   r   r   )r   r   r   r/   r/   r0   	test_free  s    
z!TestSystemVirtualMemory.test_freec             C   s*   t dd }t j}| j||td d S )Nzbuffer memoryi   )r   )rm   r   r   buffersr   r   )r   r   r   r/   r/   r0   test_buffers  s    
z$TestSystemVirtualMemory.test_buffersc             C   s*   t dd }t j}| j||td d S )Nzactive memoryi   )r   )rm   r   r   activer   r   )r   r   r   r/   r/   r0   test_active  s    
z#TestSystemVirtualMemory.test_activec             C   s*   t dd }t j}| j||td d S )Nzinactive memoryi   )r   )rm   r   r   inactiver   r   )r   r   r   r/   r/   r0   test_inactive  s    
z%TestSystemVirtualMemory.test_inactivec             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' columnz	%s %s 
%s)r   r   )	ri   rh   r   rp   r   r   r   r   r   )r   rZ   r   r   r/   r/   r0   test_shared#  s    

z#TestSystemVirtualMemory.test_sharedc             C   sh   t d}|d}d|d kr*tdn:t|d  d }t j}| j||t	d|||f d	 d S )
Nzfree -brY   	availabler   z(free does not support 'available' columnrf   r7   z	%s %s 
%s)r   r   )
r   r<   r   rp   r^   r   r   r   r   r   )r   r_   r`   r   r   r/   r/   r0   test_available.  s    

z&TestSystemVirtualMemory.test_availablec          
   C   sd  t dtd D}tjdd*}td t }|j	sDt
| t|d |d }|jdslt
| 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 Q R X W d Q R X d S )Nz/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alwaysrf   r   zpsutil/_pslinux.pyz#memory stats couldn't be determinedcachedrh   r   r   r   r   )r   textwrapdedentencodewarningscatch_warningssimplefilterr   r   calledAssertionErrorassertEqualr?   filenameendswithassertInstrmessager   r   r   rh   r   r   slab)r   r   wsretwr/   r/   r0   test_warnings_on_misses=  s4    	

z/TestSystemVirtualMemory.test_warnings_on_missesc       
   	   C   s   ddl m} ddl m} i }|d4}x,|D ]$}| }t|d d ||d < q,W W d Q R X ||}d|kr|d }t|| | d }	| |	d	 d S )
Nr   )calculate_avail_vmem)open_binaryz/proc/meminforf   i   s   MemAvailable:d   r   )psutil._pslinuxr   r   r<   r^   absZ
assertLess)
r   r   r   ZmemsrE   rF   rG   abZdiff_percentr/   r/   r0   test_avail_old_percentd  s    

&z.TestSystemVirtualMemory.test_avail_old_percentc          
   C   sv   t dtd X}tjdd}t }W d Q R X |js@t	| 
|jd |d }| dt|j W d Q R X d S )Nz/proc/meminfoaL                  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
                T)r   l     " r   z,inactive memory stats couldn't be determined)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r/   r/   r0    test_avail_old_comes_from_kernelw  s    
z8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc          
   C   sv   t dtd X}tjdd}t }W d Q R X |js@t	| 
|jd |d }| dt|j W d Q R X d S )Nz/proc/meminfoa                      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
                    T)r   l    `LG r   z,inactive memory stats couldn't be determined)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r/   r/   r0   test_avail_old_missing_fields  s    

z5TestSystemVirtualMemory.test_avail_old_missing_fieldsc             C   s   t dtd l tdttjdN tj	dd6}t
 }| |jd |d }| d	t|j W d Q R X W d Q R X W d Q R X d S )
Nz/proc/meminfoaT                      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/zoneinfozno such file or directoryT)r   l    `LG r   z,inactive memory stats couldn't be determined)r   r   r   r   r   IOErrorerrnoENOENTr   r   r   r   r   r   r   r   r   )r   r   r   r   r/   r/   r0   test_avail_old_missing_zoneinfo  s    
z7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoc          	      s    fdd}t  trdnd}tj|d|d}t }|js@t| |j	d | |j
d | |jd	 | |jd
 | |jd | |jd | |jd | |jd | |jd W d Q R X d S )Nc                s0   | dkrt td S  | f||S d S )Nz/proc/meminfoa=	                      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
                    )ru   rw   r   r   r   )rx   ry   rz   )r}   r/   r0   r~     s    1zETestSystemVirtualMemory.test_virtual_memory_mocked.<locals>.open_mockzbuiltins.openz__builtin__.openT)r   r   i  i   i   i p  i T  i   i    i X  i   )r:   r   r   r   r   r   r   r   r   rb   rZ   r   r   rh   r   r   r   r   )r   r~   r   r   memr/   )r}   r0   test_virtual_memory_mocked  s    7
z2TestSystemVirtualMemory.test_virtual_memory_mockedN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r      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Q R X d|ko*d|kS )z3Return True if /proc/meminfo provides swap metrics.z/proc/meminfoNz
SwapTotal:z	SwapFree:)r:   read)rE   datar/   r/   r0   meminfo_has_swap_info  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc             C   s"   t  j}t j}| j||tdS )N)r   )re   rb   r   swap_memoryr   r   )r   r   r   r/   r/   r0   r   $  s    
zTestSystemSwapMemory.test_totalc             C   s"   t  j}t j}| j||tdS )N)r   )re   rc   r   r   r   r   )r   r   r   r/   r/   r0   r   *  s    
zTestSystemSwapMemory.test_usedc             C   s"   t  j}t j}| j||tdS )N)r   )re   rZ   r   r   r   r   )r   r   r   r/   r/   r0   r   1  s    
zTestSystemSwapMemory.test_freec          
   C   s   t jddd}tjddx}td t }|js:t| 	t
|d |d }|jdsbt| d	t|j | 	|jd | 	|jd W d Q R X W d Q R X d S )
Nzpsutil._common.openT)r   )r   r   rf   r   zpsutil/_pslinux.pyz9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r   r   r   r   r?   r   r   r   r   r   sinsout)r   r   r   r   r   r/   r/   r0   test_missing_sin_sout8  s    

z*TestSystemSwapMemory.test_missing_sin_soutc          
   C   s   t dttjd}tjddx}td t }|j	s>t
| t|d |d }|jdsft
| d	t|j | |jd | |jd W d Q R X W d Q R X d S )
Nz/proc/vmstatzno such file or directoryT)r   r   rf   r   zpsutil/_pslinux.pyzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   )r   r   r   r   r   r/   r/   r0   test_no_vmstat_mockedG  s    

z*TestSystemSwapMemory.test_no_vmstat_mockedc          	   C   s   |   stdS td}t }W d Q R X |jr:t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   r   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinfor   rb   r   rZ   r   )r   r   swapZcextra   rb   rZ   Zunit_multiplierr/   r/   r0   test_meminfo_against_sysinfoZ  s    

z1TestSystemSwapMemory.test_meminfo_against_sysinfoc          	   C   s,   t dd}t  |jstW d Q R X d S )Nz/proc/meminfo    )r   r   r   r   r   )r   r   r/   r/   r0   #test_emulate_meminfo_has_no_metricsj  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r     s   r   c               @   s   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rL| d| n| d| |dkrn| d| n| d| |d	kr| d
| n| d
| d S )Nz\d+\.\d+\.\d+   r   ro   )r         steal)r   r   r   Zguest)r   r   r   Z
guest_nice)r   	cpu_times_fieldsrefindallosunamerq   rr   r^   r<   r   assertNotIn)r   rG   Z
kernel_verZkernel_ver_infor/   r/   r0   test_fields{  s    
zTestSystemCPUTimes.test_fieldsN)r   r   r   r   r/   r/   r/   r0   r   x  s   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 )TestSystemCPUCountLogicalz/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc          	   C   sV   t d}|  }W d Q R X dt|krRt|dd d }| t | d S )Nz/sys/devices/system/cpu/online-rf   )	r:   r   rk   r   r^   r<   r   r   	cpu_count)r   rE   valuer/   r/   r0   test_against_sysdev_cpu_online  s
    
z8TestSystemCPUCountLogical.test_against_sysdev_cpu_onlinez/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc             C   s0   t d}tdd |D }| t | d S )Nz/sys/devices/system/cpuc             S   s    g | ]}t d |dk	r|qS )zcpu\d+$N)r   search)rO   rL   r/   r/   r0   rQ     s    zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r   listdirr?   r   r   r   )r   Zlscountr/   r/   r0   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)logical)r^   r   r   r   r   )r   numr/   r/   r0   test_against_nproc  s    z,TestSystemCPUCountLogical.test_against_nproclscpuzlscpu utility not availablec             C   s8   t d}tdd |dD }| tjdd| d S )Nzlscpu -pc             S   s   g | ]}| d s|qS )#)r[   )rO   rL   r/   r/   r0   rQ     s    z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rY   T)r   )r   r?   r<   r   r   r   )r   r_   r   r/   r/   r0   test_against_lscpu  s    z,TestSystemCPUCountLogical.test_against_lscpuc          
   C   s  dd l }|j }tjdtd}| |j | |js>ttjddd:}| 	|j  | |j
d | |jd d d W d Q R X td	d
}| }W d Q R X t|}tjd|dd}| |j | W d Q R X td	d}| |j | |j W d Q R X W d Q R X d S )Nr   zpsutil._pslinux.os.sysconf)r   zpsutil._common.openT)r   r   z
/proc/statz/proc/cpuinforb)return_valuer   r   )r   _pslinuxZcpu_count_logicalr   r   r=   r   r   r   assertIsNoneZ
call_count	call_argsr:   r   ru   rw   r   )r   r   originalr   rE   Zcpuinfo_data	fake_filer/   r/   r0   test_emulate_fallbacks  s&    

 
z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r   r   r   r   skipIfr   pathexistsr   r   r   r   r   r   r/   r/   r/   r0   r     s   r   c               @   s6   e Zd Zeed ddd Zdd Zdd Zd	S )
TestSystemCPUCountPhysicalr   zlscpu utility not availablec             C   s`   t d}t }x4|dD ]&}|ds|d}||d  qW | tjddt| d S )Nzlscpu -prY   r   ,rf   F)r   )	r   setr<   r[   addr   r   r   r?   )r   r_   Zcore_idsrF   rG   r/   r/   r0   r     s    

z-TestSystemCPUCountPhysical.test_against_lscpuc          	   C   sP   t j }tjdg d}t j }|js.tW d Q R X |d k	rL| || d S )Nz	glob.glob)r   )r   r   cpu_count_physicalr   r   r   r   r   )r   Zmeth_1r   Zmeth_2r/   r/   r0   test_method_2  s    

z(TestSystemCPUCountPhysical.test_method_2c          
   C   s\   t jdg d0}t jddd}| tj  W d Q R X W d Q R X |jsNt|jsXtd S )Nz	glob.glob)r   zpsutil._common.openT)r   )r   r   r   r   r   r  r   r   )r   m1m2r/   r/   r0   test_emulate_none  s
    $
z,TestSystemCPUCountPhysical.test_emulate_noneN)	r   r   r   r   r   r   r   r  r  r/   r/   r/   r0   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 )TestSystemCPUFrequencyznot supportedc          	      s@    fdd}t jj tjd|dd t s2tW d Q R X d S )Nc                s   |  drdS  | S d S )Nz&/sys/devices/system/cpu/cpufreq/policyF)r[   )r   )orig_existsr/   r0   path_exists_mock  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockzos.path.existsT)r   r   )r   r   r   r   r   r   cpu_freqr   )r   r
  r/   )r	  r0   test_emulate_use_second_file  s
    
z3TestSystemCPUFrequency.test_emulate_use_second_filec          	      s    fdd}g  t jjztjd|dv ttj t }|sFt	 sNt	| 
|jd | 
|jd x0tjddD ] }| 
|jd | 
|jd qxW W d Q R X W d ttj tt X d S )Nc                s,   |  drdS | dkr  d  | S d S )Nz/sys/devices/system/cpu/Fz/proc/cpuinfo)r[   r@   )r   )flagsos_path_existsr/   r0   r
    s
    

zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockzos.path.exists)r   g        T)percpu)r   r   r   r   r   r   r   r   r  r   r   maxmin)r   r
  r   freqr/   )r  r  r0   test_emulate_use_cpuinfo  s     
 
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc          
      s    fdd}t  trdnd}tj||df tjdddL t }| |jd	 |jd
krj| |jd |j	d
kr| |j	d W d Q R X W d Q R X d S )Nc                s   |  dr| drtdS |  dr<| dr<tdS |  drZ| drZtdS | dkrltd	S  | f||S d S )
Nz/scaling_cur_freqz&/sys/devices/system/cpu/cpufreq/policys   500000z/scaling_min_freqs   600000z/scaling_max_freqs   700000z/proc/cpuinfos   cpu MHz		: 500)r   r[   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    









z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockzbuiltins.openz__builtin__.open)r   zos.path.existsT)r   g     @@g        g     @g     @)
r:   r   r   r   r   r  r   currentr  r  )r   r~   r   r  r/   )r}   r0   test_emulate_data  s    

z(TestSystemCPUFrequency.test_emulate_datac                s   fdd}t  trdnd}tj||d tjddd tjd	d
d tjdd}| |d jd |d jdkr| |d jd |d j	dkr| |d j	d | |d jd |d jdkr| |d jd |d j	dkr| |d j	d W d Q R X W d Q R X W d Q R X 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r|drtd
S | dr|drtdS | dkrtdS  | f||S d S )Nz/scaling_cur_freqz'/sys/devices/system/cpu/cpufreq/policy0s   100000z/scaling_min_freqs   200000z/scaling_max_freqs   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000s   500000s   600000z/proc/cpuinfos   cpu MHz		: 100
cpu MHz		: 400)r   r[   ru   rw   )rx   ry   rz   n)r}   r/   r0   r~   9  s,    


















z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockzbuiltins.openz__builtin__.open)r   zos.path.existsT)r   z!psutil._pslinux.cpu_count_logicalr   )r  r   g      Y@g        g      i@g     r@rf   g      y@g     @@g     @)
r:   r   r   r   r   r  r   r  r  r  )r   r~   r   r  r/   )r}   r0   test_emulate_multi_cpu7  s$    
z-TestSystemCPUFrequency.test_emulate_multi_cpuc                s    fdd}t  trdnd}tj||dP tjddd6 tjd	d
d t }| |jd W d Q R X W d Q R X W d Q R X d S )Nc                sR   |  drttjdn6|  dr,tdS | dkr>tdS  | f||S d S )Nz/scaling_cur_freqrN   z/cpuinfo_cur_freqs   200000z/proc/cpuinfos   cpu MHz		: 200)r   r   r   r   ru   rw   )rx   ry   rz   )r}   r/   r0   r~   h  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockzbuiltins.openz__builtin__.open)r   zos.path.existsT)r   z!psutil._pslinux.cpu_count_logicalrf      )r:   r   r   r   r   r  r   r  )r   r~   r   r  r/   )r}   r0   %test_emulate_no_scaling_cur_freq_filee  s    

z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r   r   r   r   r   r   r  r  r  r  r  r/   r/   r/   r0   r    s
   .r  c               @   s   e Zd Zdd Zdd ZdS )TestSystemCPUStatsc             C   s&   t d}t j}| j||dd d S )Nzcontext switchesi  )r   )rm   r   	cpu_statsctx_switchesr   )r   r   r   r/   r/   r0   test_ctx_switches  s    
z$TestSystemCPUStats.test_ctx_switchesc             C   s&   t d}t j}| j||dd d S )N
interruptsi  )r   )rm   r   r  r  r   )r   r   r   r/   r/   r0   test_interrupts  s    
z"TestSystemCPUStats.test_interruptsN)r   r   r   r  r  r/   r/   r/   r0   r  |  s   r  c               @   s"   e Zd Zee ddd ZdS )TestLoadAvgznot supportedc          	   C   s   t  }tdd}|  }W d Q R X | jt|d |d dd | jt|d |d dd | jt|d |d dd d S )Nz/proc/loadavgrr   rf   )r   r   )r   
getloadavgr:   r   r<   r   float)r   r   rE   Z
proc_valuer/   r/   r0   test_getloadavg  s    zTestLoadAvg.test_getloadavgN)r   r   r   r   r   r   r$  r/   r/   r/   r0   r     s   r   c               @   s   e Zd Zdd ZdS )TestSystemNetIfAddrsc             C   s   xt   D ]\}}x|D ]}|jt jkr@| |jt| q|jtj	kr| |jt
| | |jt| |jd k	r| |jt| q| t|d q|jtjkr|jdd }| |t| qW qW d S )Nz0.0.0.0%r   )r   Znet_if_addrsitemsfamilyZAF_LINKr   addressrV   r"   r#   r1   netmaskr3   	broadcastr5   rC   r<   rK   )r   rx   addrsaddrr)  r/   r/   r0   test_ips  s    

zTestSystemNetIfAddrs.test_ipsN)r   r   r   r.  r/   r/   r/   r0   r%    s   r%  c               @   s   e Zd Zdd Zdd ZdS )TestSystemNetIfStatsc          	   C   sx   xrt   D ]b\}}ytd| }W n tk
r:   Y qX | j|jd|k|d | |jtt	
d|d  qW d S )Nzifconfig %sRUNNING)r   z(?i)MTU[: ](\d+)r   )r   net_if_statsr'  r   RuntimeErrorr   isupmtur^   r   r   )r   rx   statsr_   r/   r/   r0   test_against_ifconfig  s    z*TestSystemNetIfStats.test_against_ifconfigc          
   C   sR   xLt   D ]<\}}td| d }| |jt|   W d Q R X qW d S )Nz/sys/class/net/%s/mtur6   )	r   r1  r'  r:   r   r4  r^   r   rk   )r   rx   r5  rE   r/   r/   r0   test_mtu  s    zTestSystemNetIfStats.test_mtuN)r   r   r   r6  r7  r/   r/   r/   r0   r/    s   r/  c               @   s   e Zd Ze dd ZdS )TestSystemNetIOCountersc          	      s   fdd}t jddd}x| D ]\ }y| }W n tk
rN   w$Y nX | 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$W d S )Nc                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 )Nzifconfig %szRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinrf   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   r^   r   r   )Znicr   r_   )rx   r/   r0   ifconfig  s    z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernicnowrapr?  i   )r   r@  r9  i   r:  r;  
   r<  r=  r>  )r   net_io_countersr'  r2  r   r?  r@  r9  r:  r;  r<  r=  r>  )r   rA  Znior5  Zifconfig_retr/   )rx   r0   r6    s.    z-TestSystemNetIOCounters.test_against_ifconfigN)r   r   r   r   r6  r/   r/   r/   r0   r8    s   r8  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_ntop)r   zpsutil._pslinux.supports_ipv6F)r   c             C   sR   y*t  t jt j}| |j |d W n t jk
r@   Y nX tjdd d S )N)z::1r   inet6)kind)	r"   rC   SOCK_STREAMZ
addCleanupclosebinderrorr   net_connections)r   supports_ipv6rD   r.   r/   r/   r0   test_emulate_ipv6_unsupported  s    z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc          	   C   s6   t dtd}tjdd |js(tW d Q R X 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
                unix)rG  )r   r   r   r   rL  r   r   )r   r   r/   r/   r0   test_emulate_unix  s    
z*TestSystemNetConnections.test_emulate_unixN)r   r   r   r   r   r=   rN  rP  r/   r/   r/   r0   rE  	  s   rE  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   sr   dd }xdt jddD ]T}t |j}||j\}}}}| |j| | j|j|td | j|j	|td qW d S )Nc             S   sz   t d|   }|d}|d |d}| d d \}}}}|dkrRd}t|t|t|  }}}||||fS )Nzdf -P -B 1 "%s"rY   r   r8   ZnonerN   )r   rk   r<   popr^   )r   r_   r`   rF   devrb   rc   rZ   r/   r/   r0   df2  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)all)r   )
r   disk_partitions
disk_usage
mountpointr   rb   r   rZ   r   rc   )r   rU  partusagerT  rb   rc   rZ   r/   r/   r0   test_against_df-  s    

z(TestSystemDiskPartitions.test_against_dfc          
   C   s   t dd}| }W d Q R X d|krPxt D ]}|jdkr0P q0W | d n|ttd}t	j
d|ddX}t	j
d	d
gd<}t }|jst|jst|st| |d jd W d Q R X W d Q R X d S )Nz/proc/filesystemsr!  zfszcouldn't find any ZFS partitionz
nodev	zfs
zpsutil._common.openT)r   r   z$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r]  rw)r   r   )r:   r   r   rW  fstypeZfailru   rv   r   r   r   r   r   r   )r   rE   r   rZ  r   r  r  r   r/   r/   r0   test_zfs_fsF  s$    


z$TestSystemDiskPartitions.test_zfs_fsc          
   C   sT   zFt jddd.}| t t  W d Q R X |js:tW d Q R X W d dt_X d S )Nzos.path.realpathz/non/existent)r   z/proc)	r   r   assertRaisesr   r   rW  r   r   PROCFS_PATH)r   r   r/   r/   r0   test_emulate_realpath_fail^  s    
z3TestSystemDiskPartitions.test_emulate_realpath_failN)r   r   r   r   r   hasattrr   r   r\  ra  rd  r/   r/   r/   r0   rQ  *  s   rQ  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   s   t dd tjddd 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 Q R X W d Q R X d S )Nz/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12z!psutil._pslinux.is_storage_deviceT)r   F)rB  rf   r   r   r8   rg   r         rC  )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   r/   r/   r0   test_emulate_kernel_2_4m  s    
z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c          
   C   s   t dd tjddd 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 Q R X W d Q R X d S )Nz/proc/diskstatsz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11z!psutil._pslinux.is_storage_deviceT)r   F)rB  rf   r   r   r8   rg   r   rg  rh  rC  )r   r   r   r   ri  r   rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  )r   r   r/   r/   r0   test_emulate_kernel_2_6_full  s    
z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc          
   C   s   t dd tjddd 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 Q R X W d Q R X d S )Nz/proc/diskstatsz   3    1   hda 1 2 3 4z!psutil._pslinux.is_storage_deviceT)r   F)rB  rf   r   r   r8   r   )r   r   r   r   ri  r   rj  rl  rm  ro  rq  rk  rn  rp  rr  rs  )r   r   r/   r/   r0   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l tjddd}| t|d | |d	 j	d
 | |d j	d
 | |d	 j
d | |d j
d W d Q R X W d Q R X d S )Nz/proc/diskstatsz                    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
                    z!psutil._pslinux.is_storage_deviceF)r   T)perdiskrB  r   nvme0n1rf   Z	nvme0n1p1rg   )r   r   r   r   r   r   ri  r   r?   rj  ro  )r   r   r/   r/   r0   test_emulate_include_partitions  s    

z8TestSystemDiskIoCounters.test_emulate_include_partitionsc          
   C   s   t dtd8 tjddd tjddd}| | W d Q R X W d Q R X dd }t dtdL tjdd	|d
0 tjddd}| |j	d | |j
d W d Q R X W d Q R X d S )Nz/proc/diskstatsz                    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
                    z!psutil._pslinux.is_storage_deviceF)r   )rw  rB  c             S   s   | dkS )Nrx  r/   )rx   r/   r/   r0   is_storage_device  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceT)r   r   rf   rg   )r   r   r   r   r   r   ri  r   r   rj  ro  )r   r   rz  r/   r/   r0   test_emulate_exclude_partitions  s$    


z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc          	   C   sT   dd }t jdd}tjdd|d t jdd}W d Q R X | t|t| d S )Nc             S   s   | dkrdS dS )Nz/proc/diskstatsFTr/   )r   r/   r/   r0   r     s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rw  zpsutil._pslinux.os.path.exists)r   r   )r   ri  r   r   r   r?   )r   r   ZwprocfsZwsysfsr/   r/   r0   test_emulate_use_sysfs  s    z/TestSystemDiskIoCounters.test_emulate_use_sysfsc          	   C   s6   dd }t jdd|d | ttj W d Q R X d S )Nc             S   s   dS )NFr/   )r   r/   r/   r0   r     s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existszpsutil._pslinux.os.path.existsT)r   r   )r   r   rb  NotImplementedErrorr   ri  )r   r   r/   r/   r0   test_emulate_not_impl  s    z.TestSystemDiskIoCounters.test_emulate_not_implN)
r   r   r   rt  ru  rv  ry  r{  r|  r~  r/   r/   r/   r0   rf  j  s   rf  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)rm   r   	boot_timer   r^   )r   r   r   r/   r/   r0   test_boot_time  s    zTestMisc.test_boot_timec          
      s  |   }t| ttj|dd$}|d |d |d W d Q R X zt  fdd}trldnd	}tj	||d
n 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 Q R X | t d | ttjddd | tt d | ttttjddd W d Q R X W d t| t
t X | tjd d S )Nrl   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 | f||S )Nz/proczrejecting access for test)r[   r   r   r   )rx   ry   rz   )r}   r/   r0   r~     s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockzbuiltins.openz__builtin__.open)r   T)r  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
z/proc)
get_testfnr   mkdirr:   r   rA   writer   r   r   r   r   rb  r   r   cpu_percentcpu_times_percentrc  r   sumrr   assertNotEqualshutilrmtree)r   Z	my_procfsrE   r~   r   Zper_cpu_percentZper_cpu_times_percentr/   )r}   r0   test_no_procfs_on_import  sN    




(

z!TestMisc.test_no_procfs_on_importc          	   C   s,  t dtd 8}t  |js(ttjdd t  tjdd W d Q R X t dtd }t }|jszt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 Q R X d S )Nz
/proc/statz                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
                T)r  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   g      Y@)r   r   r   r   r   r  r   r   r  r  r  rr   r   r   user)r   r   r  Zcpu_percent_percpur  Zcpu_times_percent_percpur/   r/   r0   test_cpu_steal_decrease<  s4    

z TestMisc.test_cpu_steal_decreasec          	   C   s8   t jddd }| ttjj |js*tW d Q R X d S )Nzpsutil._common.openT)r   )	r   r   rb  r2  r   r   r  r   r   )r   r   r/   r/   r0   test_boot_time_mockede  s
    
zTestMisc.test_boot_time_mockedc          	   C   s   t jddgd&}| t d jd |js2tW d Q R X t jddgd&}| t d jd |jsntW d Q R X t jddgd&}| t d jd |jstW d Q R X d S )	Nzpsutil._pslinux.cext.users)	giampaolozpts/2z:0g   hATr   )r   r   Z	localhost)r  zpts/2z:0.0g   hATr   )r  zpts/2foog   hATr   r  )r   r   r   r   Zusershostr   r   )r   r   r/   r/   r0   test_users_mockedl  s    


zTestMisc.test_users_mockedc             C   s   |   }t| z|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 dt_X d S )NT)r  z/proc)r  r   r  r   rc  rb  r   r   r   r  rL  rD  r1  rW  NoSuchProcessProcess)r   Ztdirr/   r/   r0   test_procfs_path  s    
zTestMisc.test_procfs_pathc             C   s   t  }|  zjt }| }| t|d t|dd dd j}| 	|j
| t|}|  | |t  W d |  X d S )Nr   c             S   s   | j S )N)id)rL   r/   r/   r0   <lambda>  r   z)TestMisc.test_issue_687.<locals>.<lambda>)keyrf   )r   startr   r  threadsr   r?   sortedr  r  pidZas_dictr   Zpidsstop)r   tpr  tidptr/   r/   r0   test_issue_687  s    
zTestMisc.test_issue_687c          	   C   s6   t dd"}tt st|js(tW d Q R X d S )Nz/proc/%s/statusrN   )r   r   Z
pid_existsr   getpidr   r   )r   r   r/   r/   r0   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  r/   r/   r/   r0   r    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   rf   r&  rN   )r   )	r   r^   r<   rk   replacer   sensors_batterypercentr   )r   r_   Z
acpi_valuer   r/   r/   r0   test_percent  s    
zTestSensorsBattery.test_percentc          	      sj    fdd}t  trdnd}tj||d6}| t jd | t jtj	 |j
s\tW d Q R X d S )Nc                s2   |  ds|  drtdS  | f||S d S )Nz
AC0/onlinez	AC/online   1)r   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r   T)r:   r   r   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   )r   r~   r   r   r/   )r}   r0   test_emulate_power_plugged  s    z-TestSensorsBattery.test_emulate_power_pluggedc          	      sV    fdd}t  trdnd}tj||d"}| t jd |jsHt	W d Q R X d S )Nc                sN   |  ds|  dr"ttjdn(|  dr:ttdS  | f||S d S )Nz
AC0/onlinez	AC/onlinerN   z/statusZcharging)r   r   r   r   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~     s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r   T)
r:   r   r   r   r   r   r  r  r   r   )r   r~   r   r   r/   )r}   r0   test_emulate_power_plugged_2  s    z/TestSensorsBattery.test_emulate_power_plugged_2c          	      sV    fdd}t  trdnd}tj||d"}| t jd |jsHt	W d Q R X d S )Nc                s2   |  ds|  drtdS  | f||S d S )Nz
AC0/onlinez	AC/online   0)r   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r   F)
r:   r   r   r   r   r   r  r  r   r   )r   r~   r   r   r/   )r}   r0   test_emulate_power_not_plugged  s    z1TestSensorsBattery.test_emulate_power_not_pluggedc          	      sV    fdd}t  trdnd}tj||d"}| t jd |jsHt	W d Q R X d S )Nc                sN   |  ds|  dr"ttjdn(|  dr:ttdS  | f||S d S )Nz
AC0/onlinez	AC/onlinerN   z/statusZdischarging)r   r   r   r   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~     s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r   F)
r:   r   r   r   r   r   r  r  r   r   )r   r~   r   r   r/   )r}   r0    test_emulate_power_not_plugged_2  s    z3TestSensorsBattery.test_emulate_power_not_plugged_2c          	      sT    fdd}t  trdnd}tj||d }| t j |jsFt	W d Q R X d S )Nc                sJ   |  ds|  dr"ttjdn$|  dr6tdS  | f||S d S )Nz"/sys/class/power_supply/AC0/onlinez!/sys/class/power_supply/AC/onlinerN   z#/sys/class/power_supply/BAT0/statuss   ???)r[   r   r   r   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    



zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockzbuiltins.openz__builtin__.open)r   )
r:   r   r   r   r   r   r  r  r   r   )r   r~   r   r   r/   )r}   r0   test_emulate_power_undetermined  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc          	   C   s6   t dd"}| t jd |js(tW d Q R X d S )Nz(/sys/class/power_supply/BAT0/energy_fullr  r   )r   r   r   r  r  r   r   )r   r   r/   r/   r0   test_emulate_energy_full_0  s    
z-TestSensorsBattery.test_emulate_energy_full_0c             C   sh   t dttjdL t dttjd. tdd | t jd W d Q R X W d Q R X W d Q R X d S )Nz(/sys/class/power_supply/BAT0/energy_fullrN   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   r/   r/   r0   "test_emulate_energy_full_not_avail  s    
z5TestSensorsBattery.test_emulate_energy_full_not_availc             C   sn   t dttjdR t dttjd4 t dttjd | t j W d Q R X W d Q R X W d Q R X d S )Nz!/sys/class/power_supply/AC/onlinerN   z"/sys/class/power_supply/AC0/onlinez#/sys/class/power_supply/BAT0/status)r   r   r   r   r   r   r  r  )r   r/   r/   r0   test_emulate_no_power'  s    z(TestSensorsBattery.test_emulate_no_powerN)r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   r    s   r  c               @   s   e Zd Zdd ZdS )TestSensorsBatteryEmulatedc          
      sx    fdd}t  trdnd}tjddgd.}tj||d}| t  W d Q R X W d Q R X |jsjt|jsttd S )	Nc                s\   |  drttdS |  dr0ttdS |  drHttdS  | f||S d S )Nz/energy_nowZ60000000z
/power_now0z/energy_fullZ60000001)r   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~   9  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockzbuiltins.openz__builtin__.openz
os.listdirZBAT0)r   )r   )	r:   r   r   r   ZassertIsNotNoner   r  r   r   )r   r~   r   ZmlistdirZmopenr/   )r}   r0   test_it8  s    
"
z"TestSensorsBatteryEmulated.test_itN)r   r   r   r  r/   r/   r/   r0   r  5  s   r  c               @   s   e Zd Zdd Zdd ZdS )TestSensorsTemperaturesc          
      s    fdd}t  trdnd}tj||dj tjddgdN t d	 d
 }| |jd | |jd | |j	d | |j
d W d Q R X W d Q R X d S )Nc                s   |  drttdS |  dr0ttdS |  drDtdS |  drXtdS |  d	rltd
S  | f||S d S )Nz/namerx   z/temp1_labellabelz/temp1_inputs   30000z
/temp1_maxs   40000z/temp1_crits   50000)r   ru   rv   r   rw   )rx   ry   rz   )r}   r/   r0   r~   P  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockzbuiltins.openz__builtin__.open)r   z	glob.globz/sys/class/hwmon/hwmon0/temp1)r   rx   r   r  g      >@g      D@g      I@)r:   r   r   r   r   sensors_temperaturesr   r  r  highcritical)r   r~   r   tempr/   )r}   r0   test_emulate_class_hwmonO  s    z0TestSensorsTemperatures.test_emulate_class_hwmonc          
      s    fdd}dd }t  tr dnd}tj||dj tjdd	|d
N t d d }| |jd | |jd | |j	d | |j
d W d Q R X W d Q R X d S )Nc                sl   |  drtdS |  dr(tdS |  dr@ttdS |  drXttdS  | f||S d S )	NZ0_temps   50000r  s   30000Z0_typer  typerx   )r   ru   rw   rv   r   )rx   ry   rz   )r}   r/   r0   r~   k  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r6d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_tempr/   )r   r/   r/   r0   	glob_mockw  s    zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockzbuiltins.openz__builtin__.open)r   z	glob.globT)r   r   rx   r   rN   g      >@g      I@)r:   r   r   r   r   r  r   r  r  r  r  )r   r~   r  r   r  r/   )r}   r0   test_emulate_class_thermalj  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)r   r   r   r  r  r/   r/   r/   r0   r  L  s   r  c               @   s   e Zd Zdd ZdS )TestSensorsFansc          
      s    fdd}t  trdnd}tj||dN tjddgd2 t d	 d
 }| |jd | |jd W d Q R X W d Q R X d S )Nc                s\   |  drttdS |  dr0ttdS |  drHttdS  | f||S d S )Nz/namerx   z/fan1_labelr  z/fan1_input2000)r   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~     s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockzbuiltins.openz__builtin__.open)r   z	glob.globz/sys/class/hwmon/hwmon2/fan1)r   rx   r   r  i  )	r:   r   r   r   r   Zsensors_fansr   r  r  )r   r~   r   Zfanr/   )r}   r0   r    s    
z!TestSensorsFans.test_emulate_dataN)r   r   r   r  r/   r/   r/   r0   r    s   r  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ee ddd Zdd  Zd!d" Zd#d$ Zd%S )&TestProcessc             C   s   |   }td| }| |}tdd d|  t|j}t	d |
 }|jdd}| j|jtdd	 |D d
d | j|jtdd	 |D d
d | j|jtdd	 |D d
d d S )Nzk
            import time
            with open("%s", "w") as f:
                time.sleep(10)
            c               S   s
   t dS )Nro   )r   r   r/   r/   r/   r0   r    r   z3TestProcess.test_memory_full_info.<locals>.<lambda>z'%s' not in retg?F)Zgroupedc             S   s   g | ]}|j |j qS r/   )Zprivate_dirtyZprivate_clean)rO   rL   r/   r/   r0   rQ     s    z5TestProcess.test_memory_full_info.<locals>.<listcomp>i   )r   c             S   s   g | ]
}|j qS r/   )pss)rO   rL   r/   r/   r0   rQ     s    c             S   s   g | ]
}|j qS r/   )r   )rO   rL   r/   r/   r0   rQ     s    )r  r   r   Zpyrunr   r   r  r  timesleepmemory_full_infomemory_mapsr   ussr  r  r   )r   testfnsrcZsprocr  r   mapsr/   r/   r0   test_memory_full_info  s     


z!TestProcess.test_memory_full_infoc          	   C   sp   t dt  td J}t }| }|j	s8t
| |jd | |jd | |jd W d Q R X d S )Nz/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  i   i <  )r   r   r  r   r   r   r   r  r  r   r   r   r  r  r   )r   r   r  r   r/   r/   r0   test_memory_full_info_mocked  s    

z(TestProcess.test_memory_full_info_mockedzunreliable on PYPYc          	   C   sj  dd }|   }t|d | ||jd W d Q R X t|d | ||jd W d Q R X t|d | ||jd W d Q R X t|d | ||jd W d Q R X t|d | ||jd W d Q R X t|d | ||jd W d Q R X trft| t|d	 | ||jd W d Q R X t| t|d
 | ||jd W d Q R X d S )Nc             S   s\   t  }t t }x:x4| D ](}|jtj| kr:|S t |kr P q W qW tdd S )Nztimeout looking for test file)	r   r  r  r	   
open_filesr   r   abspathr2  )fnamer  Z	giveup_atfiler/   r/   r0   get_test_file  s    
z7TestProcess.test_open_files_mode.<locals>.get_test_filer   r!  r   zr+zw+za+rL   zx+)r  r:   r   moder   r   )r   r  r  r/   r/   r0   test_open_files_mode  s*    z TestProcess.test_open_files_modec          
   C   s   t  }| }t|  d t|jdt|  tjdt	t
jdd }| }|r\t|jsftW d Q R X tjdt	t
jdd }| | g  |jstW d Q R X W d Q R X d S )Nr   zlen(ret) != %izpsutil._pslinux.os.readlinkrN   )r   )r   r  r  r:   r  r   r?   r   r   OSErrorr   r   r   r   EINVALr   )r   r  filesr   r/   r/   r0   test_open_files_file_gone  s    z%TestProcess.test_open_files_file_gonec          
   C   s   t  }| }t|  db t|jdt|  tr<dnd}tj	|t
tjdd }| }|rht|jsrtW d Q R X W d Q R X d S )Nr   zlen(ret) != %izbuiltins.openz__builtin__.openrN   )r   )r   r  r  r:   r  r   r?   r   r   r   r   r   r   r   r   )r   r  r  r   r   r/   r/   r0   test_open_files_fd_gone   s    z#TestProcess.test_open_files_fd_gonec          	   C   sB   t jdi d*}| tjt   |j	s4t
W d Q R X d S )Nz)psutil._pslinux._psposix.get_terminal_map)r   )r   r   r   r   r   r  r   r  terminalr   r   )r   r   r/   r/   r0   test_terminal_mocked2  s    
z TestProcess.test_terminal_mockedc          	   C   s   t  }ttd}tjd|dd$}| | ddg |j	sFt
W d Q R X ttd}tjd|dd&}| | dddg |j	st
W d Q R X d S )	Nzfoo bar zpsutil._common.openT)r   r   r  barz	foo bar  rN   )r   r  ru   rv   r   r   r   r   cmdliner   r   )r   r  r   r   r/   r/   r0   test_cmdline_mocked@  s    zTestProcess.test_cmdline_mockedc          	   C   s   t  }ttd}tjd|dd$}| | ddg |j	sFt
W d Q R X ttd}tjd|dd&}| | dddg |j	st
W d Q R X d S )	Nzfoo bar zpsutil._common.openT)r   r   r  r  z	foo bar  rN   )r   r  ru   rv   r   r   r   r   r  r   r   )r   r  r   r   r/   r/   r0   test_cmdline_spaces_mockedN  s    z&TestProcess.test_cmdline_spaces_mockedc          	   C   sT   t  }ttd}tjd|dd$}| | ddg |j	sFt
W d Q R X d S )Nzfoo bar zpsutil._common.openT)r   r   r  r  )r   r  ru   rv   r   r   r   r   r  r   r   )r   r  r   r   r/   r/   r0   test_cmdline_mixed_separators\  s    z)TestProcess.test_cmdline_mixed_separatorsc          	   C   sF   t jddd. | t  d | t  d W d Q R X d S )Nzpsutil._pslinux.os.readlinkz/home/foo (deleted))r   z	/home/foo)r   r   r   r   r  execwd)r   r/   r/   r0   !test_readlink_path_deleted_mockedf  s    
z-TestProcess.test_readlink_path_deleted_mockedc          	      s    fdd}t  trdnd}tj||d(}t  }|jsBt| 	|g  W d Q R X  fdd}tj||d | 
tjt j W d Q R X d S )Nc                s4   |  dt  r ttjdn | f||S d S )Nz/proc/%s/taskrN   )r[   r   r  r   r   r   )rx   ry   rz   )r}   r/   r0   r~   q  s    z2TestProcess.test_threads_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r   c                s4   |  dt  r ttjdn | f||S d S )Nz/proc/%s/taskrN   )r[   r   r  r   r   EPERM)rx   ry   rz   )r}   r/   r0   r~     s    )r:   r   r   r   r   r  r  r   r   r   rb  AccessDenied)r   r~   r   r   r   r/   )r}   r0   test_threads_mockedl  s    
zTestProcess.test_threads_mockedc             C   s   t jdttjdd}t jdtddd`}t  }|j	sFt
|j	sPt
| |d t jddd | tjt j W d Q R X W d Q R X W d Q R X d S )	Nzpsutil._pslinux.readlinkrN   )r   zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsF)r   )r   r   r  r   r   r   r  r  r  r   r   r   rb  ZombieProcess)r   r  r  r   r/   r/   r0   test_exe_mocked  s    


zTestProcess.test_exe_mockedc          
   C   sZ   t dt  ttjd6}t }| t	 |
  W d Q R X |jsLtW d Q R X d S )Nz/proc/%s/smapsrN   )r   r   r  r   r   r   r   r  rb  r   r  r   r   )r   r   r  r/   r/   r0   test_issue_1014  s    
zTestProcess.test_issue_1014znot supportedc          
   C   s   t jdttjddD}t }|  | tj	}|
tj W d Q R X |jsVtW d Q R X | |jj|j | |jj|  d S )Nzpsutil._pslinux.prlimitrN   )r   )r   r   r  r   ZENOSYSr   r  rx   rb  r  ZrlimitZRLIMIT_NOFILEr   r   r   	exceptionr  )r   r   r  r   r/   r/   r0   test_rlimit_zombie  s    zTestProcess.test_rlimit_zombiec          
   C   s   t jdttjdd@}t }|  | tj	}|
  W d Q R X |jsRtW d Q R X | |jj|j | |jj|  d S )Nzpsutil._pslinux.os.readlinkrN   )r   )r   r   r  r   r   r   r  rx   rb  r  r  r   r   r   r  r  )r   r   r  r   r/   r/   r0   test_cwd_zombie  s    zTestProcess.test_cwd_zombiec          *   C   s\  ddl m} dddddddddddddddd	d
dddddddddddddddddddddddddg*}d| }tdt  | t }| 	|
 d | 	| tj | 	| d | 	| d| t   | }| 	|jd|  | 	|jd|  | 	|jd|  | 	|jd|  | 	|jd|  | 	| d W d Q R X d S )Nr   )CLOCK_TICKSr  z(cat)Z1234567rj   z/proc/%s/statcatrf   r   r   r   r8   rg   rg  )r   r  rA   r   r   r   r  r   r  r   rx   statusSTATUS_ZOMBIEppidZcreate_timer  r   r  systemchildren_userchildren_systemZiowaitZcpu_num)r   r  ry   r{   r  Zcpur/   r/   r0   test_stat_file_parsing  st    z"TestProcess.test_stat_file_parsingc          	   C   s   t dt  td  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 Q R X d S )Nz/proc/%s/statusa                  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   rh  )r   r   r  r   r   r   r   r  r   num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistr>   )r   r  r	  r  r/   r/   r0   test_status_file_parsing  s"    
z$TestProcess.test_status_file_parsingN)r   r   r   r   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r/   r/   r/   r0   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 )N)r   r  proc)clsr/   r/   r0   
setUpClass%  s    z#TestProcessAgainstStatus.setUpClassc          
   C   s|   t jd| jj ^}xJ|D ]B}| }||r|dd }yt|S  t	k
r\   |S X qW t	d| W d Q R X d S )Nz/proc/%s/status	r   zcan't find %r)
r   _psplatform	open_textr  r  rk   r[   	partitionr^   r=   )r   Z	linestartrE   rF   r   r/   r/   r0   read_status_file)  s    


z)TestProcessAgainstStatus.read_status_filec             C   s    |  d}| | j | d S )NzName:)r  r   r  rx   )r   r   r/   r/   r0   	test_name6  s    
z"TestProcessAgainstStatus.test_namec             C   sH   |  d}||dd |d }|dd}| | j | d S )NzState:(rf   )rj   r   )r  findrfindr  r   r  r  )r   r   r/   r/   r0   test_status:  s    
z$TestProcessAgainstStatus.test_statusc             C   s    |  d}| | j | d S )NzPPid:)r  r   r  r  )r   r   r/   r/   r0   	test_ppid@  s    
z"TestProcessAgainstStatus.test_ppidc             C   s    |  d}| | j | d S )NzThreads:)r  r   r  r  )r   r   r/   r/   r0   test_num_threadsD  s    
z)TestProcessAgainstStatus.test_num_threadsc             C   s:   |  d}ttt| dd }| | j | d S )NzUid:rf   r8   )r  rq   rr   r^   r<   r   r  r	  )r   r   r/   r/   r0   	test_uidsH  s    
z"TestProcessAgainstStatus.test_uidsc             C   s:   |  d}ttt| dd }| | j | d S )NzGid:rf   r8   )r  rq   rr   r^   r<   r   r  r  )r   r   r/   r/   r0   	test_gidsM  s    
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   r   r/   r/   r0   test_num_ctx_switchesR  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc             C   sN   |  d}dt|krJtt|d\}}| | j tt	||d  d S )NzCpus_allowed_list:r   rf   )
r  r   rr   r^   r<   r   r  Zcpu_affinityr  r>   )r   r   Zmin_Zmax_r/   r/   r0   test_cpu_affinityY  s
    
z*TestProcessAgainstStatus.test_cpu_affinityc          	   C   sR   |  d}td}| jj  W d Q R X dt|krD|jrNtn
|jsNtd S )NzCpus_allowed_list:zpsutil._pslinux.per_cpu_timesr   )	r  r   r   r  r  r  r   r   r   )r   r   r   r/   r/   r0   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'  r/   r/   r/   r0   r    s   r  c               @   s   e Zd Zdd Zdd ZdS )	TestUtilsc          	   C   s<   t jddd$}| tjdd |js.tW d Q R X d S )Nzos.readlinkzfoo (deleted))r   r  r  )r   r   r   r   r  readlinkr   r   )r   r   r/   r/   r0   test_readlinkr  s    zTestUtils.test_readlinkc          	   C   sx   |   }t|d}|d W d Q R X | tjj|ddd | tjj|ddd | tjj|d d	d
d	 d S )Nwtzfoo F)binaryr  Ts   fooz??r  )fallback)r  r:   r  r   r   r  r  )r   r  rE   r/   r/   r0   test_catw  s    zTestUtils.test_catN)r   r   r   r,  r0  r/   r/   r/   r0   r*  o  s   r*  __main__)run_from_name)]r(  
__future__r   r\   r%   r   globru   r   r   r  r"   r+   r   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   r   r  dirname__file__HEREr*   ZSIOCGIFCONFrS   r2   r4   rm  ZEMPTY_TEMPERATURESr1   r3   r5   rK   rV   re   ri   rm   rs   contextmanagerr   r   r   r   r   r   r   r   r  r  r   r%  r/  r8  rE  rQ  rf  r  r  r  r  r  r  r  r*  r   Zpsutil.tests.runnerr2  r/   r/   r/   r0   <module>   s   	  .]? )- ?  ?
}A  rR
