
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Œ=Ý_Ê^ ã                   @   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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j+ ,ej+ -e.¡¡Z/dZ0dZ1dZ2dZ3d Z4e�rÒd!Z5e d"¡ Z6d#d$„ Z7d%d&„ Z8d'd(„ Z9d)d*„ Z:d+d,„ Z;d-d.„ Z<d/d0„ Z=d1d2„ Z>d3d4„ Z?ej@d5d6„ ƒZAej@d7d8„ ƒZBe) Ce d9¡G d:d;„ d;eƒƒZDe) Ce d9¡G d<d=„ d=eƒƒZEe) Ce d9¡G d>d?„ d?eƒƒZFe) Ce d9¡G d@dA„ dAeƒƒZGe) Ce d9¡G dBdC„ dCeƒƒZHe) Ce d9¡G dDdE„ dEeƒƒZIe) Ce d9¡G dFdG„ dGeƒƒZJe) Ce d9¡G dHdI„ dIeƒƒZKe) Ce d9¡G dJdK„ dKeƒƒZLe) Ce d9¡G dLdM„ dMeƒƒZMe) Ce d9¡G dNdO„ dOeƒƒZNe) Ce d9¡G dPdQ„ dQeƒƒZOe) Ce d9¡G dRdS„ dSeƒƒZPe) Ce d9¡G dTdU„ dUeƒƒZQe) Ce d9¡G dVdW„ dWeƒƒZRe) Ce d9¡e) Ce dX¡G dYdZ„ dZeƒƒƒZSe) Ce d9¡G d[d\„ d\eƒƒZTe) Ce d9¡G d]d^„ d^eƒƒZUe) Ce d9¡G d_d`„ d`eƒƒZVe) Ce d9¡G dadb„ dbeƒƒZWe) Ce d9¡G dcdd„ ddeƒƒZXe) Ce d9¡G dedf„ dfeƒƒZYeZdgk�rddhl[m\Z\ e\e.ƒ dS )izLinux specific tests.é    )ÚdivisionN)ÚLINUX)Ú
basestring)ÚFileNotFoundError)ÚPY3)Úu)Ú
call_until)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)Ú
HAS_RLIMIT)Úmock)ÚPsutilTestCase)ÚPYPY)Úreload_module)Úretry_on_failure)Úsafe_rmpath)Úsh)Úskip_on_not_implemented)Ú
ThreadTask)ÚTOLERANCE_DISK_USAGE)ÚTOLERANCE_SYS_MEM)Úunittest)Úwhichi‰  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 |¡�6 t | 	| 
¡ tt d| ¡¡dd… ¡W  5 Q R £ S Q R X d S ©Nr   é   ÚasciiÚ256sé   é   )Úfcntlr   ÚbytesÚsocketÚAF_INETÚ
SOCK_DGRAMÚ
contextlibÚclosingÚ	inet_ntoaÚioctlÚfilenoÚSIOCGIFADDRÚstructÚpack©Úifnamer!   Ús© r1   úJ/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_linux.pyÚget_ipv4_addressB   s    


þ þÿr3   c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡�6 t | 	| 
¡ tt d| ¡¡dd… ¡W  5 Q R £ S Q R X d S r   )r!   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   ÚSIOCGIFNETMASKr,   r-   r.   r1   r1   r2   Úget_ipv4_netmaskO   s    


þ þÿr5   c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡�6 t | 	| 
¡ tt d| ¡¡dd… ¡W  5 Q R £ S Q R X d S r   )r!   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   ÚSIOCGIFBRDADDRr,   r-   r.   r1   r1   r2   Úget_ipv4_broadcast\   s    


þ þÿr7   c           	   	   C   s¦   t ddƒ�8}| ¡ D ]}| ¡ }|d | kr q>qtd|  ƒ‚W 5 Q R X |d }g }tdt|ƒdƒD ]}| |||d … ¡ qdd |¡}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)	r/   ÚfÚlineÚfieldsZunformattedÚgroupsÚiÚ	formattedZpackedr1   r1   r2   Úget_ipv6_addressi   s    
rM   c              
      s²   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡�l | | 	¡ t
t d| ¡¡}trfdd„ ‰ ndd l}|j‰ d ‡ fdd	„|d
d… D ƒ¡d d… W  5 Q R £ S Q R X d S )Nr   r   r   r   c                 S   s   | S ©Nr1   ©Úxr1   r1   r2   Úord„   s    zget_mac_address.<locals>.ordÚ c                    s   g | ]}d ˆ |ƒ ‘qS )z%02x:r1   )Ú.0Úchar©rQ   r1   r2   Ú
<listcomp>‰   s     z#get_mac_address.<locals>.<listcomp>é   r    r9   )r!   r   r"   r#   r$   r%   r&   r'   r)   r*   ÚSIOCGIFHWADDRr,   r-   Ú__builtin__rQ   rC   )r/   r!   r0   ÚinforY   r1   rU   r2   Úget_mac_addressz   s     
  
ÿ
r[   c                  C   s|   t d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SwapÚfreeztotal used freez&can't find 'Swap' in 'free' output:
%sN)r   r>   Ú
startswithÚcollectionsÚ
namedtupleÚintr?   rC   )ÚoutÚlinesrH   Ú_ÚtotalÚusedrb   Úntr1   r1   r2   Ú	free_swapŒ   s    

ÿrm   c                  C   s†   t d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.
    r\   r]   r^   r_   ra   ZMemc                 S   s   g | ]}t |ƒ‘qS r1   )rf   ©rS   rP   r1   r1   r2   rV   ¨   s     z free_physmem.<locals>.<listcomp>é   é   rb   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   r>   rc   rd   re   r?   rC   )rg   rh   rH   rj   rk   rb   Úsharedrl   r1   r1   r2   Úfree_physmem›   s    

ÿ
 ÿÿrr   c                 C   sV   t dddid�}| d¡D ]*}| ¡ }| |krt| d¡d ƒ  S qtd|  ƒ‚d S )	Nz	vmstat -sr]   r^   r_   ra   ú r   z can't find %r in 'vmstat' output)r   r>   Ústriprf   r?   )Ústatrg   rH   r1   r1   r2   Úvmstat°   s    rv   c                  C   s:   t dƒ ¡ } d| krt d¡‚ttt|  ¡ d  d¡ƒƒS )Nzfree -VÚUNKNOWNzcan't determine free versionr9   Ú.)r   rt   r   ÚSkipTestÚtupleÚmaprf   r>   )rg   r1   r1   r2   Úget_free_version_info¹   s    
r|   c              	   #   sF   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d��}|V  W 5 Q R X 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                    sL   | ˆkr8t r,tˆ tƒr t ˆ ¡S t ˆ ¡S qHt ˆ ¡S nˆ| f|ž|ŽS d S rN   )r   Ú
isinstancer   ÚioÚStringIOÚBytesIO©ÚnameÚargsÚkwargs©ÚcontentÚfor_pathÚ	orig_openr1   r2   Ú	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Úmr1   r…   r2   Úmock_open_contentÀ   s
    r“   c              	   #   sF   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d��}|V  W 5 Q R X dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s"   | ˆkrˆ ‚nˆ| f|ž|ŽS d S rN   r1   r�   ©Úexcr‡   rˆ   r1   r2   r‰   Ü   s    z&mock_open_exception.<locals>.open_mockrŠ   r‹   TrŒ   Nr�   )r‡   r•   r‰   r‘   r’   r1   r”   r2   Ú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   s&   t dƒd }t ¡ j}|  ||¡ d S )Nztotal memoryé   )rv   ÚpsutilÚvirtual_memoryrj   ÚassertAlmostEqual©ÚselfZvmstat_valueÚpsutil_valuer1   r1   r2   Ú
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©ÚdeltaÚmsg)	r|   ZskipTestrr   rk   r™   rš   r›   r   Úoutput©r�   rb   Ú
free_valuerž   r1   r1   r2   Ú	test_usedø   s    


  þz!TestSystemVirtualMemory.test_usedc                 C   s*   t dƒd }t ¡ j}| j||td� d S )Nzfree memoryr˜   ©r¤   )rv   r™   rš   rb   r›   r   rœ   r1   r1   r2   Ú	test_free  s    
  ÿz!TestSystemVirtualMemory.test_freec                 C   s*   t dƒd }t ¡ j}| j||td� d S )Nzbuffer memoryr˜   rª   )rv   r™   rš   Úbuffersr›   r   rœ   r1   r1   r2   Útest_buffers  s    
  ÿz$TestSystemVirtualMemory.test_buffersc                 C   s*   t dƒd }t ¡ j}| j||td� d S )Nzactive memoryr˜   rª   )rv   r™   rš   Úactiver›   r   rœ   r1   r1   r2   Útest_active  s    
  ÿz#TestSystemVirtualMemory.test_activec                 C   s*   t dƒd }t ¡ j}| j||td� d S )Nzinactive memoryr˜   rª   )rv   r™   rš   Úinactiver›   r   rœ   r1   r1   r2   Útest_inactive  s    
  ÿ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£   )	rr   rq   r   ry   r™   rš   r›   r   r¦   r§   r1   r1   r2   Útest_shared#  s    

  þz#TestSystemVirtualMemory.test_sharedc                 C   sh   t dƒ}| d¡}d|d kr*t d¡‚n:t|d  ¡ d ƒ}t ¡ j}| j||t	d|||f d	� d S )
Nr\   ra   Ú	availabler   z(free does not support 'available' columnro   r9   r¢   r£   )
r   r>   r   ry   rf   r™   rš   r³   r›   r   )r�   rg   rh   r¨   rž   r1   r1   r2   Útest_available.  s    

  þz&TestSystemVirtualMemory.test_availablec              
   C   sd  t dt d¡ ¡ ƒ��D}tjdd���*}t d¡ t ¡ }|j	sDt
‚|  t|ƒd¡ |d }|j d¡slt
‚|  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 5 Q R X W 5 Q R X 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Úalwaysro   r   úpsutil/_pslinux.pyz#memory stats couldn't be determinedÚcachedrq   r®   r°   r¬   r³   )r“   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterr™   rš   ÚcalledÚAssertionErrorÚassertEqualrA   ÚfilenameÚendswithÚassertInÚstrÚmessagerº   r®   r°   rq   r¬   r³   Úslab©r�   r’   ÚwsÚretÚwr1   r1   r2   Útest_warnings_on_misses=  s:    þ

 ÿz/TestSystemVirtualMemory.test_warnings_on_missesc           
   	   C   s–   ddl m} ddl m} i }|dƒ�0}|D ]$}| ¡ }t|d ƒd ||d < q*W 5 Q R X ||ƒ}d|kr’|d }t|| ƒ| d }	|  |	d	¡ d S )
Nr   )Úcalculate_avail_vmem)Úopen_binaryrµ   ro   r˜   s   MemAvailable:éd   r   )Úpsutil._pslinuxrÏ   rÐ   r>   rf   ÚabsZ
assertLess)
r�   rÏ   rÐ   ZmemsrG   rH   rI   ÚaÚbZdiff_percentr1   r1   r2   Útest_avail_old_percentd  s    
$z.TestSystemVirtualMemory.test_avail_old_percentc              
   C   sv   t dt d¡ ¡ ƒ�X}tjdd��}t ¡ }W 5 Q R X |js@t	‚|  
|jd¡ |d }|  dt|jƒ¡ W 5 Q R X 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È   rÊ   r1   r1   r2   Ú test_avail_old_comes_from_kernelw  s    þ
 ÿz8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc              
   C   sv   t dt d¡ ¡ ƒ�X}tjdd��}t ¡ }W 5 Q R X |js@t	‚|  
|jd¡ |d }|  dt|jƒ¡ W 5 Q R X 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Ê   r1   r1   r2   Útest_avail_old_missing_fields“  s    þ
 ÿz5TestSystemVirtualMemory.test_avail_old_missing_fieldsc                 C   sŠ   t dt d¡ ¡ ƒ�l tdttjdƒƒ�N tj	dd��6}t
 ¡ }|  |jd¡ |d }|  d	t|jƒ¡ W 5 Q R X W 5 Q R X W 5 Q R X 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Í   r1   r1   r2   Útest_avail_old_missing_zoneinfo¬  s&    þ
þ ÿþz7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoc              	      sÌ   ‡ fdd„}t ‰ trdnd}tj|d|d��–}t ¡ }|js@t‚|  |j	d¡ |  |j
d¡ |  |jd	¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W 5 Q R X d S )Nc                    s0   | dkrt  t d¡ ¡ ¡S ˆ | f|ž|Ž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ˆ   r1   r2   r‰   Í  s    3zETestSystemVirtualMemory.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Â   rÃ   rj   rb   r¬   rº   rq   r®   r°   rÉ   r³   )r�   r‰   r‘   r’   Úmemr1   rá   r2   Ú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å   r1   r1   r1   r2   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 5 Q R X d|ko*d|kS )z3Return True if /proc/meminfo provides swap metrics.rµ   z
SwapTotal:z	SwapFree:)r<   Úread)rG   Údatar1   r1   r2   Úmeminfo_has_swap_info  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   s"   t ƒ j}t ¡ j}| j||td�S ©Nrª   )rm   rj   r™   Úswap_memoryr›   r   ©r�   r¨   rž   r1   r1   r2   rŸ   $  s    
  ÿzTestSystemSwapMemory.test_totalc                 C   s"   t ƒ j}t ¡ j}| j||td�S rí   )rm   rk   r™   rî   r›   r   rï   r1   r1   r2   r©   *  s    
  ÿzTestSystemSwapMemory.test_usedc                 C   s"   t ƒ j}t ¡ j}| j||td�S rí   )rm   rb   r™   rî   r›   r   rï   r1   r1   r2   r«   1  s    
  ÿzTestSystemSwapMemory.test_freec              
   C   s¨   t jddd���}tjdd��x}t d¡ t ¡ }|js:t‚|  	t
|ƒd¡ |d }|j d¡sbt‚|  d	t|jƒ¡ |  	|jd¡ |  	|jd¡ W 5 Q R X W 5 Q R X d S )
Núpsutil._common.openT©r�   r¶   r¸   ro   r   r¹   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r�   r¾   r¿   rÀ   r™   rî   rÁ   rÂ   rÃ   rA   rÄ   rÅ   rÆ   rÇ   rÈ   ÚsinÚsoutrÊ   r1   r1   r2   Útest_missing_sin_sout8  s    

þz*TestSystemSwapMemory.test_missing_sin_soutc              
   C   s¬   t dttjdƒƒ��}tjdd��x}t d¡ t ¡ }|j	s>t
‚|  t|ƒd¡ |d }|j d¡sft
‚|  d	t|jƒ¡ |  |jd¡ |  |jd¡ W 5 Q R X W 5 Q R X d S )
Nz/proc/vmstatrÜ   Tr¶   r¸   ro   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Â   rÃ   rA   rÄ   rÅ   rÆ   rÇ   rÈ   rò   ró   rÊ   r1   r1   r2   Útest_no_vmstat_mockedG  s$    
þ

ýz*TestSystemSwapMemory.test_no_vmstat_mockedc              	   C   s�   |   ¡ st d¡S t d¡�}t ¡ }W 5 Q R X |jr:t‚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Á   rÂ   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinforÃ   rj   r›   rb   r   )r�   r’   ÚswapZcextri   rj   rb   Zunit_multiplierr1   r1   r2   Útest_meminfo_against_sysinfoZ  s    

z1TestSystemSwapMemory.test_meminfo_against_sysinfoc              	   C   s,   t ddƒ�}t ¡  |jst‚W 5 Q R X d S )Nrµ   ó    )r“   r™   rî   rÁ   rÂ   ©r�   r’   r1   r1   r2   Ú#test_emulate_meminfo_has_no_metricsj  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)ræ   rç   rè   Ústaticmethodrì   rŸ   r   r©   r«   rô   rõ   rø   rû   r1   r1   r1   r2   ré     s   


ré   c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemCPUTimesc                 C   s    t  ¡ j}t dt ¡ d ¡d }ttt	| 
d¡ƒƒ}|dkrL|  d|¡ n|  d|¡ |dkrn|  d|¡ n|  d|¡ |d	kr�|  d
|¡ n|  d
|¡ d S )Nz\d+\.\d+\.\d+é   r   rx   )rþ   é   é   Ústeal)rþ   rÿ   r    Zguest)r    rþ   r   Z
guest_nice)r™   Ú	cpu_timesÚ_fieldsÚreÚfindallÚosÚunamerz   r{   rf   r>   rÆ   ÚassertNotIn)r�   rI   Z
kernel_verZkernel_ver_infor1   r1   r2   Útest_fields{  s    
zTestSystemCPUTimes.test_fieldsN)ræ   rç   rè   r	  r1   r1   r1   r2   rý   x  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   sV   t dƒ�}| ¡  ¡ }W 5 Q R X dt|ƒkrRt| d¡d ƒd }|  t ¡ |¡ d S )Nr  ú-ro   )	r<   rê   rt   rÇ   rf   r>   rÃ   r™   Ú	cpu_count)r�   rG   Úvaluer1   r1   r2   Ú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k	r|‘qS )zcpu\d+$N)r  Úsearchrn   r1   r1   r2   rV   �  s      zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r  ÚlistdirrA   rÃ   r™   r  )r�   ZlsÚcountr1   r1   r2   Ú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©Zlogical)rf   r   rÃ   r™   r  )r�   Únumr1   r1   r2   Ú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 )ú#©rc   rn   r1   r1   r2   rV   ¨  s     
 z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>ra   Tr  )r   rA   r>   rÃ   r™   r  )r�   rg   r  r1   r1   r2   Útest_against_lscpu¥  s    z,TestSystemCPUCountLogical.test_against_lscpuc              
   C   s  dd l }|j ¡ }tjdtd��ô}|  |j ¡ |¡ |js>t‚tjddd��:}|  	|j ¡ ¡ |  |j
d¡ |  |jd d d¡ W 5 Q R X td	d
ƒ�}| ¡ }W 5 Q R X t |¡}tjd|dd��}|  |j ¡ |¡ W 5 Q R X td	dƒ�}|  |j ¡ |¡ |j W 5 Q R X W 5 Q R X d S )Nr   zpsutil._pslinux.os.sysconf©rŽ   rð   Trñ   rþ   ú
/proc/statú/proc/cpuinfoÚrb©Úreturn_valuer�   rù   )rÒ   Ú_pslinuxZcpu_count_logicalr   r�   r?   rÃ   rÁ   rÂ   ÚassertIsNoneZ
call_countZ	call_argsr<   rê   r~   r€   r“   )r�   r™   Úoriginalr’   rG   Zcpuinfo_dataÚ	fake_filer1   r1   r2   Útest_emulate_fallbacks«  s2    
 ÿ
 
 ÿz0TestSystemCPUCountLogical.test_emulate_fallbacksN)ræ   rç   rè   r   ÚskipIfr  ÚpathÚexistsr  r  r   r  r  r(  r1   r1   r1   r2   r
  �  s   ÿ
ÿ


r
  c                   @   s6   e Zd Ze edƒ d¡dd„ ƒZdd„ Zdd„ Zd	S )
ÚTestSystemCPUCountPhysicalr  r  c                 C   s\   t dƒ}tƒ }| d¡D ]&}| d¡s| d¡}| |d ¡ q|  tjdd�t|ƒ¡ d S )Nr  ra   r  ú,ro   Fr  )	r   Úsetr>   rc   ÚaddrÃ   r™   r  rA   )r�   rg   Zcore_idsrH   rI   r1   r1   r2   r  Ð  s    

z-TestSystemCPUCountPhysical.test_against_lscpuc              	   C   sP   t j ¡ }tjdg d��}t j ¡ }|js.t‚W 5 Q R X |d k	rL|  ||¡ d S )Nú	glob.glob©r#  )r™   r$  Úcpu_count_physicalr   r�   rÁ   rÂ   rÃ   )r�   Zmeth_1r’   Zmeth_2r1   r1   r2   Útest_method_2Ú  s    

z(TestSystemCPUCountPhysical.test_method_2c              
   C   s\   t jdg d��0}t jddd��}|  tj ¡ ¡ W 5 Q R X W 5 Q R X |jsNt‚|jsXt‚d S )Nr0  r1  rð   Trñ   )r   r�   r%  r™   r$  r2  rÁ   rÂ   )r�   Úm1Úm2r1   r1   r2   Útest_emulate_noneâ  s
    $
z,TestSystemCPUCountPhysical.test_emulate_noneN)	ræ   rç   rè   r   r)  r   r  r3  r6  r1   r1   r1   r2   r,  Í  s   
	r,  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              	      s@   ‡ fdd„}t jj‰ tjd|dd�� t ¡ s2t‚W 5 Q R X d S )Nc                    s   |   d¡rdS ˆ | ƒS d S )Nú&/sys/devices/system/cpu/cpufreq/policyFr  ©r*  ©Zorig_existsr1   r2   Úpath_exists_mockð  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockúos.path.existsT)rŽ   r�   )r  r*  r+  r   r�   r™   Úcpu_freqrÂ   )r�   r<  r1   r;  r2   Útest_emulate_use_second_fileí  s    ÿz3TestSystemCPUFrequency.test_emulate_use_second_filec              	      s¾   ‡ ‡fdd„}g ‰ t jj‰zŠtjd|d��r ttjƒ t ¡ }|sFt	‚ˆ sNt	‚|  
|jd¡ |  
|jd¡ tjdd�D ] }|  
|jd¡ |  
|jd¡ qvW 5 Q R X W 5 ttjƒ ttƒ X d S )Nc                    s,   |   d¡rdS | dkr ˆ  d ¡ ˆ| ƒS d S )Nz/sys/devices/system/cpu/Fr   )rc   rB   r:  ©ÚflagsZos_path_existsr1   r2   r<  ÿ  s
    

zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr=  r  ç        T©Zpercpu)r  r*  r+  r   r™   r$  r   r�   r>  rÂ   rÃ   ÚmaxÚmin)r�   r<  rÌ   Úfreqr1   r@  r2   Útest_emulate_use_cpuinfoû  s     

z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              
      sš   ‡ fdd„}t ‰ trdnd}tj||d��f tjddd��L t ¡ }|  |jd	¡ |jd
krj|  |jd¡ |j	d
kr‚|  |j	d¡ W 5 Q R X W 5 Q R X 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 ˆ | f|ž|ŽS d S )
Nú/scaling_cur_freqr9  ó   500000ú/scaling_min_freqó   600000ú/scaling_max_freqs   700000r   s   cpu MHz		: 500©rÅ   rc   r~   r€   r�   rá   r1   r2   r‰     s    
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockrŠ   r‹   r  r=  Tr1  ç     @@rB  ç     À‚@g     à…@©
r<   r   r   r�   r™   r>  rÃ   ÚcurrentrE  rD  ©r�   r‰   r‘   rF  r1   rá   r2   Útest_emulate_data  s     ÿ

z(TestSystemCPUFrequency.test_emulate_datac                    s  ‡ 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 5 Q R X W 5 Q R X W 5 Q R X 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 ˆ | f|ž|ŽS d S )NrH  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rJ  ó   200000rL  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rI  rK  r   s   cpu MHz		: 100
cpu MHz		: 400rM  )r‚   rƒ   r„   Únrá   r1   r2   r‰   9  s8    
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockrŠ   r‹   r  r=  Tr1  ú!psutil._pslinux.cpu_count_logicalrþ   rC  r   ç      Y@rB  g      i@g     Àr@ro   g      y@rN  rO  rP  rR  r1   rá   r2   Útest_emulate_multi_cpu7  s&    ÿz-TestSystemCPUFrequency.test_emulate_multi_cpuc                    s„   ‡ fdd„}t ‰ trdnd}tj||d��P tjddd��6 tjd	d
d�� t ¡ }|  |jd¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nc                    sR   |   d¡rttjdƒ‚n6|   d¡r,t d¡S | dkr>t d¡S ˆ | f|ž|ŽS d S )NrH  rR   z/cpuinfo_cur_freqrT  r   s   cpu MHz		: 200)rÅ   rÝ   rÞ   rß   r~   r€   r�   rá   r1   r2   r‰   h  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockrŠ   r‹   r  r=  Tr1  rV  ro   éÈ   )r<   r   r   r�   r™   r>  rÃ   rQ  rR  r1   rá   r2   Ú%test_emulate_no_scaling_cur_freq_filee  s    
ÿz<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)ræ   rç   rè   r   r)  r   r?  rG  rS  rX  rZ  r1   r1   r1   r2   r7  ê  s   



-r7  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ª   )rv   r™   Ú	cpu_statsÚctx_switchesr›   rœ   r1   r1   r2   Útest_ctx_switches  s    
z$TestSystemCPUStats.test_ctx_switchesc                 C   s&   t dƒ}t ¡ j}| j||dd� d S )NÚ
interruptsr\  rª   )rv   r™   r]  r`  r›   rœ   r1   r1   r2   Útest_interrupts„  s    
z"TestSystemCPUStats.test_interruptsN)ræ   rç   rè   r_  ra  r1   r1   r1   r2   r[  |  s   r[  c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgr8  c              	   C   s‚   t  ¡ }tddƒ�}| ¡  ¡ }W 5 Q R X | jt|d ƒ|d dd� | jt|d ƒ|d dd� | jt|d ƒ|d dd� d S )Nz/proc/loadavgÚrr   ro   rª   rþ   )r™   Ú
getloadavgr<   rê   r>   r›   Úfloat)r�   rž   rG   Z
proc_valuer1   r1   r2   Útest_getloadavg�  s    zTestLoadAvg.test_getloadavgN)ræ   rç   rè   r   r)  r   rf  r1   r1   r1   r2   rb  Š  s   rb  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 k	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Ã   Úaddressr[   r#   r$   r3   Únetmaskr5   Ú	broadcastr7   rE   r>   rM   )r�   r‚   ÚaddrsÚaddrrk  r1   r1   r2   Útest_ips   s    
ÿzTestSystemNetIfAddrs.test_ipsN)ræ   rç   rè   rp  r1   r1   r1   r2   rg  �  s   rg  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemNetIfStatsc              	   C   st   t  ¡  ¡ D ]b\}}ztd| ƒ}W n tk
r8   Y qX | j|jd|k|d� |  |jtt	 
d|¡d ƒ¡ qd S )Núifconfig %sÚRUNNING)r¥   z(?i)MTU[: ](\d+)r   )r™   Únet_if_statsri  r   ÚRuntimeErrorrÃ   ÚisupÚmturf   r  r  )r�   r‚   Ústatsrg   r1   r1   r2   Útest_against_ifconfigÊ  s    ÿz*TestSystemNetIfStats.test_against_ifconfigc              
   C   sN   t  ¡  ¡ D ]<\}}td| dƒ� }|  |jt| ¡  ¡ ƒ¡ W 5 Q R X qd S )Nz/sys/class/net/%s/mtur8   )	r™   rt  ri  r<   rÃ   rw  rf   rê   rt   )r�   r‚   rx  rG   r1   r1   r2   Útest_mtuÕ  s    zTestSystemNetIfStats.test_mtuN)ræ   rç   rè   ry  rz  r1   r1   r1   r2   rq  Ç  s   rq  c                   @   s   e Zd Zeƒ dd„ ƒZdS )ÚTestSystemNetIOCountersc              	      s  ‡ fdd„}t jddd�}| ¡ D ]Þ\‰ }z|ˆ ƒ}W n tk
rN   Y q"Y nX | j|j|d dd� | j|j|d	 dd� | j|j|d
 dd� | j|j|d dd� | j|j	|d dd� | j|j
|d dd� | j|j|d dd� | j|j|d dd� q"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 )Nrr  zRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinro   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   rf   r  r  )ZnicrÌ   rg   ©r‚   r1   r2   Úifconfigà  s&    ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowrapr‚  i   rª   rƒ  r|  r˜   r}  r~  é
   r  r€  r�  )r™   Únet_io_countersri  ru  r›   r‚  rƒ  r|  r}  r~  r  r€  r�  )r�   r…  Zniorx  Zifconfig_retr1   r„  r2   ry  Þ  s^    
  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿz-TestSystemNetIOCounters.test_against_ifconfigN)ræ   rç   rè   r   ry  r1   r1   r1   r2   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_ipv6Fr1  c                 C   sR   z*t   t jt j¡}|  |j¡ | d¡ W n t jk
r@   Y nX tjdd� d S )N)z::1r   Úinet6©Úkind)	r#   rE   ÚSOCK_STREAMZ
addCleanupÚcloseÚbindÚerrorr™   Únet_connections)r�   Úsupports_ipv6rF   r0   r1   r1   r2   Útest_emulate_ipv6_unsupported  s    z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc              	   C   s6   t dt d¡ƒ�}tjdd� |js(t‚W 5 Q R X 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Â   rú   r1   r1   r2   Útest_emulate_unix  s    þz*TestSystemNetConnections.test_emulate_unixN)ræ   rç   rè   r   r�   r?   r“  r•  r1   r1   r1   r2   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}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"ra   r   r:   ZnonerR   )r   rt   r>   Úpoprf   )r*  rg   rh   rH   Údevrj   rk   rb   r1   r1   r2   Údf2  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallrª   )
r™   Údisk_partitionsÚ
disk_usageÚ
mountpointrÃ   rj   r›   rb   r   rk   )r�   rš  ÚpartÚusager™  rj   rk   rb   r1   r1   r2   Útest_against_df-  s    
ÿ
ÿz(TestSystemDiskPartitions.test_against_dfc              
   C   sÎ   t ddƒ�}| ¡ }W 5 Q R X d|krNt ¡ D ]}|jdkr. qÊq.|  d¡ n|t tdƒ¡}t	j
d|dd��X}t	j
d	d
gd��<}t ¡ }|js’t‚|jsœt‚|s¤t‚|  |d jd¡ W 5 Q R X W 5 Q R X d S )Nz/proc/filesystemsrc  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
rð   Tr"  z$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r¢  Úrwr1  r   )r<   rê   r™   rœ  ÚfstypeZfailr~   r   r   r   r�   rÁ   rÂ   rÃ   )r�   rG   rë   rŸ  r'  r4  r5  rÌ   r1   r1   r2   Útest_zfs_fsF  s.    
 ÿþ

z$TestSystemDiskPartitions.test_zfs_fsc              
   C   sT   zFtjddd��.}|  t¡� t  ¡  W 5 Q R X |js:t‚W 5 Q R X W 5 dt _X d S )Nú/proczos.path.realpathz/non/existentr1  )	r™   ÚPROCFS_PATHr   r�   ÚassertRaisesr   rœ  rÁ   rÂ   rú   r1   r1   r2   Útest_emulate_realpath_fail^  s    ÿz3TestSystemDiskPartitions.test_emulate_realpath_failN)ræ   rç   rè   r   r)  Úhasattrr  r   r¡  r¦  rª  r1   r1   r1   r2   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   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 5 Q R X W 5 Q R X d S )Nú/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12ú!psutil._pslinux.is_storage_deviceTr1  F©r†  ro   rþ   r    r:   rp   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Ì   r1   r1   r2   Útest_emulate_kernel_2_4m  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 5 Q R X W 5 Q R X d S )Nr­  z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r®  Tr1  Fr¯  ro   rþ   r    r:   rp   rÿ   r°  r±  r‡  r²  r¾  r1   r1   r2   Ú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 5 Q R X W 5 Q R X d S )Nr­  z   3    1   hda 1 2 3 4r®  Tr1  Fr¯  ro   rþ   r    r:   r   )r“   r   r�   r™   r³  rÃ   r´  r¶  r·  r¹  r»  rµ  r¸  rº  r¼  r½  r¾  r1   r1   r2   Ú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��l tjddd�}|  t|ƒd¡ |  |d	 j	d
¡ |  |d j	d
¡ |  |d	 j
d¡ |  |d j
d¡ W 5 Q R X W 5 Q R X 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®  Fr1  T©Úperdiskr†  rþ   Únvme0n1ro   Z	nvme0n1p1rp   )r“   r»   r¼   r   r�   r™   r³  rÃ   rA   r´  r¹  r¾  r1   r1   r2   Útest_emulate_include_partitions«  s    þÿz8TestSystemDiskIoCounters.test_emulate_include_partitionsc              
   C   s¼   t dt d¡ƒ�8 tjddd�� tjddd�}|  |¡ W 5 Q R X W 5 Q R X dd„ }t dt d¡ƒ�L tjdd	|d
��0 tjddd�}|  |j	d¡ |  |j
d¡ W 5 Q R X W 5 Q R X d S )Nr­  rÂ  r®  Fr1  rÃ  c                 S   s   | dkS )NrÅ  r1   r„  r1   r1   r2   Úis_storage_deviceÎ  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTrŒ   ro   rp   )r“   r»   r¼   r   r�   r™   r³  r%  rÃ   r´  r¹  )r�   rÌ   rÇ  r1   r1   r2   Útest_emulate_exclude_partitions¾  s*    þÿþ ÿz8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc              	   C   sT   dd„ }t jdd�}tjdd|d�� t jdd�}W 5 Q R X |  t|ƒt|ƒ¡ d S )Nc                 S   s   | dkrdS dS )Nr­  FTr1   r:  r1   r1   r2   r+  Þ  s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rÄ  úpsutil._pslinux.os.path.existsrŒ   )r™   r³  r   r�   rÃ   rA   )r�   r+  ZwprocfsZwsysfsr1   r1   r2   Útest_emulate_use_sysfsÝ  s     ÿz/TestSystemDiskIoCounters.test_emulate_use_sysfsc              	   C   s6   dd„ }t jdd|d�� |  ttj¡ W 5 Q R X d S )Nc                 S   s   dS )NFr1   r:  r1   r1   r2   r+  ê  s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsrÉ  TrŒ   )r   r�   r©  ÚNotImplementedErrorr™   r³  )r�   r+  r1   r1   r2   Útest_emulate_not_implé  s     ÿz.TestSystemDiskIoCounters.test_emulate_not_implN)
ræ   rç   rè   r¿  rÀ  rÁ  rÆ  rÈ  rÊ  rÌ  r1   r1   r1   r2   r¬  j  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)rv   r™   Ú	boot_timerÃ   rf   rœ   r1   r1   r2   Útest_boot_timeú  s    zTestMisc.test_boot_timec              
      s  |   ¡ }t |¡ ttj |d¡dƒ�$}| d¡ | d¡ | d¡ W 5 Q R X �z¤t‰ ‡ fdd„}trldnd	}tj||d
���n 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 5 Q R X |  t
 ¡ d¡ |  tt
jdd�ƒd¡ |  tt
 ¡ ƒd¡ |  tttt
jdd�ƒƒd¡ W 5 Q R X W 5 t |¡ t	t
ƒ X |  t
jd¡ d S )Nru   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ƒ‚ˆ | f|ž|ŽS )Nr§  zrejecting access for test)rc   rÝ   rÞ   rß   r�   rá   r1   r2   r‰     s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockrŠ   r‹   r  TrC  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r§  )Ú
get_testfnr  Úmkdirr<   r*  rC   ÚwriteÚshutilÚrmtreer   r™   r   r   r�   r©  rÝ   r  Úcpu_percentÚcpu_times_percentr¨  rÃ   Úsumr{   ÚassertNotEqual)r�   Z	my_procfsrG   r‰   r‘   Zper_cpu_percentZper_cpu_times_percentr1   rá   r2   Útest_no_procfs_on_importÿ  s\    


  ÿ

 ÿ ÿ

z!TestMisc.test_no_procfs_on_importc              	   C   s,  t dt d¡ ¡ ƒ�8}t ¡  |js(t‚tjdd� t ¡  tjdd� W 5 Q R X t dt d¡ ¡ ƒ�¼}t ¡ }|jszt‚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 5 Q R X 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
                TrC  zŽ                cpu   1 0 0 0 0 0 0 0 0 0
                cpu0  1 0 0 0 0 0 0 0 0 0
                cpu1  1 0 0 0 0 0 0 0 0 0
                r   rW  )r“   r»   r¼   r½   r™   rÕ  rÁ   rÂ   rÖ  rØ  r×  r{   rÃ   r  Úuser)r�   r’   rÕ  Zcpu_percent_percpurÖ  Zcpu_times_percent_percpur1   r1   r2   Útest_cpu_steal_decrease<  s8    þ
þ
z TestMisc.test_cpu_steal_decreasec              	   C   s8   t jddd�� }|  ttjj¡ |js*t‚W 5 Q R X d S )Nrð   Trñ   )	r   r�   r©  ru  r™   r$  rÎ  rÁ   rÂ   rú   r1   r1   r2   Útest_boot_time_mockede  s    þzTestMisc.test_boot_time_mockedc              	   C   s¸   t jddgd��&}|  t ¡ d jd¡ |js2t‚W 5 Q R X t jddgd��&}|  t ¡ d jd¡ |jsnt‚W 5 Q R X t jddgd��&}|  t ¡ d jd¡ |jsªt‚W 5 Q R X d S )	Nzpsutil._pslinux.cext.users)Ú	giampaoloúpts/2z:0ç   €hÕATrþ   r1  r   Z	localhost)rÝ  rÞ  z:0.0rß  Trþ   )rÝ  rÞ  Úfoorß  Trþ   rà  )r   r�   rÃ   r™   ZusersÚhostrÁ   rÂ   rú   r1   r1   r2   Útest_users_mockedl  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 5 dt_X d S )Nr§  TrC  )rÐ  r  rÑ  r™   r¨  r©  rÝ   rš   r  rÎ  r‘  rˆ  rt  rœ  ÚNoSuchProcessÚProcess)r�   Ztdirr1   r1   r2   Útest_procfs_path€  s    
zTestMisc.test_procfs_pathc                 C   sˆ   t ƒ }| ¡  zjt ¡ }| ¡ }|  t|ƒd¡ t|dd„ d�d j	}|  
|j|¡ t |¡}| ¡  |  |t ¡ ¡ W 5 | ¡  X d S )Nrþ   c                 S   s   | j S rN   )ÚidrO   r1   r1   r2   Ú<lambda>   rù   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyro   )r   ÚstartÚstopr™   rä  ÚthreadsrÃ   rA   Úsortedræ  rØ  ÚpidZas_dictr  Zpids)r�   ÚtÚprë  ÚtidÚptr1   r1   r2   Útest_issue_687“  s    
zTestMisc.test_issue_687c              	   C   s6   t ddƒ�"}t t ¡ ¡st‚|js(t‚W 5 Q R X d S )Nú/proc/%s/statusrR   )r“   r™   Z
pid_existsr  ÚgetpidrÂ   rÁ   rú   r1   r1   r2   Ú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õ  r1   r1   r1   r2   rÍ  ÷  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 -br-  ro   rh  rR   rª   )	r   rf   r>   rt   Úreplacer™   Úsensors_batteryÚpercentr›   )r�   rg   Z
acpi_valuerž   r1   r1   r2   Útest_percentº  s    
zTestSensorsBattery.test_percentc              	      sj   ‡ fdd„}t ‰ trdnd}tj||d��6}|  t ¡ jd¡ |  t ¡ jtj	¡ |j
s\t‚W 5 Q R X d S )Nc                    s2   |   d¡s|   d¡rt d¡S ˆ | f|ž|ŽS d S )Nú
AC0/onlineú	AC/onlineó   1©rÅ   r~   r€   r�   rá   r1   r2   r‰   Ã  s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockrŠ   r‹   r  T)r<   r   r   r�   rÃ   r™   rø  Úpower_pluggedÚsecsleftÚPOWER_TIME_UNLIMITEDrÁ   rÂ   ©r�   r‰   r‘   r’   r1   rá   r2   Útest_emulate_power_pluggedÁ  s     ÿz-TestSensorsBattery.test_emulate_power_pluggedc              	      sV   ‡ fdd„}t ‰ trdnd}tj||d��"}|  t ¡ jd¡ |jsHt	‚W 5 Q R X d S )Nc                    sN   |   d¡s|   d¡r"ttjdƒ‚n(|   d¡r:t tdƒ¡S ˆ | f|ž|ŽS d S )Nrû  rü  rR   ú/statusZcharging©rÅ   rÝ   rÞ   rß   r~   r   r   r�   rá   r1   r2   r‰   Ô  s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockrŠ   r‹   r  T©
r<   r   r   r�   rÃ   r™   rø  rÿ  rÁ   rÂ   r  r1   rá   r2   Útest_emulate_power_plugged_2Ñ  s    z/TestSensorsBattery.test_emulate_power_plugged_2c              	      sV   ‡ fdd„}t ‰ trdnd}tj||d��"}|  t ¡ jd¡ |jsHt	‚W 5 Q R X d S )Nc                    s2   |   d¡s|   d¡rt d¡S ˆ | f|ž|ŽS d S )Nrû  rü  ó   0rþ  r�   rá   r1   r2   r‰   ä  s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockrŠ   r‹   r  Fr  r  r1   rá   r2   Útest_emulate_power_not_pluggedâ  s    z1TestSensorsBattery.test_emulate_power_not_pluggedc              	      sV   ‡ fdd„}t ‰ trdnd}tj||d��"}|  t ¡ jd¡ |jsHt	‚W 5 Q R X d S )Nc                    sN   |   d¡s|   d¡r"ttjdƒ‚n(|   d¡r:t tdƒ¡S ˆ | f|ž|ŽS d S )Nrû  rü  rR   r  Zdischargingr  r�   rá   r1   r2   r‰   ó  s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockrŠ   r‹   r  Fr  r  r1   rá   r2   Ú test_emulate_power_not_plugged_2ð  s    z3TestSensorsBattery.test_emulate_power_not_plugged_2c              	      sT   ‡ fdd„}t ‰ trdnd}tj||d�� }|  t ¡ j¡ |jsFt	‚W 5 Q R X d S )Nc                    sJ   |   d¡s|   d¡r"ttjdƒ‚n$|   d¡r6t d¡S ˆ | f|ž|ŽS d S )Nú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onlinerR   ú#/sys/class/power_supply/BAT0/statuss   ???)rc   rÝ   rÞ   rß   r~   r€   r�   rá   r1   r2   r‰     s    
ÿ

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockrŠ   r‹   r  )
r<   r   r   r�   r%  r™   rø  rÿ  rÁ   rÂ   r  r1   rá   r2   Útest_emulate_power_undetermined  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc              	   C   s6   t ddƒ�"}|  t ¡ jd¡ |js(t‚W 5 Q R X d S )Nú(/sys/class/power_supply/BAT0/energy_fullr  r   )r“   rÃ   r™   rø  rù  rÁ   rÂ   rú   r1   r1   r2   Útest_emulate_energy_full_0  s     ÿz-TestSensorsBattery.test_emulate_energy_full_0c                 C   sh   t dttjdƒƒ�L t dttjdƒƒ�. tddƒ� |  t ¡ jd¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  rR   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�   r1   r1   r2   Ú"test_emulate_energy_full_not_avail  s    
þ
þ ÿz5TestSensorsBattery.test_emulate_energy_full_not_availc                 C   sn   t dttjdƒƒ�R t dttjdƒƒ�4 t dttjdƒƒ� |  t ¡ j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  rR   r  r  )r–   rÝ   rÞ   rß   r%  r™   rø  rÿ  r  r1   r1   r2   Ú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  r1   r1   r1   r2   rö  ¶  s   
rö  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsBatteryEmulatedc              
      sx   ‡ fdd„}t ‰ trdnd}tjddgd��.}tj||d��}|  t ¡ ¡ W 5 Q R X W 5 Q R X |jsjt‚|jstt‚d S )	Nc                    s\   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | f|ž|ŽS d S )Nz/energy_nowZ60000000z
/power_nowÚ0z/energy_fullZ60000001©rÅ   r~   r   r   r�   rá   r1   r2   r‰   9  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockrŠ   r‹   z
os.listdirZBAT0r1  r  )	r<   r   r   r�   ZassertIsNotNoner™   rø  rÁ   rÂ   )r�   r‰   r‘   ZmlistdirZmopenr1   rá   r2   Útest_it8  s    
"
z"TestSensorsBatteryEmulated.test_itN)ræ   rç   rè   r  r1   r1   r1   r2   r  5  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��j tjddgd��N t ¡ d	 d
 }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W 5 Q R X W 5 Q R X 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 ˆ | f|ž|ŽS d S )Nú/namer‚   z/temp1_labelÚlabelz/temp1_inputó   30000z
/temp1_maxs   40000z/temp1_critó   50000)rÅ   r~   r   r   r€   r�   rá   r1   r2   r‰   P  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockrŠ   r‹   r  r0  z/sys/class/hwmon/hwmon0/temp1r1  r‚   r   r  ç      >@g      D@ç      I@©r<   r   r   r�   r™   Zsensors_temperaturesrÃ   r  rQ  ÚhighÚcritical)r�   r‰   r‘   Útempr1   rá   r2   Útest_emulate_class_hwmonO  s    ÿz0TestSensorsTemperatures.test_emulate_class_hwmonc              
      s¦   ‡ fdd„}dd„ }t ‰ tr dnd}tj||d��j tjdd	|d
��N t ¡ d d }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W 5 Q R X W 5 Q R X d S )Nc                    sl   |   d¡rt d¡S |   d¡r(t d¡S |   d¡r@t tdƒ¡S |   d¡rXt tdƒ¡S ˆ | f|ž|ŽS d S )	NZ0_tempr  r#  r  Z0_typer"  Útyper‚   )rÅ   r~   r€   r   r   r�   rá   r1   r2   r‰   k  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_tempr1   r:  r1   r1   r2   Ú	glob_mockw  s    ÿzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockrŠ   r‹   r  r0  TrŒ   r‚   r   rR   r  r  r   )r�   r‰   r&  r‘   r#  r1   rá   r2   Útest_emulate_class_thermalj  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)ræ   rç   rè   r$  r'  r1   r1   r1   r2   r  L  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsFansc              
      s‚   ‡ fdd„}t ‰ trdnd}tj||d��N tjddgd��2 t ¡ d	 d
 }|  |jd¡ |  |jd¡ W 5 Q R X W 5 Q R X d S )Nc                    s\   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | f|ž|ŽS d S )Nr  r‚   z/fan1_labelr  z/fan1_inputÚ2000r  r�   rá   r1   r2   r‰   ’  s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockrŠ   r‹   r  r0  z/sys/class/hwmon/hwmon2/fan1r1  r‚   r   r  iÐ  )	r<   r   r   r�   r™   Zsensors_fansrÃ   r  rQ  )r�   r‰   r‘   Zfanr1   rá   r2   rS  ‘  s    
ÿz!TestSensorsFans.test_emulate_dataN)ræ   rç   rè   rS  r1   r1   r1   r2   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e e d¡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 )Nrx   )r  r  r1   r1   r1   r2   rç  ·  rù   z3TestProcess.test_memory_full_info.<locals>.<lambda>z'%s' not in retgš™™™™™¹?F)Zgroupedc                 S   s   g | ]}|j |j ‘qS r1   )Zprivate_dirtyZprivate_cleanrn   r1   r1   r2   rV   ½  s     z5TestProcess.test_memory_full_info.<locals>.<listcomp>râ   rª   c                 S   s   g | ]
}|j ‘qS r1   )Úpssrn   r1   r1   r2   rV   À  s     c                 S   s   g | ]
}|j ‘qS r1   )r÷   rn   r1   r1   r2   rV   Â  s     )rÐ  r»   r¼   Zpyrunr   r™   rä  rí  ÚtimeÚsleepÚmemory_full_infoÚmemory_mapsr›   Úussr×  r+  r÷   )r�   ÚtestfnÚsrcZsprocrï  rä   Úmapsr1   r1   r2   Útest_memory_full_info®  s2    ü

 þ  ÿ  ÿz!TestProcess.test_memory_full_infoc              	   C   sp   t dt ¡  t d¡ ¡ ƒ�J}t ¡ }| ¡ }|j	s8t
‚|  |jd¡ |  |jd¡ |  |jd¡ W 5 Q R X 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.  rÁ   rÂ   rÃ   r0  r+  r÷   )r�   r’   rï  rä   r1   r1   r2   Útest_memory_full_info_mockedÄ  s    
þ
z(TestProcess.test_memory_full_info_mockedzunreliable on PYPYc              	   C   sj  dd„ }|   ¡ }t|dƒ� |  ||ƒjd¡ W 5 Q R X t|dƒ� |  ||ƒjd¡ W 5 Q R X t|dƒ� |  ||ƒjd¡ W 5 Q R X t|dƒ� |  ||ƒjd¡ W 5 Q R X t|dƒ� |  ||ƒjd¡ W 5 Q R X t|dƒ� |  ||ƒjd¡ W 5 Q R X t�rft|ƒ t|d	ƒ� |  ||ƒjd¡ W 5 Q R X t|ƒ t|d
ƒ� |  ||ƒjd¡ W 5 Q R X 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ä  r,  r	   Ú
open_filesr*  r  Úabspathru  )Úfnamerï  Z	giveup_atÚfiler1   r1   r2   Úget_test_fileé  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filerÍ   rc  rÔ   zr+zw+za+rP   zx+)rÐ  r<   rÃ   Úmoder   r   )r�   r;  r1  r1   r1   r2   Útest_open_files_modeç  s*    z TestProcess.test_open_files_modec              
   C   sº   t  ¡ }| ¡ }t|  ¡ dƒ�’ t|jdt|ƒ ƒ tjdt	t
jdƒd�� }| ¡ }|r\t‚|jsft‚W 5 Q R X tjdt	t
jdƒd�� }|  | ¡ g ¡ |js¢t‚W 5 Q R X W 5 Q R X d S )NrÍ   úlen(ret) != %iúpsutil._pslinux.os.readlinkrR   r  )r™   rä  r7  r<   rÐ  r   rA   r   r�   ÚOSErrorrÞ   rß   rÂ   rÁ   ÚEINVALrÃ   )r�   rï  Úfilesr’   r1   r1   r2   Útest_open_files_file_gone  s"    
ÿ
ÿz%TestProcess.test_open_files_file_gonec              
   C   sŠ   t  ¡ }| ¡ }t|  ¡ dƒ�b t|jdt|ƒ ƒ tr<dnd}tj	|t
tjdƒd�� }| ¡ }|rht‚|jsrt‚W 5 Q R X W 5 Q R X d S )NrÍ   r>  rŠ   r‹   rR   r  )r™   rä  r7  r<   rÐ  r   rA   r   r   r�   rÝ   rÞ   rß   rÂ   rÁ   )r�   rï  rB  r‘   r’   r1   r1   r2   Útest_open_files_fd_gone   s    
ÿz#TestProcess.test_open_files_fd_gonec              	   C   sB   t jdi d��*}|  tj t ¡ ¡ ¡ ¡ |j	s4t
‚W 5 Q R X d S )Nz)psutil._pslinux._psposix.get_terminal_mapr1  )r   r�   r%  r™   r$  rä  r  rô  ÚterminalrÁ   rÂ   rú   r1   r1   r2   Útest_terminal_mocked2  s    ÿz TestProcess.test_terminal_mockedc              	   C   sž   t  ¡ }t tdƒ¡}tjd|dd��$}|  | ¡ ddg¡ |j	sFt
‚W 5 Q R X t tdƒ¡}tjd|dd��&}|  | ¡ dddg¡ |j	s�t
‚W 5 Q R X d S )	Nzfoo bar rð   Tr"  rà  Úbarz	foo bar  rR   ©r™   rä  r~   r   r   r   r�   rÃ   ZcmdlinerÁ   rÂ   ©r�   rï  r'  r’   r1   r1   r2   Útest_cmdline_mocked@  s"     ÿ ÿzTestProcess.test_cmdline_mockedc              	   C   sž   t  ¡ }t tdƒ¡}tjd|dd��$}|  | ¡ ddg¡ |j	sFt
‚W 5 Q R X t tdƒ¡}tjd|dd��&}|  | ¡ dddg¡ |j	s�t
‚W 5 Q R X d S )	Nzfoo bar rð   Tr"  rà  rG  z	foo bar  rR   rH  rI  r1   r1   r2   Útest_cmdline_spaces_mockedN  s"     ÿ ÿz&TestProcess.test_cmdline_spaces_mockedc              	   C   sT   t  ¡ }t tdƒ¡}tjd|dd��$}|  | ¡ ddg¡ |j	sFt
‚W 5 Q R X d S )Nzfoo bar rð   Tr"  rà  rG  rH  rI  r1   r1   r2   Útest_cmdline_mixed_separators\  s     ÿz)TestProcess.test_cmdline_mixed_separatorsc              	   C   sF   t jddd��. |  t ¡  ¡ d¡ |  t ¡  ¡ d¡ W 5 Q R X d S )Nr?  z/home/foo (deleted)r1  z	/home/foo)r   r�   rÃ   r™   rä  ÚexeÚcwdr  r1   r1   r2   Ú!test_readlink_path_deleted_mockedf  s
    ÿz-TestProcess.test_readlink_path_deleted_mockedc              	      s–   ‡ fdd„}t ‰ trdnd}tj||d��(}t ¡  ¡ }|jsBt‚|  	|g ¡ W 5 Q R X ‡ fdd„}tj||d�� |  
tjt ¡ j¡ W 5 Q R X d S )Nc                    s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S ©Nz/proc/%s/taskrR   )rc   r  rô  rÝ   rÞ   rß   r�   rá   r1   r2   r‰   q  s    z2TestProcess.test_threads_mocked.<locals>.open_mockrŠ   r‹   r  c                    s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S rP  )rc   r  rô  rÝ   rÞ   ÚEPERMr�   rá   r1   r2   r‰   €  s    )r<   r   r   r�   r™   rä  rë  rÁ   rÂ   rÃ   r©  ÚAccessDenied)r�   r‰   r‘   r’   rÌ   r1   rá   r2   Útest_threads_mockedl  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	sFt
‚|j	sPt
‚|  |d¡ t jddd�� |  tjt ¡ j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )	Nzpsutil._pslinux.readlinkrR   r  zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFr1  )r   r�   r@  rÞ   rß   r™   rR  rä  rM  rÁ   rÂ   rÃ   r©  ÚZombieProcess)r�   r4  r5  rÌ   r1   r1   r2   Útest_exe_mocked‰  s&    
ÿ
ÿ

ÿ ÿzTestProcess.test_exe_mockedc              
   C   sZ   t dt ¡  ttjdƒƒ�6}t ¡ }|  t	¡� | 
¡  W 5 Q R X |jsLt‚W 5 Q R X d S )Nr5  rR   )r–   r  rô  rÝ   rÞ   rß   r™   rä  r©  r   r/  rÁ   rÂ   )r�   r’   rï  r1   r1   r2   Útest_issue_1014ž  s    

þzTestProcess.test_issue_1014r8  c              
   C   sŠ   t jdttjdƒd��D}t ¡ }| ¡  |  tj	¡�}| 
tj¡ W 5 Q R X |jsVt‚W 5 Q R X |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitrR   r  )r   r�   r@  rÞ   ZENOSYSr™   rä  r‚   r©  rT  ZrlimitZRLIMIT_NOFILErÁ   rÂ   rÃ   Ú	exceptionrí  ©r�   r’   rï  r•   r1   r1   r2   Útest_rlimit_zombie©  s    
ÿzTestProcess.test_rlimit_zombiec              
   C   s†   t jdttjdƒd��@}t ¡ }| ¡  |  tj	¡�}| 
¡  W 5 Q R X |jsRt‚W 5 Q R X |  |jj|j¡ |  |jj| ¡ ¡ d S )Nr?  rR   r  )r   r�   r@  rÞ   rß   r™   rä  r‚   r©  rT  rN  rÁ   rÂ   rÃ   rW  rí  rX  r1   r1   r2   Útest_cwd_zombie¸  s    
ÿzTestProcess.test_cwd_zombiec              *   C   s\  ddl m} dddddddddddddddd	d
dddddddddddddddddddddddddg*}d |¡ ¡ }tdt ¡  |ƒ�Î t ¡ }|  	| 
¡ d¡ |  	| ¡ tj¡ |  	| ¡ d¡ |  	| ¡ d| t ¡  ¡ | ¡ }|  	|jd| ¡ |  	|jd| ¡ |  	|jd| ¡ |  	|jd| ¡ |  	|jd| ¡ |  	| ¡ d¡ W 5 Q R X d S )Nr   )ÚCLOCK_TICKSr  z(cat)ÚZÚ1Ú2Ú3Ú4Ú5Ú6Ú7rs   z/proc/%s/statÚcatro   rÿ   rþ   r    r:   rp   r°  )rÒ   r[  rC   r½   r“   r  rô  r™   rä  rÃ   r‚   ÚstatusÚSTATUS_ZOMBIEÚppidZcreate_timerÎ  r  rÚ  ÚsystemÚchildren_userÚchildren_systemZiowaitZcpu_num)r�   r[  rƒ   r†   rï  Zcpur1   r1   r2   Útest_stat_file_parsingÃ  sz    Ö, ÿ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 5 Q R X 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ÚrealÚ	effectiveÚsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistr@   )r�   rï  rr  rv  r1   r1   r2   Útest_status_file_parsing  s"    
þ
z$TestProcess.test_status_file_parsingN)ræ   rç   rè   r   r4  r6  r   r)  r   r=  rC  rD  rF  rJ  rK  rL  rO  rS  rU  rV  r   rY  rZ  rk  rz  r1   r1   r1   r2   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 rN   )r™   rä  Úproc)Úclsr1   r1   r2   Ú
setUpClass%  s    z#TestProcessAgainstStatus.setUpClassc              
   C   sž   t j d| jj ¡�€}|D ]h}| ¡ }| |¡r| d¡d }zt|ƒW   W  5 Q R £ S  t	k
r€   | Y   W  5 Q R £ S X qt	d| ƒ‚W 5 Q R X d S )Nró  ú	rþ   zcan't find %r)
r™   Ú_psplatformÚ	open_textr|  rí  rt   rc   Ú	partitionrf   r?   )r�   Z	linestartrG   rH   r  r1   r1   r2   Úread_status_file)  s    
ÿ
z)TestProcessAgainstStatus.read_status_filec                 C   s    |   d¡}|  | j ¡ |¡ d S )NzName:)rƒ  rÃ   r|  r‚   ©r�   r  r1   r1   r2   Ú	test_name6  s    
z"TestProcessAgainstStatus.test_namec                 C   sH   |   d¡}|| d¡d | d¡… }| dd¡}|  | j ¡ |¡ d S )NzState:ú(ro   ú)rs   r  )rƒ  ÚfindÚrfindr÷  rÃ   r|  re  r„  r1   r1   r2   Útest_status:  s    
z$TestProcessAgainstStatus.test_statusc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzPPid:)rƒ  rÃ   r|  rg  r„  r1   r1   r2   Ú	test_ppid@  s    
z"TestProcessAgainstStatus.test_ppidc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzThreads:)rƒ  rÃ   r|  rq  r„  r1   r1   r2   Útest_num_threadsD  s    
z)TestProcessAgainstStatus.test_num_threadsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:ro   r:   )rƒ  rz   r{   rf   r>   rÃ   r|  rr  r„  r1   r1   r2   Ú	test_uidsH  s    
z"TestProcessAgainstStatus.test_uidsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzGid:ro   r:   )rƒ  rz   r{   rf   r>   rÃ   r|  rv  r„  r1   r1   r2   Ú	test_gidsM  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|  rn  ro  rp  r„  r1   r1   r2   Útest_num_ctx_switchesR  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sN   |   d¡}dt|ƒkrJtt| d¡ƒ\}}|  | j ¡ tt	||d ƒƒ¡ d S )NúCpus_allowed_list:r  ro   )
rƒ  rÇ   r{   rf   r>   rÃ   r|  Zcpu_affinityry  r@   )r�   r  Zmin_Zmax_r1   r1   r2   Útest_cpu_affinityY  s    
 ÿz*TestProcessAgainstStatus.test_cpu_affinityc              	   C   sR   |   d¡}t d¡�}| jj ¡  W 5 Q R X dt|ƒkrD|jrNt‚n
|jsNt‚d S )Nr�  zpsutil._pslinux.per_cpu_timesr  )	rƒ  r   r�   r|  rw  rx  rÇ   rÁ   rÂ   )r�   r  r’   r1   r1   r2   Ú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’  r1   r1   r1   r2   r{    s   

r{  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	TestUtilsc              	   C   s<   t jddd��$}|  tj d¡d¡ |js.t‚W 5 Q R X d S )Nzos.readlinkzfoo (deleted)r1  rG  rà  )r   r�   rÃ   r™   r€  ÚreadlinkrÁ   rÂ   rú   r1   r1   r2   Útest_readlinkr  s    zTestUtils.test_readlinkc              	   C   sx   |   ¡ }t|dƒ�}| d¡ W 5 Q R X |  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??rG  )Úfallback)rÐ  r<   rÒ  rÃ   r™   r€  rd  )r�   r1  rG   r1   r1   r2   Útest_catw  s     ÿzTestUtils.test_catN)ræ   rç   rè   r—  r›  r1   r1   r1   r2   r•  o  s   r•  Ú__main__)Úrun_from_name)]r“  Ú
__future__r   rd   r&   rÞ   Úglobr~   r  r  rÓ  r#   r,   r»   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*  r8  ÚdirnameÚ__file__ÚHEREr+   ZSIOCGIFCONFrX   r4   r6   r·  ZEMPTY_TEMPERATURESr3   r5   r7   rM   r[   rm   rr   rv   r|   Úcontextmanagerr“   r–   r)  r—   ré   rý   r
  r,  r7  r[  rb  rg  rq  r{  r‰  r–  r¬  rÍ  rö  r  r  r(  r*  r{  r•  ræ   Zpsutil.tests.runnerr�  r1   r1   r1   r2   Ú<module>   sè   	

  .]? )- ?  ?}A  rR
