a
    þd7t ã                   @   sž  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ erÞddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ej1 2ej1 3e4¡¡Z5d Z6d!Z7d"Z8d#Z9d$Z:erd%Z;e d&¡ Z<d'd(„ Z=d)d*„ Z>d+d,„ Z?d-d.„ Z@d/d0„ ZAd1d2„ ZBd3d4„ ZCd5d6„ ZDd7d8„ ZEejFd9d:„ ƒZGejFd;d<„ ƒZHe Ie d=¡G d>d?„ d?e"ƒƒZJe Ie d=¡G d@dA„ dAe"ƒƒZKe Ie d=¡G dBdC„ dCe"ƒƒZLe Ie d=¡G dDdE„ dEe"ƒƒZMe Ie d=¡G dFdG„ dGe"ƒƒZNe Ie d=¡G dHdI„ dIe"ƒƒZOe Ie d=¡G dJdK„ dKe"ƒƒZPe Ie d=¡G dLdM„ dMe"ƒƒZQe Ie d=¡G dNdO„ dOe"ƒƒZRe Ie d=¡G dPdQ„ dQe"ƒƒZSe Ie d=¡G dRdS„ dSe"ƒƒZTe Ie d=¡G dTdU„ dUe"ƒƒZUe Ie d=¡G dVdW„ dWe"ƒƒZVe Ie d=¡G dXdY„ dYe"ƒƒZWe Ie d=¡G dZd[„ d[e"ƒƒZXe Ie d=¡G d\d]„ d]e"ƒƒZYe Ie d=¡G d^d_„ d_e"ƒƒZZe Ie d=¡G d`da„ dae"ƒƒZ[e Ie d=¡e Ie db¡G dcdd„ dde"ƒƒƒZ\e Ie d=¡G dedf„ dfe"ƒƒZ]e Ie d=¡G dgdh„ dhe"ƒƒZ^e Ie d=¡G didj„ dje"ƒƒZ_e Ie d=¡G dkdl„ dle"ƒƒZ`e Ie d=¡G dmdn„ dne"ƒƒZae Ie d=¡G dodp„ dpe"ƒƒZbecdqkršddrldmeZe eee4ƒ dS )szLinux specific tests.é    )ÚdivisionN)ÚLINUX)ÚPY3)ÚFileNotFoundError)Ú
basestring)Úu)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)Ú
HAS_RLIMIT)ÚPYPY)ÚTOLERANCE_DISK_USAGE)ÚTOLERANCE_SYS_MEM)ÚPsutilTestCase)Ú
ThreadTask)Ú
call_until)Úmock)Úreload_module)Úretry_on_failure)Úsafe_rmpath)Úsh)Úskip_on_not_implemented)Úwhich)ÚCLOCK_TICKS)ÚRootFsDeviceFinder)Úcalculate_avail_vmem)Úopen_binaryi‰  i‰  i'‰  i‰  i‰  i   z/sys/class/hwmon/hwmon*c                 C   sˆ   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  d S ©Nr   é   ÚasciiÚ256sé   é   )Úfcntlr   ÚbytesÚsocketÚAF_INETÚ
SOCK_DGRAMÚ
contextlibÚclosingÚ	inet_ntoaÚioctlÚfilenoÚSIOCGIFADDRÚstructÚpack©Úifnamer%   Ús© r5   ú`/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/psutil/tests/test_linux.pyÚget_ipv4_addressL   s    


þþÿr7   c                 C   sˆ   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  d S r   )r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   ÚSIOCGIFNETMASKr0   r1   r2   r5   r5   r6   Úget_ipv4_netmaskY   s    


þþÿr9   c                 C   sˆ   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  d S r   )r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   ÚSIOCGIFBRDADDRr0   r1   r2   r5   r5   r6   Úget_ipv4_broadcastf   s    


þþÿr;   c                 C   sð   t ddƒX}g }| ¡ D ]"}| ¡ }|d | kr| |¡ qt|ƒdkrTtd|  ƒ‚W d   ƒ n1 sh0    Y  tdt|ƒƒD ]j}|| d }g }tdt|ƒdƒD ]}| |||d … ¡ q¤d |¡}	t 	tj
|	¡}
t tj
|
¡||< q€|S )Nz/proc/net/if_inet6Úrtéÿÿÿÿr   zcould not find interface %ré   ú:)ÚopenÚ	readlinesÚsplitÚappendÚlenÚ
ValueErrorÚrangeÚjoinr'   Ú	inet_ptonÚAF_INET6Ú	inet_ntop)r3   ÚfZ
all_fieldsÚlineÚfieldsÚiZunformattedÚgroupsÚjÚ	formattedÚpackedr5   r5   r6   Úget_ipv6_addressess   s"    *
rS   c              	      s¾   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡n | | 	¡ t
t d| ¡¡}trfdd„ ‰ ndd l}|j‰ d ‡ fdd	„|d
d… D ƒ¡d d… W  d   ƒ S 1 s°0    Y  d S )Nr   r    r!   r"   c                 S   s   | S ©Nr5   ©Úxr5   r5   r6   Úord“   s    zget_mac_address.<locals>.ordÚ c                    s   g | ]}d ˆ |ƒ ‘qS )z%02x:r5   )Ú.0Úchar©rW   r5   r6   Ú
<listcomp>˜   ó    z#get_mac_address.<locals>.<listcomp>é   r$   r=   )r%   r   r&   r'   r(   r)   r*   r+   r-   r.   ÚSIOCGIFHWADDRr0   r1   Ú__builtin__rW   rG   )r3   r%   r4   Úinfor`   r5   r[   r6   Úget_mac_address‰   s    
ÿ
rb   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 |¡ ƒ‚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:
%sN)r   rB   Ú
startswithÚcollectionsÚ
namedtupleÚintrE   rG   )ÚoutÚlinesrL   Ú_ÚtotalÚusedrc   Úntr5   r5   r6   Ú	free_swap›   s    

ÿrt   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 |¡ ƒ‚dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rc   rd   re   rf   rg   ri   ZMemc                 S   s   g | ]}t |ƒ‘qS r5   )rm   ©rY   rV   r5   r5   r6   r\   ·   r]   z free_physmem.<locals>.<listcomp>é   é   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   rB   rj   rk   rl   rE   rG   )rn   ro   rL   rq   rr   rc   Úsharedrs   r5   r5   r6   Úfree_physmemª   s    

ÿ
ÿÿry   c                 C   sZ   t ddgddid}| d¡D ]*}| ¡ }| |v rt| d¡d ƒ  S qtd	|  ƒ‚d S )
NÚvmstatz-sre   rf   rg   ri   ú r   z can't find %r in 'vmstat' output)r   rB   Ústriprm   rE   )Ústatrn   rL   r5   r5   r6   rz   ¿   s    rz   c                  C   s@   t ddgƒ ¡ } d| v r"t d¡‚tttt d|  	¡ d ¡ƒƒS )Nrc   z-VÚUNKNOWNzcan't determine free versionz\d+r=   )
r   r|   ÚunittestÚSkipTestÚtupleÚmaprm   ÚreÚfindallrB   )rn   r5   r5   r6   Úget_free_version_infoÈ   s    
r…   c                 #   sZ   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d  ƒ n1 sL0    Y  dS )zMock open() builtin and forces it to return a certain `content`
    on read() if the path being opened matches `for_path`.
    c                    sR   | ˆkr8t r,tˆ tƒr t ˆ ¡S t ˆ ¡S qNt ˆ ¡S nˆ| g|¢R i |¤ŽS d S rT   )r   Ú
isinstancer   ÚioÚStringIOÚBytesIO©ÚnameÚargsÚkwargs©ÚcontentÚfor_pathÚ	orig_openr5   r6   Ú	open_mockÔ   s    

z$mock_open_content.<locals>.open_mockúbuiltins.openú__builtin__.openT©ÚcreateÚside_effectN©r@   r   r   Úpatch)r   r   r’   Úpatch_pointÚmr5   rŽ   r6   Úmock_open_contentÏ   s
    rœ   c                 #   sZ   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d  ƒ n1 sL0    Y  dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s(   | ˆkrˆ ‚nˆ| g|¢R i |¤ŽS d S rT   r5   rŠ   ©Úexcr   r‘   r5   r6   r’   ë   s    z&mock_open_exception.<locals>.open_mockr“   r”   Tr•   Nr˜   )r   rž   r’   rš   r›   r5   r   r6   Úmock_open_exceptionæ   s
    rŸ   z
LINUX onlyc                   @   sL   e Zd Zdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZeƒ dd„ ƒZeƒ d	d
„ ƒZdS )Ú"TestSystemVirtualMemoryAgainstFreec                 C   s"   t ƒ j}t ¡ j}|  ||¡ d S rT   )ry   rq   ÚpsutilÚvirtual_memoryÚassertEqual©ÚselfZ	cli_valueÚpsutil_valuer5   r5   r6   Ú
test_totalÿ   s    
z-TestSystemVirtualMemoryAgainstFree.test_totalc                 C   s:   t ƒ dk r|  d¡‚tƒ j}t ¡ j}| j||td d S )N©é   r©   é   úold free version©Údelta)r…   ÚskipTestry   rr   r¡   r¢   ÚassertAlmostEqualr   r¤   r5   r5   r6   Ú	test_used  s    


ÿz,TestSystemVirtualMemoryAgainstFree.test_usedc                 C   s&   t ƒ j}t ¡ j}| j||td d S ©Nr¬   )ry   rc   r¡   r¢   r¯   r   r¤   r5   r5   r6   Ú	test_free  s
    
ÿz,TestSystemVirtualMemoryAgainstFree.test_freec                 C   sJ   t ƒ }|j}|dkrt d¡‚t ¡ j}| j||td|||jf d d S )Nr   z%free does not support 'shared' columnú	%s %s 
%s©r­   Úmsg)	ry   rx   r   r€   r¡   r¢   r¯   r   Úoutput)r¥   rc   Ú
free_valuer¦   r5   r5   r6   Útest_shared  s    

þz.TestSystemVirtualMemoryAgainstFree.test_sharedc                 C   sl   t ddgƒ}| d¡}d|d vr.t d¡‚n:t|d  ¡ d ƒ}t ¡ j}| j||t	d	|||f d
 d S )Nrc   rd   ri   Ú	availabler   z(free does not support 'available' columnrv   r=   r³   r´   )
r   rB   r   r€   rm   r¡   r¢   r¹   r¯   r   )r¥   rn   ro   r·   r¦   r5   r5   r6   Útest_available#  s    

þz1TestSystemVirtualMemoryAgainstFree.test_availableN)	Ú__name__Ú
__module__Ú__qualname__r§   r   r°   r²   r¸   rº   r5   r5   r5   r6   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}| j||td d S )Nztotal memoryé   r¬   )rz   r¡   r¢   rq   r¯   r   ©r¥   Zvmstat_valuer¦   r5   r5   r6   r§   6  s
    
ÿz/TestSystemVirtualMemoryAgainstVmstat.test_totalc                 C   s>   t ƒ dk r|  d¡‚tdƒd }t ¡ j}| j||td d S )Nr¨   r«   zused memoryr¿   r¬   )r…   r®   rz   r¡   r¢   rr   r¯   r   rÀ   r5   r5   r6   r°   <  s    


ÿz.TestSystemVirtualMemoryAgainstVmstat.test_usedc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzfree memoryr¿   r¬   )rz   r¡   r¢   rc   r¯   r   rÀ   r5   r5   r6   r²   I  s
    
ÿz.TestSystemVirtualMemoryAgainstVmstat.test_freec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzbuffer memoryr¿   r¬   )rz   r¡   r¢   Úbuffersr¯   r   rÀ   r5   r5   r6   Útest_buffersP  s
    
ÿz1TestSystemVirtualMemoryAgainstVmstat.test_buffersc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzactive memoryr¿   r¬   )rz   r¡   r¢   Úactiver¯   r   rÀ   r5   r5   r6   Útest_activeW  s
    
ÿz0TestSystemVirtualMemoryAgainstVmstat.test_activec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzinactive memoryr¿   r¬   )rz   r¡   r¢   Úinactiver¯   r   rÀ   r5   r5   r6   Útest_inactive^  s
    
ÿz2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
r»   r¼   r½   r§   r   r°   r²   rÂ   rÄ   rÆ   r5   r5   r5   r6   r¾   3  s   



r¾   c                   @   sB   e Zd Zdd„ Zeƒ dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSystemVirtualMemoryMocksc              	   C   s€  t dt d¡ ¡ ƒT}tjdd$}t d¡ t ¡ }|j	sDJ ‚|  
t|ƒd¡ |d }|  dt|jƒ¡ |  d	t|jƒ¡ |  d
t|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ W d   ƒ n1 sR0    Y  W d   ƒ n1 sr0    Y  d S )Nú/proc/meminfoap                  Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:         -1 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                SReclaimable:     346648 kB
                T©ÚrecordÚalwaysrv   r   z#memory stats couldn't be determinedÚcachedrx   rÃ   rÅ   rÁ   r¹   )rœ   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterr¡   r¢   Úcalledr£   rD   ÚassertInÚstrÚmessagerÌ   rÃ   rÅ   rx   rÁ   r¹   Úslab©r¥   r›   ÚwsÚretÚwr5   r5   r6   Útest_warnings_on_missesi  s6    þ


ÿ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¡ d S )NrÈ   rv   r¿   r   s   MemAvailable:éd   r    )r   rB   rm   r   ÚabsZ
assertLess)r¥   ZmemsrK   rL   rM   ÚaÚbZdiff_percentr5   r5   r6   Útest_avail_old_percent  s    
8z3TestSystemVirtualMemoryMocks.test_avail_old_percentc              	   C   sž   t dt d¡ ¡ ƒv}tjdd}t ¡ }W d   ƒ n1 s@0    Y  |jsTJ ‚|  	|j
d¡ |d }|  dt|jƒ¡ W d   ƒ n1 s0    Y  d S )NrÈ   aL                  Active:          9444728 kB
                Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Buffers:          287952 kB
                Cached:          4818144 kB
                Inactive(file):  1578132 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:    6574984 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                Shmem:            577588 kB
                SReclaimable:     346648 kB
                TrÉ   l     œ" r   ú,inactive memory stats couldn't be determined©rœ   rÍ   rÎ   rÏ   rÐ   rÑ   r¡   r¢   rÓ   r£   r¹   rÔ   rÕ   rÖ   rØ   r5   r5   r6   Ú test_avail_old_comes_from_kernelŸ  s    þ&

ÿz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc              	   C   sž   t dt d¡ ¡ ƒv}tjdd}t ¡ }W d   ƒ n1 s@0    Y  |jsTJ ‚|  	|j
d¡ |d }|  dt|jƒ¡ W d   ƒ n1 s0    Y  d S )NrÈ   aÄ                      Active:          9444728 kB
                    Active(anon):    6145416 kB
                    Buffers:          287952 kB
                    Cached:          4818144 kB
                    Inactive(file):  1578132 kB
                    Inactive(anon):   574764 kB
                    MemFree:         2057400 kB
                    MemTotal:       16325648 kB
                    Shmem:            577588 kB
                    TrÉ   ì    `LG r   râ   rã   rØ   r5   r5   r6   Útest_avail_old_missing_fields»  s    þ&

ÿz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc              
   C   sÆ   t dt d¡ ¡ ƒž tdttjdƒƒl tj	dd@}t
 ¡ }|  |jd¡ |d }|  d	t|jƒ¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  d S )
NrÈ   aT                      Active:          9444728 kB
                    Active(anon):    6145416 kB
                    Active(file):    2950064 kB
                    Buffers:          287952 kB
                    Cached:          4818144 kB
                    Inactive(file):  1578132 kB
                    Inactive(anon):   574764 kB
                    Inactive(file):  1567648 kB
                    MemFree:         2057400 kB
                    MemTotal:       16325648 kB
                    Shmem:            577588 kB
                    SReclaimable:     346648 kB
                    z/proc/zoneinfoúno such file or directoryTrÉ   rå   r   râ   )rœ   rÍ   rÎ   rÏ   rŸ   ÚIOErrorÚerrnoÚENOENTrÐ   rÑ   r¡   r¢   r£   r¹   rÔ   rÕ   rÖ   )r¥   rÙ   rÚ   rÛ   r5   r5   r6   Útest_avail_old_missing_zoneinfoÔ  s$    þ
þÿþz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfoc                    sà   ‡ fdd„}t ‰ trdnd}tj|d|d }t ¡ }|js@J ‚|  |jd¡ |  |j	d¡ |  |j
d	¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sÒ0    Y  d S )Nc                    s6   | dkrt  t d¡ ¡ ¡S ˆ | g|¢R i |¤ŽS d S )NrÈ   a=	                      MemTotal:              100 kB
                    MemFree:               2 kB
                    MemAvailable:          3 kB
                    Buffers:               4 kB
                    Cached:                5 kB
                    SwapCached:            6 kB
                    Active:                7 kB
                    Inactive:              8 kB
                    Active(anon):          9 kB
                    Inactive(anon):        10 kB
                    Active(file):          11 kB
                    Inactive(file):        12 kB
                    Unevictable:           13 kB
                    Mlocked:               14 kB
                    SwapTotal:             15 kB
                    SwapFree:              16 kB
                    Dirty:                 17 kB
                    Writeback:             18 kB
                    AnonPages:             19 kB
                    Mapped:                20 kB
                    Shmem:                 21 kB
                    Slab:                  22 kB
                    SReclaimable:          23 kB
                    SUnreclaim:            24 kB
                    KernelStack:           25 kB
                    PageTables:            26 kB
                    NFS_Unstable:          27 kB
                    Bounce:                28 kB
                    WritebackTmp:          29 kB
                    CommitLimit:           30 kB
                    Committed_AS:          31 kB
                    VmallocTotal:          32 kB
                    VmallocUsed:           33 kB
                    VmallocChunk:          34 kB
                    HardwareCorrupted:     35 kB
                    AnonHugePages:         36 kB
                    ShmemHugePages:        37 kB
                    ShmemPmdMapped:        38 kB
                    CmaTotal:              39 kB
                    CmaFree:               40 kB
                    HugePages_Total:       41 kB
                    HugePages_Free:        42 kB
                    HugePages_Rsvd:        43 kB
                    HugePages_Surp:        44 kB
                    Hugepagesize:          45 kB
                    DirectMap46k:          46 kB
                    DirectMap47M:          47 kB
                    DirectMap48G:          48 kB
                    )r‡   r‰   rÍ   rÎ   rÏ   rŠ   ©r‘   r5   r6   r’   õ  s    3zJTestSystemVirtualMemoryMocks.test_virtual_memory_mocked.<locals>.open_mockr“   r”   Tr•   i  i   é   i p  i T  i   i    i X  é   )r@   r   r   r™   r¡   r¢   rÓ   r£   rq   rc   rÁ   rÌ   rx   rÃ   rÅ   r×   r¹   )r¥   r’   rš   r›   Zmemr5   rì   r6   Útest_virtual_memory_mockedó  s    7
z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r»   r¼   r½   rÜ   r   rá   rä   ræ   rë   rï   r5   r5   r5   r6   rÇ   f  s   &
rÇ   c                   @   s\   e Zd Zedd„ ƒZdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestSystemSwapMemoryc                  C   s@   t dƒ} |  ¡ }W d  ƒ n1 s&0    Y  d|v o>d|v S )z3Return True if /proc/meminfo provides swap metrics.rÈ   Nz
SwapTotal:z	SwapFree:)r@   Úread)rK   Údatar5   r5   r6   Úmeminfo_has_swap_infoE  s    
&z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   s"   t ƒ j}t ¡ j}| j||tdS r±   )rt   rq   r¡   Úswap_memoryr¯   r   ©r¥   r·   r¦   r5   r5   r6   r§   L  s
    
ÿzTestSystemSwapMemory.test_totalc                 C   s"   t ƒ j}t ¡ j}| j||tdS r±   )rt   rr   r¡   rô   r¯   r   rõ   r5   r5   r6   r°   R  s
    
ÿzTestSystemSwapMemory.test_usedc                 C   s"   t ƒ j}t ¡ j}| j||tdS r±   )rt   rc   r¡   rô   r¯   r   rõ   r5   r5   r6   r²   Y  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¡ |d }|  
dt|jƒ¡ |  |jd¡ |  |jd¡ W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  d S )	Núpsutil._common.openT©r–   rÉ   rË   rv   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r™   rÐ   rÑ   rÒ   r¡   rô   rÓ   r£   rD   rÔ   rÕ   rÖ   ÚsinÚsoutrØ   r5   r5   r6   Útest_missing_sin_sout`  s    

þz*TestSystemSwapMemory.test_missing_sin_soutc              	   C   sÄ   t dttjdƒƒž}tjddr}t d¡ t ¡ }|j	s>J ‚|  
t|ƒd¡ |d }|  dt|jƒ¡ |  
|jd¡ |  
|jd¡ W d   ƒ n1 s˜0    Y  W d   ƒ n1 s¶0    Y  d S )	Nz/proc/vmstatrç   TrÉ   rË   rv   r   zK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)rŸ   rè   ré   rê   rÐ   rÑ   rÒ   r¡   rô   rÓ   r£   rD   rÔ   rÕ   rÖ   rø   rù   rØ   r5   r5   r6   Útest_no_vmstat_mockedn  s"    
þ

ýz*TestSystemSwapMemory.test_no_vmstat_mockedc                 C   s¤   |   ¡ st d¡S t d¡}t ¡ }W d   ƒ n1 s:0    Y  |jrNJ ‚dd lm	} | 
¡ \}}}}}}}||9 }||9 }|  |j|¡ | j|j|td d S )Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   r¬   )ró   r   Úskipr   r™   r¡   rô   rÓ   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinfor£   rq   r¯   rc   r   )r¥   r›   ÚswapZcextrp   rq   rc   Zunit_multiplierr5   r5   r6   Útest_meminfo_against_sysinfo€  s    
&
z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   s@   t ddƒ"}t ¡  |jsJ ‚W d   ƒ n1 s20    Y  d S )NrÈ   r]   )rœ   r¡   rô   rÓ   ©r¥   r›   r5   r5   r6   Ú#test_emulate_meminfo_has_no_metrics  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)r»   r¼   r½   Ústaticmethodró   r§   r   r°   r²   rú   rû   rþ   r   r5   r5   r5   r6   rð   B  s   


rð   c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemCPUTimesc                 C   s    t  ¡ j}t dt ¡ d ¡d }ttt	| 
d¡ƒƒ}|dkrL|  d|¡ n|  d|¡ |dkrn|  d|¡ n|  d|¡ |d	kr|  d
|¡ n|  d
|¡ d S )Nz\d+\.\d+\.\d+é   r   Ú.)r  é   é   Ústeal)r  r  r$   Zguest)r©   r  r   Z
guest_nice)r¡   Ú	cpu_timesÚ_fieldsrƒ   r„   ÚosÚunamer   r‚   rm   rB   rÔ   ÚassertNotIn)r¥   rM   Z
kernel_verZkernel_ver_infor5   r5   r6   Útest_fields¡  s    
zTestSystemCPUTimes.test_fieldsN)r»   r¼   r½   r  r5   r5   r5   r6   r  ž  s   r  c                   @   s„   e Zd Ze ej d¡ d¡dd„ ƒZe ej d¡ d¡dd„ ƒZ	e e
d	ƒ d
¡dd„ ƒZe e
dƒ d¡dd„ ƒZdd„ ZdS )ÚTestSystemCPUCountLogicalú/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc                 C   sj   t dƒ}| ¡  ¡ }W d   ƒ n1 s*0    Y  dt|ƒv rft| d¡d ƒd }|  t ¡ |¡ d S )Nr  ú-rv   )	r@   rñ   r|   rÕ   rm   rB   r£   r¡   Ú	cpu_count)r¥   rK   Úvaluer5   r5   r6   Útest_against_sysdev_cpu_online¶  s
    
*z8TestSystemCPUCountLogical.test_against_sysdev_cpu_onlineú/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc                 C   s0   t  d¡}tdd„ |D ƒƒ}|  t ¡ |¡ d S )Nr  c                 S   s    g | ]}t  d |¡dur|‘qS )zcpu\d+$N)rƒ   Úsearchru   r5   r5   r6   r\   Ã  r]   zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r
  ÚlistdirrD   r£   r¡   r  )r¥   ZlsÚcountr5   r5   r6   Útest_against_sysdev_cpu_num¿  s    
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablec                 C   s$   t tdƒƒ}|  tjdd|¡ d S )Nznproc --allT©Úlogical)rm   r   r£   r¡   r  )r¥   Únumr5   r5   r6   Útest_against_nprocÆ  s    z,TestSystemCPUCountLogical.test_against_nprocÚlscpuúlscpu utility not availablec                 C   s8   t dƒ}tdd„ | d¡D ƒƒ}|  tjdd|¡ d S )Núlscpu -pc                 S   s   g | ]}|  d ¡s|‘qS )ú#©rj   ru   r5   r5   r6   r\   Î  r]   z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>ri   Tr  )r   rD   rB   r£   r¡   r  )r¥   rn   r  r5   r5   r6   Útest_against_lscpuË  s    z,TestSystemCPUCountLogical.test_against_lscpuc              	   C   s  dd l }|j ¡ }tjdtdX}|  |j ¡ |¡ |js@J ‚tjdddD}|  |j ¡ ¡ |  |j	d¡ |  |j
d d d¡ W d   ƒ n1 s˜0    Y  td	d
ƒ}| ¡ }W d   ƒ n1 sÊ0    Y  t |¡}tjd|dd"}|  |j ¡ |¡ W d   ƒ n1 s0    Y  td	dƒ.}|  |j ¡ |¡ |jsLJ ‚W d   ƒ n1 sb0    Y  W d   ƒ n1 s‚0    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™   rE   r£   rÓ   ÚassertIsNoneZ
call_countZ	call_argsr@   rñ   r‡   r‰   rœ   )r¥   r¡   Úoriginalr›   rK   Zcpuinfo_dataÚ	fake_filer5   r5   r6   Útest_emulate_fallbacksÑ  s.    
ÿ
4&
ÿ2z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r»   r¼   r½   r   ÚskipIfr
  ÚpathÚexistsr  r  r   r  r"  r.  r5   r5   r5   r6   r  ³  s   ÿ
ÿ


r  c                   @   s6   e Zd Ze edƒ d¡dd„ ƒZdd„ Zdd„ Zd	S )
ÚTestSystemCPUCountCoresr  r  c                 C   s\   t dƒ}tƒ }| d¡D ]&}| d¡s| d¡}| |d ¡ q|  tjddt|ƒ¡ d S )Nr  ri   r   ú,rv   Fr  )	r   ÚsetrB   rj   Úaddr£   r¡   r  rD   )r¥   rn   Zcore_idsrL   rM   r5   r5   r6   r"  ö  s    

z*TestSystemCPUCountCores.test_against_lscpuc                 C   sd   t j ¡ }tjdg d$}t j ¡ }|js.J ‚W d   ƒ n1 sB0    Y  |d ur`|  ||¡ d S )Nú	glob.glob©r(  )r¡   r*  Úcpu_count_coresr   r™   rÓ   r£   )r¥   Zmeth_1r›   Zmeth_2r5   r5   r6   Útest_method_2   s    

(z%TestSystemCPUCountCores.test_method_2c              	   C   s„   t jdg dN}t jddd }|  tj ¡ ¡ W d   ƒ n1 sD0    Y  W d   ƒ n1 sb0    Y  |jsvJ ‚|js€J ‚d S )Nr6  r7  rö   Tr÷   )r   r™   r+  r¡   r*  r8  rÓ   )r¥   Úm1Úm2r5   r5   r6   Útest_emulate_none  s
    L
z)TestSystemCPUCountCores.test_emulate_noneN)	r»   r¼   r½   r   r/  r   r"  r9  r<  r5   r5   r5   r6   r2  ó  s   
	r2  c                   @   sz   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd	„ ƒZ	e e d¡d
d„ ƒZ
dS )ÚTestSystemCPUFrequencyúnot supportedc                    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!  ©r0  ©Zorig_existsr5   r6   Úpath_exists_mock  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockúos.path.existsT)r—   r–   )r
  r0  r1  r   r™   r¡   Úcpu_freq)r¥   rB  r5   rA  r6   Útest_emulate_use_second_file  s    ÿz3TestSystemCPUFrequency.test_emulate_use_second_filec                    sÖ   ‡ fdd„}t jj‰ z¨tjd|dt ttjƒ t ¡ }|s@J ‚|  	|j
d¡ |  	|jd¡ tjddD ] }|  	|j
d¡ |  	|jd¡ qhW d   ƒ n1 sž0    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!  r@  ©Zos_path_existsr5   r6   rB  %  s    
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockrC  r#  ç        T©Zpercpu)r
  r0  r1  r   r™   r   r¡   r*  rD  r£   ÚmaxÚmin)r¥   rB  rÚ   Úfreqr5   rF  r6   Útest_emulate_use_cpuinfo!  s     
0

ÿ
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      sÂ   ‡ fdd„}t ‰ trdnd}tj||d„ tjdddV t ¡ }|  |jd	¡ |jd
krj|  |jd¡ |j	d
kr‚|  |j	d¡ W d   ƒ n1 s–0    Y  W d   ƒ n1 s´0    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_freqr?  ó   500000ú/scaling_min_freqó   600000ú/scaling_max_freqs   700000r%  s   cpu MHz     : 500©Úendswithrj   r‡   r‰   rŠ   rì   r5   r6   r’   <  s    
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr“   r”   r#  rC  Tr7  ç     @@rG  ç     À‚@g     à…@©
r@   r   r   r™   r¡   rD  r£   ÚcurrentrJ  rI  ©r¥   r’   rš   rK  r5   rì   r6   Útest_emulate_data:  s    ÿ

z(TestSystemCPUFrequency.test_emulate_datac              
      sb  ‡ fdd„}t ‰ trdnd}tj||d  tjdddð tjd	d
dÀ tjdd}|  |d jd¡ |d jdkrŒ|  |d jd¡ |d j	dkr¬|  |d j	d¡ |  |d jd¡ |d jdkrÞ|  |d jd¡ |d j	dkrþ|  |d j	d¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s40    Y  W d   ƒ n1 sT0    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¡ršt d
¡S |  d¡r¸| d¡r¸t d¡S | dkrÊt d¡S ˆ | g|¢R i |¤ŽS d S )NrM  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rO  ó   200000rQ  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rN  rP  r%  s#   cpu MHz     : 100
cpu MHz     : 400rR  )r‹   rŒ   r   Únrì   r5   r6   r’   [  s8    
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr“   r”   r#  rC  Tr7  ú!psutil._pslinux.cpu_count_logicalr  rH  r   ç      Y@rG  g      i@g     Àr@rv   g      y@rT  rU  rV  rX  r5   rì   r6   Útest_emulate_multi_cpuY  s&    ÿz-TestSystemCPUFrequency.test_emulate_multi_cpuc              
      sÀ   ‡ fdd„}t ‰ trdnd}tj||d‚ tjdddT tjd	d
d& t ¡ }|  |jd¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  d S )Nc                    sX   |   d¡rttjdƒ‚n<|   d¡r,t d¡S | dkr>t d¡S ˆ | g|¢R i |¤ŽS d S )NrM  rX   z/cpuinfo_cur_freqrZ  r%  s   cpu MHz     : 200)rS  rè   ré   rê   r‡   r‰   rŠ   rì   r5   r6   r’   Š  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr“   r”   r#  rC  Tr7  r\  rv   éÈ   )r@   r   r   r™   r¡   rD  r£   rW  rX  r5   rì   r6   Ú%test_emulate_no_scaling_cur_freq_file‡  s    
ÿz<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r»   r¼   r½   r   r/  r   rE  rL  rY  r^  r`  r5   r5   r5   r6   r=    s   



-r=  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemCPUStatsc                 C   s&   t dƒ}t ¡ j}| j||dd d S )Nzcontext switcheséô  r¬   )rz   r¡   Ú	cpu_statsZctx_switchesr¯   rÀ   r5   r5   r6   Útest_ctx_switches¡  s    
z$TestSystemCPUStats.test_ctx_switchesc                 C   s&   t dƒ}t ¡ j}| j||dd d S )NÚ
interruptsrb  r¬   )rz   r¡   rc  re  r¯   rÀ   r5   r5   r6   Útest_interrupts¦  s    
z"TestSystemCPUStats.test_interruptsN)r»   r¼   r½   rd  rf  r5   r5   r5   r6   ra  ž  s   ra  c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgr>  c                 C   s–   t  ¡ }tddƒ}| ¡  ¡ }W d   ƒ n1 s40    Y  | jt|d ƒ|d dd | jt|d ƒ|d dd | jt|d ƒ|d dd d S )Nz/proc/loadavgÚrr   rv   r¬   r  )r¡   Ú
getloadavgr@   rñ   rB   r¯   Úfloat)r¥   r¦   rK   Z
proc_valuer5   r5   r6   Útest_getloadavg¯  s    *zTestLoadAvg.test_getloadavgN)r»   r¼   r½   r   r/  r   rk  r5   r5   r5   r6   rg  ¬  s   rg  c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemNetIfAddrsc                 C   sÐ   t  ¡  ¡ D ]¾\}}|D ]°}|jt jkr<|  |jt|ƒ¡ q|jtj	krœ|  |jt
|ƒ¡ |  |jt|ƒ¡ |jd urŠ|  |jt|ƒ¡ qÈ|  t|ƒd¡ q|jtjkr|j d¡d }|  |t|ƒ¡ qqd S )Nz0.0.0.0ú%r   )r¡   Znet_if_addrsÚitemsÚfamilyZAF_LINKr£   Úaddressrb   r'   r(   r7   Únetmaskr9   Ú	broadcastr;   rI   rB   rÔ   rS   )r¥   r‹   ÚaddrsÚaddrrp  r5   r5   r6   Útest_ipsÂ  s    
ÿzTestSystemNetIfAddrs.test_ipsN)r»   r¼   r½   ru  r5   r5   r5   r6   rl  ¿  s   rl  c                   @   sH   e Zd Ze edƒ d¡dd„ ƒZdd„ Ze edƒ d¡dd„ ƒZd	S )
ÚTestSystemNetIfStatsÚifconfigúifconfig utility not availablec              	   C   sr   t  ¡  ¡ D ]`\}}ztd| ƒ}W n ty6   Y q0 | j|jd|v |d |  |jtt	 
d|¡d ƒ¡ qd S )Núifconfig %sZRUNNING)rµ   z(?i)MTU[: ](\d+)r   )r¡   Únet_if_statsrn  r   ÚRuntimeErrorr£   ZisupÚmturm   rƒ   r„   )r¥   r‹   Ústatsrn   r5   r5   r6   Útest_against_ifconfigì  s    ÿz*TestSystemNetIfStats.test_against_ifconfigc              	   C   sb   t  ¡  ¡ D ]P\}}td| dƒ*}|  |jt| ¡  ¡ ƒ¡ W d   ƒ q1 sR0    Y  qd S )Nz/sys/class/net/%s/mtur<   )	r¡   rz  rn  r@   r£   r|  rm   rñ   r|   )r¥   r‹   r}  rK   r5   r5   r6   Útest_mtuø  s    zTestSystemNetIfStats.test_mtuc              	   C   s
  d}t  ¡  ¡ D ]ä\}}ztd| ƒ}W n ty:   Y q0 t d|¡}|ršt| ¡ ƒdkrš|d7 }t	| 
d¡ ¡  d¡ƒ}t	|j d¡ƒ}|  ||¡ qt d|¡}|rt| ¡ ƒdkr|d7 }t	| 
d¡ ¡  ¡ ƒ}t	|j d¡ƒ}|  ||¡ q|s|  d	¡‚d S )
Nr   ry  zflags=(\d+)?<(.*?)>r  rv   r3  z(.*)  MTU:(\d+)  Metric:(\d+)r©   zno matches were found)r¡   rz  rn  r   r{  rƒ   r  rD   rO   r4  ÚgroupÚlowerrB   Úflagsr£   Úfail)r¥   Zmatches_foundr‹   r}  rn   ÚmatchZifconfig_flagsZpsutil_flagsr5   r5   r6   Ú
test_flagsý  s(    zTestSystemNetIfStats.test_flagsN)	r»   r¼   r½   r   r/  r   r~  r  r…  r5   r5   r5   r6   rv  é  s
   
rv  c                   @   s,   e Zd Ze edƒ d¡eƒ dd„ ƒƒZdS )ÚTestSystemNetIOCountersrw  rx  c              	   C   s   dd„ }t jddd}| ¡ D ]Ü\}}z||ƒ}W n tyH   Y qY n0 | j|j|d dd | j|j|d	 dd | j|j|d
 dd | j|j|d dd | j|j	|d dd | j|j
|d dd | j|j|d dd | j|j|d dd qd S )Nc                 S   sÔ   i }t d|  ƒ}tt d|¡d ƒ|d< tt d|¡d ƒ|d< tt d|¡d ƒ|d< tt d|¡d	 ƒ|d
< tt d|¡d ƒ|d< tt d|¡d	 ƒ|d< tt d|¡d ƒ|d< tt d|¡d ƒ|d< |S )Nry  zRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinrv   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   rm   rƒ   r„   )ZnicrÚ   rn   r5   r5   r6   rw  "  s&    ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowrapr  i   r¬   rŽ  r‡  r¿   rˆ  r‰  é
   rŠ  r‹  rŒ  )r¡   Únet_io_countersrn  r{  r¯   r  rŽ  r‡  rˆ  r‰  rŠ  r‹  rŒ  )r¥   rw  Znior‹   r}  Zifconfig_retr5   r5   r6   r~    s>    
ÿÿÿÿÿÿÿÿz-TestSystemNetIOCounters.test_against_ifconfigN)r»   r¼   r½   r   r/  r   r   r~  r5   r5   r5   r6   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_ipv6Fr7  c                 C   sP   z*t   t jt j¡}|  |j¡ | d¡ W n t jy>   Y n0 tjdd d S )N)z::1r   Zinet6©Úkind)	r'   rI   ÚSOCK_STREAMZ
addCleanupÚcloseÚbindÚerrorr¡   Únet_connections)r¥   Zsupports_ipv6rJ   r4   r5   r5   r6   Útest_emulate_ipv6_unsupportedN  s    z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc                 C   sJ   t dt d¡ƒ&}tjdd |js(J ‚W d   ƒ n1 s<0    Y  d S )Nz/proc/net/unixa.                  0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
                0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
                0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
                000000000000000000000000000000000000000000000000000000
                Úunixr“  )rœ   rÍ   rÎ   r¡   r™  rÓ   rÿ   r5   r5   r6   Útest_emulate_unixZ  s    þz*TestSystemNetConnections.test_emulate_unixN)r»   r¼   r½   r   r™   rE   rš  rœ  r5   r5   r5   r6   r’  K  s   
r’  c                   @   s>   e Zd Ze eedƒ d¡eƒ dd„ ƒƒZdd„ Z	dd„ Z
d	S )
ÚTestSystemDiskPartitionsÚstatvfszos.statvfs() not availablec                 C   sn   dd„ }t jddD ]T}t  |j¡}||jƒ\}}}}|  |j|¡ | j|j|td | j|j	|td qd S )Nc                 S   sz   t d|  ƒ ¡ }| d¡}| d¡ | d¡}| ¡ d d… \}}}}|dkrRd}t|ƒt|ƒt|ƒ  }}}||||fS )Nzdf -P -B 1 "%s"ri   r   r>   ÚnonerX   )r   r|   rB   Úpoprm   )r0  rn   ro   rL   Údevrq   rr   rc   r5   r5   r6   Údft  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallr¬   )
r¡   Údisk_partitionsÚ
disk_usageZ
mountpointr£   rq   r¯   rc   r   rr   )r¥   r¢  ÚpartÚusagerp   rq   rr   rc   r5   r5   r6   Útest_against_dfo  s    
ÿ
ÿz(TestSystemDiskPartitions.test_against_dfc              	   C   s
  t ddƒ}| ¡ }W d   ƒ n1 s(0    Y  d|v rbt ¡ D ]}|jdkrB q`qB|  d¡‚n¤t tdƒ¡}t	j
d|ddv}t	j
d	d
gdF}t ¡ }|js¦J ‚|js°J ‚|s¸J ‚|  |d jd¡ W d   ƒ n1 sÞ0    Y  W d   ƒ n1 sü0    Y  d S )Nz/proc/filesystemsrh  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
rö   Tr'  ú$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r©  Úrwr7  r   )r@   rñ   r¡   r¤  Zfstyperƒ  r‡   rˆ   r   r   r™   rÓ   r£   )r¥   rK   rò   r¦  r-  r:  r;  rÚ   r5   r5   r6   Útest_zfs_fsˆ  s,    &
ÿþ

z$TestSystemDiskPartitions.test_zfs_fsc              	   C   s‚   ztt jdddL}|  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/existentr7  ú/proc)r   r™   ÚassertRaisesr   r¡   r¤  rÓ   ÚPROCFS_PATHrÿ   r5   r5   r6   Útest_emulate_realpath_fail   s    ÿ&*z3TestSystemDiskPartitions.test_emulate_realpath_failN)r»   r¼   r½   r   r/  Úhasattrr
  r   r¨  r­  r±  r5   r5   r5   r6   r  l  s
   r  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSystemDiskIoCountersc              	   C   sî   t ddƒÐ tjddd¢ tjdd}|  |jd¡ |  |jd	¡ |  |jd
t	 ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  |jdt	 ¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nú/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12ú!psutil._pslinux.is_storage_deviceTr7  F©r  rv   r  r©   r>   rw   r  é   é   r  ©rœ   r   r™   r¡   Údisk_io_countersr£   Ú
read_countÚread_merged_countÚ
read_bytesÚSECTOR_SIZEÚ	read_timeÚwrite_countÚwrite_merged_countÚwrite_bytesÚ
write_timeÚ	busy_time©r¥   rÚ   r5   r5   r6   Útest_emulate_kernel_2_4¯  s"    þÿz0TestSystemDiskIoCounters.test_emulate_kernel_2_4c              	   C   sî   t ddƒÐ tjddd¢ tjdd}|  |jd¡ |  |jd	¡ |  |jd
t	 ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  |jdt	 ¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nr´  z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11rµ  Tr7  Fr¶  rv   r  r©   r>   rw   r  r·  r¸  r  r¹  rÅ  r5   r5   r6   Útest_emulate_kernel_2_6_fullÂ  s"    þÿz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc              	   C   sî   t ddƒÐ tjddd¢ tjdd}|  |jd¡ |  |jd	t ¡ |  |j	d
¡ |  |j
dt ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nr´  z   3    1   hda 1 2 3 4rµ  Tr7  Fr¶  rv   r  r©   r>   r   )rœ   r   r™   r¡   rº  r£   r»  r½  r¾  rÀ  rÂ  r¼  r¿  rÁ  rÃ  rÄ  rÅ  r5   r5   r6   Útest_emulate_kernel_2_6_limitedÖ  s"    þÿz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc              	   C   sÈ   t dt d¡ƒ¤ tjdddv tjddd}|  t|ƒd¡ |  |d	 j	d
¡ |  |d j	d
¡ |  |d	 j
d¡ |  |d j
d¡ W d   ƒ n1 sœ0    Y  W d   ƒ n1 sº0    Y  d S )Nr´  ú                    3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
                    3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
                    rµ  Fr7  T©Úperdiskr  r  Únvme0n1rv   Z	nvme0n1p1rw   )rœ   rÍ   rÎ   r   r™   r¡   rº  r£   rD   r»  rÀ  rÅ  r5   r5   r6   Útest_emulate_include_partitionsí  s    þÿz8TestSystemDiskIoCounters.test_emulate_include_partitionsc              	   C   s  t dt d¡ƒV tjddd( tjddd}|  |¡ W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  dd„ }t dt d¡ƒj tjdd	|d
: tjddd}|  |j	d¡ |  |j
d¡ W d   ƒ n1 sà0    Y  W d   ƒ n1 sþ0    Y  d S )Nr´  rÉ  rµ  Fr7  rÊ  c                 S   s   | dkS )NrÌ  r5   )r‹   r5   r5   r6   Úis_storage_device  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr•   rv   rw   )rœ   rÍ   rÎ   r   r™   r¡   rº  r+  r£   r»  rÀ  )r¥   rÚ   rÎ  r5   r5   r6   Útest_emulate_exclude_partitions   s(    þÿFþÿ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|ƒ¡ d S )Nc                 S   s   | dkrdS dS )Nr´  FTr5   r@  r5   r5   r6   r1     s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rË  úpsutil._pslinux.os.path.existsr•   )r¡   rº  r   r™   r£   rD   )r¥   r1  ZwprocfsZwsysfsr5   r5   r6   Útest_emulate_use_sysfs  s    ÿ*z/TestSystemDiskIoCounters.test_emulate_use_sysfsc                 C   sJ   dd„ }t jdd|d |  ttj¡ W d   ƒ n1 s<0    Y  d S )Nc                 S   s   dS )NFr5   r@  r5   r5   r6   r1  ,  s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsrÐ  Tr•   )r   r™   r¯  ÚNotImplementedErrorr¡   rº  )r¥   r1  r5   r5   r6   Útest_emulate_not_impl+  s
    ÿz.TestSystemDiskIoCounters.test_emulate_not_implN)
r»   r¼   r½   rÆ  rÇ  rÈ  rÍ  rÏ  rÑ  rÓ  r5   r5   r5   r6   r³  ¬  s   r³  c                   @   s^   e Zd Zdd„ Zdd„ Ze ed¡dd„ ƒZe e	dƒ d	¡e ed¡d
d„ ƒƒZ
dd„ ZdS )ÚTestRootFsDeviceFinderc                 C   s(   t  d¡j}t  |¡| _t  |¡| _d S )Nr«  )r
  r}   Úst_devÚmajorÚminor)r¥   r¡  r5   r5   r6   ÚsetUp7  s    zTestRootFsDeviceFinder.setUpc                 C   sf   t ƒ }tj d¡r| ¡  n|  t|j¡ tj d| j| jf ¡rL| 	¡  n|  t|j	¡ | 
¡  d S ©Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)r   r
  r0  r1  Úask_proc_partitionsr¯  r   rÖ  r×  Úask_sys_dev_blockÚask_sys_class_block)r¥   Úfinderr5   r5   r6   Útest_call_methods<  s    
ÿ
z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSc                 C   s¨   t ƒ }|  | ¡ ¡ d  } }}tj d¡r4| ¡ }tj d| j| jf ¡rT| 	¡ }| 
¡ }|pf|pf|}|r||r||  ||¡ |r|r|  ||¡ |r¤|r¤|  ||¡ d S rÙ  )r   ÚassertIsNotNoneÚfindr
  r0  r1  rÚ  rÖ  r×  rÜ  rÛ  r£   )r¥   rÝ  rß   rà   ÚcÚbaser5   r5   r6   Útest_comparisonsI  s"    ÿz'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablec                 C   s"   t ƒ  ¡ }tdƒ}|  ||¡ d S )Nzfindmnt -o SOURCE -rn /)r   rà  r   r£   )r¥   r¦   Zfindmnt_valuer5   r5   r6   Útest_against_findmnt^  s    
z+TestRootFsDeviceFinder.test_against_findmntc                 C   s€   t jddgd\}t ¡ d }|js(J ‚tsP|  |jd¡ |  |jt	ƒ  
¡ ¡ n|  |jd¡ W d   ƒ n1 sr0    Y  d S )Nrª  )ú	/dev/rootr«  Zext4r¬  r7  r   rå  )r   r™   r¡   r¤  rÓ   r   ÚassertNotEqualZdevicer£   r   rà  )r¥   r›   r¦  r5   r5   r6   Útest_disk_partitions_mockede  s    þ
z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)r»   r¼   r½   rØ  rÞ  r   r/  r   rã  r   rä  rç  r5   r5   r5   r6   rÔ  4  s   


rÔ  c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	ƒ dd„ ƒZ
dd„ ZdS )ÚTestMiscc                 C   s(   t dƒ}t ¡ }|  t|ƒt|ƒ¡ d S )Nz	boot time)rz   r¡   Ú	boot_timer£   rm   rÀ   r5   r5   r6   Útest_boot_timez  s    zTestMisc.test_boot_timec              	      sp  |   ¡ }t |¡ ttj |d¡dƒ.}| d¡ | d¡ | d¡ W d   ƒ n1 sZ0    Y  zât‰ ‡ fdd„}tr€dnd	}tj	||d
Ž t
tƒ |  ttj¡ | jttjdd |  ttj¡ | jttjdd |  ttj¡ | jttjdd |t_|  t ¡ d¡ |  tt ¡ ƒd¡ tjdd}|  t|ƒd¡ tjdd}|  ttt|ƒƒd¡ ttj |d¡dƒ.}| d¡ | d¡ | d¡ W d   ƒ n1 s°0    Y  |  t ¡ d¡ |  ttjddƒd¡ |  tt ¡ ƒd¡ |  ttttjddƒƒd¡ W d   ƒ n1 s*0    Y  W t |¡ t
tƒ nt |¡ t
tƒ 0 |  tjd¡ d S )Nr}   rÛ   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                    s,   |   d¡rttjdƒ‚ˆ | g|¢R i |¤ŽS )Nr®  zrejecting access for test)rj   rè   ré   rê   rŠ   rì   r5   r6   r’   ‹  s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr“   r”   r#  TrH  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@   r0  rG   Úwriter   r   r™   r   r¡   r¯  rè   r  Úcpu_percentÚcpu_times_percentr°  r£   Úsumr‚   ræ  ÚshutilÚrmtree)r¥   Z	my_procfsrK   r’   rš   Zper_cpu_percentZper_cpu_times_percentr5   rì   r6   Útest_no_procfs_on_import  sX    


(ÿ

*ÿÿ&

ÿ

z!TestMisc.test_no_procfs_on_importc                 C   sV  t dt d¡ ¡ ƒB}t ¡  |js(J ‚tjdd t ¡  tjdd W d   ƒ n1 s\0    Y  t dt d¡ ¡ ƒÆ}t ¡ }|jsŽJ ‚tjdd}t ¡ }tjdd}|  |d¡ |  t	|ƒd¡ |  t	|ƒd¡ |  t	|ƒd¡ |  t	t
t	|ƒƒd¡ |  t	t
t	|ƒƒd¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sH0    Y  d S )Nr$  zŽ                cpu   0 0 0 0 0 0 0 1 0 0
                cpu0  0 0 0 0 0 0 0 1 0 0
                cpu1  0 0 0 0 0 0 0 1 0 0
                TrH  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   r]  )rœ   rÍ   rÎ   rÏ   r¡   rî  rÓ   rï  ræ  rð  r‚   r£   r  Úuser)r¥   r›   rî  Zcpu_percent_percpurï  Zcpu_times_percent_percpur5   r5   r6   Útest_cpu_steal_decrease¼  s8    þ
*þ
z TestMisc.test_cpu_steal_decreasec                 C   sL   t jddd*}|  ttjj¡ |js*J ‚W d   ƒ n1 s>0    Y  d S )Nrö   Tr÷   )r   r™   r¯  r{  r¡   r*  ré  rÓ   rÿ   r5   r5   r6   Útest_boot_time_mockedå  s    þzTestMisc.test_boot_time_mockedc                 C   sô   t jddgd0}|  t ¡ d jd¡ |js2J ‚W d   ƒ n1 sF0    Y  t jddgd0}|  t ¡ d jd¡ |js‚J ‚W d   ƒ n1 s–0    Y  t jddgd0}|  t ¡ d jd¡ |jsÒJ ‚W d   ƒ n1 sæ0    Y  d S )	Nzpsutil._pslinux.cext.users)Ú	giampaoloúpts/2z:0ç   €hÕATr  r7  r   Ú	localhost)r÷  rø  z:0.0rù  Tr  )r÷  rø  Úfoorù  Tr  rû  )r   r™   r£   r¡   ZusersÚhostrÓ   rÿ   r5   r5   r6   Útest_users_mockedì  s$    ÿ(ÿ(ÿzTestMisc.test_users_mockedc                 C   s´   |   ¡ }t |¡ z”|t_|  ttj¡ |  ttj¡ | jttjdd |  ttj	¡ |  ttj
¡ |  ttj¡ |  ttj¡ |  ttj¡ |  tjtj¡ W dt_ndt_0 d S )NTrH  r®  )rë  r
  rì  r¡   r°  r¯  rè   r¢   r  ré  r™  r‘  rz  r¤  ZNoSuchProcessÚProcess)r¥   Ztdirr5   r5   r6   Útest_procfs_path   s    
zTestMisc.test_procfs_pathc                 C   s   t ƒ v t ¡ }| ¡ }|  t|ƒd¡ t|dd„ dd j}|  |j	|¡ t |¡}| 
¡  |  |t ¡ ¡ W d   ƒ n1 s‚0    Y  d S )Nr  c                 S   s   | j S rT   )ÚidrU   r5   r5   r6   Ú<lambda>  r]   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyrv   )r   r¡   rþ  Úthreadsr£   rD   Úsortedr   ræ  ÚpidZas_dictr  Zpids)r¥   Úpr  ÚtidÚptr5   r5   r6   Útest_issue_687  s    
zTestMisc.test_issue_687c                 C   sJ   t ddƒ,}t t ¡ ¡sJ ‚|js(J ‚W d   ƒ n1 s<0    Y  d S )Nú/proc/%s/statusrX   )rœ   r¡   Z
pid_existsr
  ÚgetpidrÓ   rÿ   r5   r5   r6   Ú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  r5   r5   r5   r6   rè  w  s   =)
rè  z
no batteryc                   @   sf   e Zd Ze edƒ d¡dd„ ƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSensorsBatteryZacpizacpi utility not availablec                 C   sD   t dƒ}t| d¡d  ¡  dd¡ƒ}t ¡ j}| j||dd d S )Nzacpi -br3  rv   rm  rX   r¬   )	r   rm   rB   r|   Úreplacer¡   Úsensors_batteryÚpercentr¯   )r¥   rn   Z
acpi_valuer¦   r5   r5   r6   Útest_percent6  s    
zTestSensorsBattery.test_percentc                    s~   ‡ fdd„}t ‰ trdnd}tj||d@}|  t ¡ jd¡ |  t ¡ jtj	¡ |j
s\J ‚W d   ƒ n1 sp0    Y  d S )Nc                    s8   |   d¡s|   d¡rt d¡S ˆ | g|¢R i |¤ŽS d S )Nú
AC0/onlineú	AC/onlineó   1©rS  r‡   r‰   rŠ   rì   r5   r6   r’   ?  s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr“   r”   r#  T)r@   r   r   r™   r£   r¡   r  Úpower_pluggedZsecsleftZPOWER_TIME_UNLIMITEDrÓ   ©r¥   r’   rš   r›   r5   rì   r6   Útest_emulate_power_plugged=  s    ÿz-TestSensorsBattery.test_emulate_power_pluggedc                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    sT   |   d¡s|   d¡r"ttjdƒ‚n.|   d¡r:t tdƒ¡S ˆ | g|¢R i |¤ŽS d S )Nr  r  rX   ú/statusZcharging©rS  rè   ré   rê   r‡   rˆ   r   rŠ   rì   r5   r6   r’   P  s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr“   r”   r#  T©	r@   r   r   r™   r£   r¡   r  r  rÓ   r  r5   rì   r6   Útest_emulate_power_plugged_2M  s    z/TestSensorsBattery.test_emulate_power_plugged_2c                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    s8   |   d¡s|   d¡rt d¡S ˆ | g|¢R i |¤ŽS d S )Nr  r  ó   0r  rŠ   rì   r5   r6   r’   `  s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr“   r”   r#  Fr  r  r5   rì   r6   Útest_emulate_power_not_plugged^  s    z1TestSensorsBattery.test_emulate_power_not_pluggedc                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    sT   |   d¡s|   d¡r"ttjdƒ‚n.|   d¡r:t tdƒ¡S ˆ | g|¢R i |¤ŽS d S )Nr  r  rX   r  Zdischargingr  rŠ   rì   r5   r6   r’   o  s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr“   r”   r#  Fr  r  r5   rì   r6   Ú test_emulate_power_not_plugged_2l  s    z3TestSensorsBattery.test_emulate_power_not_plugged_2c                    sh   ‡ fdd„}t ‰ trdnd}tj||d*}|  t ¡ j¡ |jsFJ ‚W d   ƒ n1 sZ0    Y  d S )Nc                    sP   |   d¡s|   d¡r"ttjdƒ‚n*|   d¡r6t d¡S ˆ | g|¢R i |¤ŽS d S )Nú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onlinerX   ú#/sys/class/power_supply/BAT0/statuss   ???)rj   rè   ré   rê   r‡   r‰   rŠ   rì   r5   r6   r’   €  s    
ÿ

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr“   r”   r#  )	r@   r   r   r™   r+  r¡   r  r  rÓ   r  r5   rì   r6   Útest_emulate_power_undetermined}  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sJ   t ddƒ,}|  t ¡ jd¡ |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Ó   rÿ   r5   r5   r6   Útest_emulate_energy_full_0  s    ÿz-TestSensorsBattery.test_emulate_energy_full_0c              
   C   s¤   t dttjdƒƒ~ t dttjdƒƒL tddƒ" |  t ¡ jd¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S )Nr$  rX   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88éX   )	rŸ   rè   ré   rê   rœ   r£   r¡   r  r  ©r¥   r5   r5   r6   Ú"test_emulate_energy_full_not_avail–  s    
þ
þÿz5TestSensorsBattery.test_emulate_energy_full_not_availc              
   C   sª   t dttjdƒƒ„ t dttjdƒƒR t dttjdƒƒ  |  t ¡ j¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  d S )Nr!  rX   r   r"  )rŸ   rè   ré   rê   r+  r¡   r  r  r'  r5   r5   r6   Ú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)  r5   r5   r5   r6   r  2  s   
r  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsBatteryEmulatedc              	      s    ‡ fdd„}t ‰ trdnd}tjddgdL}tj||d}|  t ¡ ¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  |js’J ‚|jsœJ ‚d S )	Nc                    sb   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | g|¢R i |¤ŽS d S )Nz/energy_nowZ60000000z
/power_nowÚ0z/energy_fullZ60000001©rS  r‡   rˆ   r   rŠ   rì   r5   r6   r’   µ  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr“   r”   z
os.listdirZBAT0r7  r#  )r@   r   r   r™   rß  r¡   r  rÓ   )r¥   r’   rš   ZmlistdirZmopenr5   rì   r6   Útest_it´  s    
J
z"TestSensorsBatteryEmulated.test_itN)r»   r¼   r½   r-  r5   r5   r5   r6   r*  ±  s   r*  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSensorsTemperaturesc              	      sÆ   ‡ fdd„}t ‰ trdnd}tj||dˆ tjddgdX t ¡ d	 d
 }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  d S )Nc                    s†   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rDt d¡S |   d¡rXt d¡S |   d	¡rlt d
¡S ˆ | g|¢R i |¤ŽS d S )Nú/namer‹   z/temp1_labelÚlabelz/temp1_inputó   30000z
/temp1_maxs   40000z/temp1_critó   50000)rS  r‡   rˆ   r   r‰   rŠ   rì   r5   r6   r’   Ì  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr“   r”   r#  r6  z/sys/class/hwmon/hwmon0/temp1r7  r‹   r   r0  ç      >@g      D@ç      I@©r@   r   r   r™   r¡   Zsensors_temperaturesr£   r0  rW  ÚhighÚcritical)r¥   r’   rš   Útempr5   rì   r6   Útest_emulate_class_hwmonË  s    ÿz0TestSensorsTemperatures.test_emulate_class_hwmonc              	      sÎ   ‡ fdd„}dd„ }t ‰ tr dnd}tj||dˆ tjdd	|d
X t ¡ d d }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 s¢0    Y  W d   ƒ n1 sÀ0    Y  d S )Nc                    sr   |   d¡rt d¡S |   d¡r(t d¡S |   d¡r@t tdƒ¡S |   d¡rXt tdƒ¡S ˆ | g|¢R i |¤ŽS d S )	NZ0_tempr2  r8  r1  Z0_typer7  Útyper‹   )rS  r‡   r‰   rˆ   r   rŠ   rì   r5   r6   r’   ç  s    





zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockc                 S   s:   | dkrg S | dkrg S | dkr&dgS | dkr6ddgS g S )Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr5   r@  r5   r5   r6   Ú	glob_mockó  s    ÿzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr“   r”   r#  r6  Tr•   r‹   r   rX   r3  r4  r5  )r¥   r’   r;  rš   r8  r5   rì   r6   Útest_emulate_class_thermalæ  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)r»   r¼   r½   r9  r<  r5   r5   r5   r6   r.  È  s   r.  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsFansc              	      sª   ‡ fdd„}t ‰ trdnd}tj||dl tjddgd< t ¡ d	 d
 }|  |jd¡ |  |jd¡ W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  d S )Nc                    sb   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | g|¢R i |¤ŽS d S )Nr/  r‹   z/fan1_labelr0  z/fan1_inputÚ2000r,  rŠ   rì   r5   r6   r’     s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockr“   r”   r#  r6  z/sys/class/hwmon/hwmon2/fan1r7  r‹   r   r0  iÐ  )	r@   r   r   r™   r¡   Zsensors_fansr£   r0  rW  )r¥   r’   rš   Zfanr5   rì   r6   rY    s    
ÿz!TestSensorsFans.test_emulate_dataN)r»   r¼   r½   rY  r5   r5   r5   r6   r=  
  s   r=  c                   @   sÄ   e Zd Zeƒ dd„ ƒZdd„ Ze ed¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze e d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)S )*ÚTestProcessc                 C   s’   |   ¡ }tj |j¡ ¡ \}}}t |j¡jdd}| j|tdd„ |D ƒƒdd | j|tdd„ |D ƒƒdd | j|tdd„ |D ƒƒdd d S )	NF)Zgroupedc                 S   s   g | ]}|j |j ‘qS r5   )Zprivate_dirtyZprivate_cleanru   r5   r5   r6   r\   0  r]   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>rí   r¬   c                 S   s   g | ]
}|j ‘qS r5   )Úpssru   r5   r5   r6   r\   3  r]   c                 S   s   g | ]
}|j ‘qS r5   )rý   ru   r5   r5   r6   r\   5  r]   )	Zspawn_testprocr¡   r*  rþ  r  Ú_parse_smapsÚmemory_mapsr¯   rð  )r¥   ZsprocÚussr@  rý   Úmapsr5   r5   r6   Útest_parse_smaps_vs_memory_maps*  s    þÿÿz+TestProcess.test_parse_smaps_vs_memory_mapsc                 C   sŒ   t dt ¡  t d¡ ¡ ƒ\}tj t ¡ ¡}| 	¡ \}}}|j
sFJ ‚|  |d¡ |  |d¡ |  |d¡ W d   ƒ n1 s~0    Y  d S )Nú/proc/%s/smapsaÆ                  fffff0 r-xp 00000000 00:00 0                  [vsyscall]
                Size:                  1 kB
                Rss:                   2 kB
                Pss:                   3 kB
                Shared_Clean:          4 kB
                Shared_Dirty:          5 kB
                Private_Clean:         6 kB
                Private_Dirty:         7 kB
                Referenced:            8 kB
                Anonymous:             9 kB
                LazyFree:              10 kB
                AnonHugePages:         11 kB
                ShmemPmdMapped:        12 kB
                Shared_Hugetlb:        13 kB
                Private_Hugetlb:       14 kB
                Swap:                  15 kB
                SwapPss:               16 kB
                KernelPageSize:        17 kB
                MMUPageSize:           18 kB
                Locked:                19 kB
                VmFlags: rd ex
                i l  rî   i <  )rœ   r
  r  rÍ   rÎ   rÏ   r¡   r*  rþ  rA  rÓ   r£   )r¥   r›   r  rC  r@  rý   r5   r5   r6   Útest_parse_smaps_mocked7  s    
þ
z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYc                 C   s  dd„ }|   ¡ }t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sB0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 s~0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sº0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sö0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 s40    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sr0    Y  trt|ƒ t|d	ƒ" |  ||ƒjd¡ W d   ƒ n1 s¾0    Y  t|ƒ t|d
ƒ" |  ||ƒjd¡ 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_filesr0  r
  Úabspathr{  )Úfnamer  Z	giveup_atÚfiler5   r5   r6   Úget_test_file\  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filerÛ   rh  rß   zr+zw+za+rV   zx+)rë  r@   r£   Úmoder   r   )r¥   rM  Ztestfnr5   r5   r6   Útest_open_files_modeZ  s*    0000222z TestProcess.test_open_files_modec              	   C   sö   t  ¡ }| ¡ }t|  ¡ dƒÄ t|jdt|ƒ ƒ tjdt	t
jdƒd*}| ¡ }|r\J ‚|jsfJ ‚W d   ƒ n1 sz0    Y  tjdt	t
jdƒd*}|  | ¡ g ¡ |js¶J ‚W d   ƒ n1 sÊ0    Y  W d   ƒ n1 sè0    Y  d S )NrÛ   úlen(ret) != %iúpsutil._pslinux.os.readlinkrX   r#  )r¡   rþ  rI  r@   rë  r   rD   r   r™   ÚOSErrorré   rê   rÓ   ÚEINVALr£   )r¥   r  Úfilesr›   r5   r5   r6   Útest_open_files_file_gone  s"    
ÿ(
ÿz%TestProcess.test_open_files_file_gonec              	   C   s²   t  ¡ }| ¡ }t|  ¡ dƒ€ t|jdt|ƒ ƒ tr<dnd}tj	|t
tjdƒd*}| ¡ }|rhJ ‚|jsrJ ‚W d   ƒ n1 s†0    Y  W d   ƒ n1 s¤0    Y  d S )NrÛ   rP  r“   r”   rX   r#  )r¡   rþ  rI  r@   rë  r   rD   r   r   r™   rè   ré   rê   rÓ   ©r¥   r  rT  rš   r›   r5   r5   r6   Útest_open_files_fd_gone“  s    
ÿz#TestProcess.test_open_files_fd_gonec              
   C   sÔ   t  ¡ }| ¡ }t|  ¡ dƒ¢ t|jdt|ƒ ƒ d}tj|t	t
jdƒdT}t d¡* | ¡ }|rlJ ‚|jsvJ ‚W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )NrÛ   rP  rQ  rX   r#  úpsutil._pslinux.debug)r¡   rþ  rI  r@   rë  r   rD   r   r™   rR  ré   ÚENAMETOOLONGrÓ   rV  r5   r5   r6   Útest_open_files_enametoolong£  s    
ÿz(TestProcess.test_open_files_enametoolongc                 C   sV   t jdi d4}|  tj t ¡ ¡ ¡ ¡ |j	s4J ‚W d   ƒ n1 sH0    Y  d S )Nz)psutil._pslinux._psposix.get_terminal_mapr7  )
r   r™   r+  r¡   r*  rþ  r
  r  ZterminalrÓ   rÿ   r5   r5   r6   Útest_terminal_mocked¶  s    ÿz TestProcess.test_terminal_mockedc                 C   sÄ   t  ¡ }t tdƒ¡}tjd|dd.}|  | ¡ ddg¡ |j	sFJ ‚W d   ƒ n1 sZ0    Y  t tdƒ¡}tjd|dd.}|  | ¡ g d¢¡ |j	s¢J ‚W d   ƒ n1 s¶0    Y  d S )	Nzfoo bar rö   Tr'  rû  Úbarz	foo bar  ©rû  r\  rX   ©
r¡   rþ  r‡   rˆ   r   r   r™   r£   ZcmdlinerÓ   ©r¥   r  r-  r›   r5   r5   r6   Útest_cmdline_mockedÄ  s    ÿ(ÿzTestProcess.test_cmdline_mockedc                 C   sÄ   t  ¡ }t tdƒ¡}tjd|dd.}|  | ¡ ddg¡ |j	sFJ ‚W d   ƒ n1 sZ0    Y  t tdƒ¡}tjd|dd.}|  | ¡ g d¢¡ |j	s¢J ‚W d   ƒ n1 s¶0    Y  d S )	Nzfoo bar rö   Tr'  rû  r\  z	foo bar  r]  r^  r_  r5   r5   r6   Útest_cmdline_spaces_mockedÒ  s    ÿ(ÿz&TestProcess.test_cmdline_spaces_mockedc                 C   sh   t  ¡ }t tdƒ¡}tjd|dd.}|  | ¡ ddg¡ |j	sFJ ‚W d   ƒ n1 sZ0    Y  d S )Nzfoo bar rö   Tr'  rû  r\  r^  r_  r5   r5   r6   Útest_cmdline_mixed_separatorsà  s    ÿz)TestProcess.test_cmdline_mixed_separatorsc                 C   sZ   t jddd8 |  t ¡  ¡ d¡ |  t ¡  ¡ d¡ W d   ƒ n1 sL0    Y  d S )NrQ  z/home/foo (deleted)r7  z	/home/foo)r   r™   r£   r¡   rþ  ÚexeÚcwdr'  r5   r5   r6   Ú!test_readlink_path_deleted_mockedê  s
    ÿz-TestProcess.test_readlink_path_deleted_mockedc                    s¾   ‡ fdd„}t ‰ trdnd}tj||d2}t ¡  ¡ }|jsBJ ‚|  |g ¡ W d   ƒ n1 sb0    Y  ‡ fdd„}tj||d$ |  	tj
t ¡ j¡ W d   ƒ n1 s°0    Y  d S )Nc                    s:   |   dt ¡  ¡r ttjdƒ‚nˆ | g|¢R i |¤ŽS d S ©Nz/proc/%s/taskrX   )rj   r
  r  rè   ré   rê   rŠ   rì   r5   r6   Úopen_mock_1õ  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_1r“   r”   r#  c                    s:   |   dt ¡  ¡r ttjdƒ‚nˆ | g|¢R i |¤ŽS d S rf  )rj   r
  r  rè   ré   ÚEPERMrŠ   rì   r5   r6   Úopen_mock_2  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_2)r@   r   r   r™   r¡   rþ  r  rÓ   r£   r¯  ÚAccessDenied)r¥   rg  rš   r›   rÚ   ri  r5   rì   r6   Útest_threads_mockedð  s    
*zTestProcess.test_threads_mockedc              
   C   sÞ   t jdttjdƒd´}t jdt dd¡d~}t ¡  ¡ }|j	sFJ ‚|j	sPJ ‚|  
|d¡ t jddd$ |  tjt ¡ j¡ W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  d S )	Nzpsutil._pslinux.readlinkrX   r#  zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFr7  )r   r™   rR  ré   rê   r¡   rj  rþ  rc  rÓ   r£   r¯  ÚZombieProcess)r¥   r:  r;  rÚ   r5   r5   r6   Útest_exe_mocked  s$    
ÿ
ÿ

ÿÿzTestProcess.test_exe_mockedc              	   C   s‚   t dt ¡  ttjdƒƒT}t ¡ }|  t	¡ | 
¡  W d   ƒ n1 sL0    Y  |js`J ‚W d   ƒ n1 st0    Y  d S )NrF  rX   )rŸ   r
  r  rè   ré   rê   r¡   rþ  r¯  r   rB  rÓ   ©r¥   r›   r  r5   r5   r6   Útest_issue_1014"  s    

þ&zTestProcess.test_issue_1014r>  c              	   C   s²   t jdttjdƒdb}t ¡ }| ¡  |  tj	¡}| 
tj¡ W d   ƒ n1 sV0    Y  |jsjJ ‚W d   ƒ n1 s~0    Y  |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitrX   r#  )r   r™   rR  ré   ZENOSYSr¡   rþ  r‹   r¯  rl  ZrlimitZRLIMIT_NOFILErÓ   r£   Ú	exceptionr  ©r¥   r›   r  rž   r5   r5   r6   Útest_rlimit_zombie-  s    
ÿ*(zTestProcess.test_rlimit_zombiec              	   C   s®   t jdttjdƒd^}t ¡ }| ¡  |  tj	¡}| 
¡  W d   ƒ n1 sR0    Y  |jsfJ ‚W d   ƒ n1 sz0    Y  |  |jj|j¡ |  |jj| ¡ ¡ d S )NrQ  rX   r#  )r   r™   rR  ré   rê   r¡   rþ  r‹   r¯  rl  rd  rÓ   r£   rp  r  rq  r5   r5   r6   Útest_cwd_zombie<  s    
ÿ&(zTestProcess.test_cwd_zombiec                 C   s  g d¢}d  |¡ ¡ }tdt ¡  |ƒØ t ¡ }|  | ¡ d¡ |  | 	¡ tj
¡ |  | ¡ d¡ |  | ¡ dt t ¡  ¡ | ¡ }|  |jdt ¡ |  |jdt ¡ |  |jd	t ¡ |  |jd
t ¡ |  |jdt ¡ |  | ¡ d¡ W d   ƒ 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+  rz  r+  r+  Ú7r{   z/proc/%s/statÚcatrv   r  r  r©   r>   rw   r·  )rG   rÏ   rœ   r
  r  r¡   rþ  r£   r‹   ÚstatusZSTATUS_ZOMBIEÚppidZcreate_timer   ré  r  rô  ÚsystemÚchildren_userÚchildren_systemZiowaitZcpu_num)r¥   rŒ   r   r  Úcpur5   r5   r6   Útest_stat_file_parsingG  s"    ,ÿz"TestProcess.test_stat_file_parsingc                 C   sü   t dt ¡  t d¡ ¡ ƒÌ t ¡ }|  | 	¡ j
d¡ |  | 	¡ jd¡ |  | ¡ d¡ | ¡ }|  |jd¡ |  |jd¡ |  |jd¡ | ¡ }|  |jd	¡ |  |jd
¡ |  |jd¡ |  |j ¡ ttddƒƒ¡ W d   ƒ n1 sî0    Y  d S )Nr
  a                  Uid:	1000	1001	1002	1003
                Gid:	1004	1005	1006	1007
                Threads:	66
                Cpus_allowed:	f
                Cpus_allowed_list:	0-7
                voluntary_ctxt_switches:	12
                nonvoluntary_ctxt_switches:	13rª   é   éB   iè  ié  iê  iì  ií  iî  r   r¸  )rœ   r
  r  rÍ   rÎ   rÏ   r¡   rþ  r£   Únum_ctx_switchesÚ	voluntaryÚinvoluntaryÚnum_threadsÚuidsÚrealZ	effectiveZsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistrF   )r¥   r  rŠ  rŒ  r5   r5   r6   Útest_status_file_parsing„  s"    
þ
z$TestProcess.test_status_file_parsingc              	   C   s‚   t jdttjdƒdX}t ¡ }t  d¡& | ¡ r8J ‚|jsBJ ‚W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )NrQ  rX   r#  rX  )	r   r™   rR  ré   rY  r¡   rþ  ÚconnectionsrÓ   rn  r5   r5   r6   Útest_connections_enametoolong  s    
ÿz)TestProcess.test_connections_enametoolongN)r»   r¼   r½   r   rE  rG  r   r/  r   rO  rU  rW  rZ  r[  r`  ra  rb  re  rk  rm  ro  r   rr  rs  rƒ  r  r’  r5   r5   r5   r6   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 rT   )r¡   rþ  Úproc)Úclsr5   r5   r6   Ú
setUpClass²  s    z#TestProcessAgainstStatus.setUpClassc              
   C   s´   t j d| jj ¡Œ}|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 s¦0    Y  d S )Nr
  ú	r  zcan't find %r)
r¡   Ú_psplatformÚ	open_textr”  r  r|   rj   Ú	partitionrm   rE   )r¥   Z	linestartrK   rL   r  r5   r5   r6   Úread_status_file¶  s    
ÿ
z)TestProcessAgainstStatus.read_status_filec                 C   s    |   d¡}|  | j ¡ |¡ d S )NzName:)r›  r£   r”  r‹   ©r¥   r  r5   r5   r6   Ú	test_nameÃ  s    
z"TestProcessAgainstStatus.test_namec                 C   sH   |   d¡}|| d¡d | d¡… }| dd¡}|  | j ¡ |¡ d S )NzState:ú(rv   ú)r{   r  )r›  rà  Úrfindr  r£   r”  r}  rœ  r5   r5   r6   Útest_statusÇ  s    
z$TestProcessAgainstStatus.test_statusc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzPPid:)r›  r£   r”  r~  rœ  r5   r5   r6   Ú	test_ppidÍ  s    
z"TestProcessAgainstStatus.test_ppidc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzThreads:)r›  r£   r”  r‰  rœ  r5   r5   r6   Útest_num_threadsÑ  s    
z)TestProcessAgainstStatus.test_num_threadsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:rv   r>   )r›  r   r‚   rm   rB   r£   r”  rŠ  rœ  r5   r5   r6   Ú	test_uidsÕ  s    
z"TestProcessAgainstStatus.test_uidsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzGid:rv   r>   )r›  r   r‚   rm   rB   r£   r”  rŒ  rœ  r5   r5   r6   Ú	test_gidsÚ  s    
z"TestProcessAgainstStatus.test_gidsc                 C   s@   |   d¡}|  | j ¡ j|¡ |   d¡}|  | j ¡ j|¡ d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r›  r£   r”  r†  r‡  rˆ  rœ  r5   r5   r6   Útest_num_ctx_switchesß  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sN   |   d¡}dt|ƒv rJtt| d¡ƒ\}}|  | j ¡ tt	||d ƒƒ¡ d S )NúCpus_allowed_list:r  rv   )
r›  rÕ   r‚   rm   rB   r£   r”  Zcpu_affinityr  rF   )r¥   r  Zmin_Zmax_r5   r5   r6   Ú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”  r  rŽ  rÕ   rÓ   )r¥   r  r›   r5   r5   r6   Ú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©  r5   r5   r5   r6   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¡ |js.J ‚W d   ƒ n1 sB0    Y  d S )Nzos.readlinkzfoo (deleted)r7  r\  rû  )r   r™   r£   r¡   r˜  ÚreadlinkrÓ   rÿ   r5   r5   r6   Útest_readlinkÿ  s    zTestUtils.test_readlinkN)r»   r¼   r½   r®  r5   r5   r5   r6   r¬  ü  s   r¬  Ú__main__)Úrun_from_name)frª  Ú
__future__r   rk   r*   ré   Úglobr‡   r
  rƒ   rñ  r'   r0   rÍ   rH  r   rÐ   r¡   r   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)  r   r   r   r   r0  rJ  ÚdirnameÚ__file__ZHEREr/   ZSIOCGIFCONFr_   r8   r:   r¾  ZEMPTY_TEMPERATURESr7   r9   r;   rS   rb   rt   ry   rz   r…   Úcontextmanagerrœ   rŸ   r/  r    r¾   rÇ   rð   r  r  r2  r=  ra  rg  rl  rv  r†  r’  r  r³  rÔ  rè  r  r*  r.  r=  r?  r“  r¬  r»   Zpsutil.tests.runnerr°  r5   r5   r5   r6   Ú<module>   s   	

62 \[? )2. ? B ;}A   R
