<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ3                @   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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,j-ej,j.e/Z0dZ1dZ2dZ3erdZ4dd  Z5d!d" Z6d#d$ Z7d%d& Z8d'd( Z9d)d* Z:e*j;e d+G d,d- d-e*j<Z=e*j;e d+G d.d/ d/e*j<Z>e*j;e d+G d0d1 d1e*j<Z?e*j;e d+G d2d3 d3e*j<Z@e*j;e d+G d4d5 d5e*j<ZAe*j;e d+G d6d7 d7e*j<ZBe*j;e d+G d8d9 d9e*j<ZCe*j;e d+e*j;e d:G d;d< d<e*j<ZDe*j;e d+G d=d> d>e*j<ZEe*j;e d+G d?d@ d@e*j<ZFe*j;e d+G dAdB dBe*j<ZGe*j;e d+G dCdD dDe*j<ZHe*j;e d+G dEdF dFe*j<ZIeJdGkre#e/ dS )HzLinux specific tests.    )divisionN)LINUX)PY3)u)
call_until)HAS_BATTERY)HAS_CPU_FREQ)
HAS_RLIMIT)MEMORY_TOLERANCE)mock)PYPY)pyrun)reap_children)reload_module)retry_before_failing)run_test_module_by_name)safe_rmpath)sh)skip_on_not_implemented)TESTFN)
ThreadTask)TRAVIS)unittest)whichi  i  i'  i   c             C   sp   dd l }| d d } tr"t| d} tjtjtj}tj|* tj|j	|j
 ttjd| dd S Q R X d S )Nr      ascii256s      )fcntlr   bytessocketAF_INET
SOCK_DGRAM
contextlibclosingZ	inet_ntoaioctlfilenoSIOCGIFADDRstructpack)ifnamer   s r-   "/usr/lib64/python3.6/test_linux.pyget_ipv4_address@   s    

r/   c                s   dd l }| d d } tr"t| d} tjtjtj}tj|` |j|j	 t
tjd| }trfdd  ndd l}|j dj 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-   r.   ordW   s    zget_mac_address.<locals>.ord c                s   g | ]}d  | qS )z%02x:r-   ).0char)r1   r-   r.   
<listcomp>\   s    z#get_mac_address.<locals>.<listcomp>   r      )r   r   r    r!   r"   r#   r$   r%   r&   r'   SIOCGIFHWADDRr)   r*   __builtin__r1   join)r+   r   r,   infor:   r-   )r1   r.   get_mac_addressM   s    

r=   c              C   st   t d} | jd}xJ|D ]B}|jdr|j \}}}}tjdd}|t|t|t|S qW tddj| dS )zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    zfree -b
ZSwapfreeztotal used freez&can't find 'Swap' in 'free' output:
%sN)r   split
startswithcollections
namedtupleint
ValueErrorr;   )outlinesline_totalusedr?   ntr-   r-   r.   	free_swap_   s    


rM   c              C   s~   t d} | jd}xT|D ]L}|jdrdd |j dd D \}}}}tjdd	}|||||| S qW td
dj| dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    zfree -br>   ZMemc             S   s   g | ]}t |qS r-   )rD   )r3   r0   r-   r-   r.   r5   {   s    z free_physmem.<locals>.<listcomp>r7      r?   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   r@   rA   rB   rC   rE   r;   )rF   rG   rH   rJ   rK   r?   sharedrL   r-   r-   r.   free_physmemn   s    


"rP   c             C   sN   t d}x4|jdD ]&}|j }| |krt|jdd S qW td|  d S )Nz	vmstat -sr>    r   z can't find %r in 'vmstat' output)r   r@   striprD   rE   )statrF   rH   r-   r-   r.   vmstat   s    rT   c              C   s(   t dj } ttt| j d jdS )Nzfree -Vr7   .r8   )r   rR   tuplemaprD   r@   )rF   r-   r-   r.   get_free_version_info   s    rX   z
LINUX onlyc               @   s   e Zd Zdd Zejeo e d k de dd Z	eje
de d	d
 Ze dd Zeje
de dd Zeje
de dd Ze dd Ze dd Z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 j}| j|| d S )Nztotal memoryi   )rT   psutilvirtual_memoryrJ   assertAlmostEqual)selfvmstat_valuepsutil_valuer-   r-   r.   
test_total   s    
z"TestSystemVirtualMemory.test_total      zold free versionc             C   s8   t  }|j}tj j}| j||td|||jf d d S )Nz	%s %s 
%s)deltamsg)rP   rK   rZ   r[   r\   r
   output)r]   r?   
free_valuer_   r-   r-   r.   	test_used   s    
z!TestSystemVirtualMemory.test_usedzunreliable on TRAVISc             C   s*   t dd }tj j}| j||td d S )Nzfree memoryi   )rc   )rT   rZ   r[   r?   r\   r
   )r]   r^   r_   r-   r-   r.   	test_free   s    
z!TestSystemVirtualMemory.test_freec             C   s*   t dd }tj j}| j||td d S )Nzbuffer memoryi   )rc   )rT   rZ   r[   buffersr\   r
   )r]   r^   r_   r-   r-   r.   test_buffers   s    
z$TestSystemVirtualMemory.test_buffersc             C   s*   t dd }tj j}| j||td d S )Nzactive memoryi   )rc   )rT   rZ   r[   activer\   r
   )r]   r^   r_   r-   r-   r.   test_active   s    
z#TestSystemVirtualMemory.test_activec             C   s*   t dd }tj j}| j||td d S )Nzinactive memoryi   )rc   )rT   rZ   r[   inactiver\   r
   )r]   r^   r_   r-   r-   r.   test_inactive   s    
z%TestSystemVirtualMemory.test_inactivec             C   sJ   t  }|j}|dkrtjdtj j}| j||td|||jf d d S )Nr   z%free does not support 'shared' columnz	%s %s 
%s)rc   rd   )	rP   rO   r   SkipTestrZ   r[   r\   r
   re   )r]   r?   rf   r_   r-   r-   r.   test_shared   s    

z#TestSystemVirtualMemory.test_sharedc             C   sh   t d}|jd}d|d kr*tjdn:t|d j d	 }tj j}| j||t	d|||f d d S )
Nzfree -br>   	availabler   z(free does not support 'available' columnr7   z	%s %s 
%s)rc   rd   r8   )
r   r@   r   ro   rD   rZ   r[   rq   r\   r
   )r]   rF   rG   rf   r_   r-   r-   r.   test_available   s    

z&TestSystemVirtualMemory.test_availablec                sn   fdd}t  trdnd}tj|d|d6}tjdd}tjd tj }|j	s\t
| jt|d	 |d
 }|jjdst
| jdt|j | jdt|j | jdt|j | jdt|j | jdt|j | jdt|j | jdt|j | j|jd
 | j|jd
 | j|jd
 | j|jd
 | j|jd
 | j|jd
 W d Q R X W d Q R X d S )Nc                s0   | dkrt jtjdj S  | f||S d S )Nz/proc/meminfoa                      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
                    )ioBytesIOtextwrapdedentencode)nameargskwargs)	orig_openr-   r.   	open_mock   s    	zBTestSystemVirtualMemory.test_warnings_on_misses.<locals>.open_mockzbuiltins.openz__builtin__.openT)createside_effect)recordalwaysr7   r   zpsutil/_pslinux.pyz#memory stats couldn't be determinedcachedrO   rk   rm   ri   rq   )openr   r   patchwarningscatch_warningssimplefilterrZ   r[   calledAssertionErrorassertEquallenfilenameendswithassertInstrmessager   rk   rm   rO   ri   rq   )r]   r|   patch_pointmwsretwr-   )r{   r.   test_warnings_on_misses   s2    

z/TestSystemVirtualMemory.test_warnings_on_missesc       
      C   s   ddl m} ddl m} i }|d4}x,|D ]$}|j }t|d d ||d < q,W W d Q R X ||}d|kr|d }t|| | d }	| j|	d	 d S )
Nr   )calculate_avail_vmem)open_binaryz/proc/meminfor7   i   s   MemAvailable:d   
   )psutil._pslinuxr   r   r@   rD   absZ
assertLess)
r]   r   r   ZmemsfrH   fieldsabZdiff_percentr-   r-   r.   test_avail_old_percent  s    

&z.TestSystemVirtualMemory.test_avail_old_percentc                s    fdd}t  trdnd}tj|d|dX}tjdd}tj }W d Q R X |jsXt	| j
|jd |d
 }| jdt|j W d Q R X d S )Nc                s0   | dkrt jtjdj S  | f||S d S )Nz/proc/meminfoa                      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
                    )rs   rt   ru   rv   rw   )rx   ry   rz   )r{   r-   r.   r|   0  s    zKTestSystemVirtualMemory.test_avail_old_comes_from_kernel.<locals>.open_mockzbuiltins.openz__builtin__.openT)r}   r~   )r   iSd i   r   z,inactive memory stats couldn't be determinedl     " )r   r   r   r   r   r   rZ   r[   r   r   r   rq   r   r   r   )r]   r|   r   r   r   r   r   r-   )r{   r.    test_avail_old_comes_from_kernel-  s    
z8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc                s    fdd}t  trdnd}tj|d|dX}tjdd}tj }W d Q R X |jsXt	| j
|jd |d }| jdt|j W d Q R X d S )Nc                s0   | dkrt jtjdj S  | f||S 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
                    )rs   rt   ru   rv   rw   )rx   ry   rz   )r{   r-   r.   r|   S  s    
zHTestSystemVirtualMemory.test_avail_old_missing_fields.<locals>.open_mockzbuiltins.openz__builtin__.openT)r}   r~   )r   id i   iI r   z,inactive memory stats couldn't be determinedi }l     'L l    `LG )r   r   r   r   r   r   rZ   r[   r   r   r   rq   r   r   r   )r]   r|   r   r   r   r   r   r-   )r{   r.   test_avail_old_missing_fieldsO  s    
z5TestSystemVirtualMemory.test_avail_old_missing_fieldsc                s    fdd}t  trdnd}tj|d|dX}tjdd}tj }W d Q R X |jsXt	| j
|jd |d }| jdt|j W d Q R X d S )Nc                sF   | dkrt jtjdj S | dkr2ttjdn | f||S 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 directory)rs   rt   ru   rv   rw   IOErrorerrnoENOENT)rx   ry   rz   )r{   r-   r.   r|   q  s    zJTestSystemVirtualMemory.test_avail_old_missing_zoneinfo.<locals>.open_mockzbuiltins.openz__builtin__.openT)r}   r~   )r   id i   iI r   z,inactive memory stats couldn't be determinedi }l     'L l    `LG )r   r   r   r   r   r   rZ   r[   r   r   r   rq   r   r   r   )r]   r|   r   r   r   r   r   r-   )r{   r.   test_avail_old_missing_zoneinfon  s    
z7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoN)ra   ra   rb   )__name__
__module____qualname__r`   r   skipIfr   rX   r   rg   r   rh   rj   rl   rn   rp   rr   r   r   r   r   r   r-   r-   r-   r.   rY      s$   	


,"rY   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} | j }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)r   datar-   r-   r.   meminfo_has_swap_info  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc             C   s"   t  j}tj j}| j||tdS )N)rc   )rM   rJ   rZ   swap_memoryr\   r
   )r]   rf   r_   r-   r-   r.   r`     s    
zTestSystemSwapMemory.test_totalc             C   s"   t  j}tj j}| j||tdS )N)rc   )rM   rK   rZ   r   r\   r
   )r]   rf   r_   r-   r-   r.   rg     s    
zTestSystemSwapMemory.test_usedc             C   s"   t  j}tj j}| j||tdS )N)rc   )rM   r?   rZ   r   r\   r
   )r]   rf   r_   r-   r-   r.   rh     s    
zTestSystemSwapMemory.test_freec             C   s   t jddd}tjddx}tjd tj }|js:t| j	t
|d |d }|jjdsbt| jd	t|j | j	|jd | j	|jd W d Q R X W d Q R X d S )
Nzpsutil._pslinux.openT)r}   )r   r   r7   r   zpsutil/_pslinux.pyz9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   sinsout)r]   r   r   r   r   r-   r-   r.   test_missing_sin_sout  s    

z*TestSystemSwapMemory.test_missing_sin_soutc                s    fdd}t  trdnd}tj|d|d}tjddx}tjd tj }|j	sXt
| jt|d	 |d
 }|jjdst
| jdt|j | j|jd
 | j|jd
 W d Q R X W d Q R X d S )Nc                s*   | dkrt tjdn | f||S d S )Nz/proc/vmstatzno such file or directory)r   r   r   )rx   ry   rz   )r{   r-   r.   r|     s    z=TestSystemSwapMemory.test_no_vmstat_mocked.<locals>.open_mockzbuiltins.openz__builtin__.openT)r}   r~   )r   r   r7   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   rZ   r   r   r   r   r   r   r   r   r   r   r   r   )r]   r|   r   r   r   r   r   r-   )r{   r.   test_no_vmstat_mocked  s     

z*TestSystemSwapMemory.test_no_vmstat_mockedc             C   s   | j  stjdS tjd}tj }W d Q R X |j s<tdd l	j
}|j \}}}}}}}||9 }||9 }| j|j| | j|j| d S )Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   )r   r   skipr   r   rZ   r   r   r   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinfor   rJ   r?   )r]   r   swapZcextrI   rJ   r?   Zunit_multiplierr-   r-   r.   test_meminfo_against_sysinfo  s    

z1TestSystemSwapMemory.test_meminfo_against_sysinfoc          	      sN    fdd}t  trdnd}tj|d|d}tj  |js@tW d Q R X d S )Nc                s&   | dkrt jdS  | f||S d S )Nz/proc/meminfo    )rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s    
zKTestSystemSwapMemory.test_emulate_meminfo_has_no_metrics.<locals>.open_mockzbuiltins.openz__builtin__.openT)r}   r~   )r   r   r   r   rZ   r   r   r   )r]   r|   r   r   r-   )r{   r.   #test_emulate_meminfo_has_no_metrics  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)r   r   r   staticmethodr   r`   r   rg   rh   r   r   r   r   r-   r-   r-   r.   r     s   r   c               @   s&  e Zd Zejeddd Zejejj	d ddd Z
ejejj	d d	d
d Zejed ddd Zejed ddd Zdd Zdd Zeje ddd Zejedeje ddd Zeje ddd Zeje dd d! Zejedeje dd"d# Zd$S )%TestSystemCPUzunknown failure on travisc             C   s   t j j}tjdtj d d }ttt	|j
d}|dkrL| jd| n| jd| |dkrn| jd	| n| jd	| |dkr| jd| n| jd| d S )Nz\d+\.\d+\.\d+   r   rU         Zstealr   Zguestra   Z
guest_nice)r   r   r   )r   r   r   )ra   r   r   )rZ   	cpu_times_fieldsrefindallosunamerV   rW   rD   r@   r   assertNotIn)r]   r   Z
kernel_verZkernel_ver_infor-   r-   r.   test_cpu_times  s    
zTestSystemCPU.test_cpu_timesz/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc          
   C   sV   t d}|j j }W d Q R X dt|krRt|jdd d }| jtj | d S )Nz/sys/devices/system/cpu/online-r7   )	r   r   rR   r   rD   r@   r   rZ   	cpu_count)r]   r   valuer-   r-   r.   *test_cpu_count_logical_w_sysdev_cpu_online  s
    
z8TestSystemCPU.test_cpu_count_logical_w_sysdev_cpu_onlinez/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc             C   s0   t jd}tdd |D }| jtj | d S )Nz/sys/devices/system/cpuc             S   s    g | ]}t jd |dk	r|qS )zcpu\d+$N)r   search)r3   r0   r-   r-   r.   r5   %  s    zITestSystemCPU.test_cpu_count_logical_w_sysdev_cpu_num.<locals>.<listcomp>)r   listdirr   r   rZ   r   )r]   Zlscountr-   r-   r.   'test_cpu_count_logical_w_sysdev_cpu_num!  s    
z5TestSystemCPU.test_cpu_count_logical_w_sysdev_cpu_numZnprocznproc utility not availablec             C   s$   t td}| jtjdd| d S )Nznproc --allT)logical)rD   r   r   rZ   r   )r]   numr-   r-   r.   test_cpu_count_logical_w_nproc(  s    z,TestSystemCPU.test_cpu_count_logical_w_nprocZlscpuzlscpu utility not availablec             C   s8   t d}tdd |jdD }| jtjdd| d S )Nzlscpu -pc             S   s   g | ]}|j d s|qS )#)rA   )r3   r0   r-   r-   r.   r5   0  s    z@TestSystemCPU.test_cpu_count_logical_w_lscpu.<locals>.<listcomp>r>   T)r   )r   r   r@   r   rZ   r   )r]   rF   r   r-   r-   r.   test_cpu_count_logical_w_lscpu-  s    z,TestSystemCPU.test_cpu_count_logical_w_lscpuc       	   &      s<  dd l }|jj }tjdtd}| j|jj | |js@ttjddd:}| j	|jj  | j|j
d | j|jd d d W d Q R X td	d
}|j }W d Q R X tj|}tjd|dd}| j|jj | W d Q R X  fdd}t trdnd}tj||dd | j|jj | W d Q R X W d Q R X d S )Nr   zpsutil._pslinux.os.sysconf)r~   zpsutil._pslinux.openT)r}   r   z
/proc/statz/proc/cpuinforb)return_valuer}   c                s(   | j drtjdS  | f||S d S )Nz/proc/cpuinfor   )rA   rs   rt   )rx   ry   rz   )r{   r-   r.   r|   P  s    

z>TestSystemCPU.test_cpu_count_logical_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   r}   )r   _pslinuxZcpu_count_logicalr   r   rE   r   r   r   assertIsNoneZ
call_count	call_argsr   r   rs   rt   r   )	r]   rZ   originalr   r   Zcpuinfo_data	fake_filer|   r   r-   )r{   r.   test_cpu_count_logical_mocked3  s*    

 
z+TestSystemCPU.test_cpu_count_logical_mockedc          	   C   s8   t jddd }| jtjj  |js*tW d Q R X d S )Nzpsutil._pslinux.openT)r}   )r   r   r   rZ   r   Zcpu_count_physicalr   r   )r]   r   r-   r-   r.   test_cpu_count_physical_mocked[  s    z,TestSystemCPU.test_cpu_count_physical_mockedznot supportedc          	   C   s,   t jdg d | jtj  W d Q R X d S )Nzpsutil._pslinux.glob.glob)r   )r   r   r   rZ   cpu_freq)r]   r-   r-   r.   test_cpu_freq_no_resultb  s    z%TestSystemCPU.test_cpu_freq_no_resultzfails on Travisc          
      sT    fdd}g  t j tjd|dd" tj s6t| jt d W d Q R X d S )Nc                s.   | j dr jd  g S  jd  | S d S )Nz&/sys/devices/system/cpu/cpufreq/policy)rA   append)pattern)flags	orig_globr-   r.   	glob_mockk  s
    


z>TestSystemCPU.test_cpu_freq_use_second_file.<locals>.glob_mockzpsutil._pslinux.glob.globT)r~   r}   r   )globr   r   rZ   r   r   r   r   )r]   r   r-   )r   r   r.   test_cpu_freq_use_second_fileg  s    
z+TestSystemCPU.test_cpu_freq_use_second_filec                s    fdd}t  trdnd}tj||dT tjddgd8 tj }| j|jd	 | j|jd
 | j|j	d W d Q R X W d Q R X d S )Nc                sP   | j drtjdS | j dr(tjdS | j dr<tjdS  | f||S d S )Nz/scaling_cur_freqs   500000z/scaling_min_freqs   600000z/scaling_max_freqs   700000)r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|   |  s    





z;TestSystemCPU.test_cpu_freq_emulate_data.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   z	glob.globz'/sys/devices/system/cpu/cpufreq/policy0)r   g     @@g     @g     @)
r   r   r   r   rZ   r   r   currentminmax)r]   r|   r   freqr-   )r{   r.   test_cpu_freq_emulate_dataz  s    
z(TestSystemCPU.test_cpu_freq_emulate_datac                s    fdd}t  trdnd}dddg}tj||dR tjd	|d
8 tj }| j|jd | j|jd | j|j	d W d Q R X W d Q R X d S )Nc                sP   | j drtjdS | j dr(tjdS | j dr<tjdS  | f||S d S )Nz/scaling_cur_freqs   100000z/scaling_min_freqs   200000z/scaling_max_freqs   300000)r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s    





z@TestSystemCPU.test_cpu_freq_emulate_multi_cpu.<locals>.open_mockzbuiltins.openz__builtin__.openz'/sys/devices/system/cpu/cpufreq/policy0z'/sys/devices/system/cpu/cpufreq/policy1z'/sys/devices/system/cpu/cpufreq/policy2)r~   z	glob.glob)r   g      Y@g      i@g     r@)
r   r   r   r   rZ   r   r   r   r   r   )r]   r|   r   policiesr   r-   )r{   r.   test_cpu_freq_emulate_multi_cpu  s    
z-TestSystemCPU.test_cpu_freq_emulate_multi_cpuc                s    fdd}t  trdnd}dddg}tj||d6 tjd	|d
 tj }| j|jd W d Q R X W d Q R X  fdd}t  trdnd}tj||d. tjd	|d
 | jt	tj W d Q R X W d Q R X d S )Nc                s@   | j drttjdn$| j dr,tjdS  | f||S d S )Nz/scaling_cur_freqr2   z/cpuinfo_cur_freqs   200000)r   r   r   r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s
    


zGTestSystemCPU.test_cpu_freq_no_scaling_cur_freq_file.<locals>.open_mockzbuiltins.openz__builtin__.openz'/sys/devices/system/cpu/cpufreq/policy0z'/sys/devices/system/cpu/cpufreq/policy1z'/sys/devices/system/cpu/cpufreq/policy2)r~   z	glob.glob)r      c                sD   | j drttjdn(| j dr0ttjdn | f||S d S )Nz/scaling_cur_freqr2   z/cpuinfo_cur_freq)r   r   r   r   )rx   ry   rz   )r{   r-   r.   r|     s
    

)
r   r   r   r   rZ   r   r   r   assertRaisesNotImplementedError)r]   r|   r   r   r   r-   )r{   r.   &test_cpu_freq_no_scaling_cur_freq_file  s     "z4TestSystemCPU.test_cpu_freq_no_scaling_cur_freq_fileN)r   r   r   r   r   r   r   r   pathexistsr   r   r   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   r     s    (

r   c               @   s4   e Zd Zejeddd Zejeddd ZdS )TestSystemCPUStatszfails on Travisc             C   s&   t d}tj j}| j||dd d S )Nzcontext switchesi  )rc   )rT   rZ   	cpu_statsZctx_switchesr\   )r]   r^   r_   r-   r-   r.   test_ctx_switches  s    
z$TestSystemCPUStats.test_ctx_switchesc             C   s&   t d}tj j}| j||dd d S )N
interruptsi  )rc   )rT   rZ   r   r   r\   )r]   r^   r_   r-   r-   r.   test_interrupts  s    
z"TestSystemCPUStats.test_interruptsN)r   r   r   r   r   r   r   r   r-   r-   r-   r.   r     s   r   c               @   s|   e Zd Zdd Zdd Ze dd Zeje	d deje
d	d
d Zejdedejddddd Zdd ZdS )TestSystemNetworkc             C   sj   xdt j j D ]T\}}xJ|D ]B}|jt jkr@| j|jt| q|jtj	kr| j|jt
| qW qW d S )N)rZ   net_if_addrsitemsZfamilyZAF_LINKr   Zaddressr=   r!   r"   r/   )r]   rx   ZaddrsZaddrr-   r-   r.   test_net_if_addrs_ips  s    
z'TestSystemNetwork.test_net_if_addrs_ipsc             C   sb   x\t j j D ]L\}}ytd| }W n tk
r:   Y qX | j|jttj	d|d  qW d S )Nzifconfig %sz(?i)MTU[: ](\d+)r   )
rZ   net_if_statsr   r   RuntimeErrorr   ZmturD   r   r   )r]   rx   statsrF   r-   r-   r.   test_net_if_stats  s    z#TestSystemNetwork.test_net_if_statsc                s   fdd}t jddd}x|j 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jd|d |d< ttjd|d |d< ttjd|d |d< ttjd|d	 |d
< ttjd|d |d< ttjd|d	 |d< ttjd|d |d< ttjd|d |d< |S )Nzifconfig %szRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinr7   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   rD   r   r   )Znicr   rF   )rx   r-   r.   ifconfig  s    z8TestSystemNetwork.test_net_io_counters.<locals>.ifconfigTF)Zpernicnowrapr  i   rN   )rc   r  r   r   r  r   r  r  r  i   i   )rZ   net_io_countersr   r   r\   r  r  r   r   r  r  r  r  )r]   r  Znior   Zifconfig_retr-   )rx   r.   test_net_io_counters  s.    z&TestSystemNetwork.test_net_io_countersZipz'ip' utility not availablezskipped on Travisc             C   s   t dj }dd tj j D }d}xL|jdD ]>}|j }tjd|r2|d7 }|jdd j }| j|| q2W | j	t
||d	tj||f d
 d S )Nzip addrc             S   s   g | ]}d |kr|qS ):r-   )r3   r0   r-   r-   r.   r5   2  s    z7TestSystemNetwork.test_net_if_names.<locals>.<listcomp>r   r>   z^\d+:r7   r  z	%s
---
%s)rd   )r   rR   rZ   r   keysr@   r   r   r   r   r   pprintZpformat)r]   rF   ZnicsfoundrH   rx   r-   r-   r.   test_net_if_names.  s    z#TestSystemNetwork.test_net_if_namesz psutil._pslinux.socket.inet_ntop)r~   zpsutil._pslinux.supports_ipv6F)r   c             C   sR   y*t j t jt j}| j|j |jd W n t jk
r@   Y nX tjdd d S )N::1r   Zinet6)kind)r  r   )	r!   ZAF_INET6ZSOCK_STREAM
addCleanupcloseZbinderrorrZ   net_connections)r]   Zsupports_ipv6Z	inet_ntopr,   r-   r-   r.   %test_net_connections_ipv6_unsupported=  s    z7TestSystemNetwork.test_net_connections_ipv6_unsupportedc          
      sP    fdd}t  trdnd}tj||d}tjdd |jsBtW d Q R X d S )Nc                s,   | dkrt jtjdS  | f||S d S )Nz/proc/net/unixaB                      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
                    )rs   StringIOru   rv   )rx   ry   rz   )r{   r-   r.   r|   J  s    z@TestSystemNetwork.test_net_connections_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   Zunix)r  )r   r   r   r   rZ   r  r   r   )r]   r|   r   r   r-   )r{   r.   test_net_connections_mockedI  s    z-TestSystemNetwork.test_net_connections_mockedN)r   r   r   r   r   r   r
  r   r   r   r   r  r   r   rE   r  r  r-   r-   r-   r.   r     s   	*r   c               @   sN   e Zd Zejeed de dd Zdd Z	dd Z
d	d
 Zdd ZdS )TestSystemDisksstatvfszos.statvfs() not availablec             C   s   dd }xt jddD ]|}t j|j}||j\}}}}| j|j| t|j| d	krl| jd|j|f  t|j	| dkr| jd|j	|f  qW d S )Nc             S   sz   t d|  j }|jd}|jd |jd}|j d d \}}}}|dkrRd}t|t|t|  }}}||||fS )Nzdf -P -B 1 "%s"r>   r      Znoner2   )r   rR   r@   poprD   )r   rF   rG   rH   devrJ   rK   r?   r-   r-   r.   dfi  s    


z:TestSystemDisks.test_disk_partitions_and_usage.<locals>.dfF)allr   i   zpsutil=%s, df=%si (  i   i (  i   )
rZ   disk_partitionsZ
disk_usageZ
mountpointr   rJ   r   r?   failrK   )r]   r  partZusager  rJ   rK   r?   r-   r-   r.   test_disk_partitions_and_usaged  s    z.TestSystemDisks.test_disk_partitions_and_usagec             C   s   t dd}|j }W d Q R X d|krPxtj D ]}|jdkr0P q0W | jd n|tjtd}t	j
d|ddX}t	j
d	dgd<}tj }|jst|jst|st| j|d jd W d Q R X W d Q R X d S )Nz/proc/filesystemsrzfszcouldn't find any ZFS partitionz
nodev	zfs
zpsutil._pslinux.openT)r   r}   z$psutil._pslinux.cext.disk_partitions	/dev/sdb3/rw)r   r   )r&  r'  r%  r(  )r   r   rZ   r   Zfstyper!  rs   r  r   r   r   r   r   r   )r]   r   r   r"  r   m1m2r   r-   r-   r.   test_disk_partitions_mocked~  s$    


z+TestSystemDisks.test_disk_partitions_mockedc                s    fdd}t  trdnd}tj||d}tjdd}|jsBt| j|j	d | j|j
d	 | j|jd
t  | j|jd | j|jd | j|jd | j|jdt  | j|jd | j|jd W d Q R X d S )Nc                sB   | dkrt jtjdS | dkr.t jtdS  | f||S d S )Nz/proc/partitionszu                    major minor  #blocks  name

                       8        0  488386584 hda
                    z/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12)rs   r  ru   rv   r   )rx   ry   rz   )r{   r-   r.   r|     s    
zJTestSystemDisks.test_disk_io_counters_kernel_2_4_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   F)r  r7   r   ra   r  rN   r         r   )r   r   r   r   rZ   disk_io_countersr   r   r   
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   r   r-   )r{   r.   'test_disk_io_counters_kernel_2_4_mocked  s    
z7TestSystemDisks.test_disk_io_counters_kernel_2_4_mockedc                s    fdd}t  trdnd}tj||d}tjdd}|jsBt| j|j	d | j|j
d	 | j|jd
t  | j|jd | j|jd | j|jd | j|jdt  | j|jd | j|jd W d Q R X d S )Nc                sB   | dkrt jtjdS | dkr.t jtdS  | f||S d S )Nz/proc/partitionszu                    major minor  #blocks  name

                       8        0  488386584 hda
                    z/proc/diskstatsz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11)rs   r  ru   rv   r   )rx   ry   rz   )r{   r-   r.   r|     s    
zOTestSystemDisks.test_disk_io_counters_kernel_2_6_full_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   F)r  r7   r   ra   r  rN   r   r,  r-  r   )r   r   r   r   rZ   r.  r   r   r   r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  )r]   r|   r   r   r   r-   )r{   r.   ,test_disk_io_counters_kernel_2_6_full_mocked  s    
z<TestSystemDisks.test_disk_io_counters_kernel_2_6_full_mockedc                s    fdd}t  trdnd}tj||d}tjdd}|jsBt| j|j	d | j|j
d	t  | j|jd
 | j|jdt  | j|jd | j|jd | j|jd | j|jd | j|jd W d Q R X d S )Nc                sB   | dkrt jtjdS | dkr.t jtdS  | f||S d S )Nz/proc/partitionszu                    major minor  #blocks  name

                       8        0  488386584 hda
                    z/proc/diskstatsz   3    1   hda 1 2 3 4)rs   r  ru   rv   r   )rx   ry   rz   )r{   r-   r.   r|     s    
zRTestSystemDisks.test_disk_io_counters_kernel_2_6_limited_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   F)r  r7   r   ra   r  r   )r   r   r   r   rZ   r.  r   r   r   r/  r1  r2  r4  r6  r0  r3  r5  r7  r8  )r]   r|   r   r   r   r-   )r{   r.   /test_disk_io_counters_kernel_2_6_limited_mocked  s    
z?TestSystemDisks.test_disk_io_counters_kernel_2_6_limited_mockedN)r   r   r   r   r   hasattrr   r   r#  r+  r9  r:  r;  r-   r-   r-   r.   r  a  s    r  c               @   sV   e Zd Zdd Zejddd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd ZdS )TestMiscc             C   s(   t d}tj }| jt|t| d S )Nz	boot time)rT   rZ   	boot_timer   rD   )r]   r^   r_   r-   r-   r.   test_boot_time  s    zTestMisc.test_boot_timezpsutil.traceback.print_excc          "      s  t j }ttjj|dd$}|jd |jd |jd W d Q R X zt  fdd}trbdnd	}tj	||d
x t
t |jst| jttj | jttjdd | jttj | jttjdd | jttj | jttjdd |t_| jtj d | jttj d tjdd}| jt|d tjdd}| jttt|d ttjj|dd$}|jd |jd |jd W d Q R X | jtj d | jttjddd | jttj d | jttttjddd W d Q R X W d tj| t
t X | jtjd d S )NrS   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&   | j drttjd | f||S )Nz/proczrejecting access for test)rA   r   r   r   )rx   ry   rz   )r{   r-   r.   r|     s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   T)percpur   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)tempfilemkdtempr   r   r   r;   writer   r   r   r   rZ   r   r   r   r   r   Zcpu_percentZcpu_times_percentPROCFS_PATHr   sumrW   ZassertNotEqualshutilZrmtree)r]   tbZ	my_procfsr   r|   r   Zper_cpu_percentZper_cpu_times_percentr-   )r{   r.   test_no_procfs_on_import  sN    




(

z!TestMisc.test_no_procfs_on_importc          
   C   s8   t jddd }| jttjj |js*tW d Q R X d S )Nzpsutil._pslinux.openT)r}   )	r   r   r   r   rZ   r   r>  r   r   )r]   r   r-   r-   r.   test_boot_time_mockedD  s
    
zTestMisc.test_boot_time_mockedc             C   s   t jddgd&}| jtj d	 jd
 |js2tW d Q R X t jddgd&}| jtj d	 jd
 |jsntW d Q R X t jddgd&}| jtj d	 jd |jstW d Q R X d S )Nzpsutil._pslinux.cext.users	giampaolopts/2:0   hATr   )r   r   Z	localhost:0.0foo)rJ  rK  rL  rM  Tr   )rJ  rK  rN  rM  Tr   )rJ  rK  rO  rM  Tr   )r   r   r   rZ   Zusershostr   r   )r]   r   r-   r-   r.   test_users_mockedK  s       zTestMisc.test_users_mockedc             C   s   t j }z|t_| jttj | jttj | jttjdd | jttj | jttj	 | jttj
 | jttj | jttj | jttj | jtjtj W d dt_tj| X d S )NT)r@  z/proc)rA  rB  rZ   rD  r   r   r[   r   r>  r  r	  r   r.  r   ZNoSuchProcessProcessr   rmdir)r]   Ztdirr-   r-   r.   test_procfs_path_  s    zTestMisc.test_procfs_pathc          	      sP    fdd}g  t trdnd}tj||d tj   sBtW d Q R X d S )Nc                sJ   t rt| tr| j } d| kr6 jd  ttjdn| f||S d S )NZhw_sector_sizer2   )r   
isinstancer    decoder   r   r   r   )rx   ry   rz   )flagr{   r-   r.   r|   u  s    
z1TestMisc.test_sector_size_mock.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )r   r   r   r   rZ   r.  r   )r]   r|   r   r-   )rW  r{   r.   test_sector_size_mockr  s    	zTestMisc.test_sector_size_mockc          
   C   sn   t  }|j  zPtj }|j d j}tj| s:t|tj|}|j  | j	|tj
  W d |j  X d S )Nr7   )r   startrZ   rR  threadsid
pid_existsr   Zas_dictr   Zpidsstop)r]   tptidZptr-   r-   r.   test_issue_687  s    
zTestMisc.test_issue_687c          	      sL    fdd}t  trdnd}tj||d tjtj s>tW d Q R X d S )Nc                s2   | dt j  krtjtdS  | f||S d S )Nz/proc/%s/statusr2   )r   getpidrs   r  r   )rx   ry   rz   )r{   r-   r.   r|     s    z:TestMisc.test_pid_exists_no_proc_status.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )	r   r   r   r   rZ   r\  r   rb  r   )r]   r|   r   r-   )r{   r.   test_pid_exists_no_proc_status  s
    z'TestMisc.test_pid_exists_no_proc_statusN)r   r   r   r?  r   r   rH  rI  rQ  rT  rX  ra  rc  r-   r-   r-   r.   r=    s   >r=  z
no batteryc               @   s   e Zd Zejed ddd Zej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d Zdd ZdS )TestSensorsBatteryZacpizacpi utility not availablec             C   sD   t d}t|jdd j jdd}tj j}| j||dd d S )Nzacpi -b,r7   %r2   )rc   )	r   rD   r@   rR   replacerZ   sensors_batterypercentr\   )r]   rF   Z
acpi_valuer_   r-   r-   r.   test_percent  s    
zTestSensorsBattery.test_percentc             C   sT   t d}d|j krtjdS d|kr,d}nd|jdd k}| jtj j| d S )	Nzacpi -bunknownzacpi output not reliablezdischarging at zero rateTZChargingr>   r   )	r   lowerr   r   r@   r   rZ   rh  power_plugged)r]   rF   Zpluggedr-   r-   r.   test_power_plugged  s    
z%TestSensorsBattery.test_power_pluggedc          
      sj    fdd}t  trdnd}tj||d6}| jtj jd | jtj jtj	 |j
s\tW d Q R X d S )Nc                s2   | j ds| j drtjdS  | f||S d S )Nz
AC0/onlinez	AC/online   1)r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   T)r   r   r   r   r   rZ   rh  rm  ZsecsleftZPOWER_TIME_UNLIMITEDr   r   )r]   r|   r   r   r-   )r{   r.   test_emulate_power_plugged  s    z-TestSensorsBattery.test_emulate_power_pluggedc          
      sV    fdd}t  trdnd}tj||d"}| jtj jd |jsHt	W d Q R X d S )Nc                sN   | j ds| j dr"ttjdn(| j dr:tjtdS  | f||S d S )Nz
AC0/onlinez	AC/onliner2   z/statusZcharging)r   r   r   r   rs   r  r   )rx   ry   rz   )r{   r-   r.   r|     s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   T)
r   r   r   r   r   rZ   rh  rm  r   r   )r]   r|   r   r   r-   )r{   r.   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"}| jtj jd |jsHt	W d Q R X d S )Nc                s2   | j ds| j drtjdS  | f||S d S )Nz
AC0/onlinez	AC/online   0)r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   F)
r   r   r   r   r   rZ   rh  rm  r   r   )r]   r|   r   r   r-   )r{   r.   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"}| jtj jd |jsHt	W d Q R X d S )Nc                sN   | j ds| j dr"ttjdn(| j dr:tjtdS  | f||S d S )Nz
AC0/onlinez	AC/onliner2   z/statusZdischarging)r   r   r   r   rs   r  r   )rx   ry   rz   )r{   r-   r.   r|     s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   F)
r   r   r   r   r   rZ   rh  rm  r   r   )r]   r|   r   r   r-   )r{   r.    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 }| jtj j |jsFt	W d Q R X d S )Nc                sJ   | j ds| j dr"ttjdn$| j dr6tjdS  | f||S d S )Nz"/sys/class/power_supply/AC0/onlinez!/sys/class/power_supply/AC/onliner2   z#/sys/class/power_supply/BAT0/statuss   ???)rA   r   r   r   rs   rt   )rx   ry   rz   )r{   r-   r.   r|     s    



zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )
r   r   r   r   r   rZ   rh  rm  r   r   )r]   r|   r   r   r-   )r{   r.   test_emulate_power_undetermined  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc          	      sR    fdd}t  trdnd}tj||d}| jtj  |jsDtW d Q R X d S )Nc                s6   | j ds| j dr"ttjdn | f||S d S )Nz'/sys/class/power_supply/BAT0/energy_nowz'/sys/class/power_supply/BAT0/charge_nowr2   )rA   r   r   r   )rx   ry   rz   )r{   r-   r.   r|     s    

z@TestSensorsBattery.test_emulate_no_base_files.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )	r   r   r   r   r   rZ   rh  r   r   )r]   r|   r   r   r-   )r{   r.   test_emulate_no_base_files  s    z-TestSensorsBattery.test_emulate_no_base_filesc          
      sV    fdd}t  trdnd}tj||d"}| jtj jd |jsHt	W d Q R X d S )Nc                s(   | j drtjdS  | f||S d S )Nz(/sys/class/power_supply/BAT0/energy_fullrr  )rA   rs   rt   )rx   ry   rz   )r{   r-   r.   r|   &  s    

z@TestSensorsBattery.test_emulate_energy_full_0.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   r   )
r   r   r   r   r   rZ   rh  ri  r   r   )r]   r|   r   r   r-   )r{   r.   test_emulate_energy_full_0$  s    z-TestSensorsBattery.test_emulate_energy_full_0c          
      sV    fdd}t  trdnd}tj||d"}| jtj jd |jsHt	W d Q R X d S )Nc                sR   d}d}| j |s| j |r*ttjdn$| j dr>tjdS  | f||S d S )Nz(/sys/class/power_supply/BAT0/energy_fullz(/sys/class/power_supply/BAT0/charge_fullr2   z%/sys/class/power_supply/BAT0/capacitys   88)rA   r   r   r   rs   rt   )rx   ry   rz   Zenergy_fullZcharge_full)r{   r-   r.   r|   5  s    

zHTestSensorsBattery.test_emulate_energy_full_not_avail.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   X   )
r   r   r   r   r   rZ   rh  ri  r   r   )r]   r|   r   r   r-   )r{   r.   "test_emulate_energy_full_not_avail2  s    
z5TestSensorsBattery.test_emulate_energy_full_not_availc          	      sD    fdd}t jj tjd|d}tj  |js6tW d Q R X d S )Nc                s   | j drdS  | S d S )Nz"/sys/class/power_supply/AC0/onlineF)rA   )rx   )orig_path_existsr-   r.   path_exists_mockG  s    
zGTestSensorsBattery.test_emulate_no_ac0_online.<locals>.path_exists_mockzpsutil._pslinux.os.path.exists)r~   )	r   r   r   r   r   rZ   rh  r   r   )r]   r{  r   r-   )rz  r.   test_emulate_no_ac0_onlineE  s    
z-TestSensorsBattery.test_emulate_no_ac0_onlinec          	      sT    fdd}t  trdnd}tj||d }| jtj j |jsFt	W d Q R X d S )Nc                s@   | j ds| j ds| j dr,ttjdn | f||S d S )Nz!/sys/class/power_supply/AC/onlinez"/sys/class/power_supply/AC0/onlinez#/sys/class/power_supply/BAT0/statusr2   )rA   r   r   r   )rx   ry   rz   )r{   r-   r.   r|   U  s
    


z;TestSensorsBattery.test_emulate_no_power.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )
r   r   r   r   r   rZ   rh  rm  r   r   )r]   r|   r   r   r-   )r{   r.   test_emulate_no_powerS  s    z(TestSensorsBattery.test_emulate_no_powerN)r   r   r   r   r   r   rj  rn  rp  rq  rs  rt  ru  rv  rw  ry  r|  r}  r-   r-   r-   r.   rd    s   rd  c               @   s(   e Zd Zejeddd Zdd ZdS )TestSensorsTemperatureszunreliable on TRAVISc                s    fdd}t  trdnd}tj||dN}tjdd6}| jtj i  |j	sTt
| jdt|d	 j W d Q R X W d Q R X d S )
Nc                s,   | j drttjdn | f||S d S )NZ_inputr2   )r   OSErrorr   ZEIO)rx   ry   rz   )r{   r-   r.   r|   i  s    
zATestSensorsTemperatures.test_emulate_eio_error.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   T)r   Zignoringr   )r   r   r   r   r   r   r   rZ   sensors_temperaturesr   r   r   r   r   )r]   r|   r   r   r   r-   )r{   r.   test_emulate_eio_errorg  s    
z.TestSensorsTemperatures.test_emulate_eio_errorc                s    fdd}t  trdnd}tj||dj tjddgdN tj d	 d
 }| j|jd | j|jd | j|j	d | j|j
d W d Q R X W d Q R X d S )Nc                s   | j drtjtdS | j dr0tjtdS | j drDtjdS | j drXtjdS | j d	rltjd
S  | f||S d S )Nz/namerx   z/temp1_labellabelz/temp1_inputs   30000z
/temp1_maxs   40000z/temp1_crits   50000)r   rs   r  r   rt   )rx   ry   rz   )r{   r-   r.   r|   x  s    







z<TestSensorsTemperatures.test_emulate_data.<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   rZ   r  r   r  r   ZhighZcritical)r]   r|   r   Ztempr-   )r{   r.   test_emulate_dataw  s    z)TestSensorsTemperatures.test_emulate_dataN)r   r   r   r   r   r   r  r  r-   r-   r-   r.   r~  d  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j d	 d
 }| j|jd | j|jd W d Q R X W d Q R X d S )Nc                s\   | j drtjtdS | j dr0tjtdS | j drHtjtdS  | f||S d S )Nz/namerx   z/fan1_labelr  z/fan1_inputZ2000)r   rs   r  r   )rx   ry   rz   )r{   r-   r.   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   rZ   Zsensors_fansr   r  r   )r]   r|   r   Zfanr-   )r{   r.   r    s    
z!TestSensorsFans.test_emulate_dataN)r   r   r   r  r-   r-   r-   r.   r    s   r  c               @   s   e Zd Zdd ZeZdd Zej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eje ddd Zdd Zdd  Zd!d" Zd#S )$TestProcessc             C   s   t t d S )N)r   r   )r]   r-   r-   r.   setUp  s    zTestProcess.setUpc             C   s   t jdt }t|}| jt tdd dt  tj|j	}t
jd |j }|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 jdS )NrU   )r   r   r-   r-   r-   r.   <lambda>  s    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)r3   r0   r-   r-   r.   r5     s    z5TestProcess.test_memory_full_info.<locals>.<listcomp>i   )rc   c             S   s   g | ]
}|j qS r-   )pss)r3   r0   r-   r-   r.   r5     s    c             S   s   g | ]
}|j qS r-   )r   )r3   r0   r-   r-   r.   r5     s    )ru   rv   r   r   r  r   r   rZ   rR  pidtimeZsleepZmemory_full_infomemory_mapsr\   ZussrE  r  r   )r]   srcZsprocr_  Zmemmapsr-   r-   r.   test_memory_full_info  s     


z!TestProcess.test_memory_full_infozunreliable on PYPYc          ;   C   sR  dd }t td | j| jd W d Q R X t td | j| jd W d Q R X t td | j| jd W d Q R X t td | j| jd W d Q R X t td | j| jd W d Q R X t td | j| jd W d Q R X trNtt t td	 | j| jd W d Q R X tt t td
 | j| jd W d Q R X d S )Nc              S   s\   t j } tj d }x:x4| j D ](}|jtjjtkr:|S tj |kr P q W qW tdd S )Nr   ztimeout looking for test file)	rZ   rR  r  
open_filesr   r   abspathr   r   )r_  Z	giveup_atfiler-   r-   r.   get_test_file  s    
z7TestProcess.test_open_files_mode.<locals>.get_test_filer   r$  r   zr+zw+za+r0   zx+)r   r   r   moder   r   )r]   r  r-   r-   r.   test_open_files_mode  s(    z TestProcess.test_open_files_modec             C   s   t j }|j }tj  t|jdt|  tjdt	t
jdd"}|j }| sXt|jsbtW d Q R X tjdt	t
jdd }| j|j g  |jstW d Q R X W d Q R X d S )Nzlen(ret) != %izpsutil._pslinux.os.readlinkr2   )r~   )rZ   rR  r  rA  NamedTemporaryFiler   r   r   r   r  r   r   r   r   ZEINVALr   )r]   r_  filesr   r-   r-   r.   test_open_files_file_gone  s    

z%TestProcess.test_open_files_file_gonec             C   s   t j }|j }tj d t|jdt|  tr6dnd}tj	|t
tjdd"}|j }| sdt|jsntW d Q R X W d Q R X d S )Nzlen(ret) != %izbuiltins.openz__builtin__.openr2   )r~   )rZ   rR  r  rA  r  r   r   r   r   r   r   r   r   r   r   )r]   r_  r  r   r   r-   r-   r.   test_open_files_fd_gone  s    

z#TestProcess.test_open_files_fd_gonec          
   C   sB   t jdi d*}| jtjjtj j  |j	s4t
W d Q R X d S )Nz)psutil._pslinux._psposix.get_terminal_map)r   )r   r   r   rZ   r   rR  r   rb  Zterminalr   r   )r]   r   r-   r-   r.   test_terminal_mocked  s    
z TestProcess.test_terminal_mockedc             C   s   t j }tjtd}tjd|dd$}| j|j ddg |j	sFt
W d Q R X tjtd}tjd|dd&}| j|j dddg |j	st
W d Q R X d S )	Nzfoo bar zpsutil._pslinux.openT)r   r}   rO  barz	foo bar  r2   )rZ   rR  rs   r  r   r   r   r   cmdliner   r   )r]   r_  r   r   r-   r-   r.   test_cmdline_mocked%  s    zTestProcess.test_cmdline_mockedc             C   s   t j }tjtd}tjd|dd$}| j|j ddg |j	sFt
W d Q R X tjtd}tjd|dd&}| j|j dddg |j	st
W d Q R X d S )	Nzfoo bar zpsutil._pslinux.openT)r   r}   rO  r  z	foo bar  r2   )rZ   rR  rs   r  r   r   r   r   r  r   r   )r]   r_  r   r   r-   r-   r.   test_cmdline_spaces_mocked3  s    z&TestProcess.test_cmdline_spaces_mockedc          
   C   sF   t jddd. | jtj j d | jtj j d W d Q R X d S )Nzpsutil._pslinux.os.readlinkz/home/foo (deleted))r   z	/home/foo)r   r   r   rZ   rR  execwd)r]   r-   r-   r.   !test_readlink_path_deleted_mockedA  s    
z-TestProcess.test_readlink_path_deleted_mockedc                s    fdd}t  trdnd}tj||d(}tj j }|jsBt| j	|g  W d Q R X  fdd}tj||d | j
tjtj j W d Q R X d S )Nc                s4   | j dtj  r ttjdn | f||S d S )Nz/proc/%s/taskr2   )rA   r   rb  r   r   r   )rx   ry   rz   )r{   r-   r.   r|   L  s    z2TestProcess.test_threads_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   c                s4   | j dtj  r ttjdn | f||S d S )Nz/proc/%s/taskr2   )rA   r   rb  r   r   ZEPERM)rx   ry   rz   )r{   r-   r.   r|   [  s    )r   r   r   r   rZ   rR  rZ  r   r   r   r   AccessDenied)r]   r|   r   r   r   r-   )r{   r.   test_threads_mockedG  s    
zTestProcess.test_threads_mockedc             C   s   t jdttjdd}t jdtjddd`}tj j }|j	sFt
|j	sPt
| j|d t jddd | jtjtj j W d Q R X W d Q R X W d Q R X d S )	Nzpsutil._pslinux.readlinkr2   )r~   zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsF)r   )r   r   r  r   r   rZ   r  rR  r  r   r   r   r   ZombieProcess)r]   r)  r*  r   r-   r-   r.   test_exe_mockedd  s    


zTestProcess.test_exe_mockedc                s|    fdd}t  trdnd}tj||dH}tj }| jt}|j  W d Q R X | j	|j
jtj |jsntW d Q R X d S )Nc                s4   | j dtj  r ttjdn | f||S d S )Nz/proc/%s/smapsr2   )rA   r   rb  r   r   r   )rx   ry   rz   )r{   r-   r.   r|   |  s    z.TestProcess.test_issue_1014.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   )r   r   r   r   rZ   rR  r   r   r  r   	exceptionr   r   r   r   )r]   r|   r   r   r_  errr-   )r{   r.   test_issue_1014y  s    zTestProcess.test_issue_1014znot supportedc             C   s   t jdttjddD}tj }|j  | jtj	}|j
tj W d Q R X |jsVtW d Q R X | j|jj|j | j|jj|j  d S )Nz"psutil._pslinux.cext.linux_prlimitr2   )r~   )r   r   r  r   ZENOSYSrZ   rR  rx   r   r  ZrlimitZRLIMIT_NOFILEr   r   r   r  r  )r]   r   r_  excr-   r-   r.   test_rlimit_zombie  s    zTestProcess.test_rlimit_zombiec             C   s   t jdttjdd@}tj }|j  | jtj	}|j
  W d Q R X |jsRtW d Q R X | j|jj|j | j|jj|j  d S )Nzpsutil._pslinux.os.readlinkr2   )r~   )r   r   r  r   r   rZ   rR  rx   r   r  r  r   r   r   r  r  )r]   r   r_  r  r-   r-   r.   test_cwd_zombie  s    zTestProcess.test_cwd_zombiec                s   ddl m}  fdd}t tr$dnd}tj||d tj }| j|j	 d | j|j
 tj | j|j d	 | j|j d
| tj   |j }| j|jd|  | j|jd|  | j|jd|  | j|jd|  | j|j d
 W d Q R X d S )Nr   )CLOCK_TICKSc          '      s   | j dtj  rxd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'}tjdj|j S  | f||S d S )Nz/proc/%s/stat0z(cat)Z123456rQ   )rA   r   rb  rs   rt   r;   rw   )rx   ry   rz   )r{   r-   r.   r|     sT    z5TestProcess.test_stat_file_parsing.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   catr7   r   r   ra   r  rN   )r   r  r   r   r   r   rZ   rR  r   rx   statusZSTATUS_ZOMBIEppidZcreate_timer>  r   usersystemchildren_userchildren_systemZcpu_num)r]   r  r|   r   r_  Zcpur-   )r{   r.   test_stat_file_parsing  s"    /z"TestProcess.test_stat_file_parsingc                s    fdd}t  trdnd}tj||d tj }| j|j jd | j|j j	d | j|j
 d |j }| j|jd	 | j|jd
 | j|jd |j }| j|jd | j|jd | j|jd | j|jj ttdd W d Q R X d S )Nc                s:   | j dtj  r&tjtjdj S  | f||S 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:	13)rA   r   rb  rs   rt   ru   rv   rw   )rx   ry   rz   )r{   r-   r.   r|     s    z7TestProcess.test_status_file_parsing.<locals>.open_mockzbuiltins.openz__builtin__.open)r~   rb      B   i  i  i  i  i  i  r   r-  )r   r   r   r   rZ   rR  r   num_ctx_switches	voluntaryinvoluntarynum_threadsuidsrealZ	effectiveZsavedgids_proc_get_eligible_cpuslistrange)r]   r|   r   r_  r  r  r-   )r{   r.   test_status_file_parsing  s"    z$TestProcess.test_status_file_parsingN)r   r   r   r  ZtearDownr  r   r   r   r  r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r-   r-   r-   r.   r    s"   $Br  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 j | _d S )N)rZ   rR  proc)clsr-   r-   r.   
setUpClass  s    z#TestProcessAgainstStatus.setUpClassc             C   s|   t jjd| jj ^}xJ|D ]B}|j }|j|r|j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)
rZ   _psplatform	open_textr  r  rR   rA   	partitionrD   rE   )r]   Z	linestartr   rH   r   r-   r-   r.   read_status_file  s    


z)TestProcessAgainstStatus.read_status_filec             C   s    | j d}| j| jj | d S )NzName:)r  r   r  rx   )r]   r   r-   r-   r.   	test_name!  s    
z"TestProcessAgainstStatus.test_namec             C   sH   | j d}||jdd |jd }|jdd}| j| jj | d S )NzState:(r7   )rQ   r   )r  findrfindrg  r   r  r  )r]   r   r-   r-   r.   test_status%  s    
z$TestProcessAgainstStatus.test_statusc             C   s    | j d}| j| jj | d S )NzPPid:)r  r   r  r  )r]   r   r-   r-   r.   	test_ppid+  s    
z"TestProcessAgainstStatus.test_ppidc             C   s    | j d}| j| jj | d S )NzThreads:)r  r   r  r  )r]   r   r-   r-   r.   test_num_threads/  s    
z)TestProcessAgainstStatus.test_num_threadsc             C   s:   | j d}ttt|j dd }| j| jj | d S )NzUid:r7   r  )r  rV   rW   rD   r@   r   r  r  )r]   r   r-   r-   r.   	test_uids3  s    
z"TestProcessAgainstStatus.test_uidsc             C   s:   | j d}ttt|j dd }| j| jj | d S )NzGid:r7   r  )r  rV   rW   rD   r@   r   r  r  )r]   r   r-   r-   r.   	test_gids8  s    
z"TestProcessAgainstStatus.test_gidsc             C   s@   | j d}| j| jj j| | j d}| j| jj j| d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r   r  r  r  r  )r]   r   r-   r-   r.   test_num_ctx_switches=  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc             C   sN   | j d}dt|krJtt|jd\}}| j| jj tt	||d  d S )NzCpus_allowed_list:r   r7   )
r  r   rW   rD   r@   r   r  Zcpu_affinityr  r  )r]   r   Zmin_Zmax_r-   r-   r.   test_cpu_affinityD  s
    
z*TestProcessAgainstStatus.test_cpu_affinityc          
   C   sT   | j d}tjd}| jjj  W d Q R X dt|krF|j sPtn
|jsPt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-   r.   test_cpu_affinity_eligible_cpusK  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-   r.   r    s   r  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	TestUtilsc          
   C   s*   t jjt}| j|jd W d Q R X d S )NZrt)rZ   r  r  __file__r   r  )r]   r   r-   r-   r.   test_open_text]  s    zTestUtils.test_open_textc          
   C   s*   t jjt}| j|jd W d Q R X d S )Nr   )rZ   r  r   r  r   r  )r]   r   r-   r-   r.   test_open_binarya  s    zTestUtils.test_open_binaryc          
   C   s<   t jddd$}| jtjjdd |js.tW d Q R X d S )Nzos.readlinkzfoo (deleted))r   r  rO  )r   r   r   rZ   r  readlinkr   r   )r]   r   r-   r-   r.   test_readlinke  s    zTestUtils.test_readlinkc             C   s|   t jjt}t|d}|jd W d Q R X | jtjj	tddd | jtjj	tddd | jtjj	td d	d
d	 d S )NZwtzfoo F)ZbinaryrO  Ts   fooz??r  )Zfallback)
r   r   r  r   r   rC  r   rZ   r  r  )r]   Zfnamer   r-   r-   r.   test_catj  s    zTestUtils.test_catN)r   r   r   r  r  r  r  r-   r-   r-   r.   r  Z  s   r  __main__)Kr  Z
__future__r   rB   r$   r   r   rs   r   r  r   rF  r!   r)   rA  ru   r  r   rZ   r   Zpsutil._compatr   r   Zpsutil.testsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  dirnamer  ZHEREr(   ZSIOCGIFCONFr9   r2  r/   r=   rM   rP   rT   rX   r   ZTestCaserY   r   r   r   r   r  r=  rd  r~  r  r  r  r  r   r-   r-   r-   r.   <module>   s   	

  
k
 T

t
 
 . 7
-

  Y
R

