U
    +È-e¿o ã                   @   sž  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ erÞddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ej1 2ej1 3e4¡¡Z5d Z6d!Z7d"Z8d#Z9d$Z:erd%Z;e d&¡ Z<d'd(„ Z=d)d*„ Z>d+d,„ Z?d-d.„ Z@d/d0„ ZAd1d2„ ZBd3d4„ ZCd5d6„ ZDd7d8„ ZEejFd9d:„ ƒZGejFd;d<„ ƒZHe Ie d=¡G d>d?„ d?e"ƒƒZJe Ie d=¡G d@dA„ dAe"ƒƒZKe Ie d=¡G dBdC„ dCe"ƒƒZLe Ie d=¡G dDdE„ dEe"ƒƒZMe Ie d=¡G dFdG„ dGe"ƒƒZNe Ie d=¡G dHdI„ dIe"ƒƒZOe Ie d=¡G dJdK„ dKe"ƒƒZPe Ie d=¡G dLdM„ dMe"ƒƒZQe Ie d=¡G dNdO„ dOe"ƒƒZRe Ie d=¡G dPdQ„ dQe"ƒƒZSe Ie d=¡G dRdS„ dSe"ƒƒZTe Ie d=¡G dTdU„ dUe"ƒƒZUe Ie d=¡G dVdW„ dWe"ƒƒZVe Ie d=¡G dXdY„ dYe"ƒƒZWe Ie d=¡G dZd[„ d[e"ƒƒZXe Ie d=¡G d\d]„ d]e"ƒƒZYe Ie d=¡G d^d_„ d_e"ƒƒZZe Ie d=¡G d`da„ dae"ƒƒZ[e Ie d=¡e Ie db¡G dcdd„ dde"ƒƒƒZ\e Ie d=¡G dedf„ dfe"ƒƒZ]e Ie d=¡G dgdh„ dhe"ƒƒZ^e Ie d=¡G didj„ dje"ƒƒZ_e Ie d=¡G dkdl„ dle"ƒƒZ`e Ie d=¡G dmdn„ dne"ƒƒZae Ie d=¡G dodp„ dpe"ƒƒZbecdqkršddrldmeZe eee4ƒ dS )szLinux specific tests.é    )ÚdivisionN)ÚLINUX)ÚPY3)ÚFileNotFoundError)Ú
basestring)Úu)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)Ú
HAS_RLIMIT)ÚPYPY)ÚTOLERANCE_DISK_USAGE)ÚTOLERANCE_SYS_MEM)ÚPsutilTestCase)Ú
ThreadTask)Ú
call_until)Úmock)Úreload_module)Úretry_on_failure)Úsafe_rmpath)Úsh)Úskip_on_not_implemented)Úwhich)ÚCLOCK_TICKS)ÚRootFsDeviceFinder)Úcalculate_avail_vmem)Úopen_binaryi‰  i‰  i'‰  i‰  i‰  i   z/sys/class/hwmon/hwmon*c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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   úX/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/psutil/tests/test_linux.pyÚget_ipv4_addressL   s    


þ þÿr7   c                 C   s|   dd l }| d d… } tr"t| dƒ} t tjtj¡}t |¡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ƒN}g }| ¡ D ]"}| ¡ }|d | kr| |¡ qt|ƒdkrRtd|  ƒ‚W 5 Q R X tt|ƒƒD ]j}|| d }g }tdt|ƒdƒD ]}| |||d … ¡ qŒd |¡}	t 	tj
|	¡}
t tj
|
¡||< qh|S )Nz/proc/net/if_inet6éÿÿÿÿ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"    

rR   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©rV   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__rV   rF   )r3   r%   r4   Úinfor^   r5   rZ   r6   Úget_mac_address‰   s     
  
ÿ
r`   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   rA   Ú
startswithÚcollectionsÚ
namedtupleÚintrD   rF   )ÚoutÚlinesrK   Ú_ÚtotalÚusedra   Úntr5   r5   r6   Ú	free_swap›   s    

ÿrr   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.
    ra   rb   rc   rd   re   rg   ZMemc                 s   s   | ]}t |ƒV  qd S rS   )rk   ©rX   rU   r5   r5   r6   Ú	<genexpr>·   s     zfree_physmem.<locals>.<genexpr>é   é   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   rA   rh   ri   rj   rD   rF   )rl   rm   rK   ro   rp   ra   Úsharedrq   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-src   rd   re   rg   ú r   z can't find %r in 'vmstat' output)r   rA   Ústriprk   rD   )Ústatrl   rK   r5   r5   r6   ry   ¿   s    ry   c                  C   s@   t ddgƒ ¡ } d| kr"t d¡‚tttt d|  	¡ d ¡ƒƒS )Nra   z-VÚUNKNOWNzcan't determine free versionz\d+r<   )
r   r{   ÚunittestÚSkipTestÚtupleÚmaprk   ÚreÚfindallrA   )rl   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 rS   )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 rS   r5   r‰   ©Úexcr   r   r5   r6   r‘   ë   s    z&mock_open_exception.<locals>.open_mockr’   r“   Tr”   Nr—   )r   r   r‘   r™   rš   r5   rœ   r6   Úmock_open_exceptionæ   s
    rž   z
LINUX onlyc                   @   sL   e Zd Zdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZeƒ dd„ ƒZeƒ d	d
„ ƒZdS )Ú"TestSystemVirtualMemoryAgainstFreec                 C   s"   t ƒ j}t ¡ j}|  ||¡ d S rS   )rx   ro   ÚpsutilÚvirtual_memoryÚassertEqual©ÚselfZ	cli_valueÚpsutil_valuer5   r5   r6   Ú
test_totalÿ   s    
z-TestSystemVirtualMemoryAgainstFree.test_totalc                 C   s:   t ƒ dk r|  d¡‚tƒ j}t ¡ j}| j||td d S )N©é   r¨   é   úold free version©Údelta)r„   ÚskipTestrx   rp   r    r¡   ÚassertAlmostEqualr   r£   r5   r5   r6   Ú	test_used  s    


ÿz,TestSystemVirtualMemoryAgainstFree.test_usedc                 C   s&   t ƒ j}t ¡ j}| j||td d S ©Nr«   )rx   ra   r    r¡   r®   r   r£   r5   r5   r6   Ú	test_free  s
    
ÿz,TestSystemVirtualMemoryAgainstFree.test_freec                 C   sJ   t ƒ }|j}|dkrt d¡‚t ¡ j}| j||td|||jf d d S )Nr   z%free does not support 'shared' columnú	%s %s 
%s©r¬   Úmsg)	rx   rw   r~   r   r    r¡   r®   r   Úoutput)r¤   ra   Ú
free_valuer¥   r5   r5   r6   Útest_shared  s    

  þz.TestSystemVirtualMemoryAgainstFree.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 )Nra   rb   rg   Ú	availabler   z(free does not support 'available' columnru   r<   r²   r³   )
r   rA   r~   r   rk   r    r¡   r¸   r®   r   )r¤   rl   rm   r¶   r¥   r5   r5   r6   Útest_available#  s    

  þz1TestSystemVirtualMemoryAgainstFree.test_availableN)	Ú__name__Ú
__module__Ú__qualname__r¦   r   r¯   r±   r·   r¹   r5   r5   r5   r6   rŸ   ü   s   



rŸ   c                   @   sZ   e Zd Zdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZeƒ dd„ ƒZeƒ d	d
„ ƒZeƒ dd„ ƒZ	dS )Ú$TestSystemVirtualMemoryAgainstVmstatc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nztotal memoryé   r«   )ry   r    r¡   ro   r®   r   ©r¤   Zvmstat_valuer¥   r5   r5   r6   r¦   6  s    
  ÿz/TestSystemVirtualMemoryAgainstVmstat.test_totalc                 C   s>   t ƒ dk r|  d¡‚tdƒd }t ¡ j}| j||td d S )Nr§   rª   zused memoryr¾   r«   )r„   r­   ry   r    r¡   rp   r®   r   r¿   r5   r5   r6   r¯   <  s    


  ÿz.TestSystemVirtualMemoryAgainstVmstat.test_usedc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzfree memoryr¾   r«   )ry   r    r¡   ra   r®   r   r¿   r5   r5   r6   r±   I  s    
  ÿz.TestSystemVirtualMemoryAgainstVmstat.test_freec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzbuffer memoryr¾   r«   )ry   r    r¡   Úbuffersr®   r   r¿   r5   r5   r6   Útest_buffersP  s    
  ÿz1TestSystemVirtualMemoryAgainstVmstat.test_buffersc                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzactive memoryr¾   r«   )ry   r    r¡   Úactiver®   r   r¿   r5   r5   r6   Útest_activeW  s    
  ÿz0TestSystemVirtualMemoryAgainstVmstat.test_activec                 C   s*   t dƒd }t ¡ j}| j||td d S )Nzinactive memoryr¾   r«   )ry   r    r¡   Úinactiver®   r   r¿   r5   r5   r6   Útest_inactive^  s    
  ÿz2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
rº   r»   r¼   r¦   r   r¯   r±   rÁ   rÃ   rÅ   r5   r5   r5   r6   r½   3  s   



r½   c                   @   sB   e Zd Zdd„ Zeƒ dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSystemVirtualMemoryMocksc              
   C   sT  t dt d¡ ¡ ƒ4}tjdd}t d¡ t ¡ }|j	sDt
‚|  t|ƒd¡ |d }|  dt|jƒ¡ |  d	t|jƒ¡ |  d
t|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W 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   z#memory stats couldn't be determinedÚcachedrw   rÂ   rÄ   rÀ   r¸   )r›   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterr    r¡   ÚcalledÚAssertionErrorr¢   rC   ÚassertInÚstrÚmessagerË   rÂ   rÄ   rw   rÀ   r¸   Úslab©r¤   rš   ÚwsÚretÚwr5   r5   r6   Útest_warnings_on_missesi  s8    þ

 ÿz4TestSystemVirtualMemoryMocks.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   rA   rk   r   ÚabsZ
assertLess)r¤   ZmemsrJ   rK   rL   ÚaÚbZdiff_percentr5   r5   r6   Útest_avail_old_percent  s    
$z3TestSystemVirtualMemoryMocks.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    þ
 ÿz=TestSystemVirtualMemoryMocks.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    þ
 ÿz:TestSystemVirtualMemoryMocks.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&    þ
þ ÿþz<TestSystemVirtualMemoryMocks.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    3zJTestSystemVirtualMemoryMocks.test_virtual_memory_mocked.<locals>.open_mockr’   r“   Tr”   i  i   é   i p  i T  i   i    i X  é   )r?   r   r   r˜   r    r¡   rÒ   rÓ   r¢   ro   ra   rÀ   rË   rw   rÂ   rÄ   r×   r¸   )r¤   r‘   r™   rš   Zmemr5   rì   r6   Útest_virtual_memory_mockedó  s    7
z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
rº   r»   r¼   rÜ   r   rá   rä   ræ   rë   rï   r5   r5   r5   r6   rÆ   f  s   &
rÆ   c                   @   s\   e Zd Zedd„ ƒZdd„ Zeƒ dd„ ƒZeƒ dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestSystemSwapMemoryc               	   C   s,   t dƒ} |  ¡ }W 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)rJ   Údatar5   r5   r6   Úmeminfo_has_swap_infoE  s    
z*TestSystemSwapMemory.meminfo_has_swap_infoc                 C   s"   t ƒ j}t ¡ j}| j||tdS r°   )rr   ro   r    Úswap_memoryr®   r   ©r¤   r¶   r¥   r5   r5   r6   r¦   L  s    
  ÿzTestSystemSwapMemory.test_totalc                 C   s"   t ƒ j}t ¡ j}| j||tdS r°   )rr   rp   r    rô   r®   r   rõ   r5   r5   r6   r¯   R  s    
  ÿzTestSystemSwapMemory.test_usedc                 C   s"   t ƒ j}t ¡ j}| j||tdS r°   )rr   ra   r    rô   r®   r   rõ   r5   r5   r6   r±   Y  s    
  ÿzTestSystemSwapMemory.test_freec              
   C   s˜   t jddd€}tjddh}t d¡ t ¡ }|js:t‚|  	t
|ƒd¡ |d }|  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   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r˜   rÏ   rÐ   rÑ   r    rô   rÒ   rÓ   r¢   rC   rÔ   rÕ   rÖ   ÚsinÚsoutrØ   r5   r5   r6   Útest_missing_sin_sout`  s    

þz*TestSystemSwapMemory.test_missing_sin_soutc              
   C   sœ   t dttjdƒƒ€}tjddh}t d¡ t ¡ }|j	s>t
‚|  t|ƒd¡ |d }|  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   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¢   rC   rÔ   rÕ   rÖ   rø   rù   rØ   r5   r5   r6   Útest_no_vmstat_mockedn  s"    
þ

ýz*TestSystemSwapMemory.test_no_vmstat_mockedc              	   C   s   |   ¡ st d¡S t d¡}t ¡ }W 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¢   ro   r®   ra   r   )r¤   rš   ÚswapZcextrn   ro   ra   Zunit_multiplierr5   r5   r6   Útest_meminfo_against_sysinfo€  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_metrics  s    z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)rº   r»   r¼   Ústaticmethodró   r¦   r   r¯   r±   rú   rû   rþ   r  r5   r5   r5   r6   rð   B  s   


rð   c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemCPUTimesc                 C   s    t  ¡ j}t dt ¡ d ¡d }ttt	| 
d¡ƒƒ}|dkrL|  d|¡ n|  d|¡ |dkrn|  d|¡ n|  d|¡ |d	kr|  d
|¡ n|  d
|¡ d S )Nz\d+\.\d+\.\d+é   r   Ú.)r  é   é   Ústeal)r  r  r$   Zguest)r¨   r  r   Z
guest_nice)r    Ú	cpu_timesÚ_fieldsr‚   rƒ   ÚosÚunamer€   r   rk   rA   rÔ   ÚassertNotIn)r¤   rL   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Õ   rk   rA   r¢   r    Ú	cpu_count)r¤   rJ   Ú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‚   Úsearchrs   r5   r5   r6   r[   Ã  s      zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r  ÚlistdirrC   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©Zlogical)rk   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 )ú#©rh   rs   r5   r5   r6   r[   Î  s     
 z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rg   Tr  )r   rC   rA   r¢   r    r  )r¤   rl   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st‚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˜   rD   r¢   rÒ   rÓ   ÚassertIsNoneZ
call_countZ	call_argsr?   rñ   r†   rˆ   r›   )r¤   r    Úoriginalrš   rJ   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  rg   r   ú,ru   Fr  )	r   ÚsetrA   rh   Úaddr¢   r    r  rC   )r¤   rl   Zcore_idsrK   rL   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 )Nr6  r7  rö   Tr÷   )r   r˜   r+  r    r*  r8  rÒ   rÓ   )r¤   Úm1Úm2r5   r5   r6   Útest_emulate_none  s
    $
z)TestSystemCPUCountCores.test_emulate_noneN)	rº   r»   r¼   r~   r/  r   r"  r9  r<  r5   r5   r5   r6   r2  ó  s   
	r2  c                   @   sz   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd	„ ƒZ	e e d¡d
d„ ƒZ
dS )ÚTestSystemCPUFrequencyúnot supportedc              	      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!  ©r0  ©Zorig_existsr5   r6   Úpath_exists_mock  s    
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mockúos.path.existsT)r–   r•   )r  r0  r1  r   r˜   r    Úcpu_freqrÓ   )r¤   rB  r5   rA  r6   Útest_emulate_use_second_file  s    ÿz3TestSystemCPUFrequency.test_emulate_use_second_filec              	      s°   ‡ fdd„}t jj‰ z‚tjd|d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   rB  %  s    
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockrC  r#  ç        T©Zpercpu)r  r0  r1  r   r    r*  r   r˜   rD  rÓ   r¢   ÚmaxÚmin)r¤   rB  rÚ   Úfreqr5   rF  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©Úendswithrh   r†   rˆ   r‰   rì   r5   r6   r‘   <  s    
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr’   r“   r#  rC  Tr7  ç     @@rG  ç     À‚@g     à…@©
r?   r   r   r˜   r    rD  r¢   ÚcurrentrJ  rI  ©r¤   r‘   r™   rK  r5   rì   r6   Útest_emulate_data:  s     ÿ

z(TestSystemCPUFrequency.test_emulate_datac                    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 )NrM  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rO  ó   200000rQ  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rN  rP  r%  s#   cpu MHz     : 100
cpu MHz     : 400rR  )rŠ   r‹   rŒ   Únrì   r5   r6   r‘   [  s8    
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr’   r“   r#  rC  Tr7  ú!psutil._pslinux.cpu_count_logicalr  rH  r   ç      Y@rG  g      i@g     Àr@ru   g      y@rT  rU  rV  rX  r5   rì   r6   Útest_emulate_multi_cpuY  s&    ÿz-TestSystemCPUFrequency.test_emulate_multi_cpuc                    s„   ‡ fdd„}t ‰ trdnd}tj||d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 )NrM  rW   z/cpuinfo_cur_freqrZ  r%  s   cpu MHz     : 200)rS  rè   ré   rê   r†   rˆ   r‰   rì   r5   r6   r‘   Š  s    



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr’   r“   r#  rC  Tr7  r\  ru   éÈ   )r?   r   r   r˜   r    rD  r¢   rW  rX  r5   rì   r6   Ú%test_emulate_no_scaling_cur_freq_file‡  s    
ÿz<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)rº   r»   r¼   r~   r/  r   rE  rL  rY  r^  r`  r5   r5   r5   r6   r=    s   



-r=  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSystemCPUStatsc                 C   s&   t dƒ}t ¡ j}| j||dd d S )Nzcontext switcheséô  r«   )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Ú
interruptsrb  r«   )ry   r    rc  re  r®   r¿   r5   r5   r6   Útest_interrupts¦  s    
z"TestSystemCPUStats.test_interruptsN)rº   r»   r¼   rd  rf  r5   r5   r5   r6   ra  ž  s   ra  c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestLoadAvgr>  c              	   C   s€   t  ¡ }tdƒ}| ¡  ¡ }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/loadavgr   ru   r«   r  )r    Ú
getloadavgr?   rñ   rA   r®   Úfloat)r¤   r¥   rJ   Z
proc_valuer5   r5   r6   Útest_getloadavg¯  s    
zTestLoadAvg.test_getloadavgN)rº   r»   r¼   r~   r/  r   rj  r5   r5   r5   r6   rg  ¬  s   rg  c                   @   s   e Zd Zdd„ ZdS )ÚTestSystemNetIfAddrsc                 C   sÐ   t  ¡  ¡ D ]¾\}}|D ]°}|jt jkr<|  |jt|ƒ¡ q|jtj	krœ|  |jt
|ƒ¡ |  |jt|ƒ¡ |jd k	rŠ|  |jt|ƒ¡ qÈ|  t|ƒd¡ q|jtjkr|j d¡d }|  |t|ƒ¡ qqd S )Nz0.0.0.0ú%r   )r    Znet_if_addrsÚitemsÚfamilyZAF_LINKr¢   Úaddressr`   r'   r(   r7   Únetmaskr9   Ú	broadcastr;   rH   rA   rÔ   rR   )r¤   rŠ   ÚaddrsÚaddrro  r5   r5   r6   Útest_ipsÂ  s    
ÿzTestSystemNetIfAddrs.test_ipsN)rº   r»   r¼   rt  r5   r5   r5   r6   rk  ¿  s   rk  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 %sÚRUNNING)r´   z(?i)MTU[: ](\d+)r   )r    Únet_if_statsrm  r   ÚRuntimeErrorr¢   ZisupÚmturk   r‚   rƒ   )r¤   rŠ   Ústatsrl   r5   r5   r6   Útest_against_ifconfigì  s    ÿz*TestSystemNetIfStats.test_against_ifconfigc              
   C   sL   t  ¡  ¡ D ]:\}}td| ƒ }|  |jt| ¡  ¡ ƒ¡ W 5 Q R X qd S )Nz/sys/class/net/%s/mtu)	r    rz  rm  r?   r¢   r|  rk   rñ   r{   )r¤   rŠ   r}  rJ   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   rx  zflags=(\d+)?<(.*?)>r  ru   r3  z(.*)  MTU:(\d+)  Metric:(\d+)r¨   zno matches were found)r    rz  rm  r   r{  r‚   r  rC   rN   r4  ÚgroupÚlowerrA   Úflagsr¢   Úfail)r¤   Zmatches_foundrŠ   r}  rl   Ú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   ru  é  s
   
ru  c                   @   s,   e Zd Ze edƒ d¡eƒ dd„ ƒƒZdS )ÚTestSystemNetIOCountersrv  rw  c              	   C   s  dd„ }t jddd}| ¡ D ]Þ\}}z||ƒ}W n tk
rJ   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   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 )Nrx  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   rk   r‚   rƒ   )ZnicrÚ   rl   r5   r5   r6   rv  "  s&    ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowrapr  i   r«   rŽ  r‡  r¾   rˆ  r‰  é
   rŠ  r‹  rŒ  )r    Únet_io_countersrm  r{  r®   r  rŽ  r‡  rˆ  r‰  rŠ  r‹  rŒ  )r¤   rv  ZniorŠ   r}  Zifconfig_retr5   r5   r6   r~    s^    
  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿz-TestSystemNetIOCounters.test_against_ifconfigN)rº   r»   r¼   r~   r/  r   r   r~  r5   r5   r5   r6   r†    s   r†  c                   @   s8   e Zd Zejdedejddddd„ ƒƒZdd	„ Zd
S )ÚTestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr#  zpsutil._pslinux.supports_ipv6Fr7  c                 C   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'   rH   ÚSOCK_STREAMZ
addCleanupÚcloseÚbindÚerrorr    Únet_connections)r¤   Zsupports_ipv6rI   r4   r5   r5   r6   Útest_emulate_ipv6_unsupportedN  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_unixZ  s    þz*TestSystemNetConnections.test_emulate_unixN)rº   r»   r¼   r   r˜   rD   rš  rœ  r5   r5   r5   r6   r’  K  s   
r’  c                   @   s>   e Zd Ze eedƒ d¡eƒ dd„ ƒƒZdd„ Z	dd„ Z
d	S )
ÚTestSystemDiskPartitionsÚstatvfszos.statvfs() not availablec                 C   sn   dd„ }t jddD ]T}t  |j¡}||jƒ\}}}}|  |j|¡ | j|j|td | j|j	|td qd S )Nc                 S   sz   t d|  ƒ ¡ }| d¡}| d¡ | d¡}| ¡ d d… \}}}}|dkrRd}t|ƒt|ƒt|ƒ  }}}||||fS )Nzdf -P -B 1 "%s"rg   r   r=   ÚnonerW   )r   r{   rA   Úpoprk   )r0  rl   rm   rK   Údevro   rp   ra   r5   r5   r6   Údft  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallr«   )
r    Údisk_partitionsÚ
disk_usageZ
mountpointr¢   ro   r®   ra   r   rp   )r¤   r¢  ÚpartÚusagern   ro   rp   ra   r5   r5   r6   Útest_against_dfo  s    
ÿ
ÿz(TestSystemDiskPartitions.test_against_dfc              
   C   sÌ   t dƒ}| ¡ }W 5 Q R X d|krLt ¡ 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st‚|jsšt‚|s¢t‚|  |d jd¡ W 5 Q R X W 5 Q R X d S )Nz/proc/filesystemsÚzfszcouldn't find any ZFS partitionz
nodev	zfs
rö   Tr'  ú$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r©  Úrwr7  r   )r?   rñ   r    r¤  Zfstyperƒ  r†   r‡   r   r   r˜   rÒ   rÓ   r¢   )r¤   rJ   rò   r¦  r-  r:  r;  rÚ   r5   r5   r6   Útest_zfs_fsˆ  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/existentr7  )	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  l  s
   r  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSystemDiskIoCountersc              
   C   sÆ   t ddƒ² tjddd˜ tjdd}|  |jd¡ |  |jd	¡ |  |jd
t	 ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  |jdt	 ¡ |  |jd¡ |  |jd¡ W 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_deviceTr7  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µ  Tr7  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µ  Tr7  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µ  Fr7  T©Úperdiskr  r  Únvme0n1ru   Z	nvme0n1p1rv   )r›   rÌ   rÍ   r   r˜   r    rº  r¢   rC   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µ  Fr7  rÊ  c                 S   s   | dkS )NrÌ  r5   )rŠ   r5   r5   r6   Úis_storage_device  s    zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr”   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   r1     s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rË  úpsutil._pslinux.os.path.existsr”   )r    rº  r   r˜   r¢   rC   )r¤   r1  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   r1  ,  s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsrÐ  Tr”   )r   r˜   r°  ÚNotImplementedErrorr    rº  )r¤   r1  r5   r5   r6   Útest_emulate_not_impl+  s     ÿz.TestSystemDiskIoCounters.test_emulate_not_implN)
rº   r»   r¼   rÆ  rÇ  rÈ  rÍ  rÏ  rÑ  rÓ  r5   r5   r5   r6   r³  ¬  s   r³  c                   @   s^   e Zd Zdd„ Zdd„ Ze ed¡dd„ ƒZe e	dƒ d	¡e ed¡d
d„ ƒƒZ
dd„ ZdS )ÚTestRootFsDeviceFinderc                 C   s(   t  d¡j}t  |¡| _t  |¡| _d S )Nr«  )r  r|   Úst_devÚmajorÚminor)r¤   r¡  r5   r5   r6   ÚsetUp7  s    zTestRootFsDeviceFinder.setUpc                 C   sf   t ƒ }tj d¡r| ¡  n|  t|j¡ tj d| j| jf ¡rL| 	¡  n|  t|j	¡ | 
¡  d S ©Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)r   r  r0  r1  Úask_proc_partitionsr°  r   rÖ  r×  Úask_sys_dev_blockÚask_sys_class_block)r¤   Úfinderr5   r5   r6   Útest_call_methods<  s    
 ÿ
z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSc                 C   s¨   t ƒ }|  | ¡ ¡ d  } }}tj d¡r4| ¡ }tj d| j| jf ¡rT| 	¡ }| 
¡ }|pf|pf|}|r||r||  ||¡ |r|r|  ||¡ |r¤|r¤|  ||¡ d S rÙ  )r   ÚassertIsNotNoneÚfindr  r0  r1  rÚ  rÖ  r×  rÜ  rÛ  r¢   )r¤   rÝ  rß   rà   ÚcÚbaser5   r5   r6   Útest_comparisonsI  s$     ÿz'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablec                 C   s"   t ƒ  ¡ }tdƒ}|  ||¡ d S )Nzfindmnt -o SOURCE -rn /)r   rà  r   r¢   )r¤   r¥   Zfindmnt_valuer5   r5   r6   Útest_against_findmnt^  s    
z+TestRootFsDeviceFinder.test_against_findmntc              	   C   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¬  r7  r   rå  )r   r˜   r    r¤  rÒ   rÓ   r   ÚassertNotEqualZdevicer¢   r   rà  )r¤   rš   r¦  r5   r5   r6   Útest_disk_partitions_mockede  s    þ
z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)rº   r»   r¼   rØ  rÞ  r~   r/  r   rã  r   rä  rç  r5   r5   r5   r6   rÔ  4  s   


rÔ  c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	ƒ dd„ ƒZ
dd„ ZdS )ÚTestMiscc                 C   s(   t dƒ}t ¡ }|  t|ƒt|ƒ¡ d S )Nz	boot time)ry   r    Ú	boot_timer¢   rk   r¿   r5   r5   r6   Útest_boot_timez  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)rh   rè   ré   rê   r‰   rì   r5   r6   r‘   ‹  s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr’   r“   r#  TrH  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r®  )Ú
get_testfnr  Úmkdirr?   r0  rF   ÚwriteÚshutilÚrmtreer   r    r   r   r˜   r°  rè   r	  Úcpu_percentÚcpu_times_percentr¯  r¢   Úsumr   ræ  )r¤   Z	my_procfsrJ   r‘   r™   Zper_cpu_percentZper_cpu_times_percentr5   rì   r6   Útest_no_procfs_on_import  s\    


  ÿ

 ÿ ÿ

z!TestMisc.test_no_procfs_on_importc              	   C   s,  t dt d¡ ¡ ƒ8}t ¡  |js(t‚tjdd t ¡  tjdd W 5 Q R X t dt d¡ ¡ ƒ¼}t ¡ }|jszt‚tjdd}t ¡ }tjdd}|  	|d¡ |  	t
|ƒd¡ |  	t
|ƒd¡ |  	t
|ƒd¡ |  	t
tt
|ƒƒd¡ |  	t
tt
|ƒƒd¡ |  |jd¡ |  	|jd¡ W 5 Q R X d S )Nr$  zŽ                cpu   0 0 0 0 0 0 0 1 0 0
                cpu0  0 0 0 0 0 0 0 1 0 0
                cpu1  0 0 0 0 0 0 0 1 0 0
                TrH  zŽ                cpu   1 0 0 0 0 0 0 0 0 0
                cpu0  1 0 0 0 0 0 0 0 0 0
                cpu1  1 0 0 0 0 0 0 0 0 0
                r   r]  )r›   rÌ   rÍ   rÎ   r    rð  rÒ   rÓ   rñ  ræ  rò  r   r¢   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°  r{  r    r*  ré  rÒ   rÓ   r   r5   r5   r6   Útest_boot_time_mockedå  s    þzTestMisc.test_boot_time_mockedc              	   C   s¸   t jddgd&}|  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  r7  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®  TrH  )rë  r  rì  r    r¯  r°  rè   r¡   r	  ré  r™  r‘  rz  r¤  ZNoSuchProcessÚProcess)r¤   Ztdirr5   r5   r6   Útest_procfs_path   s    
zTestMisc.test_procfs_pathc              	   C   s|   t ƒ 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 rS   )ÚidrT   r5   r5   r6   Ú<lambda>  rÿ   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyru   )r   r    rþ  Úthreadsr¢   rC   Úsortedr   ræ  ÚpidÚ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/statusrW   )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è  w  s   =)
rè  z
no batteryc                   @   sf   e Zd Ze edƒ d¡dd„ ƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSensorsBatteryZacpizacpi utility not availablec                 C   sD   t dƒ}t| d¡d  ¡  dd¡ƒ}t ¡ j}| j||dd d S )Nzacpi -br3  ru   rl  rW   r«   )	r   rk   rA   r{   Úreplacer    Úsensors_batteryÚpercentr®   )r¤   rl   Z
acpi_valuer¥   r5   r5   r6   Útest_percent6  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                    s(   |   d¡rt d¡S ˆ | f|ž|ŽS d S )N©z
AC0/onlinez	AC/onlineó   1©rS  r†   rˆ   r‰   rì   r5   r6   r‘   ?  s    

z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr’   r“   r#  T)r?   r   r   r˜   r¢   r    r  Úpower_pluggedZsecsleftZPOWER_TIME_UNLIMITEDrÒ   rÓ   ©r¤   r‘   r™   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                    sD   |   d¡rttjdƒ‚n(|   d¡r0t tdƒ¡S ˆ | f|ž|ŽS d S )Nr  rW   ú/statusZcharging©rS  rè   ré   rê   r†   r‡   r   r‰   rì   r5   r6   r‘   P  s
    

zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr’   r“   r#  T©
r?   r   r   r˜   r¢   r    r  r  rÒ   rÓ   r  r5   rì   r6   Útest_emulate_power_plugged_2M  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                    s(   |   d¡rt d¡S ˆ | f|ž|ŽS d S )Nr  ó   0r  r‰   rì   r5   r6   r‘   `  s    

zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr’   r“   r#  Fr  r  r5   rì   r6   Útest_emulate_power_not_plugged^  s    z1TestSensorsBattery.test_emulate_power_not_pluggedc              	      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                    sD   |   d¡rttjdƒ‚n(|   d¡r0t tdƒ¡S ˆ | f|ž|ŽS d S )Nr  rW   r  Zdischargingr  r‰   rì   r5   r6   r‘   o  s
    

zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr’   r“   r#  Fr  r  r5   rì   r6   Ú test_emulate_power_not_plugged_2l  s    z3TestSensorsBattery.test_emulate_power_not_plugged_2c              	      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                    s@   |   d¡rttjdƒ‚n$|   d¡r,t d¡S ˆ | f|ž|ŽS d S )N)ú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onlinerW   ú#/sys/class/power_supply/BAT0/statuss   ???)rh   rè   ré   rê   r†   rˆ   r‰   rì   r5   r6   r‘   €  s    ÿ

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr’   r“   r#  )
r?   r   r   r˜   r+  r    r  r  rÒ   rÓ   r  r5   rì   r6   Útest_emulate_power_undetermined}  s    z2TestSensorsBattery.test_emulate_power_undeterminedc              	   C   s6   t ddƒ"}|  t ¡ jd¡ |js(t‚W 5 Q R X d S )Nú(/sys/class/power_supply/BAT0/energy_fullr  r   )r›   r¢   r    r  r  rÒ   rÓ   r   r5   r5   r6   Útest_emulate_energy_full_0‘  s     ÿz-TestSensorsBattery.test_emulate_energy_full_0c                 C   sh   t dttjdƒƒL t dttjdƒƒ. tddƒ |  t ¡ jd¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr$  rW   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!  rW   r   r"  )rž   rè   ré   rê   r+  r    r  r  r'  r5   r5   r6   Útest_emulate_no_power¥  s    
þ
þ
þz(TestSensorsBattery.test_emulate_no_powerN)rº   r»   r¼   r~   r/  r   r  r  r  r  r  r#  r%  r(  r)  r5   r5   r5   r6   r  2  s   
r  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsBatteryEmulatedc              
      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©rS  r†   r‡   r   r‰   rì   r5   r6   r‘   ·  s    


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr’   r“   z
os.listdirZBAT0r7  r#  )	r?   r   r   r˜   rß  r    r  rÒ   rÓ   )r¤   r‘   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)rS  r†   r‡   r   rˆ   r‰   rì   r5   r6   r‘   Î  s    







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr’   r“   r#  r6  z/sys/class/hwmon/hwmon0/temp1r7  rŠ   r   r0  ç      >@g      D@ç      I@©r?   r   r   r˜   r    Zsensors_temperaturesr¢   r0  rW  ÚhighÚcritical)r¤   r‘   r™   Útempr5   rì   r6   Útest_emulate_class_hwmonÍ  s    ÿz0TestSensorsTemperatures.test_emulate_class_hwmonc              
      s¦   ‡ fdd„}dd„ }t ‰ tr dnd}tj||d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_tempr2  r8  r1  Z0_typer7  ÚtyperŠ   )rS  r†   rˆ   r‡   r   r‰   rì   r5   r6   r‘   é  s    





zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockc                 S   s:   | dkrg S | dkrg S | dkr&dgS | dkr6ddgS g S )Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr5   r@  r5   r5   r6   Ú	glob_mockõ  s    ÿzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr’   r“   r#  r6  Tr”   rŠ   r   rW   r3  r4  r5  )r¤   r‘   r;  r™   r8  r5   rì   r6   Útest_emulate_class_thermalè  s    z2TestSensorsTemperatures.test_emulate_class_thermalN)rº   r»   r¼   r9  r<  r5   r5   r5   r6   r.  Ê  s   r.  c                   @   s   e Zd Zdd„ ZdS )ÚTestSensorsFansc              
      s‚   ‡ fdd„}t ‰ trdnd}tj||d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_labelr0  z/fan1_inputÚ2000r,  r‰   rì   r5   r6   r‘     s    


z4TestSensorsFans.test_emulate_data.<locals>.open_mockr’   r“   r#  r6  z/sys/class/hwmon/hwmon2/fan1r7  rŠ   r   r0  iÐ  )	r?   r   r   r˜   r    Zsensors_fansr¢   r0  rW  )r¤   r‘   r™   Úfanr5   rì   r6   rY    s    
ÿz!TestSensorsFans.test_emulate_dataN)rº   r»   r¼   rY  r5   r5   r5   r6   r=    s   r=  c                   @   s¼   e Zd Zeƒ dd„ ƒZdd„ Ze ed¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze e d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'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)Úgroupedc                 S   s   g | ]}|j |j ‘qS r5   )Zprivate_dirtyZprivate_cleanrs   r5   r5   r6   r[   2  s     z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>rí   r«   c                 S   s   g | ]
}|j ‘qS r5   )Úpssrs   r5   r5   r6   r[   5  s     c                 S   s   g | ]
}|j ‘qS r5   )rý   rs   r5   r5   r6   r[   7  s     )	Zspawn_testprocr    r*  rþ  r  Ú_parse_smapsÚmemory_mapsr®   rò  )r¤   ZsprocÚussrB  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þ  rC  rÒ   rÓ   r¢   )r¤   rš   r  rE  rB  rý   r5   r5   r6   Útest_parse_smaps_mocked9  s    
þ
z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYc              	   C   sh  dd„ }|   ¡ }t|dƒ |  ||ƒjd¡ W 5 Q R X t|ƒ |  ||ƒ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rdt|ƒ 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_filesr0  r  Úabspathr{  )Úfnamer  Z	giveup_atÚfiler5   r5   r6   Úget_test_file^  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filerÛ   Úrrß   zr+zw+za+rU   zx+)rë  r?   r¢   Úmoder   r   )r¤   rO  Ztestfnr5   r5   r6   Útest_open_files_mode\  s*    
z TestProcess.test_open_files_modec              
   C   sº   t  ¡ }| ¡ }t|  ¡ dƒ’ t|jdt|ƒ ƒ tjdt	t
jdƒd }| ¡ }|r\t‚|jsft‚W 5 Q R X tjdt	t
jdƒd }|  | ¡ g ¡ |js¢t‚W 5 Q R X W 5 Q R X d S )NrÛ   úlen(ret) != %iúpsutil._pslinux.os.readlinkrW   r#  )r    rþ  rK  r?   rë  r   rC   r   r˜   ÚOSErrorré   rê   rÓ   rÒ   ÚEINVALr¢   )r¤   r  Úfilesrš   r5   r5   r6   Útest_open_files_file_gone  s"    
ÿ
ÿz%TestProcess.test_open_files_file_gonec              
   C   sŠ   t  ¡ }| ¡ }t|  ¡ dƒ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Û   rS  r’   r“   rW   r#  )r    rþ  rK  r?   rë  r   rC   r   r   r˜   rè   ré   rê   rÓ   rÒ   ©r¤   r  rW  r™   rš   r5   r5   r6   Útest_open_files_fd_gone•  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Û   rS  rT  rW   r#  úpsutil._pslinux.debug)r    rþ  rK  r?   rë  r   rC   r   r˜   rU  ré   ÚENAMETOOLONGrÓ   rÒ   rY  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_mapr7  )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  rW   ©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  rW   r`  ra  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`  ra  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 )NrT  z/home/foo (deleted)r7  z	/home/foo)r   r˜   r¢   r    rþ  ÚexeÚcwdr'  r5   r5   r6   Ú!test_readlink_path_deleted_mockedì  s
    ÿz-TestProcess.test_readlink_path_deleted_mockedc              	      s–   ‡ fdd„}t ‰ trdnd}tj||d(}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/taskrW   )rh   r  r  rè   ré   rê   r‰   rì   r5   r6   Úopen_mock_1÷  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_1r’   r“   r#  c                    s4   |   dt ¡  ¡r ttjdƒ‚nˆ | f|ž|ŽS d S rh  )rh   r  r  rè   ré   ÚEPERMr‰   rì   r5   r6   Úopen_mock_2  s    z4TestProcess.test_threads_mocked.<locals>.open_mock_2)r?   r   r   r˜   r    rþ  r  rÒ   rÓ   r¢   r°  ZAccessDenied)r¤   ri  r™   rš   rÚ   rk  r5   rì   r6   Útest_threads_mockedò  s    
zTestProcess.test_threads_mockedc              	   C   sH   t jdttjdƒd(}t ¡  ¡ }|js.t	‚|  
|d¡ W 5 Q R X d S )Nzpsutil._pslinux.readlinkrW   r#  )r   r˜   rU  ré   rê   r    rþ  re  rÒ   rÓ   r¢   )r¤   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 )NrH  rW   )rž   r  r  rè   ré   rê   r    rþ  r°  r   rD  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T}t jddd:}t ¡ }| ¡  |  tj	¡}| 
tj¡ W 5 Q R X W 5 Q R X W 5 Q R X |jszt‚|js„t‚|  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitrW   r#  z"psutil._pslinux.Process._is_zombieTr7  )r   r˜   rU  ré   ZENOSYSr    rþ  rŠ   r°  ZZombieProcessZrlimitZRLIMIT_NOFILErÒ   rÓ   r¢   Ú	exceptionr  )r¤   r:  r;  r  r   r5   r5   r6   Útest_rlimit_zombie!  s     
ÿÿ*

zTestProcess.test_rlimit_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·  )rF   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_parsing3  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ƒƒ¡ 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¢   Únum_ctx_switchesÚ	voluntaryÚinvoluntaryÚnum_threadsÚuidsÚrealZ	effectiveZsavedÚgidsÚ_procÚ_get_eligible_cpusÚlistrE   )r¤   r  rˆ  rŠ  r5   r5   r6   Útest_status_file_parsingp  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 )NrT  rW   r#  r[  )
r   r˜   rU  ré   r\  r    rþ  ÚconnectionsrÓ   rÒ   rn  r5   r5   r6   Útest_connections_enametoolong‰  s    
ÿz)TestProcess.test_connections_enametoolongN)rº   r»   r¼   r   rG  rI  r~   r/  r   rR  rX  rZ  r]  r^  rb  rc  rd  rg  rl  rm  ro  r   rq  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 rS   )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{   rh   Ú	partitionrk   rD   )r¤   Z	linestartrJ   rK   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’  r{  rš  r5   r5   r6   Útest_status³  s    
z$TestProcessAgainstStatus.test_statusc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzPPid:)r™  r¢   r’  r|  rš  r5   r5   r6   Ú	test_ppid¹  s    
z"TestProcessAgainstStatus.test_ppidc                 C   s    |   d¡}|  | j ¡ |¡ d S )NzThreads:)r™  r¢   r’  r‡  rš  r5   r5   r6   Útest_num_threads½  s    
z)TestProcessAgainstStatus.test_num_threadsc                 C   s:   |   d¡}ttt| ¡ dd… ƒƒ}|  | j ¡ |¡ d S )NzUid:ru   r=   )r™  r€   r   rk   rA   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   rk   rA   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   rk   rA   r¢   r’  Zcpu_affinityr  rE   )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)r7  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)fr¨  Ú
__future__r   ri   r*   ré   Úglobr†   r  r‚   rî  r'   r0   rÌ   rJ  r~   rÏ   r    r   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)  r   r   r   r   r0  rL  ÚdirnameÚ__file__ZHEREr/   ZSIOCGIFCONFr]   r8   r:   r¾  ZEMPTY_TEMPERATURESr7   r9   r;   rR   r`   rr   rx   ry   r„   Úcontextmanagerr›   rž   r/  rŸ   r½   rÆ   rð   r  r  r2  r=  ra  rg  rk  ru  r†  r’  r  r³  rÔ  rè  r  r*  r.  r=  r@  r‘  rª  rº   Zpsutil.tests.runnerr®  r5   r5   r5   r6   Ú<module>   sþ   	

62 \[? )2. ? B ;A  mR
