o
    ˆ¶¹a@l ã                   @   sh  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* 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@d0d1„ ZAd2d3„ ZBd4d5„ ZCd6d7„ ZDd8d9„ ZEejFd:d;„ ƒZGejFd<d=„ ƒZHe* Ie d>¡G d?d@„ d@e!ƒƒZJe* Ie d>¡G dAdB„ dBe!ƒƒZKe* Ie d>¡G dCdD„ dDe!ƒƒZLe* Ie d>¡G dEdF„ dFe!ƒƒZMe* Ie d>¡G dGdH„ dHe!ƒƒZNe* Ie d>¡G dIdJ„ dJe!ƒƒZOe* Ie d>¡G dKdL„ dLe!ƒƒZPe* Ie d>¡G dMdN„ dNe!ƒƒZQe* Ie d>¡G dOdP„ dPe!ƒƒZRe* Ie d>¡G dQdR„ dRe!ƒƒZSe* Ie d>¡G dSdT„ dTe!ƒƒZTe* Ie d>¡G dUdV„ dVe!ƒƒZUe* Ie d>¡G dWdX„ dXe!ƒƒZVe* Ie d>¡G dYdZ„ dZe!ƒƒZWe* Ie d>¡G d[d\„ d\e!ƒƒZXe* Ie d>¡G d]d^„ d^e!ƒƒZYe* Ie d>¡e* Ie d_¡G d`da„ dae!ƒƒƒZZe* Ie d>¡G dbdc„ dce!ƒƒZ[e* Ie d>¡G ddde„ dee!ƒƒZ\e* Ie d>¡G dfdg„ dge!ƒƒZ]e* Ie d>¡G dhdi„ die!ƒƒZ^e* Ie d>¡G djdk„ dke!ƒƒZ_e* Ie d>¡G dldm„ dme!ƒƒZ`eadnk�r²ddolbmcZc ece4ƒ dS dS )pz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)Úunittest)Úwhich)ÚCLOCK_TICKS)ÚRootFsDeviceFinder)Úcalculate_avail_vmem)Úopen_binaryi‰  i‰  i'‰  i‰  i‰  i   z/sys/class/hwmon/hwmon*c                 C   óˆ   dd l }| d d… } trt| dƒ} t tjtj¡}t |¡� t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 s=w   Y  d S ©Nr   é   ÚasciiÚ256sé   é   )Úfcntlr   ÚbytesÚsocketÚAF_INETÚ
SOCK_DGRAMÚ
contextlibÚclosingÚ	inet_ntoaÚioctlÚfilenoÚSIOCGIFADDRÚstructÚpack©Úifnamer'   Ús© r7   ú9/usr/lib/python3/dist-packages/psutil/tests/test_linux.pyÚget_ipv4_addressL   ó   


þþÿ$ÿr9   c                 C   r    r!   )r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   ÚSIOCGIFNETMASKr2   r3   r4   r7   r7   r8   Úget_ipv4_netmaskY   r:   r<   c                 C   r    r!   )r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   ÚSIOCGIFBRDADDRr2   r3   r4   r7   r7   r8   Úget_ipv4_broadcastf   r:   r>   c           	      C   sº   t ddƒ�!}| ¡ D ]}| ¡ }|d | kr nq
td|  ƒ‚W d   ƒ n1 s)w   Y  |d }g }tdt|ƒdƒD ]}| |||d … ¡ q<d |¡}t 	tj
|¡}t tj
|¡S )Nz/proc/net/if_inet6Úrtéÿÿÿÿzcould not find interface %rr   é   ú:)ÚopenÚ	readlinesÚsplitÚ
ValueErrorÚrangeÚlenÚappendÚjoinr)   Ú	inet_ptonÚAF_INET6Ú	inet_ntop)	r5   ÚfÚlineÚfieldsÚunformattedÚgroupsÚiÚ	formattedÚpackedr7   r7   r8   Úget_ipv6_addresss   s    ÿþü
rV   c              	      s¾   dd l }| d d… } trt| dƒ} t tjtj¡}t |¡�7 | | 	¡ t
t d| ¡¡}tr3dd„ ‰ ndd l}|j‰ d ‡ fdd	„|d
d… D ƒ¡d d… W  d   ƒ S 1 sXw   Y  d S )Nr   r"   r#   r$   c                 S   s   | S ©Nr7   ©Úxr7   r7   r8   ÚordŽ   ó   zget_mac_address.<locals>.ordÚ c                    s   g | ]}d ˆ |ƒ ‘qS )z%02x:r7   )Ú.0Úchar©rZ   r7   r8   Ú
<listcomp>“   ó    z#get_mac_address.<locals>.<listcomp>é   r&   r@   )r'   r   r(   r)   r*   r+   r,   r-   r/   r0   ÚSIOCGIFHWADDRr2   r3   Ú__builtin__rZ   rJ   )r5   r'   r6   Úinford   r7   r_   r8   Úget_mac_address„   s   
ÿ
&$÷rf   c                  C   s|   t ddgddid�} |  d¡}|D ]#}| d¡r4| ¡ \}}}}t dd¡}|t|ƒt|ƒt|ƒƒ  S qtd	d |¡ ƒ‚)
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    Úfreeú-bÚLANGúC.UTF-8©ÚenvÚ
ÚSwapztotal used freez&can't find 'Swap' in 'free' output:
%s)r   rE   Ú
startswithÚcollectionsÚ
namedtupleÚintrF   rJ   )ÚoutÚlinesrO   Ú_ÚtotalÚusedrg   Úntr7   r7   r8   Ú	free_swap–   s   

ýÿry   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d |¡ ƒ‚)zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rg   rh   ri   rj   rk   rm   ÚMemc                 S   s   g | ]}t |ƒ‘qS r7   )rr   ©r]   rY   r7   r7   r8   r`   ²   s    z free_physmem.<locals>.<listcomp>é   é   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%s)r   rE   ro   rp   rq   rF   rJ   )rs   rt   rO   rv   rw   rg   Úsharedrx   r7   r7   r8   Úfree_physmem¥   s   


ÿÿûÿr   c                 C   sV   t ddgddid�}| d¡D ]}| ¡ }| |v r$t| d¡d ƒ  S qtd	|  ƒ‚)
NÚvmstatz-sri   rj   rk   rm   ú r   z can't find %r in 'vmstat' output)r   rE   Ústriprr   rF   )Ústatrs   rO   r7   r7   r8   r€   º   s   ÿr€   c                  C   s>   t ddgƒ ¡ } d| v rt d¡‚ttt|  ¡ d  d¡ƒƒS )Nrg   z-VÚUNKNOWNzcan't determine free versionr@   Ú.)r   r‚   r   ÚSkipTestÚtupleÚmaprr   rE   )rs   r7   r7   r8   Úget_free_version_infoÃ   s   
r‰   c                 #   ó^   � ‡ ‡‡fdd„}t ‰trdnd}tj|d|d��}|V  W d  ƒ dS 1 s(w   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                    sJ   | ˆkrt rtˆ tƒrt ˆ ¡S t ˆ ¡S t ˆ ¡S ˆ| g|¢R i |¤ŽS rW   )r   Ú
isinstancer   ÚioÚStringIOÚBytesIO©ÚnameÚargsÚkwargs©ÚcontentÚfor_pathÚ	orig_openr7   r8   Ú	open_mockÏ   s   



z$mock_open_content.<locals>.open_mockúbuiltins.openú__builtin__.openT©ÚcreateÚside_effectN©rC   r   r   Úpatch)r•   r”   r—   Úpatch_pointÚmr7   r“   r8   Úmock_open_contentÊ   s   €"ÿr¡   c                 #   rŠ   )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s"   | ˆkrˆ ‚ˆ| g|¢R i |¤ŽS rW   r7   r�   ©Úexcr•   r–   r7   r8   r—   æ   s   z&mock_open_exception.<locals>.open_mockr˜   r™   Trš   Nr�   )r•   r£   r—   rŸ   r    r7   r¢   r8   Úmock_open_exceptioná   s   €"ÿr¤   z
LINUX onlyc                   @   s¬   e Zd Zdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZeƒ dd„ ƒZeƒ d	d
„ ƒZeƒ dd„ ƒZ	eƒ dd„ ƒZ
eƒ dd„ ƒZdd„ Zeƒ dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSystemVirtualMemoryc                 C   ó*   t dƒd }t ¡ j}| j||td� d S )Nztotal memoryé   ©Údelta)r€   ÚpsutilÚvirtual_memoryrv   ÚassertAlmostEqualr   ©ÚselfÚvmstat_valueÚpsutil_valuer7   r7   r8   Ú
test_totalú   s
   

ÿz"TestSystemVirtualMemory.test_totalc                 C   sL   t ƒ dk r
|  d¡‚tƒ }|j}t ¡ j}| j||td|||jf d� d S )N)é   r²   é   zold free versionú	%s %s 
%s©r©   Úmsg)	r‰   ÚskipTestr   rw   rª   r«   r¬   r   Úoutput©r®   rg   Ú
free_valuer°   r7   r7   r8   Ú	test_used  s   



þz!TestSystemVirtualMemory.test_usedc                 C   r¦   )Nzfree memoryr§   r¨   )r€   rª   r«   rg   r¬   r   r­   r7   r7   r8   Ú	test_free  ó
   

ÿz!TestSystemVirtualMemory.test_freec                 C   r¦   )Nzbuffer memoryr§   r¨   )r€   rª   r«   Úbuffersr¬   r   r­   r7   r7   r8   Útest_buffers  r½   z$TestSystemVirtualMemory.test_buffersc                 C   r¦   )Nzactive memoryr§   r¨   )r€   rª   r«   Úactiver¬   r   r­   r7   r7   r8   Útest_active   r½   z#TestSystemVirtualMemory.test_activec                 C   r¦   )Nzinactive memoryr§   r¨   )r€   rª   r«   Úinactiver¬   r   r­   r7   r7   r8   Útest_inactive'  r½   z%TestSystemVirtualMemory.test_inactivec                 C   sJ   t ƒ }|j}|dkrt d¡‚t ¡ j}| j||td|||jf d� d S )Nr   z%free does not support 'shared' columnr´   rµ   )	r   r~   r   r†   rª   r«   r¬   r   r¸   r¹   r7   r7   r8   Útest_shared.  s   


þz#TestSystemVirtualMemory.test_sharedc                 C   sj   t ddgƒ}| d¡}d|d vrt d¡‚t|d  ¡ d ƒ}t ¡ j}| j||t	d	|||f d
� d S )Nrg   rh   rm   Ú	availabler   z(free does not support 'available' columnr|   r@   r´   rµ   )
r   rE   r   r†   rr   rª   r«   rÅ   r¬   r   )r®   rs   rt   rº   r°   r7   r7   r8   Útest_available9  s   



þz&TestSystemVirtualMemory.test_availablec              	   C   sš  t dt d¡ ¡ ƒ�¹}tjdd��š}t d¡ t ¡ }|j	s J ‚|  
t|ƒd¡ |d }|j d¡s4J ‚|  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 s®w   Y  W d   ƒ d S W d   ƒ d S 1 sÆw   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Úalwaysr|   r   úpsutil/_pslinux.pyz#memory stats couldn't be determinedÚcachedr~   rÀ   rÂ   r¾   rÅ   )r¡   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterrª   r«   ÚcalledÚassertEqualrH   ÚfilenameÚendswithÚassertInÚstrÚmessagerÌ   rÀ   rÂ   r~   r¾   rÅ   Úslab©r®   r    ÚwsÚretÚwr7   r7   r8   Útest_warnings_on_missesH  sB   	õ


ÿëô"ôz/TestSystemVirtualMemory.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 rI|d }t|| ƒ| d }|  |d¡ d S d S )NrÇ   r|   r§   r   s   MemAvailable:éd   r"   )r   rE   rr   r   ÚabsÚ
assertLess)r®   ÚmemsrN   rO   rP   ÚaÚbÚdiff_percentr7   r7   r8   Útest_avail_old_percento  s   
þÿýz.TestSystemVirtualMemory.test_avail_old_percentc              	   C   ó    t dt d¡ ¡ ƒ�<}tjdd��}t ¡ }W d   ƒ n1 s w   Y  |js*J ‚|  	|j
d¡ |d }|  dt|jƒ¡ W d   ƒ d S 1 sIw   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Û   r7   r7   r8   Ú test_avail_old_comes_from_kernel  s    ð
ÿ

ÿ"êz8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc              	   C   rè   )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Û   r7   r7   r8   Útest_avail_old_missing_fields›  s    
ô
ÿ

ÿ"îz5TestSystemVirtualMemory.test_avail_old_missing_fieldsc              
   C   sØ   t dt d¡ ¡ ƒ�X tdttjdƒƒ�6 tj	dd�� }t
 ¡ }|  |jd¡ |d }|  d	t|jƒ¡ W d   ƒ n1 s>w   Y  W d   ƒ n1 sMw   Y  W d   ƒ d S W d   ƒ d S 1 sew   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Þ   r7   r7   r8   Útest_avail_old_missing_zoneinfo´  s2   ñ
þÿþû€ýð"ðz7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoc                    sâ   ‡ fdd„}t ‰ trdnd}tj|d|d��Q}t ¡ }|js J ‚|  |jd¡ |  |j	d¡ |  |j
d	¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W d   ƒ d S 1 sjw   Y  d S )Nc                    s2   | dkrt  t d¡ ¡ ¡S ˆ | g|¢R i |¤Ž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–   r7   r8   r—   Õ  s
   1Ï3zETestSystemVirtualMemory.test_virtual_memory_mocked.<locals>.open_mockr˜   r™   Trš   i � i   é   i p  i T  i   i    i X  é   )rC   r   r   rž   rª   r«   rÓ   rÔ   rv   rg   r¾   rÌ   r~   rÀ   rÂ   rÚ   rÅ   )r®   r—   rŸ   r    Úmemr7   ró   r8   Útest_virtual_memory_mockedÓ  s    7
"ôz2TestSystemVirtualMemory.test_virtual_memory_mockedN)Ú__name__Ú
__module__Ú__qualname__r±   r   r»   r¼   r¿   rÁ   rÃ   rÄ   rÆ   rß   rç   rë   rí   rò   r÷   r7   r7   r7   r8   r¥   ÷   s.    	







'
r¥   c                   @   s\   e Zd Zedd„ ƒZdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestSystemSwapMemoryc                  C   s@   t dƒ�} |  ¡ }W d  ƒ n1 sw   Y  d|v od|v S )z3Return True if /proc/meminfo provides swap metrics.rÇ   Nz
SwapTotal:z	SwapFree:)rC   Úread)rN   Údatar7   r7   r8   Úmeminfo_has_swap_info%  s   

ÿz*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   ó"   t ƒ j}t ¡ j}| j||td�S ©Nr¨   )ry   rv   rª   Úswap_memoryr¬   r   ©r®   rº   r°   r7   r7   r8   r±   ,  s
   
ÿzTestSystemSwapMemory.test_totalc                 C   rÿ   r   )ry   rw   rª   r  r¬   r   r  r7   r7   r8   r»   2  ó
   
ÿzTestSystemSwapMemory.test_usedc                 C   rÿ   r   )ry   rg   rª   r  r¬   r   r  r7   r7   r8   r¼   9  r  zTestSystemSwapMemory.test_freec              	   C   sâ   t jddd��`}tjdd��A}t d¡ t ¡ }|jsJ ‚|  t	|ƒd¡ |d }|j
 d¡s1J ‚|  d	t|jƒ¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sRw   Y  W d   ƒ d S W d   ƒ d S 1 sjw   Y  d S )
Núpsutil._common.openT©r›   rÈ   rÊ   r|   r   rË   z9'sin' and 'sout' swap memory stats couldn't be determined)r   rž   rÐ   rÑ   rÒ   rª   r  rÓ   rÔ   rH   rÕ   rÖ   r×   rØ   rÙ   ÚsinÚsoutrÛ   r7   r7   r8   Útest_missing_sin_sout@  s$   

þõÿ"ÿz*TestSystemSwapMemory.test_missing_sin_soutc              	   C   sæ   t dttjdƒƒ�`}tjdd��A}t d¡ t ¡ }|j	sJ ‚|  
t|ƒd¡ |d }|j d¡s3J ‚|  d	t|jƒ¡ |  
|jd¡ |  
|jd¡ W d   ƒ n1 sTw   Y  W d   ƒ d S W d   ƒ d S 1 slw   Y  d S )
Nz/proc/vmstatrî   TrÈ   rÊ   r|   r   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Ô   rH   rÕ   rÖ   r×   rØ   rÙ   r  r  rÛ   r7   r7   r8   Útest_no_vmstat_mockedO  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|¡ | 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Ó   Úpsutil._psutil_linuxÚ_psutil_linuxÚlinux_sysinforÔ   rv   r¬   rg   r   )r®   r    ÚswapÚcextru   rv   rg   Úunit_multiplierr7   r7   r8   Útest_meminfo_against_sysinfob  s   

ÿ
z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   sB   t ddƒ�}t ¡  |jsJ ‚W d   ƒ d S 1 sw   Y  d S )NrÇ   ó    )r¡   rª   r  rÓ   ©r®   r    r7   r7   r8   Ú#test_emulate_meminfo_has_no_metricsr  s   "þz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)rø   rù   rú   Ústaticmethodrþ   r±   r   r»   r¼   r  r	  r  r  r7   r7   r7   r8   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|¡ n|  d|¡ |dkr7|  d|¡ n|  d|¡ |d	krI|  d
|¡ d S |  d
|¡ d S )Nz\d+\.\d+\.\d+é   r   r…   )r  é   é   Ústeal)r  r  r&   Úguest)r²   r  r   Ú
guest_nice)rª   Ú	cpu_timesÚ_fieldsÚreÚfindallÚosÚunamer‡   rˆ   rr   rE   r×   ÚassertNotIn)r®   rP   Ú
kernel_verÚkernel_ver_infor7   r7   r8   Útest_fieldsƒ  s   
zTestSystemCPUTimes.test_fieldsN)rø   rù   rú   r'  r7   r7   r7   r8   r  €  ó    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   sn   t dƒ�}| ¡  ¡ }W d   ƒ n1 sw   Y  dt|ƒv r5t| d¡d ƒd }|  t ¡ |¡ d S d S )Nr*  ú-r|   )	rC   rü   r‚   rØ   rr   rE   rÔ   rª   Ú	cpu_count)r®   rN   Úvaluer7   r7   r8   Ú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   Úsearchr{   r7   r7   r8   r`   ¥  s     zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r"  ÚlistdirrH   rÔ   rª   r,  )r®   ÚlsÚcountr7   r7   r8   Útest_against_sysdev_cpu_num¡  s   
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numÚnprocznproc utility not availablec                 C   s$   t tdƒƒ}|  tjdd�|¡ d S )Nznproc --allT©Úlogical)rr   r   rÔ   rª   r,  )r®   Únumr7   r7   r8   Ú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 )ú#©ro   r{   r7   r7   r8   r`   °  s    z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rm   Tr6  )r   rH   rE   rÔ   rª   r,  )r®   rs   r8  r7   r7   r8   Útest_against_lscpu­  s   z,TestSystemCPUCountLogical.test_against_lscpuc              	   C   s”  dd l }|j ¡ }tjdtd��°}|  |j ¡ |¡ |jsJ ‚tjddd��"}|  |j ¡ ¡ |  |j	d¡ |  |j
d d d¡ W d   ƒ n1 sKw   Y  td	d
ƒ�}| ¡ }W d   ƒ n1 sdw   Y  t |¡}tjd|dd��}|  |j ¡ |¡ W d   ƒ n1 sŠw   Y  td	dƒ�}|  |j ¡ |¡ |j W d   ƒ n1 s«w   Y  W d   ƒ d S W d   ƒ d S 1 sÃw   Y  d S )Nr   zpsutil._pslinux.os.sysconf©rœ   r  Tr  r  ú
/proc/statú/proc/cpuinfoÚrb©Úreturn_valuer›   r  )Úpsutil._pslinuxÚ_pslinuxÚcpu_count_logicalr   rž   rF   rÔ   rÓ   ÚassertIsNoneÚ
call_countÚ	call_argsrC   rü   rŒ   rŽ   r¡   )r®   rª   Úoriginalr    rN   Úcpuinfo_dataÚ	fake_filer7   r7   r8   Útest_emulate_fallbacks³  s<   
ÿ
ü
ÿ
ÿþþè"èz0TestSystemCPUCountLogical.test_emulate_fallbacksN)rø   rù   rú   r   ÚskipIfr"  ÚpathÚexistsr.  r4  r   r9  r?  rO  r7   r7   r7   r8   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<  rm   r=  ú,r|   Fr6  )	r   ÚsetrE   ro   ÚaddrÔ   rª   r,  rH   )r®   rs   Úcore_idsrO   rP   r7   r7   r8   r?  Ø  s   

€z*TestSystemCPUCountCores.test_against_lscpuc                 C   sh   t j ¡ }tjdg d��}t j ¡ }|jsJ ‚W d   ƒ n1 s!w   Y  |d ur2|  ||¡ d S d S )Nú	glob.glob©rE  )rª   rG  Úcpu_count_coresr   rž   rÓ   rÔ   )r®   Úmeth_1r    Úmeth_2r7   r7   r8   Útest_method_2â  s   

þÿz%TestSystemCPUCountCores.test_method_2c              	   C   s„   t jdg d��'}t jddd��}|  tj ¡ ¡ W d   ƒ n1 s"w   Y  W d   ƒ n1 s1w   Y  |js;J ‚|js@J ‚d S )NrX  rY  r  Tr  )r   rž   rI  rª   rG  rZ  rÓ   )r®   Úm1Úm2r7   r7   r8   Útest_emulate_noneê  s   ÿ€ÿ
z)TestSystemCPUCountCores.test_emulate_noneN)	rø   rù   rú   r   rP  r   r?  r]  r`  r7   r7   r7   r8   rS  Õ  s
    
	rS  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                    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>  ©rQ  ©Úorig_existsr7   r8   Úpath_exists_mockø  ó   
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockúos.path.existsT)rœ   r›   )r"  rQ  rR  r   rž   rª   Úcpu_freq)r®   rh  r7   rf  r8   Útest_emulate_use_second_fileõ  s   ÿ"þz3TestSystemCPUFrequency.test_emulate_use_second_filec                    sì   ‡ fdd„}t jj‰ zatjd|d��: ttjƒ t ¡ }|s J ‚|  	|j
d¡ |  	|jd¡ tjdd�D ]}|  	|j
d¡ |  	|jd¡ q4W d   ƒ n1 sOw   Y  W ttjƒ ttƒ d S W ttjƒ ttƒ d S ttjƒ ttƒ w )Nc                    rc  )Nz/sys/devices/system/cpu/Fr>  re  ©Úos_path_existsr7   r8   rh    ri  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockrj  r@  ç        T©Úpercpu)r"  rQ  rR  r   rž   r   rª   rG  rk  rÔ   ÚmaxÚmin)r®   rh  rÝ   Úfreqr7   rm  r8   Útest_emulate_use_cpuinfo  s*   
þú

õ


ÿ
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      sÔ   ‡ fdd„}t ‰ trdnd}tj||d��K tjddd��+ t ¡ }|  |jd	¡ |jd
kr5|  |jd¡ |j	d
krA|  |j	d¡ W d   ƒ n1 sKw   Y  W d   ƒ d S W d   ƒ d S 1 scw   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_freqrd  ó   500000ú/scaling_min_freqó   600000ú/scaling_max_freqs   700000rB  s   cpu MHz		: 500©rÖ   ro   rŒ   rŽ   r�   ró   r7   r8   r—     s   
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr˜   r™   r@  rj  TrY  ç     @@ro  ç     À‚@g     à…@©
rC   r   r   rž   rª   rk  rÔ   Úcurrentrs  rr  ©r®   r—   rŸ   rt  r7   ró   r8   Útest_emulate_data  s$   ÿ

€÷ÿ"ÿz(TestSystemCPUFrequency.test_emulate_datac              
      sl  ‡ fdd„}t ‰ trdnd}tj||d��— tjddd��w tjd	d
d��` tjdd�}|  |d jd¡ |d jdkrE|  |d jd¡ |d j	dkrU|  |d j	d¡ |  |d jd¡ |d jdkrn|  |d jd¡ |d j	dkr~|  |d j	d¡ W d   ƒ n1 sˆw   Y  W d   ƒ n1 s—w   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¡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 )Nrv  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rx  ó   200000rz  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rw  ry  rB  s   cpu MHz		: 100
cpu MHz		: 400r{  )r�   r‘   r’   Únró   r7   r8   r—   =  s8   
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr˜   r™   r@  rj  TrY  ú!psutil._pslinux.cpu_count_logicalr  rp  r   ç      Y@ro  g      i@g     Àr@r|   g      y@r|  r}  r~  r€  r7   ró   r8   Útest_emulate_multi_cpu;  s4   ÿ€ô€ÿÿ"ÿz-TestSystemCPUFrequency.test_emulate_multi_cpuc              
      sÒ   ‡ fdd„}t ‰ trdnd}tj||d��J tjddd��* tjd	d
d�� t ¡ }|  |jd¡ W d   ƒ n1 s;w   Y  W d   ƒ n1 sJw   Y  W d   ƒ d S W d   ƒ d S 1 sbw   Y  d S )Nc                    sR   |   d¡rttjdƒ‚|   d¡rt d¡S | dkrt d¡S ˆ | g|¢R i |¤ŽS )Nrv  r\   z/cpuinfo_cur_freqr‚  rB  s   cpu MHz		: 200)rÖ   rï   rð   rñ   rŒ   rŽ   r�   ró   r7   r8   r—   l  s   



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr˜   r™   r@  rj  TrY  r„  r|   éÈ   )rC   r   r   rž   rª   rk  rÔ   r  r€  r7   ró   r8   Ú%test_emulate_no_scaling_cur_freq_filei  s    
ÿý€ÿÿ"ÿz<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)rø   rù   rú   r   rP  r   rl  ru  r�  r†  rˆ  r7   r7   r7   r8   ra  ò  s    



-ra  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemCPUStatsc                 C   ó&   t dƒ}t ¡ j}| j||dd� d S )Nzcontext switcheséô  r¨   )r€   rª   Ú	cpu_statsÚctx_switchesr¬   r­   r7   r7   r8   Útest_ctx_switchesƒ  ó   
z$TestSystemCPUStats.test_ctx_switchesc                 C   r‹  )NÚ
interruptsrŒ  r¨   )r€   rª   r�  r‘  r¬   r­   r7   r7   r8   Útest_interruptsˆ  r�  z"TestSystemCPUStats.test_interruptsN)rø   rù   rú   r�  r’  r7   r7   r7   r8   rŠ  €  ó    rŠ  c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgrb  c                 C   s–   t  ¡ }tddƒ�}| ¡  ¡ }W d   ƒ n1 sw   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   r|   r¨   r  )rª   Ú
getloadavgrC   rü   rE   r¬   Úfloat)r®   r°   rN   Ú
proc_valuer7   r7   r8   Útest_getloadavg‘  s   ÿ zTestLoadAvg.test_getloadavgN)rø   rù   rú   r   rP  r   r™  r7   r7   r7   r8   r”  Ž  s    r”  c                   @   r  )ÚTestSystemNetIfAddrsc                 C   sÐ   t  ¡  ¡ D ]_\}}|D ]X}|jt jkr|  |jt|ƒ¡ q|jtj	krN|  |jt
|ƒ¡ |  |jt|ƒ¡ |jd urE|  |jt|ƒ¡ q|  t|ƒd¡ q|jtjkrd|j d¡d }|  |t|ƒ¡ qqd S )Nz0.0.0.0ú%r   )rª   Únet_if_addrsÚitemsÚfamilyÚAF_LINKrÔ   Úaddressrf   r)   r*   r9   Únetmaskr<   Ú	broadcastr>   rL   rE   rV   )r®   r�   ÚaddrsÚaddrr   r7   r7   r8   Útest_ips¤  s$   
ÿ€íÿzTestSystemNetIfAddrs.test_ipsN)rø   rù   rú   r¥  r7   r7   r7   r8   rš  ¡  r(  rš  c                   @   r‰  )ÚTestSystemNetIfStatsc              	   C   sr   t  ¡  ¡ D ]0\}}ztd| ƒ}W n	 ty   Y qw | j|jd|v |d� |  |jtt	 
d|¡d ƒ¡ qd S )Núifconfig %sÚRUNNING)r¶   z(?i)MTU[: ](\d+)r   )rª   Únet_if_statsr�  r   ÚRuntimeErrorrÔ   ÚisupÚmturr   r   r!  )r®   r�   Ústatsrs   r7   r7   r8   Útest_against_ifconfigÎ  s   ÿÿùz*TestSystemNetIfStats.test_against_ifconfigc              	   C   sb   t  ¡  ¡ D ](\}}td| dƒ�}|  |jt| ¡  ¡ ƒ¡ W d   ƒ n1 s)w   Y  qd S )Nz/sys/class/net/%s/mtur?   )	rª   r©  r�  rC   rÔ   r¬  rr   rü   r‚   )r®   r�   r­  rN   r7   r7   r8   Útest_mtuÙ  s   ÿ€ÿzTestSystemNetIfStats.test_mtuN)rø   rù   rú   r®  r¯  r7   r7   r7   r8   r¦  Ë  s    r¦  c                   @   s   e Zd Zeƒ dd„ ƒZdS )ÚTestSystemNetIOCountersc              	      s   ‡ fdd„}t jddd�}| ¡ D ]l\‰ }z|ˆ ƒ}W n	 ty$   Y qw | 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Ô   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 )Nr§  zRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinr|   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   rr   r   r!  )ÚnicrÝ   rs   ©r�   r7   r8   Úifconfigä  s&   ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ÚpernicÚnowrapr·  i   r¨   r¸  r±  r§   r²  r³  é
   r´  rµ  r¶  )rª   Únet_io_countersr�  rª  r¬   r·  r¸  r±  r²  r³  r´  rµ  r¶  )r®   r»  Únior­  Úifconfig_retr7   rº  r8   r®  â  sB   ÿÿÿÿÿÿÿÿÿíz-TestSystemNetIOCounters.test_against_ifconfigN)rø   rù   rú   r   r®  r7   r7   r7   r8   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_ipv6FrY  c                 C   sP   zt   t jt j¡}|  |j¡ | d¡ W n
 t jy   Y nw tjdd� d S )N)z::1r   Úinet6©Úkind)	r)   rL   ÚSOCK_STREAMÚ
addCleanupÚcloseÚbindÚerrorrª   Únet_connections)r®   Úsupports_ipv6rM   r6   r7   r7   r8   Útest_emulate_ipv6_unsupported  s   ÿz6TestSystemNetConnections.test_emulate_ipv6_unsupportedc                 C   sL   t dt d¡ƒ�}tjdd� |jsJ ‚W d   ƒ d S 1 sw   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  r7   r7   r8   Útest_emulate_unix  s   þ"÷z*TestSystemNetConnections.test_emulate_unixN)rø   rù   rú   r   rž   rF   rÍ  rÏ  r7   r7   r7   r8   rÂ    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  |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r)d}t|ƒt|ƒt|ƒ}}}||||fS )Nzdf -P -B 1 "%s"rm   r   rA   Únoner\   )r   r‚   rE   Úpoprr   )rQ  rs   rt   rO   Údevrv   rw   rg   r7   r7   r8   Údf6  s   


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallr¨   )
rª   Údisk_partitionsÚ
disk_usageÚ
mountpointrÔ   rv   r¬   rg   r   rw   )r®   rÕ  ÚpartÚusagerÔ  rv   rw   rg   r7   r7   r8   Útest_against_df1  s   
ÿ
ÿúz(TestSystemDiskPartitions.test_against_dfc              	   C   s   t ddƒ�}| ¡ }W d   ƒ n1 sw   Y  d|v r3t ¡ D ]
}|jdkr+ d S q!|  d¡ d S t tdƒ¡}t	j
d|dd��D}t	j
d	d
gd��#}t ¡ }|jsUJ ‚|jsZJ ‚|s^J ‚|  |d jd¡ W d   ƒ n1 sqw   Y  W d   ƒ d S W d   ƒ d S 1 s‰w   Y  d S )Nz/proc/filesystemsr•  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
r  TrD  ú$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/rÝ  ÚrwrY  r   )rC   rü   rª   r×  ÚfstypeÚfailrŒ   r�   r   r   rž   rÓ   rÔ   )r®   rN   rý   rÚ  rN  r^  r_  rÝ   r7   r7   r8   Útest_zfs_fsJ  s8   
ÿ
ÿÿþ

ùþ"þz$TestSystemDiskPartitions.test_zfs_fsc              	   C   sŒ   zAt jddd��&}|  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/existentrY  ú/proc)r   rž   ÚassertRaisesr   rª   r×  rÓ   ÚPROCFS_PATHr  r7   r7   r8   Útest_emulate_realpath_failb  s   ÿ
ÿü
úz3TestSystemDiskPartitions.test_emulate_realpath_failN)rø   rù   rú   r   rP  Úhasattrr"  r   rÜ  rã  rç  r7   r7   r7   r8   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   ó   t ddƒ�q tjddd��Q 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 saw   Y  W d   ƒ d S W d   ƒ d S 1 syw   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_deviceTrY  F©r½  r|   r  r²   rA   r}   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Ý   r7   r7   r8   Útest_emulate_kernel_2_4q  s*   þÿõý"ýz0TestSystemDiskIoCounters.test_emulate_kernel_2_4c              	   C   rê  )Nrë  z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11rì  TrY  Frí  r|   r  r²   rA   r}   r  rî  rï  r¾  rð  rü  r7   r7   r8   Útest_emulate_kernel_2_6_full„  s*   þÿõý"ýz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc              	   C   s   t ddƒ�q tjddd��Q 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 saw   Y  W d   ƒ d S W d   ƒ d S 1 syw   Y  d S )Nrë  z   3    1   hda 1 2 3 4rì  TrY  Frí  r|   r  r²   rA   r   )r¡   r   rž   rª   rñ  rÔ   rò  rô  rõ  r÷  rù  ró  rö  rø  rú  rû  rü  r7   r7   r8   Ú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��; tjddd�}|  t|ƒd¡ |  |d	 j	d
¡ |  |d j	d
¡ |  |d	 j
d¡ |  |d j
d¡ W d   ƒ n1 sNw   Y  W d   ƒ d S W d   ƒ d S 1 sfw   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ì  FrY  T©Úperdiskr½  r  Únvme0n1r|   Ú	nvme0n1p1r}   )r¡   rÍ   rÎ   r   rž   rª   rñ  rÔ   rH   rò  r÷  rü  r7   r7   r8   Útest_emulate_include_partitions¯  s"   þÿùú"úz8TestSystemDiskIoCounters.test_emulate_include_partitionsc              	   C   s  t dt d¡ƒ�+ tjddd�� tjddd�}|  |¡ W d   ƒ n1 s'w   Y  W d   ƒ n1 s6w   Y  dd„ }t dt d¡ƒ�> tjdd	|d
�� tjddd�}|  |j	d¡ |  |j
d¡ W d   ƒ n1 spw   Y  W d   ƒ d S W d   ƒ d S 1 sˆw   Y  d S )Nrë  r   rì  FrY  r  c                 S   s   | dkS )Nr  r7   rº  r7   r7   r8   Úis_storage_deviceÒ  s   zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTrš   r|   r}   )r¡   rÍ   rÎ   r   rž   rª   rñ  rI  rÔ   rò  r÷  )r®   rÝ   r  r7   r7   r8   Útest_emulate_exclude_partitionsÂ  s6   þÿý€úþÿüú"ú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|ƒ¡ d S )Nc                 S   s   | dkrdS dS )Nrë  FTr7   re  r7   r7   r8   rR  â  s   z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r  úpsutil._pslinux.os.path.existsrš   )rª   rñ  r   rž   rÔ   rH   )r®   rR  ÚwprocfsÚwsysfsr7   r7   r8   Útest_emulate_use_sysfsá  s   ÿþz/TestSystemDiskIoCounters.test_emulate_use_sysfsc                 C   sL   dd„ }t jdd|d�� |  ttj¡ W d   ƒ d S 1 sw   Y  d S )Nc                 S   s   dS )NFr7   re  r7   r7   r8   rR  î  r[   z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr  Trš   )r   rž   rå  ÚNotImplementedErrorrª   rñ  )r®   rR  r7   r7   r8   Útest_emulate_not_implí  s   ÿ"þz.TestSystemDiskIoCounters.test_emulate_not_implN)
rø   rù   rú   rý  rþ  rÿ  r  r  r  r  r7   r7   r7   r8   ré  n  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Ô  r7   r7   r8   ÚsetUpù  s   zTestRootFsDeviceFinder.setUpc                 C   sf   t ƒ }tj d¡r| ¡  n|  t|j¡ tj d| j| jf ¡r&| 	¡  n|  t|j	¡ | 
¡  d S ©Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)r   r"  rQ  rR  Úask_proc_partitionsrå  r   r  r  Úask_sys_dev_blockÚask_sys_class_block)r®   Úfinderr7   r7   r8   Útest_call_methodsþ  s   
ÿ
z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSc                 C   s°   t ƒ }|  | ¡ ¡ d  } }}tj d¡r| ¡ }tj d| j| jf ¡r*| 	¡ }| 
¡ }|p3|p3|}|r>|r>|  ||¡ |rH|rH|  ||¡ |rT|rV|  ||¡ d S d S d S r  )r   ÚassertIsNotNoneÚfindr"  rQ  rR  r  r  r  r  r  rÔ   )r®   r  rä   rå   ÚcÚbaser7   r7   r8   Útest_comparisons  s$   ÿÿz'TestRootFsDeviceFinder.test_comparisonsÚfindmntzfindmnt utility not availablec                 C   s"   t ƒ  ¡ }tdƒ}|  ||¡ d S )Nzfindmnt -o SOURCE -rn /)r   r  r   rÔ   )r®   r°   Úfindmnt_valuer7   r7   r8   Útest_against_findmnt   s   
z+TestRootFsDeviceFinder.test_against_findmntc                 C   s’   t jddgd��7}t ¡ d }|jsJ ‚ts(|  |jd¡ |  |jt	ƒ  
¡ ¡ n|  |jd¡ W d   ƒ d S W d   ƒ d S 1 sBw   Y  d S )NrÞ  )ú	/dev/rootrß  Úext4rà  rY  r   r!  )r   rž   rª   r×  rÓ   r   ÚassertNotEqualÚdevicerÔ   r   r  )r®   r    rÚ  r7   r7   r8   Útest_disk_partitions_mocked'  s   þ
÷"ùz2TestRootFsDeviceFinder.test_disk_partitions_mockedN)rø   rù   rú   r  r  r   rP  r   r  r   r   r%  r7   r7   r7   r8   r  ö  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)r€   rª   Ú	boot_timerÔ   rr   r­   r7   r7   r8   Útest_boot_time<  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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Õw   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w   Y  W t |¡ t
tƒ n
t |¡ t
tƒ w |  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)ro   rï   rð   rñ   r�   ró   r7   r8   r—   M  s   
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr˜   r™   r@  Trp  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"  ÚmkdirrC   rQ  rJ   Úwriter   r   rž   r   rª   rå  rï   r  Úcpu_percentÚcpu_times_percentræ  rÔ   Úsumrˆ   r#  ÚshutilÚrmtree)r®   Ú	my_procfsrN   r—   rŸ   Úper_cpu_percentÚper_cpu_times_percentr7   ró   r8   Útest_no_procfs_on_importA  s`   


ýÿ

ýÿÿÝ€
&

ÿ
z!TestMisc.test_no_procfs_on_importc                 C   sV  t dt d¡ ¡ ƒ�!}t ¡  |jsJ ‚tjdd� t ¡  tjdd� W d   ƒ n1 s.w   Y  t dt d¡ ¡ ƒ�d}t ¡ }|jsGJ ‚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   ƒ d S 1 s¤w   Y  d S )NrA  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
                Trp  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,  Úcpu_percent_percpur-  Úcpu_times_percent_percpur7   r7   r8   Útest_cpu_steal_decrease~  s@   ú
òú
"ìz TestMisc.test_cpu_steal_decreasec                 C   sN   t jddd��}|  ttjj¡ |jsJ ‚W d   ƒ d S 1 s w   Y  d S )Nr  Tr  )r   rž   rå  rª  rª   rG  r'  rÓ   r  r7   r7   r8   Útest_boot_time_mocked§  s   þ"üzTestMisc.test_boot_time_mockedc                 C   sö   t jddgd��}|  t ¡ d jd¡ |jsJ ‚W d   ƒ n1 s#w   Y  t jddgd��}|  t ¡ d jd¡ |jsAJ ‚W d   ƒ n1 sKw   Y  t jddgd��}|  t ¡ d jd¡ |jsiJ ‚W d   ƒ d S 1 stw   Y  d S )	Nzpsutil._pslinux.cext.users)Ú	giampaoloúpts/2z:0ç   €hÕATr  rY  r   Ú	localhost)r:  r;  z:0.0r<  Tr  )r:  r;  Úfoor<  Tr  r>  )r   rž   rÔ   rª   ÚusersÚhostrÓ   r  r7   r7   r8   Útest_users_mocked®  s*   ÿüÿüÿ"üzTestMisc.test_users_mockedc                 C   s²   |   ¡ }t |¡ zK|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_d S dt_w )NTrp  rä  )r)  r"  r*  rª   ræ  rå  rï   r«   r  r'  rË  r¿  r©  r×  ÚNoSuchProcessÚProcess)r®   Útdirr7   r7   r8   Útest_procfs_pathÂ  s   
zTestMisc.test_procfs_pathc                 C   s’   t ƒ �< t ¡ }| ¡ }|  t|ƒd¡ t|dd„ d�d j}|  |j	|¡ t |¡}| 
¡  |  |t ¡ ¡ W d   ƒ d S 1 sBw   Y  d S )Nr  c                 S   s   | j S rW   )ÚidrX   r7   r7   r8   Ú<lambda>à  s    z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyr|   )r   rª   rC  ÚthreadsrÔ   rH   ÚsortedrF  r#  ÚpidÚas_dictr$  Úpids)r®   ÚprI  ÚtidÚptr7   r7   r8   Útest_issue_687Õ  s   
"øzTestMisc.test_issue_687c                 C   sL   t ddƒ�}t t ¡ ¡sJ ‚|jsJ ‚W d   ƒ d S 1 sw   Y  d S )Nú/proc/%s/statusr\   )r¡   rª   Ú
pid_existsr"  ÚgetpidrÓ   r  r7   r7   r8   Útest_pid_exists_no_proc_statusæ  s   "þz'TestMisc.test_pid_exists_no_proc_statusN)rø   rù   rú   r(  r4  r8  r9  rA  rE  r   rQ  rU  r7   r7   r7   r8   r&  9  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 )ÚTestSensorsBatteryÚacpizacpi utility not availablec                 C   sD   t dƒ}t| d¡d  ¡  dd¡ƒ}t ¡ j}| j||dd� d S )Nzacpi -brT  r|   r›  r\   r¨   )	r   rr   rE   r‚   Úreplacerª   Úsensors_batteryÚpercentr¬   )r®   rs   Ú
acpi_valuer°   r7   r7   r8   Útest_percentø  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   ƒ d S 1 s9w   Y  d S )Nc                    ó4   |   d¡s
|   d¡rt d¡S ˆ | g|¢R i |¤ŽS )Nú
AC0/onlineú	AC/onlineó   1©rÖ   rŒ   rŽ   r�   ró   r7   r8   r—     ó   
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr˜   r™   r@  T)rC   r   r   rž   rÔ   rª   rY  Úpower_pluggedÚsecsleftÚPOWER_TIME_UNLIMITEDrÓ   ©r®   r—   rŸ   r    r7   ró   r8   Útest_emulate_power_pluggedÿ  s   ÿ"üz-TestSensorsBattery.test_emulate_power_pluggedc                    ól   ‡ fdd„}t ‰ trdnd}tj||d��}|  t ¡ jd¡ |js$J ‚W d   ƒ d S 1 s/w   Y  d S )Nc                    óN   |   d¡s
|   d¡rttjdƒ‚|   d¡rt tdƒ¡S ˆ | g|¢R i |¤ŽS )Nr^  r_  r\   ú/statusÚcharging©rÖ   rï   rð   rñ   rŒ   r�   r   r�   ró   r7   r8   r—     ó
   
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr˜   r™   r@  T©	rC   r   r   rž   rÔ   rª   rY  rc  rÓ   rf  r7   ró   r8   Útest_emulate_power_plugged_2  ó   "þz/TestSensorsBattery.test_emulate_power_plugged_2c                    rh  )Nc                    r]  )Nr^  r_  ó   0ra  r�   ró   r7   r8   r—   "  rb  zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr˜   r™   r@  Frn  rf  r7   ró   r8   Útest_emulate_power_not_plugged   s   "þz1TestSensorsBattery.test_emulate_power_not_pluggedc                    rh  )Nc                    ri  )Nr^  r_  r\   rj  Údischargingrl  r�   ró   r7   r8   r—   1  rm  zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr˜   r™   r@  Frn  rf  r7   ró   r8   Ú test_emulate_power_not_plugged_2.  rp  z3TestSensorsBattery.test_emulate_power_not_plugged_2c                    sj   ‡ fdd„}t ‰ trdnd}tj||d��}|  t ¡ j¡ |js#J ‚W d   ƒ d S 1 s.w   Y  d S )Nc                    sJ   |   d¡s
|   d¡rttjdƒ‚|   d¡rt d¡S ˆ | g|¢R i |¤ŽS )Nú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onliner\   ú#/sys/class/power_supply/BAT0/statuss   ???)ro   rï   rð   rñ   rŒ   rŽ   r�   ró   r7   r8   r—   B  s   
ÿ

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr˜   r™   r@  )	rC   r   r   rž   rI  rª   rY  rc  rÓ   rf  r7   ró   r8   Útest_emulate_power_undetermined?  s   	"þz2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sL   t ddƒ�}|  t ¡ jd¡ |jsJ ‚W d   ƒ d S 1 sw   Y  d S )Nú(/sys/class/power_supply/BAT0/energy_fullrq  r   )r¡   rÔ   rª   rY  rZ  rÓ   r  r7   r7   r8   Útest_emulate_energy_full_0Q  s   ÿ"ýz-TestSensorsBattery.test_emulate_energy_full_0c              
   C   s¶   t dttjdƒƒ�H t dttjdƒƒ�& tddƒ� |  t ¡ jd¡ 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 )Nry  r\   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88éX   )	r¤   rï   rð   rñ   r¡   rÔ   rª   rY  rZ  ©r®   r7   r7   r8   Ú"test_emulate_energy_full_not_availX  s$   
þ
þÿþ€ýý"ýz5TestSensorsBattery.test_emulate_energy_full_not_availc              
   C   s¼   t dttjdƒƒ�K t dttjdƒƒ�) t dttjdƒƒ� |  t ¡ j¡ W d   ƒ n1 s0w   Y  W d   ƒ n1 s?w   Y  W d   ƒ d S W d   ƒ d S 1 sWw   Y  d S )Nrv  r\   ru  rw  )r¤   rï   rð   rñ   rI  rª   rY  rc  r|  r7   r7   r8   Útest_emulate_no_powere  s&   
þ
þ
þý€ýý"ýz(TestSensorsBattery.test_emulate_no_powerN)rø   rù   rú   r   rP  r   r\  rg  ro  rr  rt  rx  rz  r}  r~  r7   r7   r7   r8   rV  ô  s    
rV  c                   @   r  )ÚTestSensorsBatteryEmulatedc              	      s    ‡ fdd„}t ‰ trdnd}tjddgd��&}tj||d��}|  t ¡ ¡ W d   ƒ n1 s0w   Y  W d   ƒ n1 s?w   Y  |jsIJ ‚|jsNJ ‚d S )	Nc                    ó^   |   d¡rt tdƒ¡S |   d¡rt tdƒ¡S |   d¡r$t tdƒ¡S ˆ | g|¢R i |¤ŽS )Nz/energy_nowÚ60000000z
/power_nowÚ0z/energy_fullÚ60000001©rÖ   rŒ   r�   r   r�   ró   r7   r8   r—   w  ó   


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr˜   r™   z
os.listdirÚBAT0rY  r@  )rC   r   r   rž   r  rª   rY  rÓ   )r®   r—   rŸ   ÚmlistdirÚmopenr7   ró   r8   Útest_itv  s   
ÿ€ÿ
z"TestSensorsBatteryEmulated.test_itN)rø   rù   rú   r‰  r7   r7   r7   r8   r  s  r(  r  c                   @   r‰  )ÚTestSensorsTemperaturesc              	      sØ   ‡ fdd„}t ‰ trdnd}tj||d��M tjddgd��, t ¡ d	 d
 }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 sMw   Y  W d   ƒ d S W d   ƒ d S 1 sew   Y  d S )Nc                    s‚   |   d¡rt tdƒ¡S |   d¡rt tdƒ¡S |   d¡r"t d¡S |   d¡r,t d¡S |   d	¡r6t d
¡S ˆ | g|¢R i |¤ŽS )Nú/namer�   z/temp1_labelÚlabelz/temp1_inputó   30000z
/temp1_maxs   40000z/temp1_critó   50000)rÖ   rŒ   r�   r   rŽ   r�   ró   r7   r8   r—   Ž  s   







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr˜   r™   r@  rX  z/sys/class/hwmon/hwmon0/temp1rY  r�   r   rŒ  ç      >@g      D@ç      I@©rC   r   r   rž   rª   Úsensors_temperaturesrÔ   rŒ  r  ÚhighÚcritical)r®   r—   rŸ   Útempr7   ró   r8   Ú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��M tjdd	|d
��, t ¡ d d }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 sQw   Y  W d   ƒ d S W d   ƒ d S 1 siw   Y  d S )Nc                    sn   |   d¡r
t d¡S |   d¡rt d¡S |   d¡r t tdƒ¡S |   d¡r,t tdƒ¡S ˆ | g|¢R i |¤ŽS )	NÚ0_temprŽ  r•  r�  Ú0_typer”  Útyper�   )rÖ   rŒ   rŽ   r�   r   r�   ró   r7   r8   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rd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_tempr7   re  r7   r7   r8   Ú	glob_mockµ  s   ÿzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr˜   r™   r@  rX  Trš   r�   r   r\   r�  r�  r‘  )r®   r—   rš  rŸ   r•  r7   ró   r8   Útest_emulate_class_thermal¨  s   ûÿ"ÿz2TestSensorsTemperatures.test_emulate_class_thermalN)rø   rù   rú   r–  r›  r7   r7   r7   r8   rŠ  Š  s    rŠ  c                   @   r  )ÚTestSensorsFansc              	      s¼   ‡ fdd„}t ‰ trdnd}tj||d��? tjddgd�� t ¡ d	 d
 }|  |jd¡ |  |jd¡ W d   ƒ n1 s?w   Y  W d   ƒ d S W d   ƒ d S 1 sWw   Y  d S )Nc                    r€  )Nr‹  r�   z/fan1_labelrŒ  z/fan1_inputÚ2000r„  r�   ró   r7   r8   r—   Ð  r…  z4TestSensorsFans.test_emulate_data.<locals>.open_mockr˜   r™   r@  rX  z/sys/class/hwmon/hwmon2/fan1rY  r�   r   rŒ  iÐ  )	rC   r   r   rž   rª   Úsensors_fansrÔ   rŒ  r  )r®   r—   rŸ   Úfanr7   ró   r8   r�  Ï  s   
ÿüÿ"ÿz!TestSensorsFans.test_emulate_dataN)rø   rù   rú   r�  r7   r7   r7   r8   rœ  Ì  r(  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 d| ¡}|  |¡}tdd„ d| ƒ t |j¡}t 	d¡ | 
¡ }|jdd�}| j|jtdd	„ |D ƒƒd
d� | j|jtdd	„ |D ƒƒd
d� | j|jtdd	„ |D ƒƒd
d� d S )Nzk
            import time
            with open("%s", "w") as f:
                time.sleep(10)
            c                   S   s
   t  d¡S )Nr…   )r"  r1  r7   r7   r7   r8   rG  õ  s   
 z3TestProcess.test_memory_full_info.<locals>.<lambda>z'%s' not in retgš™™™™™¹?F)Úgroupedc                 S   s   g | ]}|j |j ‘qS r7   )Úprivate_dirtyÚprivate_cleanr{   r7   r7   r8   r`   û  ra   z5TestProcess.test_memory_full_info.<locals>.<listcomp>rô   r¨   c                 S   ó   g | ]}|j ‘qS r7   )Úpssr{   r7   r7   r8   r`   þ  ó    c                 S   r¤  r7   )r  r{   r7   r7   r8   r`      r¦  )r)  rÍ   rÎ   Úpyrunr   rª   rC  rK  ÚtimeÚsleepÚmemory_full_infoÚmemory_mapsr¬   Úussr.  r¥  r  )r®   ÚtestfnÚsrcÚsprocrN  rö   Úmapsr7   r7   r8   Útest_memory_full_infoì  s(   ü

þÿ
ÿz!TestProcess.test_memory_full_infoc                 C   s†   t dt ¡  t d¡ ¡ ƒ�+}t ¡ }| ¡ }|j	sJ ‚|  
|jd¡ |  
|jd¡ |  
|jd¡ W d   ƒ d S 1 s<w   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"  rT  rÍ   rÎ   rÏ   rª   rC  rª  rÓ   rÔ   r¬  r¥  r  )r®   r    rN  rö   r7   r7   r8   Útest_memory_full_info_mocked  s   
è
"âz(TestProcess.test_memory_full_info_mockedzunreliable on PYPYc                 C   s  dd„ }|   ¡ }t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s!w   Y  t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s?w   Y  t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s]w   Y  t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s{w   Y  t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s™w   Y  t|dƒ� |  ||ƒjd¡ W d   ƒ n1 s·w   Y  t�rt|ƒ t|d	ƒ� |  ||ƒjd¡ W d   ƒ n1 sÜw   Y  t|ƒ t|d
ƒ� |  ||ƒjd¡ W d   ƒ d S 1 sÿw   Y  d S d S )Nc                 S   sP   t  ¡ }t ¡ t }	 | ¡ D ]}|jtj | ¡kr|  S t ¡ |kr& nqqrW   )	rª   rC  r¨  r	   Ú
open_filesrQ  r"  Úabspathrª  )ÚfnamerN  Ú	giveup_atÚfiler7   r7   r8   Úget_test_file'  s   ÿüz7TestProcess.test_open_files_mode.<locals>.get_test_filerÞ   r•  rä   zr+zw+za+rY   zx+)r)  rC   rÔ   Úmoder   r   )r®   r¹  r­  r7   r7   r8   Útest_open_files_mode%  s<   ÿÿÿÿÿÿÿ"ÿûz TestProcess.test_open_files_modec              	   C   s  t  ¡ }| ¡ }t|  ¡ dƒ�k t|jdt|ƒ ƒ tjdt	t
jdƒd��}| ¡ }|r.J ‚|js3J ‚W d   ƒ n1 s=w   Y  tjdt	t
jdƒd��}|  | ¡ g ¡ |js[J ‚W d   ƒ n1 sew   Y  W d   ƒ d S W d   ƒ d S 1 s}w   Y  d S ©NrÞ   úlen(ret) != %iúpsutil._pslinux.os.readlinkr\   r@  )rª   rC  r´  rC   r)  r   rH   r   rž   ÚOSErrorrð   rñ   rÓ   ÚEINVALrÔ   )r®   rN  Úfilesr    r7   r7   r8   Útest_open_files_file_goneJ  s,   
ÿü
ÿýö
"öz%TestProcess.test_open_files_file_gonec              	   C   sÄ   t  ¡ }| ¡ }t|  ¡ dƒ�I t|jdt|ƒ ƒ trdnd}tj	|t
tjdƒd��}| ¡ }|r4J ‚|js9J ‚W d   ƒ n1 sCw   Y  W d   ƒ d S W d   ƒ d S 1 s[w   Y  d S )NrÞ   r½  r˜   r™   r\   r@  )rª   rC  r´  rC   r)  r   rH   r   r   rž   rï   rð   rñ   rÓ   ©r®   rN  rÁ  rŸ   r    r7   r7   r8   Útest_open_files_fd_gone^  s    
ÿüü"üz#TestProcess.test_open_files_fd_gonec              	   C   s¼   t  ¡ }| ¡ }t|  ¡ dƒ�E t|jdt|ƒ ƒ d}tj|t	t
jdƒd��}| ¡ }|r0J ‚|js5J ‚W d   ƒ n1 s?w   Y  W d   ƒ d S W d   ƒ d S 1 sWw   Y  d S r¼  )rª   rC  r´  rC   r)  r   rH   r   rž   r¿  rð   ÚENAMETOOLONGrÓ   rÃ  r7   r7   r8   Útest_open_files_enametoolongn  s    
ÿüü"üz(TestProcess.test_open_files_enametoolongc                 C   sX   t jdi d��}|  tj t ¡ ¡ ¡ ¡ |j	sJ ‚W d   ƒ d S 1 s%w   Y  d S )Nz)psutil._pslinux._psposix.get_terminal_maprY  )
r   rž   rI  rª   rG  rC  r"  rT  ÚterminalrÓ   r  r7   r7   r8   Útest_terminal_mocked€  s   ÿ"ýz TestProcess.test_terminal_mockedc                 C   óÆ   t  ¡ }t tdƒ¡}tjd|dd��}|  | ¡ ddg¡ |j	s#J ‚W d   ƒ n1 s-w   Y  t tdƒ¡}tjd|dd��}|  | ¡ g d¢¡ |j	sQJ ‚W d   ƒ d S 1 s\w   Y  d S )	Nzfoo bar r  TrD  r>  Úbarz	foo bar  ©r>  rÊ  r\   ©
rª   rC  rŒ   r�   r   r   rž   rÔ   ÚcmdlinerÓ   ©r®   rN  rN  r    r7   r7   r8   Útest_cmdline_mockedŽ  ó"   ÿýÿ"ýzTestProcess.test_cmdline_mockedc                 C   rÉ  )	Nzfoo bar r  TrD  r>  rÊ  z	foo bar  rË  rÌ  rÎ  r7   r7   r8   Útest_cmdline_spaces_mockedœ  rÐ  z&TestProcess.test_cmdline_spaces_mockedc                 C   sj   t  ¡ }t tdƒ¡}tjd|dd��}|  | ¡ ddg¡ |j	s#J ‚W d   ƒ d S 1 s.w   Y  d S )Nzfoo bar r  TrD  r>  rÊ  rÌ  rÎ  r7   r7   r8   Útest_cmdline_mixed_separatorsª  s   ÿ"ýz)TestProcess.test_cmdline_mixed_separatorsc                 C   s\   t jddd�� |  t ¡  ¡ d¡ |  t ¡  ¡ d¡ W d   ƒ d S 1 s'w   Y  d S )Nr¾  z/home/foo (deleted)rY  z	/home/foo)r   rž   rÔ   rª   rC  ÚexeÚcwdr|  r7   r7   r8   Ú!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��}t ¡  ¡ }|js!J ‚|  |g ¡ W d   ƒ n1 s1w   Y  ‡ fdd„}tj||d�� |  	tj
t ¡ j¡ W d   ƒ d S 1 sYw   Y  d S )Nc                    ó4   |   dt ¡  ¡rttjdƒ‚ˆ | g|¢R i |¤ŽS ©Nz/proc/%s/taskr\   )ro   r"  rT  rï   rð   rñ   r�   ró   r7   r8   r—   ¿  ó   z2TestProcess.test_threads_mocked.<locals>.open_mockr˜   r™   r@  c                    rÖ  r×  )ro   r"  rT  rï   rð   ÚEPERMr�   ró   r7   r8   r—   Î  rØ  )rC   r   r   rž   rª   rC  rI  rÓ   rÔ   rå  ÚAccessDenied)r®   r—   rŸ   r    rÝ   r7   ró   r8   Útest_threads_mockedº  s   
ý"ÿzTestProcess.test_threads_mockedc              
   C   sð   t jdttjdƒd��c}t jdt dd¡d��?}t ¡  ¡ }|j	s#J ‚|j	s(J ‚|  
|d¡ t jddd�� |  tjt ¡ j¡ W d   ƒ n1 sJw   Y  W d   ƒ n1 sYw   Y  W d   ƒ d S W d   ƒ d S 1 sqw   Y  d S )	Nzpsutil._pslinux.readlinkr\   r@  zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFrY  )r   rž   r¿  rð   rñ   rª   rÚ  rC  rÓ  rÓ   rÔ   rå  ÚZombieProcess)r®   r^  r_  rÝ   r7   r7   r8   Útest_exe_mocked×  s0   
ÿ
ÿ

ÿÿþ€óþ"þzTestProcess.test_exe_mockedc              	   C   s„   t dt ¡  ttjdƒƒ�+}t ¡ }|  t	¡� | 
¡  W d   ƒ n1 s&w   Y  |js0J ‚W d   ƒ d S 1 s;w   Y  d S )Nr²  r\   )r¤   r"  rT  rï   rð   rñ   rª   rC  rå  r   r«  rÓ   ©r®   r    rN  r7   r7   r8   Útest_issue_1014ì  s   

þ
ÿ"úzTestProcess.test_issue_1014rb  c              	   C   s²   t jdttjdƒd��1}t ¡ }| ¡  |  tj	¡�}| 
tj¡ W d   ƒ n1 s+w   Y  |js5J ‚W d   ƒ n1 s?w   Y  |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitr\   r@  )r   rž   r¿  rð   ÚENOSYSrª   rC  r�   rå  rÜ  ÚrlimitÚRLIMIT_NOFILErÓ   rÔ   Ú	exceptionrK  ©r®   r    rN  r£   r7   r7   r8   Ú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 s)w   Y  |js3J ‚W d   ƒ n1 s=w   Y  |  |jj|j¡ |  |jj| ¡ ¡ d S ©Nr¾  r\   r@  )r   rž   r¿  rð   rñ   rª   rC  r�   rå  rÜ  rÔ  rÓ   rÔ   rã  rK  rä  r7   r7   r8   Útest_cwd_zombie  s   
ÿ
ÿúzTestProcess.test_cwd_zombiec                 C   s  g d¢}d  |¡ ¡ }tdt ¡  |ƒ�m 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   ƒ d S 1 s„w   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‚  Ú7r�   z/proc/%s/statÚcatr|   r  r  r²   rA   r}   rî  )rJ   rÏ   r¡   r"  rT  rª   rC  rÔ   r�   ÚstatusÚSTATUS_ZOMBIEÚppidÚcreate_timer   r'  r  r5  ÚsystemÚchildren_userÚchildren_systemÚiowaitÚcpu_num)r®   r‘   r”   rN  Úcpur7   r7   r8   Útest_stat_file_parsing  s$   ,ÿ"óz"TestProcess.test_stat_file_parsingc                 C   sþ   t dt ¡  t d¡ ¡ ƒ�g 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   ƒ d S 1 sxw   Y  d S )NrR  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"  rT  rÍ   rÎ   rÏ   rª   rC  rÔ   Únum_ctx_switchesÚ	voluntaryÚinvoluntaryÚnum_threadsÚuidsÚrealÚ	effectiveÚsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistrG   )r®   rN  r  r  r7   r7   r8   Útest_status_file_parsingN  s&   
÷
"êz$TestProcess.test_status_file_parsingc                 C   sZ   t jdttjdƒd��}t ¡ }| ¡ rJ ‚|jsJ ‚W d   ƒ d S 1 s&w   Y  d S ræ  )	r   rž   r¿  rð   rÅ  rª   rC  ÚconnectionsrÓ   rÞ  r7   r7   r8   Útest_connections_enametoolongg  s   
ÿ"üz)TestProcess.test_connections_enametoolongN)rø   rù   rú   r   r±  r³  r   rP  r   r»  rÂ  rÄ  rÆ  rÈ  rÏ  rÑ  rÒ  rÕ  rÛ  rÝ  rß  r   rå  rç  rû  r
  r  r7   r7   r7   r8   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 rW   )rª   rC  Úproc)Úclsr7   r7   r8   Ú
setUpClass{  s   z#TestProcessAgainstStatus.setUpClassc              
   C   s¦   t j d| jj ¡�?}|D ]5}| ¡ }| |¡rB| d¡d }zt|ƒW   W  d   ƒ S  t	yA   | Y   W  d   ƒ S w qt	d| ƒ‚1 sLw   Y  d S )NrR  ú	r  zcan't find %r)
rª   Ú_psplatformÚ	open_textr  rK  r‚   ro   Ú	partitionrr   rF   )r®   Ú	linestartrN   rO   r-  r7   r7   r8   Úread_status_file  s$   
ÿ
ù
÷üöz)TestProcessAgainstStatus.read_status_filec                 C   ó    |   d¡}|  | j ¡ |¡ d S )NzName:)r  rÔ   r  r�   ©r®   r-  r7   r7   r8   Ú	test_nameŒ  ó   
z"TestProcessAgainstStatus.test_namec                 C   sH   |   d¡}|| d¡d | d¡… }| dd¡}|  | j ¡ |¡ d S )NzState:ú(r|   ú)r�   r+  )r  r  ÚrfindrX  rÔ   r  rñ  r  r7   r7   r8   Útest_status�  s   
z$TestProcessAgainstStatus.test_statusc                 C   r  )NzPPid:)r  rÔ   r  ró  r  r7   r7   r8   Ú	test_ppid–  r  z"TestProcessAgainstStatus.test_ppidc                 C   r  )NzThreads:)r  rÔ   r  r  r  r7   r7   r8   Útest_num_threadsš  r  z)TestProcessAgainstStatus.test_num_threadsc                 C   ó:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:r|   rA   )r  r‡   rˆ   rr   rE   rÔ   r  r  r  r7   r7   r8   Ú	test_uidsž  ó   
z"TestProcessAgainstStatus.test_uidsc                 C   r!  )NzGid:r|   rA   )r  r‡   rˆ   rr   rE   rÔ   r  r  r  r7   r7   r8   Ú	test_gids£  r#  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  r7   r7   r8   Ú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 ƒƒ¡ d S d S )NúCpus_allowed_list:r+  r|   )
r  rØ   rˆ   rr   rE   rÔ   r  Úcpu_affinityr	  rG   )r®   r-  Úmin_Úmax_r7   r7   r8   Ú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    r7   r7   r8   Ú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+  r7   r7   r7   r8   r  r  s    

r  c                   @   r‰  )Ú	TestUtilsc                 C   sR   t jddd��}|  tj d¡d¡ |jsJ ‚W d   ƒ d S 1 s"w   Y  d S )Nzos.readlinkzfoo (deleted)rY  rÊ  r>  )r   rž   rÔ   rª   r  ÚreadlinkrÓ   r  r7   r7   r8   Útest_readlinkÈ  s   "þzTestUtils.test_readlinkc                 C   sŒ   |   ¡ }t|dƒ�}| d¡ W d   ƒ n1 sw   Y  |  tjj|dd�d¡ |  tjj|dd�d¡ |  tjj|d d	d
�d	¡ d S )NÚwtzfoo F)Úbinaryr>  Ts   fooz??rÊ  )Úfallback)r)  rC   r+  rÔ   rª   r  rð  )r®   r­  rN   r7   r7   r8   Útest_catÍ  s   ÿÿzTestUtils.test_catN)rø   rù   rú   r0  r4  r7   r7   r7   r8   r.  Å  r“  r.  Ú__main__)Úrun_from_name)dr,  Ú
__future__r   rp   r,   rð   ÚglobrŒ   r"  r   r/  r)   r2   rÍ   r¨  rÐ   rª   r   Úpsutil._compatr   r   r   r   Úpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF  r   r   r   r   rQ  rµ  ÚdirnameÚ__file__ÚHEREr1   ÚSIOCGIFCONFrc   r;   r=   rõ  ÚEMPTY_TEMPERATURESr9   r<   r>   rV   rf   ry   r   r€   r‰   Úcontextmanagerr¡   r¤   rP  r¥   rû   r  r)  rS  ra  rŠ  r”  rš  r¦  r°  rÂ  rÐ  ré  r  r&  rV  r  rŠ  rœ  r   r  r.  rø   Úpsutil.tests.runnerr6  r7   r7   r7   r8   Ú<module>   sþ   	

  ,]? )- ? B ;}A   R
þ