o
    `qiY                    @   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% 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.Z/dZ0dZ1dZ2dZ3erd Z4d!d" Z5d#d$ Z6d%d& Z7d'd( Z8d)d* Z9d+d, Z:d-d. Z;d/d0 Z<d1d2 Z=ej>d3d4 Z?ej>d5d6 Z@e jAjBe d7d8G d9d: d:eZCe jAjBe d7d8G d;d< d<eZDe jAjBe d7d8G d=d> d>eZEe jAjBe d7d8G d?d@ d@eZFe jAjBe d7d8G dAdB dBeZGe jAjBe d7d8G dCdD dDeZHe jAjBe d7d8G dEdF dFeZIe jAjBe d7d8G dGdH dHeZJe jAjBe d7d8G dIdJ dJeZKe jAjBe d7d8G dKdL dLeZLe jAjBe d7d8G dMdN dNeZMe jAjBe d7d8G dOdP dPeZNe jAjBe d7d8G dQdR dReZOe jAjBe d7d8G dSdT dTeZPe jAjBe d7d8G dUdV dVeZQe jAjBe d7d8G dWdX dXeZRe jAjBe d7d8G dYdZ dZeZSe jAjBe d7d8G d[d\ d\eZTe jAjBe d7d8e jAjBe d]d8G d^d_ d_eZUe jAjBe d7d8G d`da daeZVe jAjBe d7d8G dbdc dceZWe jAjBe d7d8G ddde deeZXe jAjBe d7d8G dfdg dgeZYe jAjBe d7d8G dhdi dieZZe jAjBe d7d8G djdk dkeZ[dS )lzLinux specific tests.    N)mock)LINUX)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)RISCV64)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   v   dd l }t| d d d} ttjtj}t|| tt	
d| dd W  d    S 1 s4w   Y  d S Nr      ascii256s      )fcntlbytessocketAF_INET
SOCK_DGRAM	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer"   s r0   ^/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/psutil/tests/test_linux.pyget_ipv4_addressB   s   $r2   c                 C   r   r   )r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFNETMASKr+   r,   r-   r0   r0   r1   get_ipv4_netmaskN      $r4   c                 C   r   r   )r"   r#   r$   r%   r&   r'   r(   r)   SIOCGIFBRDADDRr+   r,   r-   r0   r0   r1   get_ipv4_broadcastZ   r5   r7   c           	         s   t d+}g }|D ]}| }|d | kr|| q	t|dkr(td| W d    n1 s2w   Y  tt|D ],}|| d   fddtdt dD }d|}ttj	|}t
tj	|||< q=|S )	Nz/proc/net/if_inet6r   zcould not find interface c                    s   g | ]
} ||d   qS )   r0   ).0jZunformattedr0   r1   
<listcomp>s   s    z&get_ipv6_addresses.<locals>.<listcomp>r9   :)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_addressesf   s(   




rP   c              	   C   s   dd l }t| d d d} ttjtj'}|| tt	d| }d
dd |dd	 D d d
 W  d    S 1 s?w   Y  d S )Nr   r   r   r    c                 S   s   g | ]}|d dqS )02xr>   r0   )r:   charr0   r0   r1   r=      s    z#get_mac_address.<locals>.<listcomp>   r!   r8   )r"   r#   r$   r%   r&   r(   r)   SIOCGIFHWADDRr+   r,   rE   )r.   r"   r/   infor0   r0   r1   get_mac_address|   s   "$rW   c                  C   sx   t ddgddid} | d}|D ]#}|dr4| \}}}}tdd}|t|t|t|  S qtd	|  )
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
ZSwapztotal used freez$can't find 'Swap' in 'free' output:
)r   r@   
startswithcollections
namedtupleintrC   )outlinesrJ   _totalusedrX   ntr0   r0   r1   	free_swap   s   

ri   c                  C   s   t ddgddid} | d}|D ](}|dr9dd	 | d
d D \}}}}tdd}||||||   S qtd|  )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   r:   xr0   r0   r1   	<genexpr>   s    zfree_physmem.<locals>.<genexpr>      ztotal used free shared outputz#can't find 'Mem' in 'free' output:
)r   r@   r_   r`   ra   rC   )rc   rd   rJ   rf   rg   rX   sharedrh   r0   r0   r1   free_physmem   s   

"rq   c                 C   sZ   t ddgddid}|dD ]}| }| |v r$t|dd   S qtd	| d
)Nvmstatz-srZ   r[   r\   r^    r   can't find z in 'vmstat' output)r   r@   striprb   rC   )statrc   rJ   r0   r0   r1   rr      s   rr   c                  C   s@   t ddg } d| v rtdS ttttd| 	 d S )NrX   z-VUNKNOWNzcan't determine free versionz\d+r8   )
r   ru   r   skiptuplemaprb   refindallr@   )rc   r0   r0   r1   get_free_version_info   s   
r}   c                 #   sP     fdd}t  tjdd|d}|V  W d   dS 1 s!w   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                    sD   | v r|  }t |trt|S t|S  | g|R i |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                 #   sR     fdd}t tjdd|d}|V  W d   dS 1 s"w   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   s>   t  dk r
tdS t j}t j}t|| tk sJ d S )Nr9   r   rn   free version too old)	r}   r   rx   rq   rg   r   r   absr   r   r0   r0   r1   	test_used   s
   



z,TestSystemVirtualMemoryAgainstFree.test_usedc                 C   *   t  j}t j}t|| tk sJ d S rj   )rq   rX   r   r   r   r   r   r0   r0   r1   	test_free      
z,TestSystemVirtualMemoryAgainstFree.test_freec                 C   sV   t  }|j}|dkrtdS t j}t|| tk s)J | 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S t|d  d }t j}t|| t	k s/J d S )	NrX   rY   r^   	availabler   z(free does not support 'available' columnrn   r8   )
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   .   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   sB   t  dk r
tdS tdd }t j}t|| tk sJ d S )Nr   r   zused memoryr   )	r}   r   rx   rr   r   r   rg   r   r   r   r0   r0   r1   r     s
   



z.TestSystemVirtualMemoryAgainstVmstat.test_usedc                 C   r   )Nzfree memoryr   )rr   r   r   rX   r   r   r   r0   r0   r1   r   /     
z.TestSystemVirtualMemoryAgainstVmstat.test_freec                 C   r   )Nzbuffer memoryr   )rr   r   r   buffersr   r   r   r0   r0   r1   test_buffers5  r   z1TestSystemVirtualMemoryAgainstVmstat.test_buffersc                 C   r   )Nzactive memoryr   )rr   r   r   activer   r   r   r0   r0   r1   test_active;  r   z0TestSystemVirtualMemoryAgainstVmstat.test_activec                 C   r   )Nzinactive memoryr   )rr   r   r   inactiver   r   r   r0   r0   r1   test_inactiveA  r   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	s#J t
|dks+J |d }dt|jv s8J d	t|jv sAJ d
t|jv sJJ dt|jv sSJ dt|jv s\J dt|jv seJ dt|jv snJ |jdksuJ |jdks|J |jdksJ |jdksJ |jdksJ |jdksJ |jdksJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   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   calledrB   r   messager   r   r   rp   r   r   slabr   r   r   wsretwr0   r0   r1   test_warnings_on_missesJ  s8   	


"z4TestSystemVirtualMemoryMocks.test_warnings_on_missesc                 C   s   i }t d}|D ]}| }t|d d ||d < q	W d    n1 s&w   Y  t|}d|v rG|d }t|| | d }|dk sIJ d S d S )Nr   rn   r   r   s   MemAvailable:d   r   )r   r@   rb   r   r   )r   ZmemsrI   rJ   rK   abZdiff_percentr0   r0   r1   test_avail_old_percentn  s   
z3TestSystemVirtualMemoryMocks.test_avail_old_percentc              	   C      t d }td|i<}tjdd}t }W d    n1 s#w   Y  |js-J |j	dks4J |d }dt
|jv sAJ W d    d S 1 sLw   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   r   )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 tdt6 tjdd }t	 }|j
dks&J |d }dt|jv s3J W d    n1 s=w   Y  W d    n1 sLw   Y  W d    d S W d    d S 1 sdw   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Q}t }|jsJ |jdksJ |jdks%J |j	dks,J |j
dks3J |jdks:J |jdksAJ |jd	ksHJ |jd
ksOJ |jdksVJ W d    d S 1 saw   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    12
"z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r   H  s    $
r   c                   @   s\   e Zd Zedd Zdd Ze dd Ze dd Zd	d
 Z	dd Z
dd Zdd ZdS )TestSystemSwapMemoryc                  C   s@   t d} |  }W d   n1 sw   Y  d|v od|v S )z3Return True if /proc/meminfo provides swap metrics.r   Nz
SwapTotal:z	SwapFree:)r?   read)rI   datar0   r0   r1   meminfo_has_swap_info  s   

z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   r   rj   )ri   rf   r   swap_memoryr   r   r   r   r   r0   r0   r1   r         
zTestSystemSwapMemory.test_totalc                 C   r   rj   )ri   rg   r   r   r   r   r   r0   r0   r1   r   %  r   zTestSystemSwapMemory.test_usedc                 C   r   rj   )ri   rX   r   r   r   r   r   r0   r0   r1   r   +  r   zTestSystemSwapMemory.test_freec              	   C   s   t jdddX}tjdd9}td t }|jsJ t|dks%J |d }dt	|j
v s2J |jdks9J |jdks@J W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S )	Npsutil._common.openTr   r   r   rn   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r   r   rB   r   r   sinsoutr   r   r   r   r   r0   r0   r1   test_missing_sin_sout1  s    

"z*TestSystemSwapMemory.test_missing_sin_soutc              	   C   s   t dtX}tjdd9}td t }|jsJ t|dks#J |d }dt	|j
v s0J |jdks7J |jdks>J W d    n1 sHw   Y  W d    d S W d    d S 1 s`w   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   rB   r   r   r   r   r   r0   r0   r1   test_no_vmstat_mocked@  s    

"z*TestSystemSwapMemory.test_no_vmstat_mockedc                 C   s   |   s	tdS td}t }W d    n1 sw   Y  |jr'J dd lm	} |
 \}}}}}}}||9 }||9 }|j|ksGJ t|j| tk sRJ 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_sysinfoQ  s   


z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   sD   t ddi}t  |jsJ W d    d S 1 sw   Y  d S )Nr       )r   r   r   r   r   r   r0   r0   r1   #test_emulate_meminfo_has_no_metricsb  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                   @      e Zd Zdd ZdS )TestSystemCPUTimesc                 C   s   t  j}tdt d d }ttt	|
d}|dkr&d|v s%J nd|vs,J |dkr7d|v s6J nd|vs=J |d	krId
|v sGJ d S d
|vsOJ d S )Nz\d+\.\d+\.\d+   r   .)r         steal)r   r   r!   Zguest)   r   r   Z
guest_nice)r   	cpu_times_fieldsr{   r|   osunamery   rz   rb   r@   )r   rK   Z
kernel_verZkernel_ver_infor0   r0   r1   test_fieldsr  s   
zTestSystemCPUTimes.test_fieldsN)r   r   r   r   r0   r0   r0   r1   r   p      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   sn   t d}|  }W d    n1 sw   Y  dt|v r3t|dd d }t |ks5J d S d S )Nr  -rn   )r?   r   ru   r   rb   r@   r   	cpu_count)r   rI   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=     s     zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r   listdirrB   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sJ d S )Nlscpu -pc                 S   s   g | ]	}| d s|qS )#r_   rk   r0   r0   r1   r=     s    z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>r^   Tr  )r   rB   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sJ |jsJ tjddd#}|j d u s0J |jdks7J |jd d dksBJ W d    n1 sLw   Y  t	d	d
}|
 }W d    n1 sew   Y  t|}tjd|dd}|j |ksJ W d    n1 sw   Y  td	di}|j |ksJ |jsJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   zpsutil._pslinux.os.sysconfr   r   Tr   r   
/proc/stat/proc/cpuinforbreturn_valuer   r   )psutil._pslinux_pslinuxZcpu_count_logicalr   r   rC   r   Z
call_countZ	call_argsr?   r   r   r   r   )r   r   originalr   rI   Zcpuinfo_data	fake_filer0   r0   r1   test_emulate_fallbacks  s<   



"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s,J d S )Nr  r^   r  ,rn   Fr  )r   setr@   r_   addr   r  rB   )r   rc   Zcore_idsrJ   rK   r0   r0   r1   r    s   

z*TestSystemCPUCountCores.test_against_lscpu>   i686x86_64zx86_64/i686 onlyc                 C   sh   t j }tjdg d}t j }|jsJ W d    n1 s!w   Y  |d ur0||ks2J d S 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(}t jddd}tj d u sJ W d    n1 s#w   Y  W d    n1 s2w   Y  |js<J |jsAJ d S )Nr+  r,  r   Tr   )r   r   r   r  r-  r   )r   m1m2r0   r0   r1   test_emulate_none  s   
z)TestSystemCPUCountCores.test_emulate_noneN)r   r   r   r   r  r   r#  r$  r  platformmachiner.  r1  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p'e	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                    sV    fdd}t jj tjd|dd t sJ W d    d S 1 s$w   Y  d S )Nc                       |  drdS  | S )N&/sys/devices/system/cpu/cpufreq/policyFr  r!  Zorig_existsr0   r1   path_exists_mock     
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockos.path.existsT)r   r   )r   r!  r"  r   r   r   cpu_freq)r   r:  r0   r9  r1   test_emulate_use_second_file  s   "z3TestSystemCPUFrequency.test_emulate_use_second_filez% does not report mhz in /proc/cpuinfoc                    s    fdd}t jj zctjd|d< ttj t }|s"J ||j	dks)J |j
dks0J tjddD ]}|j	dks?J |j
dksFJ q6W d    n1 sQw   Y  W ttj tt d S W ttj tt d S ttj tt w )Nc                    r6  )Nz/sys/devices/system/cpu/Fr  r8  Zos_path_existsr0   r1   r:    r;  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr<  r          TZpercpu)r   r!  r"  r   r   r   r   r  r=  maxmin)r   r:  r   freqr0   r?  r1   test_emulate_use_cpuinfo  s*   






z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      s    fdd}t  tjd|dK tjddd+ t }|jdks#J |jd	kr/|jd
ks/J |jd	kr;|jdks;J W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S )Nc                    s   |  dr| drtdS |  dr| drtdS |  dr-| dr-tdS | dkr6td	S  | g|R i |S )
N/scaling_cur_freqr7     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  r<  Tr,       @@r@       @g     @r?   r   r   r   r=  currentrC  rB  r   r   rD  r0   rM  r1   test_emulate_data   s   

"z(TestSystemCPUFrequency.test_emulate_datac              
      s`   fdd}t  tjd|d tjdddw tjdd	d` tjdd
}|d jdks/J |d jdkr?|d jdks?J |d jdkrO|d jdksOJ |d jdksXJ |d jdkrh|d jdkshJ |d jdkrx|d jdksxJ W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                    s   | }| dr|drtdS | dr |dr tdS | dr/|dr/tdS | dr>|dr>td	S | drM|drMtd
S | dr\|dr\tdS | dkretdS  | g|R i |S )NrF  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rH     200000rJ  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rG  rI  r  s#   cpu MHz     : 100
cpu MHz     : 400rK  )r   r   r   nrM  r0   r1   r   B  s8   






z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr   r  r<  Tr,  !psutil._pslinux.cpu_count_logicalr   rA  r         Y@r@  g      i@g     r@rn   g      y@rN  rO  rP  rR  r0   rM  r1   test_emulate_multi_cpu@  s2   "z-TestSystemCPUFrequency.test_emulate_multi_cpuc              
      s    fdd}t  tjd|dJ tjddd* tjdd	d t }|jd
ks+J W d    n1 s5w   Y  W d    n1 sDw   Y  W d    d S W d    d S 1 s\w   Y  d S )Nc                    sJ   |  drt|  drtdS | dkrtdS  | g|R i |S )NrF  z/cpuinfo_cur_freqrT  r  s   cpu MHz     : 200)rL  r   r   r   r   rM  r0   r1   r   v  s   



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr   r  r<  Tr,  rV  rn      )r?   r   r   r   r=  rQ  rR  r0   rM  r1   %test_emulate_no_scaling_cur_freq_files  s   
"z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r   r   r   r   r  r   r   r   r>  r   r2  r3  rE  rS  rX  rZ  r0   r0   r0   r1   r4    s$    

2r4  c                   @   r   )TestSystemCPUStatsc                 C   s*   t d}t j}t|| dk sJ d S )N
interruptsi  )rr   r   Z	cpu_statsr\  r   r   r0   r0   r1   test_interrupts  r   z"TestSystemCPUStats.test_interruptsN)r   r   r   r]  r0   r0   r0   r1   r[    s    	r[  c                   @   s&   e Zd Zejje dddd ZdS )TestLoadAvgr5  r   c                 C   s   t  }td}|  }W d    n1 sw   Y  tt|d |d  dk s.J tt|d |d  dk s>J tt|d |d  dk sNJ d S )Nz/proc/loadavgr   rn   r   )r   
getloadavgr?   r   r@   r   float)r   r   rI   Z
proc_valuer0   r0   r1   test_getloadavg  s   
  $zTestLoadAvg.test_getloadavgN)r   r   r   r   r  r   r	   ra  r0   r0   r0   r1   r^    s    r^  c                   @   r   )TestSystemNetIfAddrsc                 C   s   t   D ]_\}}|D ]X}|jt jkr|jt|ksJ q|jtjkrN|jt	|ks-J |j
t|ks6J |jd urE|jt|ksDJ qt|dksMJ q|jtjkrd|jdd }|t|v sdJ qqd S )Nz0.0.0.0%r   )r   Znet_if_addrsitemsfamilyZAF_LINKaddressrW   r$   r%   r2   netmaskr4   	broadcastr7   rG   r@   rP   )r   r   addrsaddrrf  r0   r0   r1   test_ips  s    
zTestSystemNetIfAddrs.test_ipsN)r   r   r   rk  r0   r0   r0   r1   rb    r   rb  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 ]1\}}z	td| }W n	 ty   Y qw |jd|v ks(J ||jtt	d|d ks7J qd S )N	ifconfig RUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsrd  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 ])\}}td| d}|jt|  ks J W d    n1 s*w   Y  qd S )Nz/sys/class/net/z/mtu)r   rq  rd  r?   rs  rb   r   ru   )r   r   rt  rI   r0   r0   r1   test_mtu  s   zTestSystemNetIfStats.test_mtuc              	   C   s
  d}t   D ]s\}}z	td| }W n	 ty   Y qw td|}|rNt| dkrN|d7 }t	|
d d}t	|jd}||ksMJ qtd|}|r{t| dkr{|d7 }t	|
d  }t	|jd}||ks{J q|std	S d S )
Nr   ro  zflags=(\d+)?<(.*?)>r   rn   r&  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   rq  rd  r   rr  r{   r  rB   rM   r'  grouplowerr@   flagsr   Zfail)r   Zmatches_foundr   rt  rc   matchZifconfig_flagsZpsutil_flagsr0   r0   r1   
test_flags  s.   
zTestSystemNetIfStats.test_flagsN)r   r   r   r   r  r   r#  r$  ru  rv  r{  r0   r0   r0   r1   rl    s    
rl  c                   @   s2   e Zd Zejjed dde dd Z	dS )TestSystemNetIOCountersrm  rn  r   c              	   C   s  dd }t jddd}| D ]|\}}z||}W n	 ty"   Y qw t|j|d  dk s0J t|j|d  dk s=J t|j|d	  d
k sJJ t|j|d  d
k sWJ t|j	|d  dk sdJ t|j
|d  dk sqJ t|j|d  dk s~J t|j|d  dk sJ 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 )Nro  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   rm    s&   z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernicnowrapr  i (  r  r}  r   r~  r  
   r  r  r  )r   net_io_countersrd  rr  r   r  r  r}  r~  r  r  r  r  )r   rm  Znior   rt  Zifconfig_retr0   r0   r1   ru    s"   z-TestSystemNetIOCounters.test_against_ifconfigN)
r   r   r   r   r  r   r#  r$  r   ru  r0   r0   r0   r1   r|  
  s    r|  c                   @   s8   e Zd Zejdedejddddd Zdd	 Zd
S )TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr  zpsutil._pslinux.supports_ipv6Fr,  c              	   C   sd   t  t jt j }z|d W n	 ty   Y nw tjdd W d    d S 1 s+w   Y  d S )N)z::1r   Zinet6kind)r$   rG   SOCK_STREAMbindOSErrorr   net_connections)r   Zsupports_ipv6rH   r/   r0   r0   r1   test_emulate_ipv6_unsupported@  s   "z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc                 C   sR   t d}td|i}tjdd |jsJ W d    d S 1 s"w   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_unixK  s
   
"z*TestSystemNetConnections.test_emulate_unixN)r   r   r   r   r   rC   r  r  r0   r0   r0   r1   r  >  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s"J t|j| tk s-J t|j| tk s8J q
d S )Nc                 S   s~   t d|  d }|d}|d |d}| d d \}}}}|dkr+d}t|t|t|}}}||||fS )Nzdf -P -B 1 ""r^   r   r9   nonerQ   )r   ru   r@   poprb   )r!  rc   rd   rJ   devrf   rg   rX   r0   r0   r1   dfe  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_df^  s   z(TestSystemDiskPartitions.test_against_dfc              	   C   s  t d}| }W d    n1 sw   Y  d|v r+t D ]
}|jdkr* d S q td}tjd|ddD}tjddgd	#}t }|j	sKJ |j	sPJ |sTJ |d
 jdks]J W d    n1 sgw   Y  W d    d S W d    d S 1 sw   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   rI   r   r  r  r/  r0  r   r0   r0   r1   test_zfs_fsw  s6   





"z$TestSystemDiskPartitions.test_zfs_fsc              	   C   s   zAt jddd&}tt t  W d    n1 sw   Y  |js'J W d    n1 s1w   Y  W dt_d S W dt_d S dt_w )Nzos.path.realpathz/non/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  \  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     d}t d|iq tjdddQ tjdd}|jdksJ |jd	ks%J |jd
t ks.J |j	dks5J |j
dks<J |jdksCJ |jdt ksLJ |jdksSJ |jdksZJ W d    n1 sdw   Y  W d    d S W d    d S 1 s|w   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   r9   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   r  )Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r  r  Tr,  Fr  rn   r   r   r9   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q tjdddQ tjdd}|jdksJ |jd	t ks%J |jd
ks,J |j	dt ks5J |j
dks<J |jdksCJ |jdksJJ |jdksQJ |jdksXJ W d    n1 sbw   Y  W d    d S W d    d S 1 szw   Y  d S )Nr  z   3    1   hda 1 2 3 4r  Tr,  Fr  rn   r   r   r9   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; tjddd}t|dks#J |d	 jd
ks,J |d jd
ks5J |d	 j	dks>J |d j	dksGJ W d    n1 sQw   Y  W d    d S W d    d S 1 siw   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  rB   r  r  r  r0   r0   r1   test_emulate_include_partitions  s   
"z8TestSystemDiskIoCounters.test_emulate_include_partitionsc              	   C   s,  t d}td|i, tjddd tjddd}|d u s!J W d    n1 s+w   Y  W d    n1 s:w   Y  dd }t d}td|i> tjdd	|d
 tjddd}|jdksfJ |jdksmJ W d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )Nr  r  r  Fr,  r  c                 S      | dkS )Nr  r0   r   r0   r0   r1   is_storage_device     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  s2   

"z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc                 C   sh   dd }t jdd}tjdd|d t jdd}W d    n1 s#w   Y  t|t|ks2J d S )Nc                 S   r  )Nr  r0   r8  r0   r0   r1   r"    r  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r  psutil._pslinux.os.path.existsr   )r   r  r   r   rB   )r   r"  ZwprocfsZwsysfsr0   r0   r1   test_emulate_use_sysfs  s   z/TestSystemDiskIoCounters.test_emulate_use_sysfsc              	   C   s   dd }t jdd|d* tt t  W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S )Nc                 S   s   dS )NFr0   r8  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|  ntt |  W d    n1 s"w   Y  tjd| j d| j	 dr;|
  ntt |
  W d    n1 sOw   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_methods+  s   



z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSr   c                 C   s   t  }| d usJ d  } }}tjdr| }tjd| j d| j dr.| }|	 }|p7|p7|}|rB|rB||ksBJ |rL|rL||ksLJ |rV|rX||ksZJ d S d S d S r  )
r   findr   r!  r"  r  r  r  r  r  )r   r  r   r   cbaser0   r0   r1   test_comparisons9  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_findmntM  s   
z+TestRootFsDeviceFinder.test_against_findmntc                 C   s   t jddgd7}t d }|jsJ ts(|jdksJ |jt  ks'J n|jdks/J W d    d S W d    d S 1 sBw   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_mockedV  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                   @   s`   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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_timek  s   zTestMisc.test_boot_timec              	      sJ  |   }t| ttj|dd}|d |d |d W d    n1 s-w   Y  z]t  fdd}tjd|d	9 t	t
 tt t
  W d    n1 s]w   Y  tt t
jd
d W d    n1 sxw   Y  tt t
  W d    n1 sw   Y  tt t
jd
d W d    n1 sw   Y  tt t
  W d    n1 sw   Y  tt t
jd
d W d    n1 sw   Y  |t
_t
 dksJ tt
 dksJ t
jd
d}t|dks	J t
jd
d}ttt|dksJ ttj|dd}|d |d |d W d    n	1 s@w   Y  t
 dksNJ tt
jd
ddks[J tt
 dksfJ tttt
jd
ddksvJ W d    n	1 sw   Y  W t| t	t
 n
t| t	t
 w t
jdksJ 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   rM  r0   r1   r   |  s   
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr   r  TrA  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!  rE   writer   r   r   r   r   r  r  r   cpu_percentcpu_times_percentr  sumrz   r#  rmtree)r   Z	my_procfsrI   r   Zper_cpu_percentZper_cpu_times_percentr0   rM  r1   test_no_procfs_on_importp  sj   







"
+


z!TestMisc.test_no_procfs_on_importc                 C   sb  t d }td|i!}t  |jsJ tjdd t  tjdd W d    n1 s1w   Y  t d }td|id t }|jsMJ tjdd}t }tjdd}|dkscJ t|dkskJ t|dkssJ t|dks{J tt	t|dksJ tt	t|dksJ |j
dksJ |jdksJ W d    d S 1 sw   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  TrA  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   rW  )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  s8   


"z TestMisc.test_cpu_steal_decreasec              	   C   sr   t jddd(}tt tj  W d    n1 sw   Y  |js'J W d    d S 1 s2w   Y  d S )Nr   Tr   )	r   r   r   r  rr  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:0.0z: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 s!w   Y  tt t	  W d    n1 s:w   Y  tt tj	dd W d    n1 sUw   Y  tt t
  W d    n1 snw   Y  tt t  W d    n1 sw   Y  tt t  W d    n1 sw   Y  tt t  W d    n1 sw   Y  tt t  W d    n1 sw   Y  ttj t  W d    n1 sw   Y  W dt_d S W dt_d S dt_w )NTrA  r  )r  r   r  r   r  r   r  r  r   r   r  r  r  rq  r  NoSuchProcessProcess)r   Ztdirr0   r0   r1   test_procfs_path  sD   









zTestMisc.test_procfs_pathserialr  c                 C   s   t  }t| }t : | }t||d ksJ t|dd dd j}|j|ks.J t |}|  |t 	 vs?J W d    d S 1 sJw   Y  d S )Nrn   c                 S   s   | j S rj   )id)rl   r0   r0   r1   <lambda>  s    z)TestMisc.test_issue_687.<locals>.<lambda>)key)
r   r  rB   threadsr   sortedr  pidas_dictZpids)r   pZnthreadsr  tidptr0   r0   r1   test_issue_687  s   	
"zTestMisc.test_issue_687c                 C   sN   t ddi}tt sJ |jsJ W d    d S 1 s w   Y  d S )Nz/proc/%s/statusrQ   )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  Zxdist_groupr  r   r0   r0   r0   r1   r  i  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 s"J d S )Nzacpi -br&  rn   rc  rQ   )	r   rb   r@   ru   replacer   sensors_batterypercentr   )r   rc   Z
acpi_valuer   r0   r0   r1   test_percent#  s   
zTestSensorsBattery.test_percentc                    st    fdd}t  tjd|d!}t jdu sJ t jtjks#J |js(J W d    d S 1 s3w   Y  d S )Nc                    *   |  dr
tdS  | g|R i |S )Nz
AC0/onlinez	AC/online   1rL  r   r   r   rM  r0   r1   r   .     

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   rM  r1   test_emulate_power_plugged,  s   "z-TestSensorsBattery.test_emulate_power_pluggedc                    `    fdd}t  tjd|d}t jdu sJ |jsJ W d    d S 1 s)w   Y  d S )Nc                    8   |  drt|  drtdS  | g|R i |S )Nr  /statusZchargingrL  r   r   r   r   rM  r0   r1   r   @  
   


zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr   r  Tr?   r   r   r   r  r  r   r  r0   rM  r1   test_emulate_power_plugged_2=     "z/TestSensorsBattery.test_emulate_power_plugged_2c                    r  )Nc                    r  )Nr     0r	  r   rM  r0   r1   r   O  r
  zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr   r  Fr  r  r0   rM  r1   test_emulate_power_not_pluggedM  s   "z1TestSensorsBattery.test_emulate_power_not_pluggedc                    r  )Nc                    r  )Nr  r  Zdischargingr  r   rM  r0   r1   r   ]  r  zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr   r  Fr  r  r0   rM  r1    test_emulate_power_not_plugged_2Z  r  z3TestSensorsBattery.test_emulate_power_not_plugged_2c                    s`    fdd}t  tjd|d}t jd u sJ |jsJ W d    d S 1 s)w   Y  d S )Nc                    r  )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/online#/sys/class/power_supply/BAT0/statuss   ???)r_   r   r   r   r   rM  r0   r1   r   m  s
   


zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr   r  r  r  r0   rM  r1   test_emulate_power_undeterminedj  s   "z2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sN   t ddi}t jdksJ |jsJ W d    d S 1 s w   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E t dt' tddi t jdksJ W d    n1 s&w   Y  W d    n1 s5w   Y  W d    d S W d    d S 1 sMw   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D t dt& t dt t jd u sJ W d    n1 s%w   Y  W d    n1 s4w   Y  W d    d S W d    d S 1 sLw   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                   @   r   )TestSensorsBatteryEmulatedc              	      s    fdd}t  tjddgd'}tjd|d}t d us!J W d    n1 s+w   Y  W d    n1 s:w   Y  |jsDJ |jsIJ d S )Nc                    R   |  dr
tdS |  drtdS |  drtdS  | g|R i |S )Nz/energy_nowZ60000000z
/power_now0z/energy_fullZ60000001rL  r   r   r   rM  r0   r1   r        





z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockz
os.listdirZBAT0r,  r   r  )r?   r   r   r   r  r   )r   r   ZmlistdirZmopenr0   rM  r1   test_it  s   

z"TestSensorsBatteryEmulated.test_itN)r   r   r   r(  r0   r0   r0   r1   r#    r   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M tjddgd, t d d	 }|jd
ks(J |jdks/J |jdks6J |jdks=J W d    n1 sGw   Y  W d    d S W d    d S 1 s_w   Y  d S )Nc                    sz   |  dr
tdS |  drtdS |  drtdS |  dr(tdS |  d	r2td
S  | g|R i |S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)rL  r   r   r   r   rM  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+  rQ  highcritical)r   r   tempr0   rM  r1   test_emulate_class_hwmon  s   "z0TestSensorsTemperatures.test_emulate_class_hwmonc              	      s    fdd}dd }t  tjd|dM tjdd|d	, t d
 d }|jdks,J |jdks3J |jdks:J |jdksAJ W d    n1 sKw   Y  W d    d S W d    d S 1 scw   Y  d S )Nc                    sf   |  dr
tdS |  drtdS |  drtdS |  dr(tdS  | g|R i |S )	NZ0_tempr-  r3  r,  Z0_typer2  typer   )rL  r   r   r   r   rM  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*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr0   r8  r0   r0   r1   	glob_mock  s   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr   r  r+  Tr   r   r   rQ   r.  r/  r0  )r   r   r6  r3  r0   rM  r1   test_emulate_class_thermal  s   "z2TestSensorsTemperatures.test_emulate_class_thermalN)r   r   r   r4  r7  r0   r0   r0   r1   r)    s    r)  c                   @   r   )TestSensorsFansc              	      s    fdd}t  tjd|d? tjddgd t d d	 }|jd
ks(J |jdks/J W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nc                    r$  )Nr*  r   z/fan1_labelr+  z/fan1_input2000r&  r   rM  r0   r1   r     r'  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+  rQ  )r   r   fanr0   rM  r1   rS    s   
"z!TestSensorsFans.test_emulate_dataN)r   r   r   rS  r0   r0   r0   r1   r8    r   r8  c                   @   s   e 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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+d, Zd-S ).TestProcessc                 C   s   |   }tj|j \}}}t|jjdd}t|tdd |D  dk s+J t|tdd |D  dk s<J t|tdd |D  dk sMJ d S )NF)groupedc                 s   s    | ]	}|j |j V  qd S rj   )Zprivate_dirtyZprivate_cleanrk   r0   r0   r1   rm      s    z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>r   c                 s       | ]}|j V  qd S rj   )pssrk   r0   r0   r1   rm   #      c                 s   r=  rj   )r   rk   r0   r0   r1   rm   $  r?  )	Zspawn_subprocr   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
s(J |dks.J |dks4J |dks:J W d    d S 1 sEw   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  rB  r>  r   r0   r0   r1   test_parse_smaps_mocked&  s   
"z#TestProcess.test_parse_smaps_mockedc                 C   s  dd }|   }t|d ||jdksJ W d    n1 s!w   Y  t| ||jdks4J W d    n1 s>w   Y  t|d ||jdksRJ W d    n1 s\w   Y  t|d ||jdkspJ W d    n1 szw   Y  t|d ||jdksJ W d    n1 sw   Y  t|d ||jdksJ W d    n1 sw   Y  t| t|d	 ||jdksJ W d    n1 sw   Y  t| t|d
 ||jdksJ W d    d S 1 sw   Y  d S )Nc                 S   sP   t  }t t }	 | D ]}|jtj| kr|  S t |kr& nqqrj   )	r   r  timer   
open_filesr!  r   abspathrr  )fnamer  Z	giveup_atfiler0   r0   r1   get_test_fileH  s   z7TestProcess.test_open_files_mode.<locals>.get_test_filer   rr   zr+zw+za+rl   zx+)r  r?   moder   )r   rM  Ztestfnr0   r0   r1   test_open_files_modeG  s8   
"z TestProcess.test_open_files_modec              	      s   t    t|  df t fdd tjdtd} g ks)J |j	s.J W d    n1 s8w   Y  tjdt
tjdd} g ksQJ |j	sVJ W d    n1 s`w   Y  W d    d S W d    d S 1 sxw   Y  d S )Nr   c                         t  t  kS rj   rB   rI  r0   filesr  r0   r1   r  o      z7TestProcess.test_open_files_file_gone.<locals>.<lambda>psutil._pslinux.os.readlinkr  rQ   )r   r  rI  r?   r  r   r   r   r   r   r  errnoEINVALr   r0   rS  r1   test_open_files_file_goneh  s.   
"z%TestProcess.test_open_files_file_gonec              	      s   t    t|  d> t fdd tjdtd} g ks)J |j	s.J W d    n1 s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )Nr   c                      rQ  rj   rR  r0   rS  r0   r1   r    rU  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>r   r  )
r   r  rI  r?   r  r   r   r   r   r   r   r0   rS  r1   test_open_files_fd_gone  s   "z#TestProcess.test_open_files_fd_gonec              
      s   t    t|  dY t fdd d}tj|tt	j
dd*}td  g ks5J |js:J W d    n1 sDw   Y  W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S )Nr   c                      rQ  rj   rR  r0   rS  r0   r1   r    rU  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>rV  rQ   r  psutil._pslinux.debug)r   r  rI  r?   r  r   r   r   r  rW  ENAMETOOLONGr   )r   Zpatch_pointr   r0   rS  r1   test_open_files_enametoolong  s$   "z(TestProcess.test_open_files_enametoolongc                 C   sZ   t jdi d}tjt  d u sJ |jsJ W d    d S 1 s&w   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      t  }td}tjd|dd}| ddgksJ |js!J W d    n1 s+w   Y  td}tjd|dd}| g dksHJ |jsMJ W d    d S 1 sXw   Y  d S )	Nzfoo bar r   Tr  foobarz	foo bar  r`  ra  rQ   r   r  r   r   r   r   Zcmdliner   r   r  r  r   r0   r0   r1   test_cmdline_mocked  "   

"zTestProcess.test_cmdline_mockedc                 C   r_  )	Nzfoo bar r   Tr  r`  ra  z	foo bar  rb  rc  rd  r0   r0   r1   test_cmdline_spaces_mocked  rf  z&TestProcess.test_cmdline_spaces_mockedc                 C   sf   t  }td}tjd|dd}| ddgksJ |js!J W d    d S 1 s,w   Y  d S )Nzfoo bar r   Tr  r`  ra  rc  rd  r0   r0   r1   test_cmdline_mixed_separators  s   
"z)TestProcess.test_cmdline_mixed_separatorsc                 C   s\   t jddd t  dksJ t  dksJ W d    d S 1 s'w   Y  d S )NrV  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}t  }|jsJ |g ks!J W d    n1 s+w   Y   fdd}tjd|d- ttj	 t   W d    n1 sUw   Y  W d    d S W d    d S 1 smw   Y  d S )Nc                    0   |  dt  drt | g|R i |S NrE  z/task)r_   r   r  r   r   rM  r0   r1   open_mock_1     z4TestProcess.test_threads_mocked.<locals>.open_mock_1r   r  c                    rl  rm  )r_   r   r  PermissionErrorr   rM  r0   r1   open_mock_2  ro  z4TestProcess.test_threads_mocked.<locals>.open_mock_2)
r?   r   r   r   r  r  r   r   r  ZAccessDenied)r   rn  r   r   rq  r0   rM  r1   test_threads_mocked  s   
"zTestProcess.test_threads_mockedc              	   C   s   t jdtd9}t jdg d t  }|jsJ |dks!J W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S )Npsutil._pslinux.readlinkr  zpsutil._pslinux.Process.cmdliner,  rQ   )r   r   r   r   r  ri  r   r   r   r   r0   r0   r1   test_exe_mocked  s   
"zTestProcess.test_exe_mockedc                 C   sV   t jdtd}t  }|jsJ |dksJ W d    d S 1 s$w   Y  d S )Nrs  r  rQ   )r   r   r   r   r  rj  r   rt  r0   r0   r1   test_cwd_mocked  s   
"zTestProcess.test_cwd_mockedc              	   C   s   t dt  dt+}t }tt |  W d    n1 s$w   Y  |j	s.J W d    d S 1 s9w   Y  d S )NrE  rF  )
r   r   r  r   r   r  r   r  rA  r   r   r   r  r0   r0   r1   test_issue_1014
  s   
"zTestProcess.test_issue_1014c              
   C   s   t  }tdt  dtB tjddd" t	t j
 |  W d    n1 s-w   Y  W d    n1 s<w   Y  W d    d S W d    d S 1 sTw   Y  d S )NrE  z/statmr<  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_2418r5  r   c              
   C   s   t jdttjddC}t jddd,}t }|  t	tj
}|tj W d    n1 s3w   Y  W d    n1 sBw   Y  W d    n1 sQw   Y  |js[J |js`J |jj|jksiJ |jj| kssJ d S )Nzresource.prlimitrQ   r  z"psutil._pslinux.Process._is_zombieTr,  )r   r   r  rW  ZENOSYSr   r  r   r   r  ZZombieProcessZrlimitZRLIMIT_NOFILEr   r  r  )r   r/  r0  r  cmr0   r0   r1   test_rlimit_zombie  s*   


zTestProcess.test_rlimit_zombiec                 C   s  g d}d | }tdt  d|im t }| dks$J | tj	ks-J |
 dks5J | dt t  ksCJ | }|jdt ksPJ |jd	t ksYJ |jd
t ksbJ |jdt kskJ |jdt kstJ | dks|J W d    d S 1 sw   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%  r  r%  r%  7rs   rE  z/statcatrn   r   r   r   r9   ro   r  )rE   r   r   r   r  r   r  r   statusZSTATUS_ZOMBIEppidcreate_timer   r  r   r  systemchildren_userchildren_systemZiowaitZcpu_num)r   r   r   r  cpur0   r0   r1   test_stat_file_parsing2  s    ,"z"TestProcess.test_stat_file_parsingc                 C   s  t d }tdt  d|if t }| j	dks!J | j
dks*J | dks2J | }|jdks=J |jdksDJ |jd	ksKJ | }|jd
ksVJ |jdks]J |jdksdJ |j ttdksqJ W d    d S 1 s|w   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:	13rE  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	effectivesavedgids_proc_get_eligible_cpuslistrD   )r   r   r  r  r  r0   r0   r1   test_status_file_parsingn  s$   "z$TestProcess.test_status_file_parsingc              	   C   s   t jdttjdd7}t }t d | g ksJ |js#J W d    n1 s-w   Y  W d    d S W d    d S 1 sEw   Y  d S )NrV  rQ   r  r[  )	r   r   r  rW  r\  r   r  r  r   rw  r0   r0   r1   !test_net_connections_enametoolong  s   
"z-TestProcess.test_net_connections_enametoolongc                 C   sF   t  }|j |jjddksJ | d |jjddks!J d S )NT)	monotonicrn   )r   r  r  r  Z
_get_identry  r0   r0   r1   test_create_time_monotonic  s   "z&TestProcess.test_create_time_monotonicN)r   r   r   r   rD  rG  rP  rY  rZ  r]  r^  re  rg  rh  rk  rr  ru  rv  rx  rz  r   r  r   r
   r|  r  r  r  r  r0   r0   r0   r1   r;    s0    
!!		
<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 ]5}| }||rD|dd }zt|W   W  d    S  t	yC   | Y   W  d    S w qt	d|1 sOw   Y  d S )NrE  r  	r   rt   )
r   _psplatform	open_textr  r  ru   r_   	partitionrb   rC   )r   Z	linestartrI   rJ   r  r0   r0   r1   read_status_file  s$   
	
	z)TestProcessAgainstStatus.read_status_filec                 C       |  d}| j |ksJ d S )NzName:)r  r  r   r   r  r0   r0   r1   	test_name     
z"TestProcessAgainstStatus.test_namec                 C   sH   |  d}||dd |d }|dd}| j |ks"J d S )NzState:(rn   )rs   r  )r  r  rfindr  r  r  r  r0   r0   r1   test_status  s   
z$TestProcessAgainstStatus.test_statusc                 C   r  )NzPPid:)r  r  r  r  r0   r0   r1   	test_ppid  r  z"TestProcessAgainstStatus.test_ppidc                 C   r  )NzThreads:)r  r  r  r  r0   r0   r1   test_num_threads  r  z)TestProcessAgainstStatus.test_num_threadsc                 C   :   |  d}ttt| dd }| j |ksJ d S )NzUid:rn   r9   )r  ry   rz   rb   r@   r  r  r  r0   r0   r1   	test_uids     
z"TestProcessAgainstStatus.test_uidsc                 C   r  )NzGid:rn   r9   )r  ry   rz   rb   r@   r  r  r  r0   r0   r1   	test_gids  r  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  r  r  r  r  r0   r0   r1   test_num_ctx_switches  s   

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sR   |  d}dt|v r%tt|d\}}| j tt||d ks'J d S d S )NCpus_allowed_list:r  rn   )	r  r   rz   rb   r@   r  Zcpu_affinityr  rD   )r   r  Zmin_Zmax_r0   r0   r1   test_cpu_affinity  s   
 z*TestProcessAgainstStatus.test_cpu_affinityc                 C   sh   |  d}td}| jj  W d    n1 sw   Y  dt|v r-|jr+J d S |js2J d S )Nr  zpsutil._pslinux.per_cpu_timesr  )r  r   r   r  r  r  r   r   )r   r  r   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                   @   r   )	TestUtilsc                 C   sR   t jddd}tjddksJ |jsJ W d    d S 1 s"w   Y  d S )Nzos.readlinkzfoo (deleted)r,  ra  r`  )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    r   r  )\r  r`   
contextlibrW  r   r   r2  r{   r#  r$   r+   r   rH  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!  rJ  dirname__file__ZHEREr*   rU   r3   r6   r  r2   r4   r7   rP   rW   ri   rq   rr   r}   contextmanagerr   r   r  r   r   r   r   r   r   r   r%  r4  r[  r^  rb  rl  r|  r  r  r  r  r  r  r#  r)  r8  r;  r  r  r0   r0   r0   r1   <module>   s   	

4/ OXI  '63? D 7 B   R