a
    QIh?[                    @   s  d 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ZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& erddl'm(Z( ddl'm)Z) ddl'm*Z* ddl'm+Z+ ej,-ej,.e/Z0dZ1dZ2dZ3d Z4erd!Z5d"d# Z6d$d% Z7d&d' Z8d(d) Z9d*d+ Z:d,d- Z;d.d/ Z<d0d1 Z=d2d3 Z>ej?d4d5 Z@ej?d6d7 ZAe!jBjCe d8d9G d:d; d;eZDe!jBjCe d8d9G d<d= d=eZEe!jBjCe d8d9G d>d? d?eZFe!jBjCe d8d9G d@dA dAeZGe!jBjCe d8d9G dBdC dCeZHe!jBjCe d8d9G dDdE dEeZIe!jBjCe d8d9G dFdG dGeZJe!jBjCe d8d9G dHdI dIeZKe!jBjCe d8d9G dJdK dKeZLe!jBjCe d8d9G dLdM dMeZMe!jBjCe d8d9G dNdO dOeZNe!jBjCe d8d9G dPdQ dQeZOe!jBjCe d8d9G dRdS dSeZPe!jBjCe d8d9G dTdU dUeZQe!jBjCe d8d9G dVdW dWeZRe!jBjCe d8d9G dXdY dYeZSe!jBjCe d8d9G dZd[ d[eZTe!jBjCe d8d9G d\d] d]eZUe!jBjCe d8d9e!jBjCe d^d9G d_d` d`eZVe!jBjCe d8d9G dadb dbeZWe!jBjCe d8d9G dcdd ddeZXe!jBjCe d8d9G dedf dfeZYe!jBjCe d8d9G dgdh dheZZe!jBjCe d8d9G didj djeZ[e!jBjCe d8d9G dkdl dleZ\dS )mzLinux specific tests.    N)mock)LINUX)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)PYTEST_PARALLEL)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)
ThreadTask)
call_until)pytest)reload_module)retry_on_failure)safe_rmpath)sh)skip_on_not_implemented)CLOCK_TICKS)RootFsDeviceFinder)calculate_avail_vmem)open_binaryi  i'  i  i  i   c                 C   sv   dd l }t| d d d} ttjtj8}t|| tt	
d| dd W  d    S 1 sh0    Y  d S Nr      ascii256s      )fcntlbytessocketAF_INET
SOCK_DGRAM	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer"   s r0   Q/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_linux.pyget_ipv4_addressD   s    r2   c                 C   sv   dd l }t| d d d} ttjtj8}t|| tt	
d| dd W  d    S 1 sh0    Y  d S r   )r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFNETMASKr+   r,   r-   r0   r0   r1   get_ipv4_netmaskP   s    r4   c                 C   sv   dd l }t| d d d} ttjtj8}t|| tt	
d| dd W  d    S 1 sh0    Y  d S r   )r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFBRDADDRr+   r,   r-   r0   r0   r1   get_ipv4_broadcast\   s    r6   c           	         s   t dV}g }|D ]"}| }|d | kr|| qt|dkrPtd| W d    n1 sd0    Y  tt|D ]X}|| d   fddtdt dD }d|}ttj	|}t
tj	|||< qz|S )	Nz/proc/net/if_inet6r   zcould not find interface c                    s   g | ]} ||d   qS )   r0   ).0jZunformattedr0   r1   
<listcomp>u   s   z&get_ipv6_addresses.<locals>.<listcomp>r8   :)opensplitappendlen
ValueErrorrangejoinr$   	inet_ptonAF_INET6	inet_ntop)	r.   fZ
all_fieldslinefieldsigroups	formattedpackedr0   r;   r1   get_ipv6_addressesh   s"    
,

rO   c              	   C   s   dd l }t| d d d} ttjtjN}|| tt	d| }d
dd |dd	 D d d
 W  d    S 1 s~0    Y  d S )Nr   r   r   r    c                 S   s   g | ]}|d dqS )02xr=   r0   )r9   charr0   r0   r1   r<          z#get_mac_address.<locals>.<listcomp>   r!   r7   )r"   r#   r$   r%   r&   r(   r)   SIOCGIFHWADDRr+   r,   rD   )r.   r"   r/   infor0   r0   r1   get_mac_address~   s    rW   c                  C   s|   t ddgddid} | d}|D ]F}|dr"| \}}}}tdd}|t|t|t|  S q"td	|  d
S )zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
ZSwapztotal used freez$can't find 'Swap' in 'free' output:
N)r   r?   
startswithcollections
namedtupleintrB   )outlinesrI   _totalusedrX   ntr0   r0   r1   	free_swap   s    

ri   c                  C   s   t ddgddid} | d}|D ]P}|dr"dd	 | d
d D \}}}}tdd}||||||   S q"td|  dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rX   rY   rZ   r[   r\   r^   ZMemc                 s   s   | ]}t |V  qd S N)rb   r9   xr0   r0   r1   	<genexpr>   rS   zfree_physmem.<locals>.<genexpr>      ztotal used free shared outputz#can't find 'Mem' in 'free' output:
N)r   r?   r_   r`   ra   rB   )rc   rd   rI   rf   rg   rX   sharedrh   r0   r0   r1   free_physmem   s    

"rq   c                 C   s^   t ddgddid}|dD ]*}| }| |v rt|dd   S qtd	| d
d S )Nvmstatz-srZ   r[   r\   r^    r   can't find z in 'vmstat' output)r   r?   striprb   rB   )statrc   rI   r0   r0   r1   rr      s    rr   c                  C   s@   t ddg } d| v r"tdttttd| 	 d S )NrX   z-VUNKNOWNzcan't determine free versionz\d+r7   )
r   ru   r   skiptuplemaprb   refindallr?   )rc   r0   r0   r1   get_free_version_info   s    
r}   c                 #   sL    fdd}t  tjdd|d}|V  W d   n1 s>0    Y  dS )zMock open() builtin and forces it to return a certain content
    for a given path. `pairs` is a {"path": "content", ...} dict.
    c                    sJ   | v r0|  }t |tr$t|S t|S n | g|R i |S d S rj   )
isinstancestrioStringIOBytesIO)nameargskwargscontent	orig_openpairsr0   r1   	open_mock   s    

z$mock_open_content.<locals>.open_mockbuiltins.openTcreateside_effectNr>   r   patch)r   r   mr0   r   r1   mock_open_content   s    
r   c                 #   sN    fdd}t tjdd|d}|V  W d   n1 s@0    Y  dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s"   | kr | g|R i |S rj   r0   r   r   r   excfor_pathr   r0   r1   r      s    z&mock_open_exception.<locals>.open_mockr   Tr   Nr   )r   r   r   r   r0   r   r1   mock_open_exception   s    r   z
LINUX onlyreasonc                   @   sL   e Zd Zdd Ze dd Ze dd Ze dd Ze d	d
 ZdS )"TestSystemVirtualMemoryAgainstFreec                 C   s"   t  j}t j}||ksJ d S rj   )rq   rf   psutilvirtual_memoryselfZ	cli_valuepsutil_valuer0   r0   r1   
test_total   s    
z-TestSystemVirtualMemoryAgainstFree.test_totalc                 C   sR   t  dk rtdt  dkr(tdt j}t j}t|| tk sNJ d S )N   r      free version too oldr8   r   r   free version too recent)	r}   r   rx   rq   rg   r   r   absr   r   r0   r0   r1   	test_used   s    





z,TestSystemVirtualMemoryAgainstFree.test_usedc                 C   s*   t  j}t j}t|| tk s&J d S rj   )rq   rX   r   r   r   r   r   r0   r0   r1   	test_free   s    
z,TestSystemVirtualMemoryAgainstFree.test_freec                 C   sV   t  }|j}|dkrtdt j}t|| tk sRJ | d| d|j d S )Nr   z%free does not support 'shared' columnrs   z 
)	rq   rp   r   rx   r   r   r   r   output)r   rX   
free_valuer   r0   r0   r1   test_shared  s    

z.TestSystemVirtualMemoryAgainstFree.test_sharedc                 C   sb   t ddg}|d}d|d vr,tdt|d  d }t j}t|| t	k s^J d S )	NrX   rY   r^   	availabler   z(free does not support 'available' columnrn   r7   )
r   r?   r   rx   rb   r   r   r   r   r   )r   rc   rd   r   r   r0   r0   r1   test_available  s    


z1TestSystemVirtualMemoryAgainstFree.test_availableN)	__name__
__module____qualname__r   r   r   r   r   r   r0   r0   r0   r1   r      s   



r   c                   @   sZ   e Zd Zdd Ze dd Ze dd Ze dd Ze d	d
 Ze dd Z	dS )$TestSystemVirtualMemoryAgainstVmstatc                 C   s.   t dd }t j}t|| tk s*J d S )Nztotal memory   )rr   r   r   rf   r   r   r   Zvmstat_valuer   r0   r0   r1   r     s    
z/TestSystemVirtualMemoryAgainstVmstat.test_totalc                 C   sV   t  dk rtdt  dkr(tdtdd }t j}t|| tk sRJ d S )Nr   r   r   r   zused memoryr   )	r}   r   rx   rr   r   r   rg   r   r   r   r0   r0   r1   r   #  s    





z.TestSystemVirtualMemoryAgainstVmstat.test_usedc                 C   s.   t dd }t j}t|| tk s*J d S )Nzfree memoryr   )rr   r   r   rX   r   r   r   r0   r0   r1   r   5  s    
z.TestSystemVirtualMemoryAgainstVmstat.test_freec                 C   s.   t dd }t j}t|| tk s*J d S )Nzbuffer memoryr   )rr   r   r   buffersr   r   r   r0   r0   r1   test_buffers;  s    
z1TestSystemVirtualMemoryAgainstVmstat.test_buffersc                 C   s.   t dd }t j}t|| tk s*J d S )Nzactive memoryr   )rr   r   r   activer   r   r   r0   r0   r1   test_activeA  s    
z0TestSystemVirtualMemoryAgainstVmstat.test_activec                 C   s.   t dd }t j}t|| tk s*J d S )Nzinactive memoryr   )rr   r   r   inactiver   r   r   r0   r0   r1   test_inactiveG  s    
z2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r     s   



r   c                   @   sB   e Zd Zdd Ze dd Zdd Zdd Zd	d
 Zdd Z	dS )TestSystemVirtualMemoryMocksc              	   C   s  t d }td|i^}tjdd.}td t }|j	sJJ t
|dksZJ |d }dt|jv stJ d	t|jv sJ d
t|jv sJ dt|jv sJ dt|jv sJ dt|jv sJ dt|jv sJ |jdksJ |jdksJ |jdksJ |jdksJ |jdks,J |jdks<J |jdksLJ W d    n1 sb0    Y  W d    n1 s0    Y  d S )NaL              Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:         -1 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            SReclaimable:     346648 kB
            /proc/meminfoTrecordalwaysrn   r   z#memory stats couldn't be determinedcachedrp   r   r   r   r   )textwrapdedentencoder   warningscatch_warningssimplefilterr   r   calledrA   r   messager   r   r   rp   r   r   slabr   r   r   wsretwr0   r0   r1   test_warnings_on_missesP  s,    


z4TestSystemVirtualMemoryMocks.test_warnings_on_missesc                 C   s   i }t d:}|D ]$}| }t|d d ||d < qW d    n1 sL0    Y  t|}d|v r|d }t|| | d }|dk sJ d S )Nr   rn   r   r   s   MemAvailable:d   r   )r   r?   rb   r   r   )r   ZmemsrH   rI   rJ   abZdiff_percentr0   r0   r1   test_avail_old_percentt  s    
8z3TestSystemVirtualMemoryMocks.test_avail_old_percentc              	   C   s   t d }td|iv}tjdd}t }W d    n1 sF0    Y  |jsZJ |j	dkshJ |d }dt
|jv sJ W d    n1 s0    Y  d S )Na              Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:    6574984 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r   Tr   l     " r   ,inactive memory stats couldn't be determinedr   r   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r1    test_avail_old_comes_from_kernel  s    &
z=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc              	   C   s   t d }td|iv}tjdd}t }W d    n1 sF0    Y  |jsZJ |j	dkshJ |d }dt
|jv sJ W d    n1 s0    Y  d S )Nat              Active:          9444728 kB
            Active(anon):    6145416 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            r   Tr       `LG r   r   r   r   r0   r0   r1   test_avail_old_missing_fields  s    &
z:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc              
   C   s   t d }td|i tdtl tjdd@}t	 }|j
dksLJ |d }dt|jv sfJ W d    n1 sz0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )	Na              Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r   z/proc/zoneinfoTr   r   r   r   )r   r   r   r   r   FileNotFoundErrorr   r   r   r   r   r   r   )r   r   r   r   r   r0   r0   r1   test_avail_old_missing_zoneinfo  s    z<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfoc                 C   s   t d }td|i}t }|js.J |jdks<J |jdksJJ |j	dksXJ |j
dksfJ |jdkstJ |jdksJ |jd	ksJ |jd
ksJ |jdksJ W d    n1 s0    Y  d S )Na              MemTotal:              100 kB
            MemFree:               2 kB
            MemAvailable:          3 kB
            Buffers:               4 kB
            Cached:                5 kB
            SwapCached:            6 kB
            Active:                7 kB
            Inactive:              8 kB
            Active(anon):          9 kB
            Inactive(anon):        10 kB
            Active(file):          11 kB
            Inactive(file):        12 kB
            Unevictable:           13 kB
            Mlocked:               14 kB
            SwapTotal:             15 kB
            SwapFree:              16 kB
            Dirty:                 17 kB
            Writeback:             18 kB
            AnonPages:             19 kB
            Mapped:                20 kB
            Shmem:                 21 kB
            Slab:                  22 kB
            SReclaimable:          23 kB
            SUnreclaim:            24 kB
            KernelStack:           25 kB
            PageTables:            26 kB
            NFS_Unstable:          27 kB
            Bounce:                28 kB
            WritebackTmp:          29 kB
            CommitLimit:           30 kB
            Committed_AS:          31 kB
            VmallocTotal:          32 kB
            VmallocUsed:           33 kB
            VmallocChunk:          34 kB
            HardwareCorrupted:     35 kB
            AnonHugePages:         36 kB
            ShmemHugePages:        37 kB
            ShmemPmdMapped:        38 kB
            CmaTotal:              39 kB
            CmaFree:               40 kB
            HugePages_Total:       41 kB
            HugePages_Free:        42 kB
            HugePages_Rsvd:        43 kB
            HugePages_Surp:        44 kB
            Hugepagesize:          45 kB
            DirectMap46k:          46 kB
            DirectMap47M:          47 kB
            DirectMap48G:          48 kB
            r   i  i      i p  i T  i   i    i X     )r   r   r   r   r   r   r   rf   rX   r   r   rp   r   r   r   r   )r   r   r   Zmemr0   r0   r1   test_virtual_memory_mocked  s    2
z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r   N  s   $
r   c                   @   s\   e Zd Zedd Zdd Ze dd Ze dd Zd	d
 Z	dd Z
dd Zdd ZdS )TestSystemSwapMemoryc                  C   s@   t d} |  }W d   n1 s&0    Y  d|v o>d|v S )z3Return True if /proc/meminfo provides swap metrics.r   Nz
SwapTotal:z	SwapFree:)r>   read)rH   datar0   r0   r1   meminfo_has_swap_info  s    
&z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   s*   t  j}t j}t|| tk s&J d S rj   )ri   rf   r   swap_memoryr   r   r   r   r   r0   r0   r1   r   &  s    
zTestSystemSwapMemory.test_totalc                 C   s*   t  j}t j}t|| tk s&J d S rj   )ri   rg   r   r   r   r   r   r0   r0   r1   r   +  s    
zTestSystemSwapMemory.test_usedc                 C   s*   t  j}t j}t|| tk s&J d S rj   )ri   rX   r   r   r   r   r   r0   r0   r1   r   1  s    
zTestSystemSwapMemory.test_freec              	   C   s   t jddd}tjddr}td t }|js:J t|dksJJ |d }dt	|j
v sdJ |jdksrJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )	Npsutil._common.openTr   r   r   rn   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r   r   rA   r   r   sinsoutr   r   r   r   r   r0   r0   r1   test_missing_sin_sout7  s    

z*TestSystemSwapMemory.test_missing_sin_soutc              	   C   s   t dt}tjddr}td t }|js6J t|dksFJ |d }dt	|j
v s`J |jdksnJ |jdks|J W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz/proc/vmstatTr   r   rn   r   zK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r   r   r   r   r   r   r   r   rA   r   r   r   r   r   r0   r0   r1   test_no_vmstat_mockedF  s    

z*TestSystemSwapMemory.test_no_vmstat_mockedc                 C   s   |   stdtd}t }W d    n1 s:0    Y  |jrNJ dd lm	} |
 \}}}}}}}||9 }||9 }|j|ksJ t|j| tk sJ d S )Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   )r   r   rx   r   r   r   r   r   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinforf   r   rX   r   )r   r   swapZcextre   rf   rX   Zunit_multiplierr0   r0   r1   test_meminfo_against_sysinfoW  s    
&
z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   sB   t ddi"}t  |js J W d    n1 s40    Y  d S )Nr   rS   )r   r   r   r   r   r   r0   r0   r1   #test_emulate_meminfo_has_no_metricsh  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r0   r0   r0   r1   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rLd|v sXJ nd|vsXJ |dkrnd|v szJ nd|vszJ |d	krd
|v sJ nd
|vsJ d S )Nz\d+\.\d+\.\d+   r   .)r         steal)r   r   r!   Zguest)r   r   r   Z
guest_nice)r   	cpu_times_fieldsr{   r|   osunamery   rz   rb   r?   )r   rJ   Z
kernel_verZkernel_ver_infor0   r0   r1   test_fieldsx  s    
zTestSystemCPUTimes.test_fieldsN)r   r   r   r   r0   r0   r0   r1   r   v  s   r   c                   @   s   e Zd Zejjejd dddd Z	ejjejd dddd	 Z
ejjed
 dddd Zejjed dddd Zdd ZdS )TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr   c                 C   sj   t d}|  }W d    n1 s*0    Y  dt|v rft|dd d }t |ksfJ d S )Nr   -rn   )r>   r   ru   r   rb   r?   r   	cpu_count)r   rH   valuer0   r0   r1   test_against_sysdev_cpu_online  s
    
*z8TestSystemCPUCountLogical.test_against_sysdev_cpu_online/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc                 C   s0   t d}tdd |D }t |ks,J d S )Nr   c                 S   s    g | ]}t d |dur|qS )zcpu\d+$N)r{   searchrk   r0   r0   r1   r<     rS   zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r   listdirrA   r   r   )r   Zlscountr0   r0   r1   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|ks J d S )Nznproc --allTZlogical)rb   r   r   r   )r   numr0   r0   r1   test_against_nproc  s    z,TestSystemCPUCountLogical.test_against_nproclscpulscpu utility not availablec                 C   s8   t d}tdd |dD }tjdd|ks4J d S )Nlscpu -pc                 S   s   g | ]}| d s|qS )#r_   rk   r0   r0   r1   r<     rS   z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>r^   Tr  )r   rA   r?   r   r   )r   rc   r  r0   r0   r1   test_against_lscpu  s    z,TestSystemCPUCountLogical.test_against_lscpuc              	   C   s  dd l }|j }tjdtd`}|j |ks6J |js@J tjdddF}|j d u sbJ |jdkspJ |jd d dksJ W d    n1 s0    Y  t	d	d
}|
 }W d    n1 s0    Y  t|}tjd|dd$}|j |ksJ W d    n1 s0    Y  td	di0}|j |ksHJ |jsTJ W d    n1 sj0    Y  W d    n1 s0    Y  d S )Nr   zpsutil._pslinux.os.sysconfr   r   Tr   r   
/proc/stat/proc/cpuinforbreturn_valuer   rS   )psutil._pslinux_pslinuxZcpu_count_logicalr   r   rB   r   Z
call_countZ	call_argsr>   r   r   r   r   )r   r   originalr   rH   Zcpuinfo_data	fake_filer0   r0   r1   test_emulate_fallbacks  s.    

4&
4z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r   r   r   r   markskipifr   pathexistsr   r  shutilwhichr  r  r  r0   r0   r0   r1   r     s&   



r   c                   @   sT   e Zd Zejjed dddd Zejje	
 dvdddd	 Zd
d ZdS )TestSystemCPUCountCoresr  r	  r   c                 C   s\   t d}t }|dD ]&}|ds|d}||d  qtjddt|ksXJ d S )Nr
  r^   r  ,rn   Fr  )r   setr?   r_   addr   r   rA   )r   rc   Zcore_idsrI   rJ   r0   r0   r1   r    s    

z*TestSystemCPUCountCores.test_against_lscpu>   x86_64i686zx86_64/i686 onlyc                 C   sd   t j }tjdg d$}t j }|js.J W d    n1 sB0    Y  |d ur`||ks`J d S )N	glob.globr  )r   r  cpu_count_coresr   r   r   )r   Zmeth_1r   Zmeth_2r0   r0   r1   test_method_2  s    

(z%TestSystemCPUCountCores.test_method_2c              	   C   s   t jdg dP}t jddd"}tj d u s2J W d    n1 sF0    Y  W d    n1 sd0    Y  |jsxJ |jsJ d S )Nr%  r&  r   Tr   )r   r   r   r  r'  r   )r   m1m2r0   r0   r1   test_emulate_none  s
    N
z)TestSystemCPUCountCores.test_emulate_noneN)r   r   r   r   r  r  r  r  r  platformmachiner(  r+  r0   r0   r0   r1   r    s   
	
r  c                   @   s   e Zd Zejje ddejjedddd Zejje ddejjedddd Z	ejje ddd	d
 Z
ejje dddd Zejje dddd ZdS )TestSystemCPUFrequencynot supportedr   z(aarch64 does not always expose frequencyc                    sT    fdd}t jj tjd|dd t s2J W d    n1 sF0    Y  d S )Nc                    s   |  drdS  | S d S )N&/sys/devices/system/cpu/cpufreq/policyFr  r  Zorig_existsr0   r1   path_exists_mock  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockos.path.existsT)r   r   )r   r  r  r   r   r   cpu_freq)r   r3  r0   r2  r1   test_emulate_use_second_file  s    z3TestSystemCPUFrequency.test_emulate_use_second_filez,aarch64 does not report mhz in /proc/cpuinfoc                    s    fdd}t jj ztjd|dx ttj t }|sDJ ||j	dksRJ |j
dks`J tjddD ] }|j	dks~J |j
dkslJ qlW d    n1 s0    Y  W ttj tt nttj tt 0 d S )Nc                    s   |  drdS  | S d S )Nz/sys/devices/system/cpu/Fr  r1  Zos_path_existsr0   r1   r3    s    
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr4  r          TZpercpu)r   r  r  r   r   r   r   r  r5  maxmin)r   r3  r   freqr0   r7  r1   test_emulate_use_cpuinfo	  s     
0


z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      s    fdd}t  tjd|d tjdddV t }|jdksFJ |jd	kr^|jd
ks^J |jd	krv|jdksvJ W d    n1 s0    Y  W d    n1 s0    Y  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  | g|R i |S d S )
N/scaling_cur_freqr0     500000/scaling_min_freq   600000/scaling_max_freqs   700000r  s   cpu MHz     : 500endswithr_   r   r   r   r   r0   r1   r   '  s    



z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr   r  r4  Tr&       @@r8       @g     @r>   r   r   r   r5  currentr;  r:  r   r   r<  r0   rE  r1   test_emulate_data%  s    

z(TestSystemCPUFrequency.test_emulate_datac              
      sV   fdd}t  tjd|d  tjddd tjdd	d tjdd
}|d jdks`J |d jdkr|d jdksJ |d jdkr|d jdksJ |d jdksJ |d jdkr|d jdksJ |d jdkr|d jdksJ W d    n1 s0    Y  W d    n1 s(0    Y  W d    n1 sH0    Y  d S )Nc                    s   | }| dr"|dr"tdS | dr@|dr@tdS | dr^|dr^tdS | dr||dr|td	S | dr|drtd
S | dr|drtdS | dkrtdS  | g|R i |S d S )Nr>  z'/sys/devices/system/cpu/cpufreq/policy0s   100000r@     200000rB  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000r?  rA  r  s#   cpu MHz     : 100
cpu MHz     : 400rC  )r   r   r   nrE  r0   r1   r   G  s8    






z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr   r  r4  Tr&  !psutil._pslinux.cpu_count_logicalr   r9  r         Y@r8  g      i@g     r@rn   g      y@rF  rG  rH  rJ  r0   rE  r1   test_emulate_multi_cpuE  s$    z-TestSystemCPUFrequency.test_emulate_multi_cpuc              
      s    fdd}t  tjd|d tjdddT tjdd	d& t }|jd
ksVJ W d    n1 sj0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                    sN   |  drt|  dr"tdS | dkr4tdS  | g|R i |S d S )Nr>  z/cpuinfo_cur_freqrL  r  s   cpu MHz     : 200)rD  r   r   r   r   rE  r0   r1   r   {  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr   r  r4  Tr&  rN  rn      )r>   r   r   r   r5  rI  rJ  r0   rE  r1   %test_emulate_no_scaling_cur_freq_filex  s    
z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r   r   r   r   r  r  r   r   r6  r=  rK  rP  rR  r0   r0   r0   r1   r.    s    

2r.  c                   @   s   e Zd Zdd ZdS )TestSystemCPUStatsc                 C   s*   t d}t j}t|| dk s&J d S )N
interruptsi  )rr   r   Z	cpu_statsrT  r   r   r0   r0   r1   test_interrupts  s    
z"TestSystemCPUStats.test_interruptsN)r   r   r   rU  r0   r0   r0   r1   rS    s   	rS  c                   @   s&   e Zd Zejje dddd ZdS )TestLoadAvgr/  r   c                 C   s   t  }td}|  }W d    n1 s20    Y  tt|d |d  dk s\J tt|d |d  dk s|J tt|d |d  dk sJ d S )Nz/proc/loadavgr   rn   r   )r   
getloadavgr>   r   r?   r   float)r   r   rH   Z
proc_valuer0   r0   r1   test_getloadavg  s    
*  zTestLoadAvg.test_getloadavgN)r   r   r   r   r  r  r	   rY  r0   r0   r0   r1   rV    s   rV  c                   @   s   e Zd Zdd ZdS )TestSystemNetIfAddrsc                 C   s   t   D ]\}}|D ]}|jt jkr<|jt|ksJ q|jtjkr|jt	|ksZJ |j
t|kslJ |jd ur|jt|ksJ qt|dksJ q|jtjkr|jdd }|t|v sJ qqd S )Nz0.0.0.0%r   )r   Znet_if_addrsitemsfamilyZAF_LINKaddressrW   r$   r%   r2   netmaskr4   	broadcastr6   rF   r?   rO   )r   r   addrsaddrr^  r0   r0   r1   test_ips  s    
zTestSystemNetIfAddrs.test_ipsN)r   r   r   rc  r0   r0   r0   r1   rZ    s   rZ  c                   @   sT   e Zd Zejjed dddd Zdd Z	ejjed dddd	 Z
d
S )TestSystemNetIfStatsifconfigifconfig utility not availabler   c              	   C   st   t   D ]b\}}ztd| }W n ty8   Y q0 |jd|v ksPJ ||jtt	d|d ksJ qd S )N	ifconfig RUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsr\  r   RuntimeErrorZisupmturb   r{   r|   )r   r   statsrc   r0   r0   r1   test_against_ifconfig  s    z*TestSystemNetIfStats.test_against_ifconfigc              	   C   sd   t   D ]R\}}td| d*}|jt|  ks@J W d    q1 sT0    Y  qd S )Nz/sys/class/net/z/mtu)r   ri  r\  r>   rk  rb   r   ru   )r   r   rl  rH   r0   r0   r1   test_mtu  s    zTestSystemNetIfStats.test_mtuc              	   C   s  d}t   D ]\}}ztd| }W n ty<   Y q0 td|}|rt| dkr|d7 }t	|
d d}t	|jd}||ksJ qtd|}|rt| dkr|d7 }t	|
d  }t	|jd}||ksJ q|s| d	d S )
Nr   rg  zflags=(\d+)?<(.*?)>r   rn   r   z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   ri  r\  r   rj  r{   r  rA   rL   r!  grouplowerr?   flagsZfail)r   Zmatches_foundr   rl  rc   matchZifconfig_flagsZpsutil_flagsr0   r0   r1   
test_flags  s(    zTestSystemNetIfStats.test_flagsN)r   r   r   r   r  r  r  r  rm  rn  rs  r0   r0   r0   r1   rd    s   
rd  c                   @   s2   e Zd Zejjed dde dd Z	dS )TestSystemNetIOCountersre  rf  r   c              	   C   s$  dd }t jddd}| D  ]\}}z||}W n tyJ   Y qY n0 t|j|d  dk sfJ t|j|d  dk sJ t|j|d	  d
k sJ t|j|d  d
k sJ t|j	|d  dk sJ t|j
|d  dk sJ t|j|d  dk sJ t|j|d  dk sJ qd S )Nc                 S   s   i }t d|  }ttd|d |d< ttd|d |d< ttd|d |d< ttd|d	 |d
< ttd|d |d< ttd|d	 |d< ttd|d |d< ttd|d |d< |S )Nrg  zRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinrn   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   rb   r{   r|   )Znicr   rc   r0   r0   r1   re    s&    z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernicnowrapr{  i (  r|  ru  r   rv  rw  
   rx  ry  rz  )r   net_io_countersr\  rj  r   r{  r|  ru  rv  rw  rx  ry  rz  )r   re  Znior   rl  Zifconfig_retr0   r0   r1   rm    s&    
z-TestSystemNetIOCounters.test_against_ifconfigN)
r   r   r   r   r  r  r  r  r   rm  r0   r0   r0   r1   rt    s
   rt  c                   @   s8   e Zd Zejdedejddddd Zdd	 Zd
S )TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr  zpsutil._pslinux.supports_ipv6Fr&  c                 C   sN   z*t  t jt j}| |j |d W n ty<   Y n0 tjdd d S )N)z::1r   Zinet6kind)	r$   rF   SOCK_STREAMZ
addCleanupclosebindOSErrorr   net_connections)r   Zsupports_ipv6rG   r/   r0   r0   r1   test_emulate_ipv6_unsupportedF  s    z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc                 C   sP   t d}td|i&}tjdd |js.J W d    n1 sB0    Y  d S )Na              0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
            0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
            0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
            000000000000000000000000000000000000000000000000000000
            z/proc/net/unixunixr  )r   r   r   r   r  r   )r   r   r   r0   r0   r1   test_emulate_unixR  s    
z*TestSystemNetConnections.test_emulate_unixN)r   r   r   r   r   rB   r  r  r0   r0   r0   r1   r  D  s   
r  c                   @   sB   e Zd Zejjeed dde dd Z	dd Z
dd	 Zd
S )TestSystemDiskPartitionsstatvfszos.statvfs() not availabler   c                 C   sv   dd }t jddD ]\}t |j}||j\}}}}|j|ksDJ t|j| tk sZJ t|j| tk sJ qd S )Nc                 S   s~   t d|  d }|d}|d |d}| d d \}}}}|dkrVd}t|t|t|  }}}||||fS )Nzdf -P -B 1 ""r^   r   r8   nonerP   )r   ru   r?   poprb   )r  rc   rd   rI   devrf   rg   rX   r0   r0   r1   dfl  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)all)	r   disk_partitions
disk_usageZ
mountpointrf   r   rX   r   rg   )r   r  partusagere   rf   rg   rX   r0   r0   r1   test_against_dfe  s    z(TestSystemDiskPartitions.test_against_dfc              	   C   s   t d}| }W d    n1 s&0    Y  d|v rVt D ]}|jdkr@ d S q@td}tjd|ddv}tjddgd	F}t }|j	sJ |j	sJ |sJ |d
 jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz/proc/filesystemszfsz
nodev	zfs
r   Tr  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r  rwr&  r   )
r>   r   r   r  Zfstyper   r   r   r   r   )r   rH   r   r  r  r)  r*  r   r0   r0   r1   test_zfs_fs~  s*    
&



z$TestSystemDiskPartitions.test_zfs_fsc              	   C   s   ztt jdddL}tt t  W d    n1 s:0    Y  |jsNJ W d    n1 sb0    Y  W dt_ndt_0 d S )Nzos.path.realpathz/non/existentr&  /proc)	r   r   r   raisesr   r   r  r   PROCFS_PATHr   r0   r0   r1   test_emulate_realpath_fail  s    &*z3TestSystemDiskPartitions.test_emulate_realpath_failN)r   r   r   r   r  r  hasattrr   r   r  r  r  r0   r0   r0   r1   r  c  s   r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSystemDiskIoCountersc              	   C   s   d}t d|i tjddd tjdd}|jdks<J |jd	ksJJ |jd
t ks\J |j	dksjJ |j
dksxJ |jdksJ |jdt ksJ |jdksJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12/proc/diskstats!psutil._pslinux.is_storage_deviceTr&  Fr}  rn   r   r   r8   ro   r         r~  r   r   r   r   disk_io_counters
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   r0   r0   r1   test_emulate_kernel_2_4  s    z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c              	   C   s   d}t d|i tjddd tjdd}|jdks<J |jd	ksJJ |jd
t ks\J |j	dksjJ |j
dksxJ |jdksJ |jdt ksJ |jdksJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r  r  Tr&  Fr  rn   r   r   r8   ro   r   r  r  r~  r  r  r0   r0   r1   test_emulate_kernel_2_6_full  s    z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc              	   C   s   t ddi tjddd tjdd}|jdks8J |jd	t ksJJ |jd
ksXJ |j	dt ksjJ |j
dksxJ |jdksJ |jdksJ |jdksJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr  z   3    1   hda 1 2 3 4r  Tr&  Fr  rn   r   r   r8   r   )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  )r   r   r0   r0   r1   test_emulate_kernel_2_6_limited  s    z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc              	   C   s   t d}td|i tjdddv tjddd}t|dksFJ |d	 jd
ksXJ |d jd
ksjJ |d	 j	dks|J |d j	dksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nx            3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
            3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
            r  r  Fr&  Tperdiskr}  r   nvme0n1rn   Z	nvme0n1p1ro   )
r   r   r   r   r   r   r  rA   r  r  r  r0   r0   r1   test_emulate_include_partitions  s    
z8TestSystemDiskIoCounters.test_emulate_include_partitionsc              	   C   s  t d}td|iX tjddd* tjddd}|d u sBJ W d    n1 sV0    Y  W d    n1 st0    Y  dd }t d}td|ij tjdd	|d
: tjddd}|jdksJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr  r  r  Fr&  r  c                 S   s   | dkS )Nr  r0   )r   r0   r0   r1   is_storage_device  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr   rn   ro   )	r   r   r   r   r   r   r  r  r  )r   r   r   r  r0   r0   r1   test_emulate_exclude_partitions  s$    
H
z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc                 C   sh   dd }t jdd}tjdd|d t jdd}W d    n1 sF0    Y  t|t|ksdJ d S )Nc                 S   s   | dkS )Nr  r0   r1  r0   r0   r1   r    s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r  psutil._pslinux.os.path.existsr   )r   r  r   r   rA   )r   r  ZwprocfsZwsysfsr0   r0   r1   test_emulate_use_sysfs  s    *z/TestSystemDiskIoCounters.test_emulate_use_sysfsc              	   C   sn   dd }t jdd|dB tt t  W d    n1 sB0    Y  W d    n1 s`0    Y  d S )Nc                 S   s   dS )NFr0   r1  r0   r0   r1   r  !  s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr  Tr   )r   r   r   r  NotImplementedErrorr   r  )r   r  r0   r0   r1   test_emulate_not_impl   s    z.TestSystemDiskIoCounters.test_emulate_not_implN)
r   r   r   r  r  r  r  r  r  r  r0   r0   r0   r1   r    s    r  c                   @   sl   e Zd Zdd Zdd Zejjedddd Z	ejje
d	 d
dejjedddd Zdd ZdS )TestRootFsDeviceFinderc                 C   s(   t dj}t || _t || _d S )Nr  )r   rv   st_devmajorminor)r   r  r0   r0   r1   setUp-  s    zTestRootFsDeviceFinder.setUpc                 C   s   t  }tjdr|  n2tt |  W d    n1 sD0    Y  tjd| j d| j	 drv|
  n2tt |
  W d    n1 s0    Y  |  d S Nz/proc/partitionsz/sys/dev/block/r=   z/uevent)r   r   r  r  ask_proc_partitionsr   r  r   r  r  ask_sys_dev_blockask_sys_class_block)r   finderr0   r0   r1   test_call_methods2  s    
&
&z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSr   c                 C   s   t  }| d usJ d  } }}tjdr6| }tjd| j d| j dr\| }|	 }|pn|pn|}|r|r||ksJ |r|r||ksJ |r|r||ksJ d S r  )
r   findr   r  r  r  r  r  r  r  )r   r  r   r   cbaser0   r0   r1   test_comparisons@  s    z'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablec                 C   s"   t   }td}||ksJ d S )Nzfindmnt -o SOURCE -rn /)r   r  r   )r   r   Zfindmnt_valuer0   r0   r1   test_against_findmntT  s    
z+TestRootFsDeviceFinder.test_against_findmntc                 C   s   t jddgd\}t d }|js(J tsP|jdks:J |jt  ks^J n|jdks^J W d    n1 sr0    Y  d S )Nr  )	/dev/rootr  Zext4r  r&  r   r  )	r   r   r   r  r   r   Zdevicer   r  )r   r   r  r0   r0   r1   test_disk_partitions_mocked]  s    
z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)r   r   r   r  r  r   r  r  r   r  r  r  r  r  r0   r0   r0   r1   r  +  s   
r  c                   @   sb   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	 e
jjedddd Zdd ZdS )TestMiscc                 C   s(   t d}t }t|t|ks$J d S )Nz	boot time)rr   r   	boot_timerb   r   r0   r0   r1   test_boot_timer  s    zTestMisc.test_boot_timec              	      sV  |   }t| ttj|dd.}|d |d |d W d    n1 sZ0    Y  zt  fdd}tjd|d	~ t	t
 tt t
  W d    n1 s0    Y  tt t
jd
d W d    n1 s0    Y  tt t
  W d    n1 s$0    Y  tt t
jd
d W d    n1 s\0    Y  tt t
  W d    n1 s0    Y  tt t
jd
d W d    n1 s0    Y  |t
_t
 dksJ tt
 dks J t
jd
d}t|dksJ t
jd
d}ttt|dksBJ ttj|dd.}|d |d |d W d    n1 s0    Y  t
 dksJ tt
jd
ddksJ tt
 dksJ tttt
jd
ddksJ W d    n1 s0    Y  W t| t	t
 nt| t	t
 0 t
jdksRJ d S )Nrv   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 | g|R i |S )Nr  )r_   r   r   rE  r0   r1   r     s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr   r  Tr9  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r  )
get_testfnr   mkdirr>   r  rD   writer   r   r   r   r   r  r  r   cpu_percentcpu_times_percentr  sumrz   r  rmtree)r   Z	my_procfsrH   r   Zper_cpu_percentZper_cpu_times_percentr0   rE  r1   test_no_procfs_on_importw  sX    


(&*(,(,

**



z!TestMisc.test_no_procfs_on_importc                 C   sj  t d }td|iB}t  |js.J tjdd t  tjdd W d    n1 sb0    Y  t d }td|i t }|jsJ tjdd}t }tjdd}|dksJ t|dksJ t|dksJ t|dksJ tt	t|dksJ tt	t|dks&J |j
dks6J |jdksFJ W d    n1 s\0    Y  d S )Nz~            cpu   0 0 0 0 0 0 0 1 0 0
            cpu0  0 0 0 0 0 0 0 1 0 0
            cpu1  0 0 0 0 0 0 0 1 0 0
            r  Tr9  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   rO  )r   r   r   r   r   r  r   r  r  rz   r   user)r   r   r   r  Zcpu_percent_percpur  Zcpu_times_percent_percpur0   r0   r1   test_cpu_steal_decrease  s,    
*
z TestMisc.test_cpu_steal_decreasec              	   C   sp   t jdddN}tt tj  W d    n1 s:0    Y  |jsNJ W d    n1 sb0    Y  d S )Nr   Tr   )	r   r   r   r  rj  r   r  r  r   r   r0   r0   r1   test_boot_time_mocked  s    (zTestMisc.test_boot_time_mockedc                 C   s    t  D ]}|jdvsJ qd S )N>   z:0z:0.0)r   Zusershost)r   r  r0   r0   r1   
test_users  s    zTestMisc.test_usersc                 C   s  |   }t| z|t_tt t  W d    n1 sD0    Y  tt t	  W d    n1 sv0    Y  tt tj	dd W d    n1 s0    Y  tt t
  W d    n1 s0    Y  tt t  W d    n1 s0    Y  tt t  W d    n1 sF0    Y  tt t  W d    n1 sz0    Y  tt t  W d    n1 s0    Y  ttj t  W d    n1 s0    Y  W dt_ndt_0 d S )NTr9  r  )r  r   r  r   r  r   r  r  r   r   r  r  r  ri  r  NoSuchProcessProcess)r   Ztdirr0   r0   r1   test_procfs_path  s.    
&&*&((((*zTestMisc.test_procfs_pathzskip if pytest-parallelr   c                 C   s   t  v t }| }t|dks(J t|dd dd j}|j|ksLJ t|}|  |t	 vsnJ W d    n1 s0    Y  d S )Nr   c                 S   s   | j S rj   )id)rl   r0   r0   r1   <lambda>  rS   z)TestMisc.test_issue_687.<locals>.<lambda>)keyrn   )
r   r   r  threadsrA   sortedr  pidas_dictZpids)r   pr  tidptr0   r0   r1   test_issue_687  s    
zTestMisc.test_issue_687c                 C   sL   t ddi,}tt s J |js*J W d    n1 s>0    Y  d S )Nz/proc/%s/statusrP   )r   r   Z
pid_existsr   getpidr   r   r0   r0   r1   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  r  r0   r0   r0   r1   r  p  s   A'r  z
no batteryc                   @   sl   e Zd Zejjed 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 availabler   c                 C   sH   t d}t|dd  dd}t j}t|| dk sDJ d S )Nzacpi -br   rn   r[  rP   )	r   rb   r?   ru   replacer   sensors_batterypercentr   )r   rc   Z
acpi_valuer   r0   r0   r1   test_percent*  s    
zTestSensorsBattery.test_percentc                    sr    fdd}t  tjd|d@}t jdu s2J t jtjksFJ |jsPJ W d    n1 sd0    Y  d S )Nc                    s.   |  drtdS  | g|R i |S d S )Nz
AC0/onlinez	AC/online   1rD  r   r   r   rE  r0   r1   r   5  s    

z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr   r  T)	r>   r   r   r   r  power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDr   r   r   r   r0   rE  r1   test_emulate_power_plugged3  s    z-TestSensorsBattery.test_emulate_power_pluggedc                    s^    fdd}t  tjd|d,}t jdu s2J |js<J W d    n1 sP0    Y  d S )Nc                    s<   |  drt|  dr"tdS  | g|R i |S d S )Nr  /statusZchargingrD  r   r   r   r   rE  r0   r1   r   G  s
    


zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr   r  Tr>   r   r   r   r  r  r   r  r0   rE  r1   test_emulate_power_plugged_2D  s
    z/TestSensorsBattery.test_emulate_power_plugged_2c                    s^    fdd}t  tjd|d,}t jdu s2J |js<J W d    n1 sP0    Y  d S )Nc                    s.   |  drtdS  | g|R i |S d S )Nr     0r  r   rE  r0   r1   r   V  s    

zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr   r  Fr  r  r0   rE  r1   test_emulate_power_not_pluggedT  s
    z1TestSensorsBattery.test_emulate_power_not_pluggedc                    s^    fdd}t  tjd|d,}t jdu s2J |js<J W d    n1 sP0    Y  d S )Nc                    s<   |  drt|  dr"tdS  | g|R i |S d S )Nr  r   Zdischargingr  r   rE  r0   r1   r   d  s
    


zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr   r  Fr  r  r0   rE  r1    test_emulate_power_not_plugged_2a  s
    z3TestSensorsBattery.test_emulate_power_not_plugged_2c                    s^    fdd}t  tjd|d,}t jd u s2J |js<J W d    n1 sP0    Y  d S )Nc                    s<   |  drt|  dr"tdS  | g|R i |S d S )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/online#/sys/class/power_supply/BAT0/statuss   ???)r_   r   r   r   r   rE  r0   r1   r   t  s
    


zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr   r  r  r  r0   rE  r1   test_emulate_power_undeterminedq  s
    z2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sL   t ddi,}t jdks J |js*J W d    n1 s>0    Y  d S )N(/sys/class/power_supply/BAT0/energy_fullr  r   )r   r   r  r  r   r   r0   r0   r1   test_emulate_energy_full_0  s    z-TestSensorsBattery.test_emulate_energy_full_0c              
   C   s   t dtx t dtN tddi" t jdks8J W d    n1 sL0    Y  W d    n1 sj0    Y  W d    n1 s0    Y  d S )Nr  z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )r   r   r   r   r  r  r   r0   r0   r1   "test_emulate_energy_full_not_avail  s    z5TestSensorsBattery.test_emulate_energy_full_not_availc              
   C   s   t dtv t dtL t dt" t jd u s6J W d    n1 sJ0    Y  W d    n1 sh0    Y  W d    n1 s0    Y  d S )Nr  r  r	  )r   r   r   r  r  r  r0   r0   r1   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  r0   r0   r0   r1   r  '  s   
r  c                   @   s   e Zd Zdd ZdS )TestSensorsBatteryEmulatedc              	      s    fdd}t  tjddgdN}tjd|d }t d usBJ W d    n1 sV0    Y  W d    n1 st0    Y  |jsJ |jsJ d S )Nc                    sV   |  drtdS |  dr(tdS |  dr<tdS  | g|R i |S d S )Nz/energy_nowZ60000000z
/power_now0z/energy_fullZ60000001rD  r   r   r   rE  r0   r1   r     s    





z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockz
os.listdirZBAT0r&  r   r  )r>   r   r   r   r  r   )r   r   ZmlistdirZmopenr0   rE  r1   test_it  s    
L
z"TestSensorsBatteryEmulated.test_itN)r   r   r   r  r0   r0   r0   r1   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestSensorsTemperaturesc              	      s    fdd}t  tjd|d tjddgdX t d d	 }|jd
ksPJ |jdks^J |jdkslJ |jdkszJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                    s~   |  drtdS |  dr(tdS |  dr<tdS |  drPtdS |  d	rdtd
S  | g|R i |S d S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)rD  r   r   r   r   rE  r0   r1   r     s    









zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr   r  r%  z/sys/class/hwmon/hwmon0/temp1r&  r   r   r        >@g      D@      I@	r>   r   r   r   Zsensors_temperaturesr  rI  highcritical)r   r   tempr0   rE  r1   test_emulate_class_hwmon  s    z0TestSensorsTemperatures.test_emulate_class_hwmonc              	      s    fdd}dd }t  tjd|d tjdd|d	X t d
 d }|jdksXJ |jdksfJ |jdkstJ |jdksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                    sj   |  drtdS |  dr(tdS |  dr<tdS |  drPtdS  | g|R i |S d S )	NZ0_tempr  r  r  Z0_typer  typer   )rD  r   r   r   r   rE  r0   r1   r     s    







zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockc                 S   s.   | dv rg S | dkrdgS | dkr*ddgS g S )N>   z&/sys/class/hwmon/hwmon*/device/temp*_*z/sys/class/hwmon/hwmon*/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_tempr0   r1  r0   r0   r1   	glob_mock  s    zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr   r  r%  Tr   r   r   rP   r  r  r  )r   r   r"  r  r0   rE  r1   test_emulate_class_thermal  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)r   r   r   r   r#  r0   r0   r0   r1   r    s   r  c                   @   s   e Zd Zdd ZdS )TestSensorsFansc              	      s    fdd}t  tjd|dl tjddgd< t d d	 }|jd
ksPJ |jdks^J W d    n1 sr0    Y  W d    n1 s0    Y  d S )Nc                    sV   |  drtdS |  dr(tdS |  dr<tdS  | g|R i |S d S )Nr  r   z/fan1_labelr  z/fan1_input2000r  r   rE  r0   r1   r     s    





z4TestSensorsFans.test_emulate_data.<locals>.open_mockr   r  r%  z/sys/class/hwmon/hwmon2/fan1r&  r   r   r  i  )r>   r   r   r   Zsensors_fansr  rI  )r   r   fanr0   rE  r1   rK    s    
z!TestSensorsFans.test_emulate_dataN)r   r   r   rK  r0   r0   r0   r1   r$    s   r$  c                   @   s   e Zd Ze dd Zdd Zej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d Zdd  Zejje d!dd"d# Zd$d% Zd&d' Zd(d) Zd*S )+TestProcessc                 C   s   |   }tj|j \}}}t|jjdd}t|tdd |D  dk sVJ t|tdd |D  dk sxJ t|tdd |D  dk sJ d S )NF)groupedc                 s   s   | ]}|j |j V  qd S rj   )Zprivate_dirtyZprivate_cleanrk   r0   r0   r1   rm   '  rS   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>r   c                 s   s   | ]}|j V  qd S rj   )pssrk   r0   r0   r1   rm   *  rS   c                 s   s   | ]}|j V  qd S rj   )r   rk   r0   r0   r1   rm   +  rS   )	Zspawn_testprocr   r  r  r  _parse_smapsmemory_mapsr   r  )r   Zsprocussr)  r   mapsr0   r0   r1   test_parse_smaps_vs_memory_maps!  s    "z+TestProcess.test_parse_smaps_vs_memory_mapsc                 C   s   t d }tdt  d|i\}tjt }|	 \}}}|j
sPJ |dks\J |dkshJ |dkstJ W d    n1 s0    Y  d S )Nan              fffff0 r-xp 00000000 00:00 0                  [vsyscall]
            Size:                  1 kB
            Rss:                   2 kB
            Pss:                   3 kB
            Shared_Clean:          4 kB
            Shared_Dirty:          5 kB
            Private_Clean:         6 kB
            Private_Dirty:         7 kB
            Referenced:            8 kB
            Anonymous:             9 kB
            LazyFree:              10 kB
            AnonHugePages:         11 kB
            ShmemPmdMapped:        12 kB
            Shared_Hugetlb:        13 kB
            Private_Hugetlb:       14 kB
            Swap:                  15 kB
            SwapPss:               16 kB
            KernelPageSize:        17 kB
            MMUPageSize:           18 kB
            Locked:                19 kB
            VmFlags: rd ex
            /proc//smapsi l  r   i <  )r   r   r   r   r   r  r   r  r  r*  r   )r   r   r   r  r,  r)  r   r0   r0   r1   test_parse_smaps_mocked-  s    
z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYr   c                 C   s  dd }|   }t|d" ||jdks.J W d    n1 sB0    Y  t|" ||jdkshJ W d    n1 s|0    Y  t|d" ||jdksJ W d    n1 s0    Y  t|d" ||jdksJ W d    n1 s0    Y  t|d$ ||jdksJ W d    n1 s40    Y  t|d$ ||jdks^J W d    n1 st0    Y  t| t|d	$ ||jdksJ W d    n1 s0    Y  t| t|d
$ ||jdksJ W d    n1 s0    Y  d S )Nc                 S   sZ   t  }t t }| D ].}|jtj| kr:|  S t |kr qqqtdd S )Nztimeout looking for test file)	r   r  timer   
open_filesr  r   abspathrj  )fnamer  Z	giveup_atfiler0   r0   r1   get_test_fileQ  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filer   rr   zr+zw+za+rl   zx+)r  r>   moder   )r   r7  Ztestfnr0   r0   r1   test_open_files_modeO  s(    0
000444z TestProcess.test_open_files_modec              	      s   t    t|  d t fdd tjdtd*} g ksRJ |j	s\J W d    n1 sp0    Y  tjdt
tjdd*} g ksJ |j	sJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   c                      s   t  t  kS rj   rA   r3  r0   filesr  r0   r1   r  x  rS   z7TestProcess.test_open_files_file_gone.<locals>.<lambda>psutil._pslinux.os.readlinkr  rP   )r   r  r3  r>   r  r   r   r   r   r   r  errnoEINVALr   r0   r<  r1   test_open_files_file_goneq  s$    (
z%TestProcess.test_open_files_file_gonec              	      s   t    t|  dj t fdd tjdtd*} g ksRJ |j	s\J W d    n1 sp0    Y  W d    n1 s0    Y  d S )Nr   c                      s   t  t  kS rj   r;  r0   r<  r0   r1   r    rS   z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>r   r  )
r   r  r3  r>   r  r   r   r   r   r   r   r0   r<  r1   test_open_files_fd_gone  s    z#TestProcess.test_open_files_fd_gonec              
      s   t    t|  d t fdd d}tj|tt	j
ddT}td*  g ksjJ |jstJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   c                      s   t  t  kS rj   r;  r0   r<  r0   r1   r    rS   z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>r>  rP   r  psutil._pslinux.debug)r   r  r3  r>   r  r   r   r   r  r?  ENAMETOOLONGr   )r   Zpatch_pointr   r0   r<  r1   test_open_files_enametoolong  s    z(TestProcess.test_open_files_enametoolongc                 C   sX   t jdi d6}tjt  d u s,J |js6J W d    n1 sJ0    Y  d S )Nz)psutil._pslinux._psposix.get_terminal_mapr&  )	r   r   r   r  r  r   r  Zterminalr   r   r0   r0   r1   test_terminal_mocked  s    z TestProcess.test_terminal_mockedc                 C   s   t  }td}tjd|dd.}| ddgks8J |jsBJ W d    n1 sV0    Y  td}tjd|dd.}| g dksJ |jsJ W d    n1 s0    Y  d S )	Nzfoo bar r   Tr  foobarz	foo bar  rG  rH  rP   r   r  r   r   r   r   Zcmdliner   r   r  r  r   r0   r0   r1   test_cmdline_mocked  s    
(
zTestProcess.test_cmdline_mockedc                 C   s   t  }td}tjd|dd.}| ddgks8J |jsBJ W d    n1 sV0    Y  td}tjd|dd.}| g dksJ |jsJ W d    n1 s0    Y  d S )	Nzfoo bar r   Tr  rG  rH  z	foo bar  rI  rJ  rK  r0   r0   r1   test_cmdline_spaces_mocked  s    
(
z&TestProcess.test_cmdline_spaces_mockedc                 C   sd   t  }td}tjd|dd.}| ddgks8J |jsBJ W d    n1 sV0    Y  d S )Nzfoo bar r   Tr  rG  rH  rJ  rK  r0   r0   r1   test_cmdline_mixed_separators  s    
z)TestProcess.test_cmdline_mixed_separatorsc                 C   sZ   t jddd8 t  dks$J t  dks8J W d    n1 sL0    Y  d S )Nr>  z/home/foo (deleted)r&  z	/home/foo)r   r   r   r  execwdr  r0   r0   r1   !test_readlink_path_deleted_mocked  s
    z-TestProcess.test_readlink_path_deleted_mockedc              	      s    fdd}t  tjd|d2}t  }|js6J |g ksBJ W d    n1 sV0    Y   fdd}tjd|dH ttj	 t   W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                    s0   |  dt  drt | g|R i |S Nr/  z/task)r_   r   r  r   r   rE  r0   r1   open_mock_1  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_1r   r  c                    s0   |  dt  drt | g|R i |S rR  )r_   r   r  PermissionErrorr   rE  r0   r1   open_mock_2  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_2)
r>   r   r   r   r  r  r   r   r  ZAccessDenied)r   rS  r   r   rU  r0   rE  r1   test_threads_mocked  s    
*zTestProcess.test_threads_mockedc              	   C   s   t jdtd`}t jdg d2 t  }|js6J |dksBJ W d    n1 sV0    Y  W d    n1 st0    Y  d S )Nzpsutil._pslinux.readlinkr  zpsutil._pslinux.Process.cmdliner&  rP   )r   r   r   r   r  rO  r   )r   r   r   r0   r0   r1   test_exe_mocked  s    
zTestProcess.test_exe_mockedc              	   C   s~   t dt  dtT}t }tt |  W d    n1 sH0    Y  |j	s\J W d    n1 sp0    Y  d S )Nr/  r0  )
r   r   r  r   r   r  r   r  r+  r   r   r   r  r0   r0   r1   test_issue_1014  s    &zTestProcess.test_issue_1014c              
   C   s   t  }tdt  dtr tjdddD t	t j
 |  W d    n1 sZ0    Y  W d    n1 sx0    Y  W d    n1 s0    Y  d S )Nr/  z/statmr4  Fr&  )r   r  r   r   r  r   r   r   r   r  r  Zmemory_info)r   r  r0   r0   r1   test_issue_2418  s    zTestProcess.test_issue_2418r/  c              
   C   s   t jdttjdd}t jdddX}t }|  t	tj
}|tj W d    n1 sf0    Y  W d    n1 s0    Y  W d    n1 s0    Y  |jsJ |jsJ |jj|jksJ |jj| ksJ d S )Nzresource.prlimitrP   r  z"psutil._pslinux.Process._is_zombieTr&  )r   r   r  r?  ZENOSYSr   r  r   r   r  ZZombieProcessZrlimitZRLIMIT_NOFILEr   r   r  )r   r)  r*  r  cmr0   r0   r1   test_rlimit_zombie&  s     f

zTestProcess.test_rlimit_zombiec                 C   s  g d}d | }tdt  d|i t }| dksHJ | tj	ksZJ |
 dksjJ | dt t  ksJ | }|jdt ksJ |jd	t ksJ |jd
t ksJ |jdt ksJ |jdt ksJ | dksJ W d    n1 s0    Y  d S )N)*r  z(cat)Z1r  r  r  r  r  r  r  r  r  2345r  r  r  r  6r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rc  r  r  7rs   r/  z/statcatrn   r   r   r   r8   ro   r  )rD   r   r   r   r  r   r  r   statusZSTATUS_ZOMBIEppidZcreate_timer   r  r   r  systemchildren_userchildren_systemZiowaitZcpu_num)r   r   r   r  cpur0   r0   r1   test_stat_file_parsing:  s    ,z"TestProcess.test_stat_file_parsingc                 C   s  t d }tdt  d|i t }| j	dksBJ | j
dksTJ | dksdJ | }|jdkszJ |jdksJ |jd	ksJ | }|jd
ksJ |jdksJ |jdksJ |j ttdksJ W d    n1 s0    Y  d S )Nz            Uid:	1000	1001	1002	1003
            Gid:	1004	1005	1006	1007
            Threads:	66
            Cpus_allowed:	f
            Cpus_allowed_list:	0-7
            voluntary_ctxt_switches:	12
            nonvoluntary_ctxt_switches:	13r/  r   r      B   i  i  i  i  i  i  r  )r   r   r   r   r   r  r   r  num_ctx_switches	voluntaryinvoluntarynum_threadsuidsrealZ	effectiveZsavedgids_proc_get_eligible_cpuslistrC   )r   r   r  rs  ru  r0   r0   r1   test_status_file_parsingv  s    z$TestProcess.test_status_file_parsingc              	   C   s   t jdttjdd\}t }t d* | g ks<J |jsFJ W d    n1 sZ0    Y  W d    n1 sx0    Y  d S )Nr>  rP   r  rC  )	r   r   r  r?  rD  r   r  r  r   rX  r0   r0   r1   !test_net_connections_enametoolong  s    
z-TestProcess.test_net_connections_enametoolongN)r   r   r   r   r.  r1  r   r  r  r   r:  rA  rB  rE  rF  rL  rM  rN  rQ  rV  rW  rY  rZ  r
   r\  rl  ry  rz  r0   r0   r0   r1   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 rj   )r   r  proc)clsr0   r0   r1   
setUpClass  s    z#TestProcessAgainstStatus.setUpClassc              
   C   s   t jd| jj d}|D ]j}| }||r|dd }zt|W   W  d    S  t	y   | Y   W  d    S 0 qt	d|W d    n1 s0    Y  d S )Nr/  r   	r   rt   )
r   _psplatform	open_textr|  r  ru   r_   	partitionrb   rB   )r   Z	linestartrH   rI   r   r0   r0   r1   read_status_file  s    
z)TestProcessAgainstStatus.read_status_filec                 C   s    |  d}| j |ksJ d S )NzName:)r  r|  r   r   r   r0   r0   r1   	test_name  s    
z"TestProcessAgainstStatus.test_namec                 C   sH   |  d}||dd |d }|dd}| j |ksDJ d S )NzState:(rn   )rs   r   )r  r  rfindr  r|  rf  r  r0   r0   r1   test_status  s    
z$TestProcessAgainstStatus.test_statusc                 C   s    |  d}| j |ksJ d S )NzPPid:)r  r|  rg  r  r0   r0   r1   	test_ppid  s    
z"TestProcessAgainstStatus.test_ppidc                 C   s    |  d}| j |ksJ d S )NzThreads:)r  r|  rr  r  r0   r0   r1   test_num_threads  s    
z)TestProcessAgainstStatus.test_num_threadsc                 C   s:   |  d}ttt| dd }| j |ks6J d S )NzUid:rn   r8   )r  ry   rz   rb   r?   r|  rs  r  r0   r0   r1   	test_uids  s    
z"TestProcessAgainstStatus.test_uidsc                 C   s:   |  d}ttt| dd }| j |ks6J d S )NzGid:rn   r8   )r  ry   rz   rb   r?   r|  ru  r  r0   r0   r1   	test_gids  s    
z"TestProcessAgainstStatus.test_gidsc                 C   s@   |  d}| j j|ksJ |  d}| j j|ks<J d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r|  ro  rp  rq  r  r0   r0   r1   test_num_ctx_switches  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sN   |  d}dt|v rJtt|d\}}| j tt||d ksJJ d S )NCpus_allowed_list:r   rn   )	r  r   rz   rb   r?   r|  Zcpu_affinityrx  rC   )r   r   Zmin_Zmax_r0   r0   r1   test_cpu_affinity  s    
z*TestProcessAgainstStatus.test_cpu_affinityc                 C   sf   |  d}td}| jj  W d    n1 s60    Y  dt|v rX|jrbJ n
|jsbJ d S )Nr  zpsutil._pslinux.per_cpu_timesr   )r  r   r   r|  rv  rw  r   r   )r   r   r   r0   r0   r1   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  r0   r0   r0   r1   r{    s   

r{  c                   @   s   e Zd Zdd ZdS )	TestUtilsc                 C   sP   t jddd.}tjddks$J |js.J W d    n1 sB0    Y  d S )Nzos.readlinkzfoo (deleted)r&  rH  rG  )r   r   r   r  readlinkr   r   r0   r0   r1   test_readlink  s    zTestUtils.test_readlinkN)r   r   r   r  r0   r0   r0   r1   r    s   r  )]r  r`   
contextlibr?  r   r   r,  r{   r  r$   r+   r   r2  r   Zunittestr   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  r   r   r   r   r  r4  dirname__file__ZHEREr*   rU   r3   r5   r  r2   r4   r6   rO   rW   ri   rq   rr   r}   contextmanagerr   r   r  r  r   r   r   r   r   r   r  r.  rS  rV  rZ  rd  rt  r  r  r  r  r  r  r  r  r$  r'  r{  r  r0   r0   r0   r1   <module>   s   	

61 OXI  (63? D 7 B  ~R