<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Œ=Ý_Ê^ ã               @   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   sp   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡* t | 	| 
¡ tt d| ¡¡dd… ¡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© r/   úJ/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_linux.pyÚget_ipv4_addressB   s    

r1   c             C   sp   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡* t | 	| 
¡ tt d| ¡¡dd… ¡S Q R X d S )Nr   r   r   r   r   r   )r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   ÚSIOCGIFNETMASKr+   r,   )r-   r    r.   r/   r/   r0   Úget_ipv4_netmaskO   s    

r3   c             C   sp   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡* t | 	| 
¡ tt d| ¡¡dd… ¡S Q R X d S )Nr   r   r   r   r   r   )r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   ÚSIOCGIFBRDADDRr+   r,   )r-   r    r.   r/   r/   r0   Úget_ipv4_broadcast\   s    

r5   c       	   	   C   s¬   t ddƒ:}x2| ¡ D ]}| ¡ }|d | krP qW td|  ƒ‚W d Q R X |d }g }x.tdt|ƒdƒD ]}| |||d … ¡ qhW 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)	r-   ÚfÚlineÚfieldsZunformattedÚgroupsÚiÚ	formattedZpackedr/   r/   r0   Úget_ipv6_addressi   s    
rK   c          	      s¦   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡` | | 	¡ t
t d| ¡¡}trfdd„ ‰ ndd l}|j‰ d ‡ fdd	„|d
d… D ƒ¡d d… S Q R X d S )Nr   r   r   r   c             S   s   | S )Nr/   )Úxr/   r/   r0   Úord„   s    zget_mac_address.<locals>.ordÚ c                s   g | ]}d ˆ |ƒ ‘qS )z%02x:r/   )Ú.0Úchar)rM   r/   r0   ú
<listcomp>‰   s    z#get_mac_address.<locals>.<listcomp>é   r   r7   )r    r   r!   r"   r#   r$   r%   r&   r(   r)   ÚSIOCGIFHWADDRr+   r,   Ú__builtin__rM   rA   )r-   r    r.   ÚinforT   r/   )rM   r0   Úget_mac_addressz   s    

rV   c              C   s|   t dddid} |  d¡}xJ|D ]B}| d¡r | ¡ \}}}}t dd¡}|t|ƒt|ƒt|ƒƒS q W td	d |¡ ƒ‚d
S )zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    zfree -bÚLANGzC.UTF-8)ÚenvÚ
ZSwapÚfreeztotal used freez&can't find 'Swap' in 'free' output:
%sN)r   r<   Ú
startswithÚcollectionsÚ
namedtupleÚintr=   rA   )ÚoutÚlinesrF   Ú_ÚtotalÚusedrZ   Úntr/   r/   r0   Ú	free_swapŒ   s    


re   c              C   s†   t dddid} |  d¡}xT|D ]L}| d¡r dd„ | ¡ d	d
… D ƒ\}}}}t dd¡}|||||| ƒS q W tdd |¡ ƒ‚dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    zfree -brW   zC.UTF-8)rX   rY   ZMemc             S   s   g | ]}t |ƒ‘qS r/   )r^   )rO   rL   r/   r/   r0   rQ   ¨   s    z free_physmem.<locals>.<listcomp>é   é   rZ   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   r<   r[   r\   r]   r=   rA   )r_   r`   rF   rb   rc   rZ   Úsharedrd   r/   r/   r0   Úfree_physmem›   s    


"ri   c             C   sV   t dddid}x4| d¡D ]&}| ¡ }| |krt| d¡d ƒS qW td|  ƒ‚d S )	Nz	vmstat -srW   zC.UTF-8)rX   rY   ú r   z can't find %r in 'vmstat' output)r   r<   Ústripr^   r=   )Ústatr_   rF   r/   r/   r0   Úvmstat°   s    rm   c              C   s:   t dƒ ¡ } d| krt d¡‚ttt|  ¡ d  d¡ƒƒS )Nzfree -VÚUNKNOWNzcan't determine free versionr7   Ú.)r   rk   r   ÚSkipTestÚtupleÚmapr^   r<   )r_   r/   r/   r0   Úget_free_version_info¹   s    
rs   c          	   #   sF   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d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 )N)r   Ú
isinstancer   ÚioÚStringIOÚBytesIO)ÚnameÚargsÚkwargs)ÚcontentÚfor_pathÚ	orig_openr/   r0   Ú	open_mockÅ   s    

z$mock_open_content.<locals>.open_mockzbuiltins.openz__builtin__.openT)ÚcreateÚside_effectN)r:   r   r   Úpatch)r|   r{   r~   Úpatch_pointÚmr/   )r{   r|   r}   r0   Úmock_open_contentÀ   s
    r„   c          	   #   sF   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d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 )Nr/   )rx   ry   rz   )Úexcr|   r}   r/   r0   r~   Ü   s    z&mock_open_exception.<locals>.open_mockzbuiltins.openz__builtin__.openT)r   r€   N)r:   r   r   r   )r|   r…   r~   r‚   rƒ   r/   )r…   r|   r}   r0   Ú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 memoryi   )rm   ÚpsutilÚvirtual_memoryrb   ÚassertAlmostEqual)ÚselfÚvmstat_valueÚpsutil_valuer/   r/   r0   Ú
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 versionz	%s %s 
%s)ÚdeltaÚmsg)	rs   ZskipTestri   rc   rˆ   r‰   rŠ   r   Úoutput)r‹   rZ   Ú
free_valuer   r/   r/   r0   Ú	test_usedø   s    


z!TestSystemVirtualMemory.test_usedc             C   s*   t dƒd }t ¡ j}| j||td d S )Nzfree memoryi   )r‘   )rm   rˆ   r‰   rZ   rŠ   r   )r‹   rŒ   r   r/   r/   r0   Ú	test_free  s    
z!TestSystemVirtualMemory.test_freec             C   s*   t dƒd }t ¡ j}| j||td d S )Nzbuffer memoryi   )r‘   )rm   rˆ   r‰   ÚbuffersrŠ   r   )r‹   rŒ   r   r/   r/   r0   Útest_buffers  s    
z$TestSystemVirtualMemory.test_buffersc             C   s*   t dƒd }t ¡ j}| j||td d S )Nzactive memoryi   )r‘   )rm   rˆ   r‰   ÚactiverŠ   r   )r‹   rŒ   r   r/   r/   r0   Útest_active  s    
z#TestSystemVirtualMemory.test_activec             C   s*   t dƒd }t ¡ j}| j||td d S )Nzinactive memoryi   )r‘   )rm   rˆ   r‰   ÚinactiverŠ   r   )r‹   rŒ   r   r/   r/   r0   Ú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' columnz	%s %s 
%s)r‘   r’   )	ri   rh   r   rp   rˆ   r‰   rŠ   r   r“   )r‹   rZ   r”   r   r/   r/   r0   Ú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 )
Nzfree -brY   Ú	availabler   z(free does not support 'available' columnrf   r7   z	%s %s 
%s)r‘   r’   )
r   r<   r   rp   r^   rˆ   r‰   rž   rŠ   r   )r‹   r_   r`   r”   r   r/   r/   r0   Ú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 d Q R X W d Q R X d S )Nz/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Úalwaysrf   r   zpsutil/_pslinux.pyz#memory stats couldn't be determinedÚcachedrh   r™   r›   r—   rž   )r„   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterrˆ   r‰   ÚcalledÚAssertionErrorÚassertEqualr?   ÚfilenameÚendswithÚassertInÚstrÚmessager¢   r™   r›   rh   r—   rž   Úslab)r‹   rƒ   ÚwsÚretÚwr/   r/   r0   Útest_warnings_on_misses=  s4    	

z/TestSystemVirtualMemory.test_warnings_on_missesc       
   	   C   sš   ddl m} ddl m} i }|dƒ4}x,|D ]$}| ¡ }t|d ƒd ||d < q,W W d Q R X ||ƒ}d|kr–|d }t|| ƒ| d }	|  |	d	¡ d S )
Nr   )Úcalculate_avail_vmem)Úopen_binaryz/proc/meminforf   i   s   MemAvailable:éd   r   )Úpsutil._pslinuxr¶   r·   r<   r^   ÚabsZ
assertLess)
r‹   r¶   r·   ZmemsrE   rF   rG   ÚaÚbZdiff_percentr/   r/   r0   Útest_avail_old_percentd  s    

&z.TestSystemVirtualMemory.test_avail_old_percentc          
   C   sv   t dt d¡ ¡ ƒX}tjdd}t ¡ }W d Q R X |js@t	‚|  
|jd¡ |d }|  dt|jƒ¡ W d Q R X d S )Nz/proc/meminfoaL                  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
                T)r    l     œ" r   z,inactive memory stats couldn't be determined)r„   r£   r¤   r¥   r¦   r§   rˆ   r‰   r©   rª   r«   rž   r®   r¯   r°   )r‹   rƒ   r²   r³   r´   r/   r/   r0   Ú 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 d Q R X |js@t	‚|  
|jd¡ |d }|  dt|jƒ¡ W d Q R X d S )Nz/proc/meminfoaÄ                      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
                    T)r    l    `LG r   z,inactive memory stats couldn't be determined)r„   r£   r¤   r¥   r¦   r§   rˆ   r‰   r©   rª   r«   rž   r®   r¯   r°   )r‹   rƒ   r²   r³   r´   r/   r/   r0   Ú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 d Q R X W d Q R X W d Q R X d S )
Nz/proc/meminfoaT                      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/zoneinfozno such file or directoryT)r    l    `LG r   z,inactive memory stats couldn't be determined)r„   r£   r¤   r¥   r†   ÚIOErrorÚerrnoÚENOENTr¦   r§   rˆ   r‰   r«   rž   r®   r¯   r°   )r‹   r²   r³   r´   r/   r/   r0   Ú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 d Q R X d S )Nc                s0   | dkrt  t d¡ ¡ ¡S ˆ | f|ž|ŽS d S )Nz/proc/meminfoa=	                      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
                    )ru   rw   r£   r¤   r¥   )rx   ry   rz   )r}   r/   r0   r~   Í  s    1zETestSystemVirtualMemory.test_virtual_memory_mocked.<locals>.open_mockzbuiltins.openz__builtin__.openT)r   r€   i  i   i   i p  i T  i   i    i X  i   )r:   r   r   r   rˆ   r‰   r©   rª   r«   rb   rZ   r—   r¢   rh   r™   r›   r±   rž   )r‹   r~   r‚   rƒ   Úmemr/   )r}   r0   Ú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Å   r/   r/   r/   r0   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Q R X d|ko*d|kS )z3Return True if /proc/meminfo provides swap metrics.z/proc/meminfoNz
SwapTotal:z	SwapFree:)r:   Úread)rE   Údatar/   r/   r0   Úmeminfo_has_swap_info  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc             C   s"   t ƒ j}t ¡ j}| j||tdS )N)r‘   )re   rb   rˆ   Úswap_memoryrŠ   r   )r‹   r”   r   r/   r/   r0   rŽ   $  s    
zTestSystemSwapMemory.test_totalc             C   s"   t ƒ j}t ¡ j}| j||tdS )N)r‘   )re   rc   rˆ   rÍ   rŠ   r   )r‹   r”   r   r/   r/   r0   r•   *  s    
zTestSystemSwapMemory.test_usedc             C   s"   t ƒ j}t ¡ j}| j||tdS )N)r‘   )re   rZ   rˆ   rÍ   rŠ   r   )r‹   r”   r   r/   r/   r0   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 d Q R X W d Q R X d S )
Nzpsutil._common.openT)r   )r    r¡   rf   r   zpsutil/_pslinux.pyz9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r¦   r§   r¨   rˆ   rÍ   r©   rª   r«   r?   r¬   r­   r®   r¯   r°   ÚsinÚsout)r‹   rƒ   r²   r³   r´   r/   r/   r0   Ú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 d Q R X W d Q R X d S )
Nz/proc/vmstatzno such file or directoryT)r    r¡   rf   r   zpsutil/_pslinux.pyzK'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«   r?   r¬   r­   r®   r¯   r°   rÎ   rÏ   )r‹   rƒ   r²   r³   r´   r/   r/   r0   Útest_no_vmstat_mockedG  s    

z*TestSystemSwapMemory.test_no_vmstat_mockedc          	   C   s   |   ¡ st d¡S t d¡}t ¡ }W d 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«   rb   rŠ   rZ   r   )r‹   rƒ   ÚswapZcextra   rb   rZ   Zunit_multiplierr/   r/   r0   Útest_meminfo_against_sysinfoZ  s    

z1TestSystemSwapMemory.test_meminfo_against_sysinfoc          	   C   s,   t ddƒ}t ¡  |jst‚W d Q R X d S )Nz/proc/meminfoó    )r„   rˆ   rÍ   r©   rª   )r‹   rƒ   r/   r/   r0   Ú#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Ö   r/   r/   r/   r0   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   ro   )rÙ   é   é   Ústeal)rÙ   rÚ   r   Zguest)r   rÙ   r   Z
guest_nice)rˆ   Ú	cpu_timesÚ_fieldsÚreÚfindallÚosÚunamerq   rr   r^   r<   r®   ÚassertNotIn)r‹   rG   Z
kernel_verZkernel_ver_infor/   r/   r0   Útest_fields{  s    
zTestSystemCPUTimes.test_fieldsN)rÆ   rÇ   rÈ   rä   r/   r/   r/   r0   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 )ÚTestSystemCPUCountLogicalz/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc          	   C   sV   t dƒ}| ¡  ¡ }W d Q R X dt|ƒkrRt| d¡d ƒd }|  t ¡ |¡ d S )Nz/sys/devices/system/cpu/onlineú-rf   )	r:   rÊ   rk   r¯   r^   r<   r«   rˆ   Ú	cpu_count)r‹   rE   Úvaluer/   r/   r0   Útest_against_sysdev_cpu_online  s
    
z8TestSystemCPUCountLogical.test_against_sysdev_cpu_onlinez/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc             C   s0   t  d¡}tdd„ |D ƒƒ}|  t ¡ |¡ d S )Nz/sys/devices/system/cpuc             S   s    g | ]}t  d |¡dk	r|‘qS )zcpu\d+$N)rß   Úsearch)rO   rL   r/   r/   r0   rQ     s    zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)rá   Úlistdirr?   r«   rˆ   rç   )r‹   ZlsÚcountr/   r/   r0   Útest_against_sysdev_cpu_num™  s    
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablec             C   s$   t tdƒƒ}|  tjdd|¡ d S )Nznproc --allT)Úlogical)r^   r   r«   rˆ   rç   )r‹   Únumr/   r/   r0   Útest_against_nproc   s    z,TestSystemCPUCountLogical.test_against_nprocÚlscpuzlscpu utility not availablec             C   s8   t dƒ}tdd„ | d¡D ƒƒ}|  tjdd|¡ d S )Nzlscpu -pc             S   s   g | ]}|  d ¡s|‘qS )ú#)r[   )rO   rL   r/   r/   r0   rQ   ¨  s    z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rY   T)rî   )r   r?   r<   r«   rˆ   rç   )r‹   r_   rï   r/   r/   r0   Ú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 d Q R X td	d
ƒ}| ¡ }W d Q R X t |¡}tjd|dd}|  |j ¡ |¡ W d Q R X td	dƒ}|  |j ¡ |¡ |j W d Q R X W d Q R X d S )Nr   zpsutil._pslinux.os.sysconf)r€   zpsutil._common.openT)r   rÙ   z
/proc/statz/proc/cpuinfoÚrb)Úreturn_valuer   rÕ   )r¹   Ú_pslinuxZcpu_count_logicalr   r   r=   r«   r©   rª   ÚassertIsNoneZ
call_countÚ	call_argsr:   rÊ   ru   rw   r„   )r‹   rˆ   Úoriginalrƒ   rE   Zcpuinfo_dataÚ	fake_filer/   r/   r0   Útest_emulate_fallbacks«  s&    

 
z0TestSystemCPUCountLogical.test_emulate_fallbacksN)rÆ   rÇ   rÈ   r   ÚskipIfrá   ÚpathÚexistsré   rí   r   rð   ró   rû   r/   r/   r/   r0   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ñ   zlscpu utility not availablec             C   s`   t dƒ}tƒ }x4| d¡D ]&}| d¡s| d¡}| |d ¡ qW |  tjddt|ƒ¡ d S )Nzlscpu -prY   rò   ú,rf   F)rî   )	r   Úsetr<   r[   Úaddr«   rˆ   rç   r?   )r‹   r_   Zcore_idsrF   rG   r/   r/   r0   ró   Ð  s    

z-TestSystemCPUCountPhysical.test_against_lscpuc          	   C   sP   t j ¡ }tjdg d}t j ¡ }|js.t‚W d Q R X |d k	rL|  ||¡ d S )Nz	glob.glob)rõ   )rˆ   rö   Úcpu_count_physicalr   r   r©   rª   r«   )r‹   Zmeth_1rƒ   Zmeth_2r/   r/   r0   Ú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 d Q R X W d Q R X |jsNt‚|jsXt‚d S )Nz	glob.glob)rõ   zpsutil._common.openT)r   )r   r   r÷   rˆ   rö   r  r©   rª   )r‹   Úm1Úm2r/   r/   r0   Útest_emulate_noneâ  s
    $
z,TestSystemCPUCountPhysical.test_emulate_noneN)	rÆ   rÇ   rÈ   r   rü   r   ró   r  r  r/   r/   r/   r0   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 )ÚTestSystemCPUFrequencyznot supportedc          	      s@   ‡ fdd„}t jj‰ tjd|dd t ¡ s2t‚W d Q R X d S )Nc                s   |   d¡rdS ˆ | ƒS d S )Nz&/sys/devices/system/cpu/cpufreq/policyF)r[   )rý   )Úorig_existsr/   r0   Úpath_exists_mockð  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockzos.path.existsT)r€   r   )rá   rý   rþ   r   r   rˆ   Úcpu_freqrª   )r‹   r
  r/   )r	  r0   Ú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v ttjƒ t ¡ }|sFt	‚ˆ sNt	‚|  
|jd¡ |  
|jd¡ x0tjddD ] }|  
|jd¡ |  
|jd¡ qxW W d Q R X W d 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/Fz/proc/cpuinfo)r[   r@   )rý   )ÚflagsÚos_path_existsr/   r0   r
  ÿ  s
    

zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockzos.path.exists)r€   g        T)Úpercpu)rá   rý   rþ   r   r   r   rˆ   rö   r  rª   r«   ÚmaxÚmin)r‹   r
  r³   Úfreqr/   )r  r  r0   Ú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 d Q R X W d 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 )
Nz/scaling_cur_freqz&/sys/devices/system/cpu/cpufreq/policys   500000z/scaling_min_freqs   600000z/scaling_max_freqs   700000z/proc/cpuinfos   cpu MHz		: 500)r­   r[   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    









z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   zos.path.existsT)rõ   g     @@g        g     À‚@g     à…@)
r:   r   r   r   rˆ   r  r«   Úcurrentr  r  )r‹   r~   r‚   r  r/   )r}   r0   Ú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 d Q R X W d Q R X W d 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 )Nz/scaling_cur_freqz'/sys/devices/system/cpu/cpufreq/policy0s   100000z/scaling_min_freqs   200000z/scaling_max_freqs   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000s   500000s   600000z/proc/cpuinfos   cpu MHz		: 100
cpu MHz		: 400)r­   r[   ru   rw   )rx   ry   rz   Ún)r}   r/   r0   r~   9  s,    


















z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   zos.path.existsT)rõ   z!psutil._pslinux.cpu_count_logicalrÙ   )r  r   g      Y@g        g      i@g     Àr@rf   g      y@g     @@g     À‚@)
r:   r   r   r   rˆ   r  r«   r  r  r  )r‹   r~   r‚   r  r/   )r}   r0   Ú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 d Q R X W d Q R X W d 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 )Nz/scaling_cur_freqrN   z/cpuinfo_cur_freqs   200000z/proc/cpuinfos   cpu MHz		: 200)r­   rÀ   rÁ   rÂ   ru   rw   )rx   ry   rz   )r}   r/   r0   r~   h  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   zos.path.existsT)rõ   z!psutil._pslinux.cpu_count_logicalrf   éÈ   )r:   r   r   r   rˆ   r  r«   r  )r‹   r~   r‚   r  r/   )r}   r0   Ú%test_emulate_no_scaling_cur_freq_filee  s    

z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)rÆ   rÇ   rÈ   r   rü   r   r  r  r  r  r  r/   r/   r/   r0   r  ê  s
   .r  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemCPUStatsc             C   s&   t dƒ}t ¡ j}| j||dd d S )Nzcontext switchesiô  )r‘   )rm   rˆ   Ú	cpu_statsÚctx_switchesrŠ   )r‹   rŒ   r   r/   r/   r0   Útest_ctx_switches  s    
z$TestSystemCPUStats.test_ctx_switchesc             C   s&   t dƒ}t ¡ j}| j||dd d S )NÚ
interruptsiô  )r‘   )rm   rˆ   r  r  rŠ   )r‹   rŒ   r   r/   r/   r0   Útest_interrupts„  s    
z"TestSystemCPUStats.test_interruptsN)rÆ   rÇ   rÈ   r  r  r/   r/   r/   r0   r  |  s   r  c               @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgznot supportedc          	   C   s‚   t  ¡ }tddƒ}| ¡  ¡ }W d 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   rf   )r‘   rÙ   )rˆ   Ú
getloadavgr:   rÊ   r<   rŠ   Úfloat)r‹   r   rE   Z
proc_valuer/   r/   r0   Útest_getloadavg  s    zTestLoadAvg.test_getloadavgN)rÆ   rÇ   rÈ   r   rü   r   r$  r/   r/   r/   r0   r   Š  s   r   c               @   s   e Zd Zdd„ ZdS )ÚTestSystemNetIfAddrsc             C   sØ   xÒt  ¡  ¡ D ]Â\}}x¸|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W qW d S )Nz0.0.0.0ú%r   )rˆ   Znet_if_addrsÚitemsÚfamilyZAF_LINKr«   ÚaddressrV   r"   r#   r1   Únetmaskr3   Ú	broadcastr5   rC   r<   rK   )r‹   rx   ÚaddrsÚaddrr)  r/   r/   r0   Útest_ips   s    

zTestSystemNetIfAddrs.test_ipsN)rÆ   rÇ   rÈ   r.  r/   r/   r/   r0   r%    s   r%  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemNetIfStatsc          	   C   sx   xrt  ¡  ¡ D ]b\}}ytd| ƒ}W n tk
r:   Y qX | j|jd|k|d |  |jtt	 
d|¡d ƒ¡ qW d S )Nzifconfig %sÚRUNNING)r’   z(?i)MTU[: ](\d+)r   )rˆ   Únet_if_statsr'  r   ÚRuntimeErrorr«   ÚisupÚmtur^   rß   rà   )r‹   rx   Ústatsr_   r/   r/   r0   Útest_against_ifconfigÊ  s    z*TestSystemNetIfStats.test_against_ifconfigc          
   C   sR   xLt  ¡  ¡ D ]<\}}td| dƒ }|  |jt| ¡  ¡ ƒ¡ W d Q R X qW d S )Nz/sys/class/net/%s/mtur6   )	rˆ   r1  r'  r:   r«   r4  r^   rÊ   rk   )r‹   rx   r5  rE   r/   r/   r0   Útest_mtuÕ  s    zTestSystemNetIfStats.test_mtuN)rÆ   rÇ   rÈ   r6  r7  r/   r/   r/   r0   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}xè| ¡ D ]Ü\‰ }y|ˆ ƒ}W n tk
rN   w$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$W 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 )Nzifconfig %szRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinrf   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   r^   rß   rà   )Znicr³   r_   )rx   r/   r0   Úifconfigà  s    z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowrapr?  i   )r‘   r@  r9  i   r:  r;  é
   r<  r=  r>  )rˆ   Únet_io_countersr'  r2  rŠ   r?  r@  r9  r:  r;  r<  r=  r>  )r‹   rA  Znior5  Zifconfig_retr/   )rx   r0   r6  Þ  s.    z-TestSystemNetIOCounters.test_against_ifconfigN)rÆ   rÇ   rÈ   r   r6  r/   r/   r/   r0   r8  Û  s   r8  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_ntop)r€   zpsutil._pslinux.supports_ipv6F)rõ   c             C   sR   y*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"   rC   ÚSOCK_STREAMZ
addCleanupÚcloseÚbindÚerrorrˆ   Únet_connections)r‹   Úsupports_ipv6rD   r.   r/   r/   r0   Útest_emulate_ipv6_unsupported  s    z6TestSystemNetConnections.test_emulate_ipv6_unsupportedc          	   C   s6   t dt d¡ƒ}tjdd |js(t‚W d 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
                Úunix)rG  )r„   r£   r¤   rˆ   rL  r©   rª   )r‹   rƒ   r/   r/   r0   Útest_emulate_unix  s    
z*TestSystemNetConnections.test_emulate_unixN)rÆ   rÇ   rÈ   r   r   r=   rN  rP  r/   r/   r/   r0   rE  	  s   rE  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   sr   dd„ }xdt jddD ]T}t  |j¡}||jƒ\}}}}|  |j|¡ | j|j|td | j|j	|td qW 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"rY   r   r8   ZnonerN   )r   rk   r<   Úpopr^   )rý   r_   r`   rF   Údevrb   rc   rZ   r/   r/   r0   Údf2  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úall)r‘   )
rˆ   Údisk_partitionsÚ
disk_usageÚ
mountpointr«   rb   rŠ   rZ   r   rc   )r‹   rU  ÚpartÚusagerT  rb   rc   rZ   r/   r/   r0   Útest_against_df-  s    

z(TestSystemDiskPartitions.test_against_dfc          
   C   sÐ   t ddƒ}| ¡ }W d Q R X d|krPx¤t ¡ D ]}|jdkr0P q0W |  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 d Q R X W d Q R X d S )Nz/proc/filesystemsr!  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
zpsutil._common.openT)rõ   r   z$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r]  Úrw)rõ   r   )r:   rÊ   rˆ   rW  ÚfstypeZfailru   rv   r   r   r   r©   rª   r«   )r‹   rE   rË   rZ  rú   r  r  r³   r/   r/   r0   Útest_zfs_fsF  s$    


z$TestSystemDiskPartitions.test_zfs_fsc          
   C   sT   zFt jddd.}|  t¡ t ¡  W d Q R X |js:t‚W d Q R X W d dt_X d S )Nzos.path.realpathz/non/existent)rõ   z/proc)	r   r   ÚassertRaisesr   rˆ   rW  r©   rª   ÚPROCFS_PATH)r‹   rƒ   r/   r/   r0   Útest_emulate_realpath_fail^  s    
z3TestSystemDiskPartitions.test_emulate_realpath_failN)rÆ   rÇ   rÈ   r   rü   Úhasattrrá   r   r\  ra  rd  r/   r/   r/   r0   rQ  *  s   rQ  c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSystemDiskIoCountersc          
   C   sÆ   t ddƒ² tjddd˜ tjdd}|  |jd¡ |  |jd	¡ |  |jd
t	 ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  |jdt	 ¡ |  |jd¡ |  |jd¡ W d Q R X W d Q R X d S )Nz/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12z!psutil._pslinux.is_storage_deviceT)rõ   F)rB  rf   rÙ   r   r8   rg   rÚ   é   é   rC  )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³   r/   r/   r0   Ú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 d Q R X W d Q R X d S )Nz/proc/diskstatsz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11z!psutil._pslinux.is_storage_deviceT)rõ   F)rB  rf   rÙ   r   r8   rg   rÚ   rg  rh  rC  )r„   r   r   rˆ   ri  r«   rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  )r‹   r³   r/   r/   r0   Útest_emulate_kernel_2_6_full€  s    
z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc          
   C   sÆ   t ddƒ² tjddd˜ tjdd}|  |jd¡ |  |jd	t ¡ |  |j	d
¡ |  |j
dt ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W d Q R X W d Q R X d S )Nz/proc/diskstatsz   3    1   hda 1 2 3 4z!psutil._pslinux.is_storage_deviceT)rõ   F)rB  rf   rÙ   r   r8   r   )r„   r   r   rˆ   ri  r«   rj  rl  rm  ro  rq  rk  rn  rp  rr  rs  )r‹   r³   r/   r/   r0   Ú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 d Q R X W d Q R X d S )Nz/proc/diskstatsz                    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
                    z!psutil._pslinux.is_storage_deviceF)rõ   T)ÚperdiskrB  rÙ   Únvme0n1rf   Z	nvme0n1p1rg   )r„   r£   r¤   r   r   rˆ   ri  r«   r?   rj  ro  )r‹   r³   r/   r/   r0   Ú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 d Q R X W d 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 d Q R X W d Q R X d S )Nz/proc/diskstatsz                    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
                    z!psutil._pslinux.is_storage_deviceF)rõ   )rw  rB  c             S   s   | dkS )Nrx  r/   )rx   r/   r/   r0   Úis_storage_deviceÎ  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceT)r   r€   rf   rg   )r„   r£   r¤   r   r   rˆ   ri  r÷   r«   rj  ro  )r‹   r³   rz  r/   r/   r0   Ú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 d Q R X |  t|ƒt|ƒ¡ d S )Nc             S   s   | dkrdS dS )Nz/proc/diskstatsFTr/   )rý   r/   r/   r0   rþ   Þ  s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rw  zpsutil._pslinux.os.path.exists)r   r€   )rˆ   ri  r   r   r«   r?   )r‹   rþ   ZwprocfsZwsysfsr/   r/   r0   Útest_emulate_use_sysfsÝ  s    z/TestSystemDiskIoCounters.test_emulate_use_sysfsc          	   C   s6   dd„ }t jdd|d |  ttj¡ W d Q R X d S )Nc             S   s   dS )NFr/   )rý   r/   r/   r0   rþ   ê  s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existszpsutil._pslinux.os.path.existsT)r   r€   )r   r   rb  ÚNotImplementedErrorrˆ   ri  )r‹   rþ   r/   r/   r0   Útest_emulate_not_implé  s    z.TestSystemDiskIoCounters.test_emulate_not_implN)
rÆ   rÇ   rÈ   rt  ru  rv  ry  r{  r|  r~  r/   r/   r/   r0   rf  j  s   rf  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)rm   rˆ   Ú	boot_timer«   r^   )r‹   rŒ   r   r/   r/   r0   Útest_boot_timeú  s    zTestMisc.test_boot_timec          
      s  |   ¡ }t |¡ ttj |d¡dƒ$}| d¡ | d¡ | d¡ W d 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 d Q R X |  t ¡ d¡ |  ttjddƒd¡ |  tt ¡ ƒd¡ |  ttttjddƒƒd¡ W d Q R X W d t |¡ t
tƒ X |  tjd¡ d S )Nrl   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 )Nz/proczrejecting access for test)r[   rÀ   rÁ   rÂ   )rx   ry   rz   )r}   r/   r0   r~     s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   T)r  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
z/proc)Ú
get_testfnrá   Úmkdirr:   rý   rA   Úwriter   r   r   r   rˆ   rb  rÀ   rÝ   Úcpu_percentÚcpu_times_percentrc  r«   Úsumrr   ÚassertNotEqualÚshutilÚrmtree)r‹   Z	my_procfsrE   r~   r‚   Zper_cpu_percentZper_cpu_times_percentr/   )r}   r0   Útest_no_procfs_on_importÿ  sN    




(

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 d 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 d Q R X d S )Nz
/proc/statzŽ                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
                T)r  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   g      Y@)r„   r£   r¤   r¥   rˆ   r…  r©   rª   r†  rˆ  r‡  rr   r«   rÜ   Úuser)r‹   rƒ   r…  Zcpu_percent_percpur†  Zcpu_times_percent_percpur/   r/   r0   Útest_cpu_steal_decrease<  s4    

z TestMisc.test_cpu_steal_decreasec          	   C   s8   t jddd }|  ttjj¡ |js*t‚W d Q R X d S )Nzpsutil._common.openT)r   )	r   r   rb  r2  rˆ   rö   r€  r©   rª   )r‹   rƒ   r/   r/   r0   Ú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 d Q R X t jddgd&}|  t ¡ d jd¡ |jsnt‚W d Q R X t jddgd&}|  t ¡ d jd¡ |jsªt‚W d Q R X d S )	Nzpsutil._pslinux.cext.users)Ú	giampaolozpts/2z:0g   €hÕATrÙ   )rõ   r   Z	localhost)r  zpts/2z:0.0g   €hÕATrÙ   )r  zpts/2Úfoog   €hÕATrÙ   r  )r   r   r«   rˆ   ZusersÚhostr©   rª   )r‹   rƒ   r/   r/   r0   Ú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 d dt_X d S )NT)r  z/proc)r‚  rá   rƒ  rˆ   rc  rb  rÀ   r‰   rÝ   r€  rL  rD  r1  rW  ÚNoSuchProcessÚProcess)r‹   Ztdirr/   r/   r0   Ú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 d | ¡  X d S )NrÙ   c             S   s   | j S )N)Úid)rL   r/   r/   r0   Ú<lambda>   rÕ   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyrf   )r   Ústartrˆ   r”  Úthreadsr«   r?   Úsortedr–  rˆ  ÚpidZas_dictrã   ZpidsÚstop)r‹   ÚtÚprš  ÚtidÚptr/   r/   r0   Útest_issue_687“  s    
zTestMisc.test_issue_687c          	   C   s6   t ddƒ"}t t ¡ ¡st‚|js(t‚W d Q R X d S )Nz/proc/%s/statusrN   )r„   rˆ   Z
pid_existsrá   Úgetpidrª   r©   )r‹   rƒ   r/   r/   r0   Útest_pid_exists_no_proc_status¨  s    z'TestMisc.test_pid_exists_no_proc_statusN)rÆ   rÇ   rÈ   r  r‹  r  rŽ  r’  r•  r   r¢  r¤  r/   r/   r/   r0   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   rf   r&  rN   )r‘   )	r   r^   r<   rk   Úreplacerˆ   Úsensors_batteryÚpercentrŠ   )r‹   r_   Z
acpi_valuer   r/   r/   r0   Ú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 d Q R X d S )Nc                s2   |   d¡s|   d¡rt d¡S ˆ | f|ž|ŽS d S )Nz
AC0/onlinez	AC/onlineó   1)r­   ru   rw   )rx   ry   rz   )r}   r/   r0   r~   Ã  s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   T)r:   r   r   r   r«   rˆ   r§  Úpower_pluggedÚsecsleftÚPOWER_TIME_UNLIMITEDr©   rª   )r‹   r~   r‚   rƒ   r/   )r}   r0   Ú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 d 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 )Nz
AC0/onlinez	AC/onlinerN   z/statusZcharging)r­   rÀ   rÁ   rÂ   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~   Ô  s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   T)
r:   r   r   r   r«   rˆ   r§  r«  r©   rª   )r‹   r~   r‚   rƒ   r/   )r}   r0   Ú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 d Q R X d S )Nc                s2   |   d¡s|   d¡rt d¡S ˆ | f|ž|ŽS d S )Nz
AC0/onlinez	AC/onlineó   0)r­   ru   rw   )rx   ry   rz   )r}   r/   r0   r~   ä  s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   F)
r:   r   r   r   r«   rˆ   r§  r«  r©   rª   )r‹   r~   r‚   rƒ   r/   )r}   r0   Ú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 d 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 )Nz
AC0/onlinez	AC/onlinerN   z/statusZdischarging)r­   rÀ   rÁ   rÂ   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~   ó  s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   F)
r:   r   r   r   r«   rˆ   r§  r«  r©   rª   )r‹   r~   r‚   rƒ   r/   )r}   r0   Ú 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 d Q R X d S )Nc                sJ   |   d¡s|   d¡r"ttjdƒ‚n$|   d¡r6t d¡S ˆ | f|ž|ŽS d S )Nz"/sys/class/power_supply/AC0/onlinez!/sys/class/power_supply/AC/onlinerN   z#/sys/class/power_supply/BAT0/statuss   ???)r[   rÀ   rÁ   rÂ   ru   rw   )rx   ry   rz   )r}   r/   r0   r~     s    



zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   )
r:   r   r   r   r÷   rˆ   r§  r«  r©   rª   )r‹   r~   r‚   rƒ   r/   )r}   r0   Útest_emulate_power_undetermined  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc          	   C   s6   t ddƒ"}|  t ¡ jd¡ |js(t‚W d Q R X d S )Nz(/sys/class/power_supply/BAT0/energy_fullr°  r   )r„   r«   rˆ   r§  r¨  r©   rª   )r‹   rƒ   r/   r/   r0   Ú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 d Q R X W d Q R X W d Q R X d S )Nz(/sys/class/power_supply/BAT0/energy_fullrN   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‹   r/   r/   r0   Ú"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 d Q R X W d Q R X W d Q R X d S )Nz!/sys/class/power_supply/AC/onlinerN   z"/sys/class/power_supply/AC0/onlinez#/sys/class/power_supply/BAT0/status)r†   rÀ   rÁ   rÂ   r÷   rˆ   r§  r«  )r‹   r/   r/   r0   Útest_emulate_no_power'  s    z(TestSensorsBattery.test_emulate_no_powerN)rÆ   rÇ   rÈ   r   rü   r   r©  r®  r¯  r±  r²  r³  r´  r¶  r·  r/   r/   r/   r0   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 d Q R X W d 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­   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~   9  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockzbuiltins.openz__builtin__.openz
os.listdirZBAT0)rõ   )r€   )	r:   r   r   r   ZassertIsNotNonerˆ   r§  r©   rª   )r‹   r~   r‚   ZmlistdirZmopenr/   )r}   r0   Útest_it8  s    
"
z"TestSensorsBatteryEmulated.test_itN)rÆ   rÇ   rÈ   rº  r/   r/   r/   r0   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 d Q R X W d 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 )Nz/namerx   z/temp1_labelÚlabelz/temp1_inputs   30000z
/temp1_maxs   40000z/temp1_crits   50000)r­   ru   rv   r   rw   )rx   ry   rz   )r}   r/   r0   r~   P  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   z	glob.globz/sys/class/hwmon/hwmon0/temp1)rõ   rx   r   r¼  g      >@g      D@g      I@)r:   r   r   r   rˆ   Úsensors_temperaturesr«   r¼  r  ÚhighÚcritical)r‹   r~   r‚   Útempr/   )r}   r0   Ú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 d Q R X W d 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_temps   50000rÀ  s   30000Z0_typer¿  Útyperx   )r­   ru   rw   rv   r   )rx   ry   rz   )r}   r/   r0   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_tempr/   )rý   r/   r/   r0   Ú	glob_mockw  s    zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockzbuiltins.openz__builtin__.open)r€   z	glob.globT)r   r€   rx   r   rN   g      >@g      I@)r:   r   r   r   rˆ   r½  r«   r¼  r  r¾  r¿  )r‹   r~   rÃ  r‚   rÀ  r/   )r}   r0   Útest_emulate_class_thermalj  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)rÆ   rÇ   rÈ   rÁ  rÄ  r/   r/   r/   r0   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 d Q R X W d 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 )Nz/namerx   z/fan1_labelr¼  z/fan1_inputÚ2000)r­   ru   rv   r   )rx   ry   rz   )r}   r/   r0   r~   ’  s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   z	glob.globz/sys/class/hwmon/hwmon2/fan1)rõ   rx   r   r¼  iÐ  )	r:   r   r   r   rˆ   Zsensors_fansr«   r¼  r  )r‹   r~   r‚   Zfanr/   )r}   r0   r  ‘  s    
z!TestSensorsFans.test_emulate_dataN)rÆ   rÇ   rÈ   r  r/   r/   r/   r0   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 )Nro   )rá   rë   r/   r/   r/   r0   r—  ·  rÕ   z3TestProcess.test_memory_full_info.<locals>.<lambda>z'%s' not in retgš™™™™™¹?F)Zgroupedc             S   s   g | ]}|j |j ‘qS r/   )Zprivate_dirtyZprivate_clean)rO   rL   r/   r/   r0   rQ   ½  s    z5TestProcess.test_memory_full_info.<locals>.<listcomp>i   )r‘   c             S   s   g | ]
}|j ‘qS r/   )Úpss)rO   rL   r/   r/   r0   rQ   À  s    c             S   s   g | ]
}|j ‘qS r/   )rÓ   )rO   rL   r/   r/   r0   rQ   Â  s    )r‚  r£   r¤   Zpyrunr   rˆ   r”  rœ  ÚtimeÚsleepÚmemory_full_infoÚmemory_mapsrŠ   Úussr‡  rÈ  rÓ   )r‹   ÚtestfnÚsrcZsprocrŸ  rÄ   Úmapsr/   r/   r0   Útest_memory_full_info®  s     


z!TestProcess.test_memory_full_infoc          	   C   sp   t dt ¡  t d¡ ¡ ƒJ}t ¡ }| ¡ }|j	s8t
‚|  |jd¡ |  |jd¡ |  |jd¡ W d Q R X d S )Nz/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  i   i <  )r„   rá   r£  r£   r¤   r¥   rˆ   r”  rË  r©   rª   r«   rÍ  rÈ  rÓ   )r‹   rƒ   rŸ  rÄ   r/   r/   r0   Ú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 d Q R X t|dƒ |  ||ƒjd¡ W d Q R X t|dƒ |  ||ƒjd¡ W d Q R X t|dƒ |  ||ƒjd¡ W d Q R X t|dƒ |  ||ƒjd¡ W d Q R X t|dƒ |  ||ƒjd¡ W d Q R X trft|ƒ t|d	ƒ |  ||ƒjd¡ W d Q R X t|ƒ t|d
ƒ |  ||ƒjd¡ W d Q R X d S )Nc             S   s\   t  ¡ }t ¡ t }x:x4| ¡ D ](}|jtj | ¡kr:|S t ¡ |kr P q W qW tdƒ‚d S )Nztimeout looking for test file)	rˆ   r”  rÉ  r	   Ú
open_filesrý   rá   Úabspathr2  )ÚfnamerŸ  Z	giveup_atÚfiler/   r/   r0   Úget_test_fileé  s    
z7TestProcess.test_open_files_mode.<locals>.get_test_filer´   r!  r»   zr+zw+za+rL   zx+)r‚  r:   r«   Úmoder   r   )r‹   r×  rÎ  r/   r/   r0   Ú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 d Q R X tjdt	t
jdƒd }|  | ¡ g ¡ |js¢t‚W d Q R X W d Q R X d S )Nr´   zlen(ret) != %izpsutil._pslinux.os.readlinkrN   )r€   )rˆ   r”  rÓ  r:   r‚  r   r?   r   r   ÚOSErrorrÁ   rÂ   rª   r©   ÚEINVALr«   )r‹   rŸ  Úfilesrƒ   r/   r/   r0   Ú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 d Q R X W d Q R X d S )Nr´   zlen(ret) != %izbuiltins.openz__builtin__.openrN   )r€   )rˆ   r”  rÓ  r:   r‚  r   r?   r   r   r   rÀ   rÁ   rÂ   rª   r©   )r‹   rŸ  rÜ  r‚   rƒ   r/   r/   r0   Ú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 d Q R X d S )Nz)psutil._pslinux._psposix.get_terminal_map)rõ   )r   r   r÷   rˆ   rö   r”  rá   r£  Úterminalr©   rª   )r‹   rƒ   r/   r/   r0   Ú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 d Q R X t tdƒ¡}tjd|dd&}|  | ¡ dddg¡ |j	st
‚W d Q R X d S )	Nzfoo bar zpsutil._common.openT)rõ   r   r  Úbarz	foo bar  rN   )rˆ   r”  ru   rv   r   r   r   r«   Úcmdliner©   rª   )r‹   rŸ  rú   rƒ   r/   r/   r0   Ú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 d Q R X t tdƒ¡}tjd|dd&}|  | ¡ dddg¡ |j	st
‚W d Q R X d S )	Nzfoo bar zpsutil._common.openT)rõ   r   r  rá  z	foo bar  rN   )rˆ   r”  ru   rv   r   r   r   r«   râ  r©   rª   )r‹   rŸ  rú   rƒ   r/   r/   r0   Ú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 d Q R X d S )Nzfoo bar zpsutil._common.openT)rõ   r   r  rá  )rˆ   r”  ru   rv   r   r   r   r«   râ  r©   rª   )r‹   rŸ  rú   rƒ   r/   r/   r0   Útest_cmdline_mixed_separators\  s    z)TestProcess.test_cmdline_mixed_separatorsc          	   C   sF   t jddd. |  t ¡  ¡ d¡ |  t ¡  ¡ d¡ W d Q R X d S )Nzpsutil._pslinux.os.readlinkz/home/foo (deleted))rõ   z	/home/foo)r   r   r«   rˆ   r”  ÚexeÚcwd)r‹   r/   r/   r0   Ú!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 d Q R X ‡ fdd„}tj||d |  
tjt ¡ j¡ W d Q R X d S )Nc                s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S )Nz/proc/%s/taskrN   )r[   rá   r£  rÀ   rÁ   rÂ   )rx   ry   rz   )r}   r/   r0   r~   q  s    z2TestProcess.test_threads_mocked.<locals>.open_mockzbuiltins.openz__builtin__.open)r€   c                s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S )Nz/proc/%s/taskrN   )r[   rá   r£  rÀ   rÁ   ÚEPERM)rx   ry   rz   )r}   r/   r0   r~   €  s    )r:   r   r   r   rˆ   r”  rš  r©   rª   r«   rb  ÚAccessDenied)r‹   r~   r‚   rƒ   r³   r/   )r}   r0   Ú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 d Q R X W d Q R X W d Q R X d S )	Nzpsutil._pslinux.readlinkrN   )r€   zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsF)rõ   )r   r   rÚ  rÁ   rÂ   rˆ   rê  r”  ræ  r©   rª   r«   rb  ÚZombieProcess)r‹   r  r  r³   r/   r/   r0   Útest_exe_mocked‰  s    


zTestProcess.test_exe_mockedc          
   C   sZ   t dt ¡  ttjdƒƒ6}t ¡ }|  t	¡ | 
¡  W d Q R X |jsLt‚W d Q R X d S )Nz/proc/%s/smapsrN   )r†   rá   r£  rÀ   rÁ   rÂ   rˆ   r”  rb  r   rÌ  r©   rª   )r‹   rƒ   rŸ  r/   r/   r0   Útest_issue_1014ž  s    
zTestProcess.test_issue_1014znot supportedc          
   C   sŠ   t jdttjdƒdD}t ¡ }| ¡  |  tj	¡}| 
tj¡ W d Q R X |jsVt‚W d Q R X |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitrN   )r€   )r   r   rÚ  rÁ   ZENOSYSrˆ   r”  rx   rb  rì  ZrlimitZRLIMIT_NOFILEr©   rª   r«   Ú	exceptionrœ  )r‹   rƒ   rŸ  r…   r/   r/   r0   Útest_rlimit_zombie©  s    zTestProcess.test_rlimit_zombiec          
   C   s†   t jdttjdƒd@}t ¡ }| ¡  |  tj	¡}| 
¡  W d Q R X |jsRt‚W d Q R X |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.os.readlinkrN   )r€   )r   r   rÚ  rÁ   rÂ   rˆ   r”  rx   rb  rì  rç  r©   rª   r«   rï  rœ  )r‹   rƒ   rŸ  r…   r/   r/   r0   Ú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 d Q R X d S )Nr   )ÚCLOCK_TICKSr¹  z(cat)ÚZÚ1Ú2Ú3Ú4Ú5Ú6Ú7rj   z/proc/%s/statÚcatrf   rÚ   rÙ   r   r8   rg   rg  )r¹   rò  rA   r¥   r„   rá   r£  rˆ   r”  r«   rx   ÚstatusÚSTATUS_ZOMBIEÚppidZcreate_timer€  rÝ   rŒ  ÚsystemÚchildren_userÚchildren_systemZiowaitZcpu_num)r‹   rò  ry   r{   rŸ  Zcpur/   r/   r0   Útest_stat_file_parsingÃ  st    z"TestProcess.test_stat_file_parsingc          	   C   sè   t dt ¡  t d¡ ¡ ƒÂ t ¡ }|  | 	¡ j
d¡ |  | 	¡ jd¡ |  | ¡ d¡ | ¡ }|  |jd¡ |  |jd¡ |  |jd¡ | ¡ }|  |jd	¡ |  |jd
¡ |  |jd¡ |  |j ¡ ttddƒƒ¡ W d Q R X d S )Nz/proc/%s/statusa                  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   rh  )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Ÿ  r	  r  r/   r/   r0   Útest_status_file_parsing  s"    
z$TestProcess.test_status_file_parsingN)rÆ   rÇ   rÈ   r   rÑ  rÒ  r   rü   r   rÙ  rÝ  rÞ  rà  rã  rä  rå  rè  rë  rí  rî  r   rð  rñ  r  r  r/   r/   r/   r0   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 )N)rˆ   r”  Úproc)Úclsr/   r/   r0   Ú
setUpClass%  s    z#TestProcessAgainstStatus.setUpClassc          
   C   s|   t j d| jj ¡^}xJ|D ]B}| ¡ }| |¡r| d¡d }yt|ƒS  t	k
r\   |S X qW t	d| ƒ‚W d Q R X d S )Nz/proc/%s/statusú	rÙ   zcan't find %r)
rˆ   Ú_psplatformÚ	open_textr  rœ  rk   r[   Ú	partitionr^   r=   )r‹   Z	linestartrE   rF   rè   r/   r/   r0   Úread_status_file)  s    


z)TestProcessAgainstStatus.read_status_filec             C   s    |   d¡}|  | j ¡ |¡ d S )NzName:)r  r«   r  rx   )r‹   rè   r/   r/   r0   Ú	test_name6  s    
z"TestProcessAgainstStatus.test_namec             C   sH   |   d¡}|| d¡d | d¡… }| dd¡}|  | j ¡ |¡ d S )NzState:ú(rf   ú)rj   ræ   )r  ÚfindÚrfindr¦  r«   r  rü  )r‹   rè   r/   r/   r0   Útest_status:  s    
z$TestProcessAgainstStatus.test_statusc             C   s    |   d¡}|  | j ¡ |¡ d S )NzPPid:)r  r«   r  rþ  )r‹   rè   r/   r/   r0   Ú	test_ppid@  s    
z"TestProcessAgainstStatus.test_ppidc             C   s    |   d¡}|  | j ¡ |¡ d S )NzThreads:)r  r«   r  r  )r‹   rè   r/   r/   r0   Útest_num_threadsD  s    
z)TestProcessAgainstStatus.test_num_threadsc             C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:rf   r8   )r  rq   rr   r^   r<   r«   r  r	  )r‹   rè   r/   r/   r0   Ú	test_uidsH  s    
z"TestProcessAgainstStatus.test_uidsc             C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzGid:rf   r8   )r  rq   rr   r^   r<   r«   r  r  )r‹   rè   r/   r/   r0   Ú	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  r  r  r  )r‹   rè   r/   r/   r0   Ú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 )NzCpus_allowed_list:ræ   rf   )
r  r¯   rr   r^   r<   r«   r  Zcpu_affinityr  r>   )r‹   rè   Zmin_Zmax_r/   r/   r0   Útest_cpu_affinityY  s
    
z*TestProcessAgainstStatus.test_cpu_affinityc          	   C   sR   |   d¡}t d¡}| jj ¡  W d Q R X dt|ƒkrD|jrNt‚n
|jsNt‚d S )NzCpus_allowed_list:zpsutil._pslinux.per_cpu_timesræ   )	r  r   r   r  r  r  r¯   r©   rª   )r‹   rè   rƒ   r/   r/   r0   Ú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'  r/   r/   r/   r0   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 d Q R X d S )Nzos.readlinkzfoo (deleted))rõ   rá  r  )r   r   r«   rˆ   r  Úreadlinkr©   rª   )r‹   rƒ   r/   r/   r0   Útest_readlinkr  s    zTestUtils.test_readlinkc          	   C   sx   |   ¡ }t|dƒ}| d¡ W d 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??rá  )Úfallback)r‚  r:   r„  r«   rˆ   r  rû  )r‹   rÎ  rE   r/   r/   r0   Útest_catw  s    zTestUtils.test_catN)rÆ   rÇ   rÈ   r,  r0  r/   r/   r/   r0   r*  o  s   r*  Ú__main__)Úrun_from_name)]r(  Ú
__future__r   r\   r%   rÁ   Úglobru   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ý   rÔ  ÚdirnameÚ__file__ÚHEREr*   ZSIOCGIFCONFrS   r2   r4   rm  ZEMPTY_TEMPERATURESr1   r3   r5   rK   rV   re   ri   rm   rs   Úcontextmanagerr„   r†   rü   r‡   rÉ   rØ   rå   rÿ   r  r  r   r%  r/  r8  rE  rQ  rf  r  r¥  r¸  r»  rÅ  rÇ  r  r*  rÆ   Zpsutil.tests.runnerr2  r/   r/   r/   r0   Ú<module>   sä   	  .]? )- ?  ?
}A  rR
