U
    (Ûcq ã                   @   sb  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ erÞddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ej1 2ej1 3e4¡¡Z5d Z6d!Z7d"Z8d#Z9d$Z:erd%Z;e d&¡ Z<d'd(„ Z=d)d*„ Z>d+d,„ Z?d-d.„ Z@d/d0„ ZAd1d2„ ZBd3d4„ ZCd5d6„ ZDd7d8„ ZEejFd9d:„ ƒZGejFd;d<„ ƒZHe Ie d=¡G d>d?„ d?e"ƒƒZJe Ie d=¡G d@dA„ dAe"ƒƒZKe Ie d=¡G dBdC„ dCe"ƒƒZLe Ie d=¡G dDdE„ dEe"ƒƒZMe Ie d=¡G dFdG„ dGe"ƒƒZNe Ie d=¡G dHdI„ dIe"ƒƒZOe Ie d=¡G dJdK„ dKe"ƒƒZPe Ie d=¡G dLdM„ dMe"ƒƒZQe Ie d=¡G dNdO„ dOe"ƒƒZRe Ie d=¡G dPdQ„ dQe"ƒƒZSe Ie d=¡G dRdS„ dSe"ƒƒZTe Ie d=¡G dTdU„ dUe"ƒƒZUe Ie d=¡G dVdW„ dWe"ƒƒZVe Ie d=¡G dXdY„ dYe"ƒƒZWe Ie d=¡G dZd[„ d[e"ƒƒZXe Ie d=¡G d\d]„ d]e"ƒƒZYe Ie d=¡e Ie d^¡G d_d`„ d`e"ƒƒƒZZe Ie d=¡G dadb„ dbe"ƒƒZ[e Ie d=¡G dcdd„ dde"ƒƒZ\e Ie d=¡G dedf„ dfe"ƒƒZ]e Ie d=¡G dgdh„ dhe"ƒƒZ^e Ie d=¡G didj„ dje"ƒƒZ_e Ie d=¡G dkdl„ dle"ƒƒZ`eadmkr^ddnlbmcZc ece4ƒ dS )ozLinux specific tests.é    )ÚdivisionN)ÚLINUX)ÚPY3)ÚFileNotFoundError)Ú
basestring)Úu)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)Ú
HAS_RLIMIT)ÚPYPY)ÚTOLERANCE_DISK_USAGE)ÚTOLERANCE_SYS_MEM)ÚPsutilTestCase)Ú
ThreadTask)Ú
call_until)Úmock)Úreload_module)Úretry_on_failure)Úsafe_rmpath)Úsh)Úskip_on_not_implemented)Úwhich)ÚCLOCK_TICKS)ÚRootFsDeviceFinder)Úcalculate_avail_vmem)Úopen_binaryi‰  i‰  i'‰  i‰  i‰  i   z/sys/class/hwmon/hwmon*c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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© r5   ú;/tmp/pip-unpacked-wheel-l83rk7k5/psutil/tests/test_linux.pyÚget_ipv4_addressL   s    


þ þÿr7   c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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.   ÚSIOCGIFNETMASKr0   r1   r2   r5   r5   r6   Úget_ipv4_netmaskY   s    


þ þÿr9   c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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.   ÚSIOCGIFBRDADDRr0   r1   r2   r5   r5   r6   Úget_ipv4_broadcastf   s    


þ þÿr;   c              	   C   sÜ   t ddƒN}g }| ¡ D ]"}| ¡ }|d | kr| |¡ qt|ƒdkrTtd|  ƒ‚W 5 Q R X tdt|ƒƒD ]j}|| d }g }tdt|ƒdƒD ]}| |||d … ¡ qd |¡}	t 	tj
|	¡}
t tj
|
¡||< ql|S )Nz/proc/net/if_inet6Úrtéÿÿÿÿr   zcould not find interface %ré   ú:)ÚopenÚ	readlinesÚsplitÚappendÚlenÚ
ValueErrorÚrangeÚjoinr'   Ú	inet_ptonÚAF_INET6Ú	inet_ntop)r3   ÚfZ
all_fieldsÚlineÚfieldsÚiZunformattedÚgroupsÚjÚ	formattedÚpackedr5   r5   r6   Úget_ipv6_addressess   s"    
rS   c              
      s²   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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 ©Nr5   ©Úxr5   r5   r6   Úord“   s    zget_mac_address.<locals>.ordÚ c                    s   g | ]}d ˆ |ƒ ‘qS )z%02x:r5   )Ú.0Úchar©rW   r5   r6   Ú
<listcomp>˜   s     z#get_mac_address.<locals>.<listcomp>é   r$   r=   )r%   r   r&   r'   r(   r)   r*   r+   r-   r.   ÚSIOCGIFHWADDRr0   r1   Ú__builtin__rW   rG   )r3   r%   r4   Úinfor_   r5   r[   r6   Úget_mac_address‰   s     
  
ÿ
ra   c                  C   s€   t ddgddid} |  d¡}|D ]F}| d¡r"| ¡ \}}}}t dd¡}|t|ƒt|ƒt|ƒƒ  S q"td	d |¡ ƒ‚d
S )zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    Úfreeú-bÚLANGúC.UTF-8©ÚenvÚ
ZSwapztotal used freez&can't find 'Swap' in 'free' output:
%sN)r   rB   Ú
startswithÚcollectionsÚ
namedtupleÚintrE   rG   )ÚoutÚlinesrL   Ú_ÚtotalÚusedrb   Úntr5   r5   r6   Ú	free_swap›   s    

ÿrs   c                  C   sŠ   t ddgddid} |  d¡}|D ]P}| d¡r"dd	„ | ¡ d
d… D ƒ\}}}}t dd¡}|||||| ƒ  S q"tdd |¡ ƒ‚dS )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rb   rc   rd   re   rf   rh   ZMemc                 S   s   g | ]}t |ƒ‘qS r5   )rl   ©rY   rV   r5   r5   r6   r\   ·   s     z free_physmem.<locals>.<listcomp>é   é   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   rB   ri   rj   rk   rE   rG   )rm   rn   rL   rp   rq   rb   Úsharedrr   r5   r5   r6   Úfree_physmemª   s    

ÿ
 ÿÿrx   c                 C   sZ   t ddgddid}| d¡D ]*}| ¡ }| |krt| d¡d ƒ  S qtd	|  ƒ‚d S )
NÚvmstatz-srd   re   rf   rh   ú r   z can't find %r in 'vmstat' output)r   rB   Ústriprl   rE   )Ústatrm   rL   r5   r5   r6   ry   ¿   s    ry   c                  C   s>   t ddgƒ ¡ } d| kr"t d¡‚ttt|  ¡ d  d¡ƒƒS )Nrb   z-VÚUNKNOWNzcan't determine free versionr=   Ú.)r   r{   ÚunittestÚSkipTestÚtupleÚmaprl   rB   )rm   r5   r5   r6   Ú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 rT   )r   Ú
isinstancer   ÚioÚStringIOÚBytesIO©ÚnameÚargsÚkwargs©ÚcontentÚfor_pathÚ	orig_openr5   r6   Ú	open_mockÔ   s    

z$mock_open_content.<locals>.open_mockúbuiltins.openú__builtin__.openT©ÚcreateÚside_effectN©r@   r   r   Úpatch)rŽ   r   r   Úpatch_pointÚmr5   rŒ   r6   Úmock_open_contentÏ   s
    rš   c              	   #   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 rT   r5   rˆ   ©ÚexcrŽ   r   r5   r6   r   ë   s    z&mock_open_exception.<locals>.open_mockr‘   r’   Tr“   Nr–   )rŽ   rœ   r   r˜   r™   r5   r›   r6   Úmock_open_exceptionæ   s
    r   z
LINUX onlyc                   @   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}| j||td d S )Nztotal memoryé   ©Údelta)ry   ÚpsutilÚvirtual_memoryrp   ÚassertAlmostEqualr   ©ÚselfZvmstat_valueÚpsutil_valuer5   r5   r6   Ú
test_totalÿ   s    
  ÿz"TestSystemVirtualMemory.test_totalc                 C   sL   t ƒ dk r|  d¡‚tƒ }|j}t ¡ j}| j||td|||jf d d S )N)é   r©   é   zold free versionú	%s %s 
%s©r¡   Úmsg)	rƒ   ZskipTestrx   rq   r¢   r£   r¤   r   Úoutput©r¦   rb   Ú
free_valuer§   r5   r5   r6   Ú	test_used  s    


  þz!TestSystemVirtualMemory.test_usedc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzfree memoryrŸ   r    )ry   r¢   r£   rb   r¤   r   r¥   r5   r5   r6   Ú	test_free  s    
  ÿz!TestSystemVirtualMemory.test_freec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzbuffer memoryrŸ   r    )ry   r¢   r£   Úbuffersr¤   r   r¥   r5   r5   r6   Útest_buffers  s    
  ÿz$TestSystemVirtualMemory.test_buffersc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzactive memoryrŸ   r    )ry   r¢   r£   Úactiver¤   r   r¥   r5   r5   r6   Útest_active%  s    
  ÿz#TestSystemVirtualMemory.test_activec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzinactive memoryrŸ   r    )ry   r¢   r£   Úinactiver¤   r   r¥   r5   r5   r6   Ú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¬   )	rx   rw   r   r€   r¢   r£   r¤   r   r®   r¯   r5   r5   r6   Útest_shared3  s    

  þz#TestSystemVirtualMemory.test_sharedc                 C   sl   t ddgƒ}| d¡}d|d kr.t d¡‚n:t|d  ¡ d ƒ}t ¡ j}| j||t	d	|||f d
 d S )Nrb   rc   rh   Ú	availabler   z(free does not support 'available' columnru   r=   r«   r¬   )
r   rB   r   r€   rl   r¢   r£   rº   r¤   r   )r¦   rm   rn   r°   r§   r5   r5   r6   Ú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Úalwaysru   r   úpsutil/_pslinux.pyz#memory stats couldn't be determinedÚcachedrw   rµ   r·   r³   rº   )rš   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterr¢   r£   ÚcalledÚAssertionErrorÚassertEqualrD   ÚfilenameÚendswithÚassertInÚstrÚmessagerÁ   rµ   r·   rw   r³   rº   Úslab©r¦   r™   ÚwsÚretÚwr5   r5   r6   Útest_warnings_on_missesM  s:    þ

 ÿz/TestSystemVirtualMemory.test_warnings_on_missesc              	   C   s~   i }t dƒ0}|D ]$}| ¡ }t|d ƒd ||d < qW 5 Q R X t|ƒ}d|krz|d }t|| ƒ| d }|  |d¡ d S )Nr¼   ru   rŸ   r   s   MemAvailable:éd   r    )r   rB   rl   r   ÚabsZ
assertLess)r¦   ZmemsrK   rL   rM   ÚaÚbZdiff_percentr5   r5   r6   Útest_avail_old_percentt  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Ñ   r5   r5   r6   Ú test_avail_old_comes_from_kernel„  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Ñ   r5   r5   r6   Ú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Ô   r5   r5   r6   Ú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   r5   r6   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Ê   rp   rb   r³   rÁ   rw   rµ   r·   rÐ   rº   )r¦   r   r˜   r™   Zmemr5   rå   r6   Ú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è   r5   r5   r5   r6   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)rK   Údatar5   r5   r6   Úmeminfo_has_swap_info*  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   s"   t ƒ j}t ¡ j}| j||tdS ©Nr    )rs   rp   r¢   Úswap_memoryr¤   r   ©r¦   r°   r§   r5   r5   r6   r¨   1  s    
  ÿzTestSystemSwapMemory.test_totalc                 C   s"   t ƒ j}t ¡ j}| j||tdS rð   )rs   rq   r¢   rñ   r¤   r   rò   r5   r5   r6   r±   7  s    
  ÿzTestSystemSwapMemory.test_usedc                 C   s"   t ƒ j}t ¡ j}| j||tdS rð   )rs   rb   r¢   rñ   r¤   r   rò   r5   r5   r6   r²   >  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¿   ru   r   rÀ   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r—   rÅ   rÆ   rÇ   r¢   rñ   rÈ   rÉ   rÊ   rD   rË   rÌ   rÍ   rÎ   rÏ   ÚsinÚsoutrÑ   r5   r5   r6   Útest_missing_sin_soutE  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¿   ru   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Ê   rD   rË   rÌ   rÍ   rÎ   rÏ   rõ   rö   rÑ   r5   r5   r6   Útest_no_vmstat_mockedT  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Ê   rp   r¤   rb   r   )r¦   r™   ÚswapZcextro   rp   rb   Zunit_multiplierr5   r5   r6   Útest_meminfo_against_sysinfog  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™   r5   r5   r6   Ú#test_emulate_meminfo_has_no_metricsw  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)ré   rê   rë   Ústaticmethodrï   r¨   r   r±   r²   r÷   rø   rû   rþ   r5   r5   r5   r6   rì   '  s   


rì   c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemCPUTimesc                 C   s    t  ¡ j}t dt ¡ d ¡d }ttt	| 
d¡ƒƒ}|dkrL|  d|¡ n|  d|¡ |dkrn|  d|¡ n|  d|¡ |d	kr|  d
|¡ n|  d
|¡ d S )Nz\d+\.\d+\.\d+é   r   r~   )r  é   é   Ústeal)r  r  r$   Zguest)r©   r  r   Z
guest_nice)r¢   Ú	cpu_timesÚ_fieldsÚreÚfindallÚosÚunamer   r‚   rl   rB   rÍ   ÚassertNotIn)r¦   rM   Z
kernel_verZkernel_ver_infor5   r5   r6   Útest_fieldsˆ  s    
zTestSystemCPUTimes.test_fieldsN)ré   rê   rë   r  r5   r5   r5   r6   r   …  s   r   c                   @   s„   e Zd Ze ej d¡ d¡dd„ ƒZe ej d¡ d¡dd„ ƒZ	e e
d	ƒ d
¡dd„ ƒZe e
dƒ d¡dd„ ƒZdd„ ZdS )ÚTestSystemCPUCountLogicalú/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc              	   C   sV   t dƒ}| ¡  ¡ }W 5 Q R X dt|ƒkrRt| d¡d ƒd }|  t ¡ |¡ d S )Nr  ú-ru   )	r@   rí   r{   rÎ   rl   rB   rÊ   r¢   Ú	cpu_count)r¦   rK   Úvaluer5   r5   r6   Útest_against_sysdev_cpu_online  s
    
z8TestSystemCPUCountLogical.test_against_sysdev_cpu_onlineú/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc                 C   s0   t  d¡}tdd„ |D ƒƒ}|  t ¡ |¡ d S )Nr  c                 S   s    g | ]}t  d |¡dk	r|‘qS )zcpu\d+$N)r  Úsearchrt   r5   r5   r6   r\   ª  s      zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r	  ÚlistdirrD   rÊ   r¢   r  )r¦   ZlsÚcountr5   r5   r6   Útest_against_sysdev_cpu_num¦  s    
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablec                 C   s$   t tdƒƒ}|  tjdd|¡ d S )Nznproc --allT©Úlogical)rl   r   rÊ   r¢   r  )r¦   Únumr5   r5   r6   Útest_against_nproc­  s    z,TestSystemCPUCountLogical.test_against_nprocÚlscpuúlscpu utility not availablec                 C   s8   t dƒ}tdd„ | d¡D ƒƒ}|  tjdd|¡ d S )Núlscpu -pc                 S   s   g | ]}|  d ¡s|‘qS )ú#©ri   rt   r5   r5   r6   r\   µ  s     
 z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rh   Tr  )r   rD   rB   rÊ   r¢   r  )r¦   rm   r  r5   r5   r6   Ú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ü   )Úpsutil._pslinuxÚ_pslinuxZcpu_count_logicalr   r—   rE   rÊ   rÈ   rÉ   ÚassertIsNoneZ
call_countZ	call_argsr@   rí   r…   r‡   rš   )r¦   r¢   Úoriginalr™   rK   Zcpuinfo_dataÚ	fake_filer5   r5   r6   Útest_emulate_fallbacks¸  s2    
 ÿ
 
 ÿz0TestSystemCPUCountLogical.test_emulate_fallbacksN)ré   rê   rë   r   ÚskipIfr	  ÚpathÚexistsr  r  r   r  r!  r-  r5   r5   r5   r6   r  š  s   ÿ
ÿ


r  c                   @   s6   e Zd Ze edƒ d¡dd„ ƒZdd„ Zdd„ Zd	S )
ÚTestSystemCPUCountCoresr  r  c                 C   s\   t dƒ}tƒ }| d¡D ]&}| d¡s| d¡}| |d ¡ q|  tjddt|ƒ¡ d S )Nr  rh   r  ú,ru   Fr  )	r   ÚsetrB   ri   ÚaddrÊ   r¢   r  rD   )r¦   rm   Zcore_idsrL   rM   r5   r5   r6   r!  Ý  s    

z*TestSystemCPUCountCores.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_coresr   r—   rÈ   rÉ   rÊ   )r¦   Zmeth_1r™   Zmeth_2r5   r5   r6   Útest_method_2ç  s    

z%TestSystemCPUCountCores.test_method_2c              
   C   s\   t jdg d0}t jddd}|  tj ¡ ¡ W 5 Q R X W 5 Q R X |jsNt‚|jsXt‚d S )Nr5  r6  ró   Trô   )r   r—   r*  r¢   r)  r7  rÈ   rÉ   )r¦   Úm1Úm2r5   r5   r6   Útest_emulate_noneï  s
    $
z)TestSystemCPUCountCores.test_emulate_noneN)	ré   rê   rë   r   r.  r   r!  r8  r;  r5   r5   r5   r6   r1  Ú  s   
	r1  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_existsr5   r6   Úpath_exists_mocký  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockúos.path.existsT)r•   r”   )r	  r/  r0  r   r—   r¢   Úcpu_freqrÉ   )r¦   rA  r5   r@  r6   Útest_emulate_use_second_fileú  s    ÿz3TestSystemCPUFrequency.test_emulate_use_second_filec              	      s°   ‡ fdd„}t jj‰ z‚tjd|dj ttjƒ t ¡ }|s@t	‚|  
|jd¡ |  
|jd¡ tjddD ] }|  
|jd¡ |  
|jd¡ qhW 5 Q R X W 5 ttjƒ ttƒ X d S )Nc                    s   |   d¡rdS ˆ | ƒS d S )Nz/sys/devices/system/cpu/Fr   r?  ©Zos_path_existsr5   r6   rA    s    
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockrB  r"  ç        T©Zpercpu)r	  r/  r0  r   r¢   r)  r   r—   rC  rÉ   rÊ   ÚmaxÚmin)r¦   rA  rÓ   Úfreqr5   rE  r6   Ú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_freqr>  ó   500000ú/scaling_min_freqó   600000ú/scaling_max_freqs   700000r$  s   cpu MHz		: 500©rÌ   ri   r…   r‡   rˆ   rå   r5   r6   r   #  s    
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr‘   r’   r"  rB  Tr6  ç     @@rF  ç     À‚@g     à…@©
r@   r   r   r—   r¢   rC  rÊ   ÚcurrentrI  rH  ©r¦   r   r˜   rJ  r5   rå   r6   Ú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 )NrL  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rN  ó   200000rP  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rM  rO  r$  s   cpu MHz		: 100
cpu MHz		: 400rQ  )r‰   rŠ   r‹   Únrå   r5   r6   r   B  s8    
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr‘   r’   r"  rB  Tr6  ú!psutil._pslinux.cpu_count_logicalr  rG  r   ç      Y@rF  g      i@g     Àr@ru   g      y@rR  rS  rT  rV  r5   rå   r6   Útest_emulate_multi_cpu@  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 )NrL  rX   z/cpuinfo_cur_freqrX  r$  s   cpu MHz		: 200)rÌ   rá   râ   rã   r…   r‡   rˆ   rå   r5   r6   r   q  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr‘   r’   r"  rB  Tr6  rZ  ru   éÈ   )r@   r   r   r—   r¢   rC  rÊ   rU  rV  r5   rå   r6   Ú%test_emulate_no_scaling_cur_freq_filen  s    
ÿz<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)ré   rê   rë   r   r.  r   rD  rK  rW  r\  r^  r5   r5   r5   r6   r<  ÷  s   



-r<  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemCPUStatsc                 C   s&   t dƒ}t ¡ j}| j||dd d S )Nzcontext switcheséô  r    )ry   r¢   Ú	cpu_statsZctx_switchesr¤   r¥   r5   r5   r6   Útest_ctx_switchesˆ  s    
z$TestSystemCPUStats.test_ctx_switchesc                 C   s&   t dƒ}t ¡ j}| j||dd d S )NÚ
interruptsr`  r    )ry   r¢   ra  rc  r¤   r¥   r5   r5   r6   Útest_interrupts  s    
z"TestSystemCPUStats.test_interruptsN)ré   rê   rë   rb  rd  r5   r5   r5   r6   r_  …  s   r_  c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgr=  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   ru   r    r  )r¢   Ú
getloadavgr@   rí   rB   r¤   Úfloat)r¦   r§   rK   Z
proc_valuer5   r5   r6   Útest_getloadavg–  s    zTestLoadAvg.test_getloadavgN)ré   rê   rë   r   r.  r   ri  r5   r5   r5   r6   re  “  s   re  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Ê   Úaddressra   r'   r(   r7   Únetmaskr9   Ú	broadcastr;   rI   rB   rÍ   rS   )r¦   r‰   ÚaddrsÚaddrrn  r5   r5   r6   Útest_ips©  s    
ÿzTestSystemNetIfAddrs.test_ipsN)ré   rê   rë   rs  r5   r5   r5   r6   rj  ¦  s   rj  c                   @   sH   e Zd Ze edƒ d¡dd„ ƒZdd„ Ze edƒ d¡dd„ ƒZd	S )
ÚTestSystemNetIfStatsÚifconfigúifconfig utility not availablec              	   C   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 %sZRUNNING)r­   z(?i)MTU[: ](\d+)r   )r¢   Únet_if_statsrl  r   ÚRuntimeErrorrÊ   ZisupÚmturl   r  r  )r¦   r‰   Ústatsrm   r5   r5   r6   Ú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/mtur<   )	r¢   rx  rl  r@   rÊ   rz  rl   rí   r{   )r¦   r‰   r{  rK   r5   r5   r6   Útest_mtuß  s    zTestSystemNetIfStats.test_mtuc              	   C   s  d}t  ¡  ¡ D ]æ\}}ztd| ƒ}W n tk
r<   Y qX t d|¡}|rœt| ¡ ƒdkrœ|d7 }t	| 
d¡ ¡  d¡ƒ}t	|j d¡ƒ}|  ||¡ qt d|¡}|rt| ¡ ƒdkr|d7 }t	| 
d¡ ¡  ¡ ƒ}t	|j d¡ƒ}|  ||¡ q|s|  d	¡‚d S )
Nr   rw  zflags=(\d+)?<(.*?)>r  ru   r2  z(.*)  MTU:(\d+)  Metric:(\d+)r©   zno matches were found)r¢   rx  rl  r   ry  r  r  rD   rO   r3  ÚgroupÚlowerrB   ÚflagsrÊ   Úfail)r¦   Zmatches_foundr‰   r{  rm   ÚmatchZifconfig_flagsZpsutil_flagsr5   r5   r6   Ú
test_flagsä  s(    zTestSystemNetIfStats.test_flagsN)	ré   rê   rë   r   r.  r   r|  r}  rƒ  r5   r5   r5   r6   rt  Ð  s
   
rt  c                   @   s,   e Zd Ze edƒ d¡eƒ dd„ ƒƒZdS )ÚTestSystemNetIOCountersru  rv  c              	      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 )Nrw  zRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinru   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   rl   r  r  )ZnicrÓ   rm   ©r‰   r5   r6   ru  	  s&    ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowrapr‹  i   r    rŒ  r…  rŸ   r†  r‡  é
   rˆ  r‰  rŠ  )r¢   Únet_io_countersrl  ry  r¤   r‹  rŒ  r…  r†  r‡  rˆ  r‰  rŠ  )r¦   ru  Znior{  Zifconfig_retr5   r  r6   r|    s^    
  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿz-TestSystemNetIOCounters.test_against_ifconfigN)ré   rê   rë   r   r.  r   r   r|  r5   r5   r5   r6   r„    s   r„  c                   @   s8   e Zd Zejdedejddddd„ ƒƒZdd	„ Zd
S )ÚTestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr"  zpsutil._pslinux.supports_ipv6Fr6  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   Zinet6©Úkind)	r'   rI   ÚSOCK_STREAMZ
addCleanupÚcloseÚbindÚerrorr¢   Únet_connections)r¦   Zsupports_ipv6rJ   r4   r5   r5   r6   Útest_emulate_ipv6_unsupported5  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ý   r5   r5   r6   Útest_emulate_unixA  s    þz*TestSystemNetConnections.test_emulate_unixN)ré   rê   rë   r   r—   rE   r™  r›  r5   r5   r5   r6   r‘  2  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"rh   r   r>   ÚnonerX   )r   r{   rB   Úpoprl   )r/  rm   rn   rL   Údevrp   rq   rb   r5   r5   r6   Údf[  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallr    )
r¢   Údisk_partitionsÚ
disk_usageZ
mountpointrÊ   rp   r¤   rb   r   rq   )r¦   r¡  ÚpartÚusager   rp   rq   rb   r5   r5   r6   Útest_against_dfV  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/filesystemsrf  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
ró   Tr&  ú$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r¨  Úrwr6  r   )r@   rí   r¢   r£  Zfstyper  r…   r†   r   r   r—   rÈ   rÉ   rÊ   )r¦   rK   rî   r¥  r,  r9  r:  rÓ   r5   r5   r6   Útest_zfs_fso  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/existentr6  )	r¢   ÚPROCFS_PATHr   r—   ÚassertRaisesr   r£  rÈ   rÉ   rý   r5   r5   r6   Útest_emulate_realpath_fail‡  s    ÿz3TestSystemDiskPartitions.test_emulate_realpath_failN)ré   rê   rë   r   r.  Úhasattrr	  r   r§  r¬  r°  r5   r5   r5   r6   rœ  S  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_deviceTr6  F©rŽ  ru   r  r©   r>   rv   r  é   é   r  ©rš   r   r—   r¢   Údisk_io_countersrÊ   Ú
read_countÚread_merged_countÚ
read_bytesÚSECTOR_SIZEÚ	read_timeÚwrite_countÚwrite_merged_countÚwrite_bytesÚ
write_timeÚ	busy_time©r¦   rÓ   r5   r5   r6   Útest_emulate_kernel_2_4–  s"    þÿz0TestSystemDiskIoCounters.test_emulate_kernel_2_4c              
   C   sÆ   t ddƒ² tjddd˜ tjdd}|  |jd¡ |  |jd	¡ |  |jd
t	 ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  |jdt	 ¡ |  |jd¡ |  |jd¡ W 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´  Tr6  Frµ  ru   r  r©   r>   rv   r  r¶  r·  r  r¸  rÄ  r5   r5   r6   Útest_emulate_kernel_2_6_full©  s"    þÿz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc              
   C   sÆ   t ddƒ² tjddd˜ tjdd}|  |jd¡ |  |jd	t ¡ |  |j	d
¡ |  |j
dt ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W 5 Q R X W 5 Q R X d S )Nr³  z   3    1   hda 1 2 3 4r´  Tr6  Frµ  ru   r  r©   r>   r   )rš   r   r—   r¢   r¹  rÊ   rº  r¼  r½  r¿  rÁ  r»  r¾  rÀ  rÂ  rÃ  rÄ  r5   r5   r6   Útest_emulate_kernel_2_6_limited½  s"    þÿz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc              
   C   s    t dt d¡ƒ† tjddd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´  Fr6  T©ÚperdiskrŽ  r  Únvme0n1ru   Z	nvme0n1p1rv   )rš   rÂ   rÃ   r   r—   r¢   r¹  rÊ   rD   rº  r¿  rÄ  r5   r5   r6   Útest_emulate_include_partitionsÔ  s    þÿz8TestSystemDiskIoCounters.test_emulate_include_partitionsc              
   C   s¼   t dt d¡ƒ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´  Fr6  rÉ  c                 S   s   | dkS )NrË  r5   r  r5   r5   r6   Úis_storage_device÷  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr“   ru   rv   )rš   rÂ   rÃ   r   r—   r¢   r¹  r*  rÊ   rº  r¿  )r¦   rÓ   rÍ  r5   r5   r6   Ú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³  FTr5   r?  r5   r5   r6   r0    s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rÊ  úpsutil._pslinux.os.path.existsr“   )r¢   r¹  r   r—   rÊ   rD   )r¦   r0  ZwprocfsZwsysfsr5   r5   r6   Ú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 )NFr5   r?  r5   r5   r6   r0    s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsrÏ  Tr“   )r   r—   r¯  ÚNotImplementedErrorr¢   r¹  )r¦   r0  r5   r5   r6   Útest_emulate_not_impl  s     ÿz.TestSystemDiskIoCounters.test_emulate_not_implN)
ré   rê   rë   rÅ  rÆ  rÇ  rÌ  rÎ  rÐ  rÒ  r5   r5   r5   r6   r²  “  s   r²  c                   @   s^   e Zd Zdd„ Zdd„ Ze ed¡dd„ ƒZe e	dƒ d	¡e ed¡d
d„ ƒƒZ
dd„ ZdS )ÚTestRootFsDeviceFinderc                 C   s(   t  d¡j}t  |¡| _t  |¡| _d S )Nrª  )r	  r|   Úst_devÚmajorÚminor)r¦   r   r5   r5   r6   ÚsetUp  s    zTestRootFsDeviceFinder.setUpc                 C   sf   t ƒ }tj d¡r| ¡  n|  t|j¡ tj d| j| jf ¡rL| 	¡  n|  t|j	¡ | 
¡  d S ©Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)r   r	  r/  r0  Úask_proc_partitionsr¯  r   rÕ  rÖ  Úask_sys_dev_blockÚask_sys_class_block)r¦   Úfinderr5   r5   r6   Útest_call_methods#  s    
 ÿ
z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSc                 C   s¨   t ƒ }|  | ¡ ¡ d  } }}tj d¡r4| ¡ }tj d| j| jf ¡rT| 	¡ }| 
¡ }|pf|pf|}|r||r||  ||¡ |r|r|  ||¡ |r¤|r¤|  ||¡ d S rØ  )r   ÚassertIsNotNoneÚfindr	  r/  r0  rÙ  rÕ  rÖ  rÛ  rÚ  rÊ   )r¦   rÜ  rØ   rÙ   ÚcÚbaser5   r5   r6   Útest_comparisons0  s$     ÿz'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablec                 C   s"   t ƒ  ¡ }tdƒ}|  ||¡ d S )Nzfindmnt -o SOURCE -rn /)r   rß  r   rÊ   )r¦   r§   Zfindmnt_valuer5   r5   r6   Útest_against_findmntE  s    
z+TestRootFsDeviceFinder.test_against_findmntc              	   C   sl   t jddgdR}t ¡ d }|js(t‚tsP|  |jd¡ |  	|jt
ƒ  ¡ ¡ n|  	|jd¡ W 5 Q R X d S )Nr©  )ú	/dev/rootrª  Zext4r«  r6  r   rä  )r   r—   r¢   r£  rÈ   rÉ   r   ÚassertNotEqualZdevicerÊ   r   rß  )r¦   r™   r¥  r5   r5   r6   Útest_disk_partitions_mockedL  s    þ
z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)ré   rê   rë   r×  rÝ  r   r.  r   râ  r   rã  ræ  r5   r5   r5   r6   rÓ    s   


rÓ  c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	ƒ dd„ ƒZ
dd„ ZdS )ÚTestMiscc                 C   s(   t dƒ}t ¡ }|  t|ƒt|ƒ¡ d S )Nz	boot time)ry   r¢   Ú	boot_timerÊ   rl   r¥   r5   r5   r6   Útest_boot_timea  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 )Nr|   rÔ   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                    s&   |   d¡rttjdƒ‚ˆ | f|ž|ŽS )Nr­  zrejecting access for test)ri   rá   râ   rã   rˆ   rå   r5   r6   r   r  s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr‘   r’   r"  TrG  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/  rG   ÚwriteÚshutilÚrmtreer   r¢   r   r   r—   r¯  rá   r  Úcpu_percentÚcpu_times_percentr®  rÊ   Úsumr‚   rå  )r¦   Z	my_procfsrK   r   r˜   Zper_cpu_percentZper_cpu_times_percentr5   rå   r6   Útest_no_procfs_on_importf  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
                TrG  zŽ                cpu   1 0 0 0 0 0 0 0 0 0
                cpu0  1 0 0 0 0 0 0 0 0 0
                cpu1  1 0 0 0 0 0 0 0 0 0
                r   r[  )rš   rÂ   rÃ   rÄ   r¢   rï  rÈ   rÉ   rð  rå  rñ  r‚   rÊ   r  Úuser)r¦   r™   rï  Zcpu_percent_percpurð  Zcpu_times_percent_percpur5   r5   r6   Útest_cpu_steal_decrease£  s8    þ
þ
z TestMisc.test_cpu_steal_decreasec              	   C   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¯  ry  r¢   r)  rè  rÈ   rÉ   rý   r5   r5   r6   Útest_boot_time_mockedÌ  s    þzTestMisc.test_boot_time_mockedc              	   C   s¸   t jddgd&}|  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  r6  r   Ú	localhost)rö  r÷  z:0.0rø  Tr  )rö  r÷  Úfoorø  Tr  rú  )r   r—   rÊ   r¢   ZusersÚhostrÈ   rÉ   rý   r5   r5   r6   Útest_users_mockedÓ  s$    ÿÿÿzTestMisc.test_users_mockedc                 C   s®   |   ¡ }t |¡ zŽ|t_|  ttj¡ |  ttj¡ | jttjdd |  ttj	¡ |  ttj
¡ |  ttj¡ |  ttj¡ |  ttj¡ |  tjtj¡ W 5 dt_X d S )Nr­  TrG  )rê  r	  rë  r¢   r®  r¯  rá   r£   r  rè  r˜  r  rx  r£  ZNoSuchProcessÚProcess)r¦   Ztdirr5   r5   r6   Útest_procfs_pathç  s    
zTestMisc.test_procfs_pathc              	   C   s|   t ƒ l t ¡ }| ¡ }|  t|ƒd¡ t|dd„ dd j}|  |j	|¡ t |¡}| 
¡  |  |t ¡ ¡ W 5 Q R X d S )Nr  c                 S   s   | j S rT   )ÚidrU   r5   r5   r6   Ú<lambda>  rü   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyru   )r   r¢   rý  ÚthreadsrÊ   rD   Úsortedrÿ  rå  ÚpidZas_dictr  Zpids)r¦   Úpr  ÚtidÚptr5   r5   r6   Útest_issue_687ú  s    
zTestMisc.test_issue_687c              	   C   s6   t ddƒ"}t t ¡ ¡st‚|js(t‚W 5 Q R X d S )Nú/proc/%s/statusrX   )rš   r¢   Z
pid_existsr	  ÚgetpidrÉ   rÈ   rý   r5   r5   r6   Útest_pid_exists_no_proc_status  s    z'TestMisc.test_pid_exists_no_proc_statusN)ré   rê   rë   ré  rò  rô  rõ  rü  rþ  r   r  r  r5   r5   r5   r6   rç  ^  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 -br2  ru   rk  rX   r    )	r   rl   rB   r{   Úreplacer¢   Úsensors_batteryÚpercentr¤   )r¦   rm   Z
acpi_valuer§   r5   r5   r6   Ú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å   r5   r6   r   &  s    
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr‘   r’   r"  T)r@   r   r   r—   rÊ   r¢   r  Úpower_pluggedZsecsleftZPOWER_TIME_UNLIMITEDrÈ   rÉ   ©r¦   r   r˜   r™   r5   rå   r6   Ú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  rX   ú/statusZcharging©rÌ   rá   râ   rã   r…   r†   r   rˆ   rå   r5   r6   r   7  s
    
zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr‘   r’   r"  T©
r@   r   r   r—   rÊ   r¢   r  r  rÈ   rÉ   r  r5   rå   r6   Útest_emulate_power_plugged_24  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å   r5   r6   r   G  s    
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr‘   r’   r"  Fr  r  r5   rå   r6   Útest_emulate_power_not_pluggedE  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  rX   r  Zdischargingr  rˆ   rå   r5   r6   r   V  s
    
zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr‘   r’   r"  Fr  r  r5   rå   r6   Ú test_emulate_power_not_plugged_2S  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/onlinerX   ú#/sys/class/power_supply/BAT0/statuss   ???)ri   rá   râ   rã   r…   r‡   rˆ   rå   r5   r6   r   g  s    
ÿ

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr‘   r’   r"  )
r@   r   r   r—   r*  r¢   r  r  rÈ   rÉ   r  r5   rå   r6   Útest_emulate_power_undeterminedd  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ý   r5   r5   r6   Útest_emulate_energy_full_0v  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#  rX   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88éX   )	r   rá   râ   rã   rš   rÊ   r¢   r  r  ©r¦   r5   r5   r6   Ú"test_emulate_energy_full_not_avail}  s    
þ
þ ÿz5TestSensorsBattery.test_emulate_energy_full_not_availc                 C   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   rX   r  r!  )r   rá   râ   rã   r*  r¢   r  r  r&  r5   r5   r6   Útest_emulate_no_powerŠ  s    
þ
þ
þz(TestSensorsBattery.test_emulate_no_powerN)ré   rê   rë   r   r.  r   r  r  r  r  r  r"  r$  r'  r(  r5   r5   r5   r6   r    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å   r5   r6   r   œ  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr‘   r’   z
os.listdirZBAT0r6  r"  )	r@   r   r   r—   rÞ  r¢   r  rÈ   rÉ   )r¦   r   r˜   ZmlistdirZmopenr5   rå   r6   Útest_it›  s    
"
z"TestSensorsBatteryEmulated.test_itN)ré   rê   rë   r,  r5   r5   r5   r6   r)  ˜  s   r)  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSensorsTemperaturesc              
      sž   ‡ fdd„}t ‰ trdnd}tj||d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å   r5   r6   r   ³  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr‘   r’   r"  r5  z/sys/class/hwmon/hwmon0/temp1r6  r‰   r   r/  ç      >@g      D@ç      I@©r@   r   r   r—   r¢   Zsensors_temperaturesrÊ   r/  rU  ÚhighÚcritical)r¦   r   r˜   Útempr5   rå   r6   Útest_emulate_class_hwmon²  s    ÿz0TestSensorsTemperatures.test_emulate_class_hwmonc              
      s¦   ‡ fdd„}dd„ }t ‰ tr dnd}tj||d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_tempr1  r7  r0  Z0_typer6  Útyper‰   )rÌ   r…   r‡   r†   r   rˆ   rå   r5   r6   r   Î  s    





zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockc                 S   s:   | dkrg S | dkrg S | dkr&dgS | dkr6ddgS g S )Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr5   r?  r5   r5   r6   Ú	glob_mockÚ  s    ÿzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr‘   r’   r"  r5  Tr“   r‰   r   rX   r2  r3  r4  )r¦   r   r:  r˜   r7  r5   rå   r6   Útest_emulate_class_thermalÍ  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)ré   rê   rë   r8  r;  r5   r5   r5   r6   r-  ¯  s   r-  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsFansc              
      s‚   ‡ fdd„}t ‰ trdnd}tj||d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å   r5   r6   r   õ  s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockr‘   r’   r"  r5  z/sys/class/hwmon/hwmon2/fan1r6  r‰   r   r/  iÐ  )	r@   r   r   r—   r¢   Zsensors_fansrÊ   r/  rU  )r¦   r   r˜   Zfanr5   rå   r6   rW  ô  s    
ÿz!TestSensorsFans.test_emulate_dataN)ré   rê   rë   rW  r5   r5   r5   r6   r<  ñ  s   r<  c                   @   sÄ   e Zd Zeƒ dd„ ƒZdd„ Ze ed¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze e d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)S )*ÚTestProcessc                 C   s’   |   ¡ }tj |j¡ ¡ \}}}t |j¡jdd}| j|tdd„ |D ƒƒdd | j|tdd„ |D ƒƒdd | j|tdd„ |D ƒƒdd d S )	NF)Zgroupedc                 S   s   g | ]}|j |j ‘qS r5   )Zprivate_dirtyZprivate_cleanrt   r5   r5   r6   r\     s     z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>ræ   r    c                 S   s   g | ]
}|j ‘qS r5   )Úpssrt   r5   r5   r6   r\     s     c                 S   s   g | ]
}|j ‘qS r5   )rú   rt   r5   r5   r6   r\     s     )	Zspawn_testprocr¢   r)  rý  r  Ú_parse_smapsÚmemory_mapsr¤   rñ  )r¦   ZsprocÚussr?  rú   Úmapsr5   r5   r6   Útest_parse_smaps_vs_memory_maps  s$     þ  ÿ  ÿz+TestProcess.test_parse_smaps_vs_memory_mapsc              	   C   sx   t dt ¡  t d¡ ¡ ƒR}tj t ¡ ¡}| 	¡ \}}}|j
sFt‚|  |d¡ |  |d¡ |  |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É   rÊ   )r¦   r™   r  rB  r?  rú   r5   r5   r6   Útest_parse_smaps_mocked  s    
þ
z#TestProcess.test_parse_smaps_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ý  Útimer	   Ú
open_filesr/  r	  Úabspathry  )Úfnamer  Z	giveup_atÚfiler5   r5   r6   Úget_test_fileC  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filerÔ   rf  rØ   zr+zw+za+rV   zx+)rê  r@   rÊ   Úmoder   r   )r¦   rL  Ztestfnr5   r5   r6   Útest_open_files_modeA  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.readlinkrX   r"  )r¢   rý  rH  r@   rê  r   rD   r   r—   ÚOSErrorrâ   rã   rÉ   rÈ   ÚEINVALrÊ   )r¦   r  Úfilesr™   r5   r5   r6   Útest_open_files_file_gonef  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Ô   rO  r‘   r’   rX   r"  )r¢   rý  rH  r@   rê  r   rD   r   r   r—   rá   râ   rã   rÉ   rÈ   ©r¦   r  rS  r˜   r™   r5   r5   r6   Útest_open_files_fd_gonez  s    
ÿz#TestProcess.test_open_files_fd_gonec                 C   s˜   t  ¡ }| ¡ }t|  ¡ dƒp t|jdt|ƒ ƒ d}tj|t	t
jdƒd6}t d¡  | ¡ }|rlt‚|jsvt‚W 5 Q R X W 5 Q R X W 5 Q R X d S )NrÔ   rO  rP  rX   r"  úpsutil._pslinux.debug)r¢   rý  rH  r@   rê  r   rD   r   r—   rQ  râ   ÚENAMETOOLONGrÉ   rÈ   rU  r5   r5   r6   Útest_open_files_enametoolongŠ  s    
ÿz(TestProcess.test_open_files_enametoolongc              	   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_mapr6  )r   r—   r*  r¢   r)  rý  r	  r
  ZterminalrÈ   rÉ   rý   r5   r5   r6   Útest_terminal_mocked  s    ÿz TestProcess.test_terminal_mockedc              	   C   sž   t  ¡ }t tdƒ¡}tjd|dd$}|  | ¡ ddg¡ |j	sFt
‚W 5 Q R X t tdƒ¡}tjd|dd&}|  | ¡ dddg¡ |j	st
‚W 5 Q R X d S )	Nzfoo bar ró   Tr&  rú  Úbarz	foo bar  rX   ©r¢   rý  r…   r†   r   r   r—   rÊ   ZcmdlinerÈ   rÉ   ©r¦   r  r,  r™   r5   r5   r6   Útest_cmdline_mocked«  s"     ÿ ÿzTestProcess.test_cmdline_mockedc              	   C   sž   t  ¡ }t tdƒ¡}tjd|dd$}|  | ¡ ddg¡ |j	sFt
‚W 5 Q R X t tdƒ¡}tjd|dd&}|  | ¡ dddg¡ |j	st
‚W 5 Q R X d S )	Nzfoo bar ró   Tr&  rú  r[  z	foo bar  rX   r\  r]  r5   r5   r6   Útest_cmdline_spaces_mocked¹  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ú  r[  r\  r]  r5   r5   r6   Ú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 )NrP  z/home/foo (deleted)r6  z	/home/foo)r   r—   rÊ   r¢   rý  ÚexeÚcwdr&  r5   r5   r6   Ú!test_readlink_path_deleted_mockedÑ  s
    ÿz-TestProcess.test_readlink_path_deleted_mockedc              	      s–   ‡ fdd„}t ‰ trdnd}tj||d(}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/taskrX   )ri   r	  r
  rá   râ   rã   rˆ   rå   r5   r6   r   Ü  s    z2TestProcess.test_threads_mocked.<locals>.open_mockr‘   r’   r"  c                    s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S rd  )ri   r	  r
  rá   râ   ÚEPERMrˆ   rå   r5   r6   r   ë  s    )r@   r   r   r—   r¢   rý  r  rÈ   rÉ   rÊ   r¯  ÚAccessDenied)r¦   r   r˜   r™   rÓ   r5   rå   r6   Útest_threads_mocked×  s    
zTestProcess.test_threads_mockedc                 C   s¢   t jdttjdƒd‚}t jdt dd¡d`}t ¡  ¡ }|j	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.readlinkrX   r"  zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFr6  )r   r—   rQ  râ   rã   r¢   rf  rý  ra  rÈ   rÉ   rÊ   r¯  ÚZombieProcess)r¦   r9  r:  rÓ   r5   r5   r6   Ú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 )NrE  rX   )r   r	  r
  rá   râ   rã   r¢   rý  r¯  r   rA  rÈ   rÉ   ©r¦   r™   r  r5   r5   r6   Útest_issue_1014	  s    

þzTestProcess.test_issue_1014r=  c              
   C   sŠ   t jdttjdƒd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.prlimitrX   r"  )r   r—   rQ  râ   ZENOSYSr¢   rý  r‰   r¯  rh  ZrlimitZRLIMIT_NOFILErÈ   rÉ   rÊ   Ú	exceptionr  ©r¦   r™   r  rœ   r5   r5   r6   Útest_rlimit_zombie  s    
ÿzTestProcess.test_rlimit_zombiec              
   C   s†   t jdttjdƒd@}t ¡ }| ¡  |  tj	¡}| 
¡  W 5 Q R X |jsRt‚W 5 Q R X |  |jj|j¡ |  |jj| ¡ ¡ d S )NrP  rX   r"  )r   r—   rQ  râ   rã   r¢   rý  r‰   r¯  rh  rb  rÈ   rÉ   rÊ   rl  r  rm  r5   r5   r6   Útest_cwd_zombie#  s    
ÿzTestProcess.test_cwd_zombiec              *   C   sP  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 t ¡  ¡ | ¡ }|  |jdt ¡ |  |jdt ¡ |  |jdt ¡ |  |jdt ¡ |  |jdt ¡ |  | ¡ d¡ W 5 Q R X d S )Nr*  z(cat)ÚZÚ1Ú2Ú3Ú4Ú5Ú6Ú7rz   z/proc/%s/statÚcatru   r  r  r©   r>   rv   r¶  )rG   rÄ   rš   r	  r
  r¢   rý  rÊ   r‰   ÚstatusZSTATUS_ZOMBIEÚppidZcreate_timer   rè  r  ró  ÚsystemÚchildren_userÚchildren_systemZiowaitZcpu_num)r¦   rŠ   r   r  Úcpur5   r5   r6   Útest_stat_file_parsing.  sx    Ö, ÿ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ÚrealZ	effectiveZsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistrF   )r¦   r  r†  rˆ  r5   r5   r6   Útest_status_file_parsingk  s"    
þ
z$TestProcess.test_status_file_parsingc              
   C   sZ   t jdttjdƒd:}t ¡ }t  d¡ | ¡ r8t‚|j	sBt‚W 5 Q R X W 5 Q R X d S )NrP  rX   r"  rW  )
r   r—   rQ  râ   rX  r¢   rý  ÚconnectionsrÉ   rÈ   rj  r5   r5   r6   Útest_connections_enametoolong„  s    
ÿz)TestProcess.test_connections_enametoolongN)ré   rê   rë   r   rD  rF  r   r.  r   rN  rT  rV  rY  rZ  r^  r_  r`  rc  rg  ri  rk  r   rn  ro  r  rŒ  rŽ  r5   r5   r5   r6   r>    s,   
#

$

=r>  c                   @   sr   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zeƒ dd„ ƒZdd„ Zdd„ ZdS )ÚTestProcessAgainstStatusa  /proc/pid/stat and /proc/pid/status have many values in common.
    Whenever possible, psutil uses /proc/pid/stat (it's faster).
    For all those cases we check that the value found in
    /proc/pid/stat (by psutil) matches the one found in
    /proc/pid/status.
    c                 C   s   t  ¡ | _d S rT   )r¢   rý  Úproc)Úclsr5   r5   r6   Ú
setUpClass™  s    z#TestProcessAgainstStatus.setUpClassc              
   C   sž   t j d| jj ¡€}|D ]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  r{   ri   Ú	partitionrl   rE   )r¦   Z	linestartrK   rL   r  r5   r5   r6   Úread_status_file  s    
ÿ
z)TestProcessAgainstStatus.read_status_filec                 C   s    |   d¡}|  | j ¡ |¡ d S )NzName:)r—  rÊ   r  r‰   ©r¦   r  r5   r5   r6   Ú	test_nameª  s    
z"TestProcessAgainstStatus.test_namec                 C   sH   |   d¡}|| d¡d | d¡… }| dd¡}|  | j ¡ |¡ d S )NzState:ú(ru   ú)rz   r  )r—  rß  Úrfindr  rÊ   r  ry  r˜  r5   r5   r6   Útest_status®  s    
z$TestProcessAgainstStatus.test_statusc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzPPid:)r—  rÊ   r  rz  r˜  r5   r5   r6   Ú	test_ppid´  s    
z"TestProcessAgainstStatus.test_ppidc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzThreads:)r—  rÊ   r  r…  r˜  r5   r5   r6   Útest_num_threads¸  s    
z)TestProcessAgainstStatus.test_num_threadsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:ru   r>   )r—  r   r‚   rl   rB   rÊ   r  r†  r˜  r5   r5   r6   Ú	test_uids¼  s    
z"TestProcessAgainstStatus.test_uidsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzGid:ru   r>   )r—  r   r‚   rl   rB   rÊ   r  rˆ  r˜  r5   r5   r6   Ú	test_gidsÁ  s    
z"TestProcessAgainstStatus.test_gidsc                 C   s@   |   d¡}|  | j ¡ j|¡ |   d¡}|  | j ¡ j|¡ d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r—  rÊ   r  r‚  rƒ  r„  r˜  r5   r5   r6   Útest_num_ctx_switchesÆ  s    

z.TestProcessAgainstStatus.test_num_ctx_switchesc                 C   sN   |   d¡}dt|ƒkrJtt| d¡ƒ\}}|  | j ¡ tt	||d ƒƒ¡ d S )NúCpus_allowed_list:r  ru   )
r—  rÎ   r‚   rl   rB   rÊ   r  Zcpu_affinityr‹  rF   )r¦   r  Zmin_Zmax_r5   r5   r6   Útest_cpu_affinityÍ  s    
 ÿz*TestProcessAgainstStatus.test_cpu_affinityc              	   C   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  r‰  rŠ  rÎ   rÈ   rÉ   )r¦   r  r™   r5   r5   r6   Útest_cpu_affinity_eligible_cpusÔ  s    
z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)ré   rê   rë   Ú__doc__Úclassmethodr’  r—  r™  r  rž  rŸ  r   r¡  r   r¢  r¤  r¥  r5   r5   r5   r6   r    s   

r  c                   @   s   e Zd Zdd„ ZdS )Ú	TestUtilsc              	   C   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)r6  r[  rú  )r   r—   rÊ   r¢   r”  ÚreadlinkrÈ   rÉ   rý   r5   r5   r6   Útest_readlinkæ  s    zTestUtils.test_readlinkN)ré   rê   rë   rª  r5   r5   r5   r6   r¨  ã  s   r¨  Ú__main__)Úrun_from_name)dr¦  Ú
__future__r   rj   r*   râ   Úglobr…   r	  r  rí  r'   r0   rÂ   rG  r   rÅ   r¢   r   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  r   r   r   r   r/  rI  ÚdirnameÚ__file__ZHEREr/   ZSIOCGIFCONFr^   r8   r:   r½  ZEMPTY_TEMPERATURESr7   r9   r;   rS   ra   rs   rx   ry   rƒ   Úcontextmanagerrš   r   r.  rž   rì   r   r  r1  r<  r_  re  rj  rt  r„  r‘  rœ  r²  rÓ  rç  r  r)  r-  r<  r>  r  r¨  ré   Zpsutil.tests.runnerr¬  r5   r5   r5   r6   Ú<module>   sú   	

  ,]? )2. ? B ;}A   R
