a
    áªlc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 |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  d S ©Nr   é   ÚasciiÚ256sé   é   )Úfcntlr   ÚbytesÚsocketÚAF_INETÚ
SOCK_DGRAMÚ
contextlibÚclosingÚ	inet_ntoaÚioctlÚfilenoÚSIOCGIFADDRÚstructÚpack©Úifnamer%   Ús© r5   úS/var/www/html/django/DPS/env/lib/python3.9/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 |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  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 |¡8 t | 	| 
¡ tt d| ¡¡dd… ¡W  d   ƒ S 1 sz0    Y  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ƒX}g }| ¡ D ]"}| ¡ }|d | kr| |¡ qt|ƒdkrTtd|  ƒ‚W d   ƒ n1 sh0    Y  tdt|ƒƒD ]j}|| d }g }tdt|ƒdƒD ]}| |||d … ¡ q¤d |¡}	t 	tj
|	¡}
t tj
|
¡||< q€|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 |¡n | | 	¡ t
t d| ¡¡}trfdd„ ‰ ndd l}|j‰ d ‡ fdd	„|d
d… D ƒ¡d d… W  d   ƒ S 1 s°0    Y  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>˜   ó    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    
ÿ
rb   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Úusedrc   Úntr5   r5   r6   Ú	free_swap›   s    

ÿrt   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.
    rc   rd   re   rf   rg   ri   ZMemc                 S   s   g | ]}t |ƒ‘qS r5   )rm   ©rY   rV   r5   r5   r6   r\   ·   r]   z free_physmem.<locals>.<listcomp>é   é   ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)r   rB   rj   rk   rl   rE   rG   )rn   ro   rL   rq   rr   rc   Úsharedrs   r5   r5   r6   Úfree_physmemª   s    

ÿ
ÿÿry   c                 C   sZ   t ddgddid}| d¡D ]*}| ¡ }| |v rt| d¡d ƒ  S qtd	|  ƒ‚d S )
NÚvmstatz-sre   rf   rg   ri   ú r   z can't find %r in 'vmstat' output)r   rB   Ústriprm   rE   )Ústatrn   rL   r5   r5   r6   rz   ¿   s    rz   c                  C   s>   t ddgƒ ¡ } d| v r"t d¡‚ttt|  ¡ d  d¡ƒƒS )Nrc   z-VÚUNKNOWNzcan't determine free versionr=   Ú.)r   r|   ÚunittestÚSkipTestÚtupleÚmaprm   rB   )rn   r5   r5   r6   Úget_free_version_infoÈ   s    
r„   c                 #   sZ   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d  ƒ n1 sL0    Y  dS )zMock open() builtin and forces it to return a certain `content`
    on read() if the path being opened matches `for_path`.
    c                    sR   | ˆkr8t r,tˆ tƒr t ˆ ¡S t ˆ ¡S qNt ˆ ¡S nˆ| g|¢R i |¤Ž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                 #   sZ   ‡ ‡‡fdd„}t ‰trdnd}tj|d|d}|V  W d  ƒ n1 sL0    Y  dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                    s(   | ˆkrˆ ‚nˆ| g|¢R i |¤Ž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)rz   ÚpsutilÚvirtual_memoryrq   Ú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skipTestry   rr   r£   r¤   r¥   r   Úoutput©r§   rc   Ú
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¡   )rz   r£   r¤   rc   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¡   )rz   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¡   )rz   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¡   )rz   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­   )	ry   rx   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 vr.t d¡‚n:t|d  ¡ d ƒ}t ¡ j}| j||t	d	|||f d
 d S )Nrc   rd   ri   Ú	availabler   z(free does not support 'available' columnrv   r=   r¬   r­   )
r   rB   r€   r   rm   r£   r¤   r»   r¥   r   )r§   rn   ro   r±   r¨   r5   r5   r6   Útest_available>  s    

þz&TestSystemVirtualMemory.test_availablec              	   C   s  t dt d¡ ¡ ƒd}tjdd4}t d¡ t ¡ }|j	sDJ ‚|  
t|ƒd¡ |d }|j d¡slJ ‚|  d	t|jƒ¡ |  d
t|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  dt|jƒ¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ W d   ƒ n1 sb0    Y  W d   ƒ n1 s‚0    Y  d S )Nú/proc/meminfoap                  Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:         -1 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                SReclaimable:     346648 kB
                T©ÚrecordÚalwaysrv   r   úpsutil/_pslinux.pyz#memory stats couldn't be determinedÚcachedrx   r¶   r¸   r´   r»   )r›   ÚtextwrapÚdedentÚencodeÚwarningsÚcatch_warningsÚsimplefilterr£   r¤   ÚcalledÚassertEqualrD   ÚfilenameÚendswithÚassertInÚstrÚmessagerÂ   r¶   r¸   rx   r´   r»   Úslab©r§   rš   ÚwsÚretÚwr5   r5   r6   Útest_warnings_on_missesM  s8    þ


ÿz/TestSystemVirtualMemory.test_warnings_on_missesc                 C   s’   i }t dƒ:}|D ]$}| ¡ }t|d ƒd ||d < qW d   ƒ n1 sL0    Y  t|ƒ}d|v rŽ|d }t|| ƒ| d }|  |d¡ d S )Nr½   rv   r    r   s   MemAvailable:éd   r    )r   rB   rm   r   ÚabsZ
assertLess)r§   ZmemsrK   rL   rM   ÚaÚbZdiff_percentr5   r5   r6   Útest_avail_old_percentt  s    
8z.TestSystemVirtualMemory.test_avail_old_percentc              	   C   sž   t dt d¡ ¡ ƒv}tjdd}t ¡ }W d   ƒ n1 s@0    Y  |jsTJ ‚|  	|j
d¡ |d }|  dt|jƒ¡ W d   ƒ n1 s0    Y  d S )Nr½   aL                  Active:          9444728 kB
                Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Buffers:          287952 kB
                Cached:          4818144 kB
                Inactive(file):  1578132 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:    6574984 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                Shmem:            577588 kB
                SReclaimable:     346648 kB
                Tr¾   l     œ" r   ú,inactive memory stats couldn't be determined©r›   rÃ   rÄ   rÅ   rÆ   rÇ   r£   r¤   rÉ   rÊ   r»   rÍ   rÎ   rÏ   rÑ   r5   r5   r6   Ú test_avail_old_comes_from_kernel„  s    þ&

ÿz8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc              	   C   sž   t dt d¡ ¡ ƒv}tjdd}t ¡ }W d   ƒ n1 s@0    Y  |jsTJ ‚|  	|j
d¡ |d }|  dt|jƒ¡ W d   ƒ n1 s0    Y  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¡ ¡ ƒž tdttjdƒƒl tj	dd@}t
 ¡ }|  |jd¡ |d }|  d	t|jƒ¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  d S )
Nr½   aT                      Active:          9444728 kB
                    Active(anon):    6145416 kB
                    Active(file):    2950064 kB
                    Buffers:          287952 kB
                    Cached:          4818144 kB
                    Inactive(file):  1578132 kB
                    Inactive(anon):   574764 kB
                    Inactive(file):  1567648 kB
                    MemFree:         2057400 kB
                    MemTotal:       16325648 kB
                    Shmem:            577588 kB
                    SReclaimable:     346648 kB
                    z/proc/zoneinfoúno such file or directoryTr¾   rÞ   r   rÛ   )r›   rÃ   rÄ   rÅ   rž   ÚIOErrorÚerrnoÚENOENTrÆ   rÇ   r£   r¤   rÊ   r»   rÍ   rÎ   rÏ   )r§   rÒ   rÓ   rÔ   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@J ‚|  |jd¡ |  |j	d¡ |  |j
d	¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sÒ0    Y  d S )Nc                    s6   | dkrt  t d¡ ¡ ¡S ˆ | g|¢R i |¤Ž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Ê   rq   rc   r´   rÂ   rx   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 d  ƒ n1 s&0    Y  d|v o>d|v S )z3Return True if /proc/meminfo provides swap metrics.r½   Nz
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¡   )rt   rq   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ð   )rt   rr   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ð   )rt   rc   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‚}t d¡ t ¡ }|js:J ‚|  t	|ƒd¡ |d }|j
 d¡sbJ ‚|  d	t|jƒ¡ |  |jd¡ |  |jd¡ W d   ƒ n1 s¤0    Y  W d   ƒ n1 sÂ0    Y  d S )
Núpsutil._common.openT©r•   r¾   rÀ   rv   r   rÁ   z9'sin' and 'sout' swap memory stats couldn't be determined)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‚}t d¡ t ¡ }|j	s>J ‚|  
t|ƒd¡ |d }|j d¡sfJ ‚|  d	t|jƒ¡ |  
|jd¡ |  
|jd¡ W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )
Nz/proc/vmstatrà   Tr¾   rÀ   rv   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Ê   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 d   ƒ n1 s:0    Y  |jrNJ ‚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É   Zpsutil._psutil_linuxZ_psutil_linuxZlinux_sysinforÊ   rq   r¥   rc   r   )r§   rš   ÚswapZcextrp   rq   rc   Zunit_multiplierr5   r5   r6   Útest_meminfo_against_sysinfog  s    
&
z1TestSystemSwapMemory.test_meminfo_against_sysinfoc                 C   s@   t ddƒ"}t ¡  |jsJ ‚W d   ƒ n1 s20    Y  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ƒ   rm   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   sj   t dƒ}| ¡  ¡ }W d   ƒ n1 s*0    Y  dt|ƒv rft| d¡d ƒd }|  t ¡ |¡ d S )Nr  ú-rv   )	r@   rí   r|   rÎ   rm   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ur|‘qS )zcpu\d+$N)r  Úsearchru   r5   r5   r6   r\   ª  r]   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©Zlogical)rm   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 )ú#©rj   ru   r5   r5   r6   r\   µ  r]   z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>ri   Tr  )r   rD   rB   rÊ   r£   r  )r§   rn   r  r5   r5   r6   Útest_against_lscpu²  s    z,TestSystemCPUCountLogical.test_against_lscpuc              	   C   sŠ  dd l }|j ¡ }tjdtdR}|  |j ¡ |¡ |js@J ‚tjdddD}|  |j ¡ ¡ |  |j	d¡ |  |j
d d d¡ W d   ƒ n1 s˜0    Y  td	d
ƒ}| ¡ }W d   ƒ n1 sÊ0    Y  t |¡}tjd|dd"}|  |j ¡ |¡ W d   ƒ n1 s0    Y  td	dƒ(}|  |j ¡ |¡ |j W d   ƒ n1 s\0    Y  W d   ƒ n1 s|0    Y  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É   ÚassertIsNoneZ
call_countZ	call_argsr@   rí   r†   rˆ   r›   )r§   r£   Úoriginalrš   rK   Zcpuinfo_dataÚ	fake_filer5   r5   r6   Útest_emulate_fallbacks¸  s.    
ÿ
4&
ÿ2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  ri   r  ú,rv   Fr  )	r   ÚsetrB   rj   ÚaddrÊ   r£   r  rD   )r§   rn   Zcore_idsrL   rM   r5   r5   r6   r  Ý  s    

z*TestSystemCPUCountCores.test_against_lscpuc                 C   sd   t j ¡ }tjdg d$}t j ¡ }|js.J ‚W d   ƒ n1 sB0    Y  |d ur`|  ||¡ d S )Nú	glob.glob©r%  )r£   r'  Úcpu_count_coresr   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N}t jddd }|  tj ¡ ¡ W d   ƒ n1 sD0    Y  W d   ƒ n1 sb0    Y  |jsvJ ‚|js€J ‚d S )Nr3  r4  ró   Trô   )r   r˜   r(  r£   r'  r5  rÉ   )r§   Úm1Úm2r5   r5   r6   Útest_emulate_noneï  s
    L
z)TestSystemCPUCountCores.test_emulate_noneN)	ré   rê   rë   r€   r,  r   r  r6  r9  r5   r5   r5   r6   r/  Ú  s   
	r/  c                   @   sz   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡dd	„ ƒZ	e e d¡d
d„ ƒZ
dS )ÚTestSystemCPUFrequencyúnot supportedc                    sT   ‡ fdd„}t jj‰ tjd|dd t ¡ s2J ‚W d   ƒ n1 sF0    Y  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-  r.  r   r˜   r£   Úcpu_freq)r§   r?  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t ttjƒ t ¡ }|s@J ‚|  	|j
d¡ |  	|jd¡ tjddD ] }|  	|j
d¡ |  	|jd¡ qhW d   ƒ n1 sž0    Y  W ttjƒ ttƒ nttjƒ ttƒ 0 d S )Nc                    s   |   d¡rdS ˆ | ƒS d S )Nz/sys/devices/system/cpu/Fr  r=  ©Zos_path_existsr5   r6   r?    s    
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr@  r   ç        T©Zpercpu)r  r-  r.  r   r˜   r   r£   r'  rA  rÊ   ÚmaxÚmin)r§   r?  rÓ   Úfreqr5   rC  r6   Útest_emulate_use_cpuinfo  s     
0

ÿ
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc              	      sÂ   ‡ fdd„}t ‰ trdnd}tj||d„ tjdddV t ¡ }|  |jd	¡ |jd
krj|  |jd¡ |j	d
kr‚|  |j	d¡ W d   ƒ n1 s–0    Y  W d   ƒ n1 s´0    Y  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 ˆ | g|¢R i |¤ŽS d S )
Nú/scaling_cur_freqr<  ó   500000ú/scaling_min_freqó   600000ú/scaling_max_freqs   700000r"  s   cpu MHz		: 500©rÌ   rj   r†   rˆ   r‰   rå   r5   r6   r‘   #  s    
ÿ

ÿ

ÿ

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr’   r“   r   r@  Tr4  ç     @@rD  ç     À‚@g     à…@©
r@   r   r   r˜   r£   rA  rÊ   ÚcurrentrG  rF  ©r§   r‘   r™   rH  r5   rå   r6   Útest_emulate_data!  s    ÿ

z(TestSystemCPUFrequency.test_emulate_datac              
      sb  ‡ fdd„}t ‰ trdnd}tj||d  tjdddð tjd	d
dÀ tjdd}|  |d jd¡ |d jdkrŒ|  |d jd¡ |d j	dkr¬|  |d j	d¡ |  |d jd¡ |d jdkrÞ|  |d jd¡ |d j	dkrþ|  |d j	d¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s40    Y  W d   ƒ n1 sT0    Y  d S )Nc                    sä   | }|  d¡r"| d¡r"t d¡S |  d¡r@| d¡r@t d¡S |  d¡r^| d¡r^t d¡S |  d¡r|| d¡r|t d	¡S |  d¡rš| d¡ršt d
¡S |  d¡r¸| d¡r¸t d¡S | dkrÊt d¡S ˆ | g|¢R i |¤ŽS d S )NrJ  z'/sys/devices/system/cpu/cpufreq/policy0s   100000rL  ó   200000rN  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000rK  rM  r"  s   cpu MHz		: 100
cpu MHz		: 400rO  )rŠ   r‹   rŒ   Únrå   r5   r6   r‘   B  s8    
ÿ

ÿ

ÿ

ÿ

ÿ

ÿ

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr’   r“   r   r@  Tr4  ú!psutil._pslinux.cpu_count_logicalr   rE  r   ç      Y@rD  g      i@g     Àr@rv   g      y@rP  rQ  rR  rT  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‚ tjdddT tjd	d
d& t ¡ }|  |jd¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  d S )Nc                    sX   |   d¡rttjdƒ‚n<|   d¡r,t d¡S | dkr>t d¡S ˆ | g|¢R i |¤ŽS d S )NrJ  rX   z/cpuinfo_cur_freqrV  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   r@  Tr4  rX  rv   éÈ   )r@   r   r   r˜   r£   rA  rÊ   rS  rT  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   rB  rI  rU  rZ  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¡   )rz   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¡   )rz   r£   r_  ra  r¥   r¦   r5   r5   r6   Útest_interrupts  s    
z"TestSystemCPUStats.test_interruptsN)ré   rê   rë   r`  rb  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 d   ƒ n1 s40    Y  | jt|d ƒ|d dd | jt|d ƒ|d dd | jt|d ƒ|d dd d S )Nz/proc/loadavgÚrr   rv   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   rg  r5   r5   r5   r6   rc  “  s   rc  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 u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Ê   Úaddressrb   r'   r(   r7   Únetmaskr9   Ú	broadcastr;   rI   rB   rÍ   rS   )r§   rŠ   ÚaddrsÚaddrrl  r5   r5   r6   Útest_ips©  s    
ÿzTestSystemNetIfAddrs.test_ipsN)ré   rê   rë   rq  r5   r5   r5   r6   rh  ¦  s   rh  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   sr   t  ¡  ¡ D ]`\}}ztd| ƒ}W n ty6   Y q0 | j|jd|v |d |  |jtt	 
d|¡d ƒ¡ qd S )Núifconfig %sÚRUNNING)r®   z(?i)MTU[: ](\d+)r   )r£   Únet_if_statsrj  r   ÚRuntimeErrorrÊ   ZisupÚmturm   r  r  )r§   rŠ   Ústatsrn   r5   r5   r6   Útest_against_ifconfigÓ  s    ÿz*TestSystemNetIfStats.test_against_ifconfigc              	   C   sb   t  ¡  ¡ D ]P\}}td| dƒ*}|  |jt| ¡  ¡ ƒ¡ W d   ƒ q1 sR0    Y  qd S )Nz/sys/class/net/%s/mtur<   )	r£   rw  rj  r@   rÊ   ry  rm   rí   r|   )r§   rŠ   rz  rK   r5   r5   r6   Útest_mtuß  s    zTestSystemNetIfStats.test_mtuc              	   C   s
  d}t  ¡  ¡ D ]ä\}}ztd| ƒ}W n ty:   Y q0 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   ru  zflags=(\d+)?<(.*?)>r   rv   r0  z(.*)  MTU:(\d+)  Metric:(\d+)rª   zno matches were found)r£   rw  rj  r   rx  r  r  rD   rO   r1  ÚgroupÚlowerrB   ÚflagsrÊ   Úfail)r§   Zmatches_foundrŠ   rz  rn   Ú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   rr  Ð  s
   
rr  c                   @   s,   e Zd Ze edƒ d¡eƒ dd„ ƒƒZdS )ÚTestSystemNetIOCountersrs  rt  c              	      s  ‡ fdd„}t jddd}| ¡ D ]Ü\‰ }z|ˆ ƒ}W n tyL   Y q"Y n0 | 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 )Nru  zRX packets[: ](\d+)r   Úpackets_recvzTX packets[: ](\d+)Úpackets_sentzerrors[: ](\d+)Úerrinrv   Úerroutzdropped[: ](\d+)ÚdropinÚdropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)Ú
bytes_sent)r   rm   r  r  )ZnicrÓ   rn   ©rŠ   r5   r6   rs  	  s&    ÿÿÿÿz?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)ZpernicÚnowraprŠ  i   r¡   r‹  r„  r    r…  r†  é
   r‡  rˆ  r‰  )r£   Únet_io_countersrj  rx  r¥   rŠ  r‹  r„  r…  r†  r‡  rˆ  r‰  )r§   rs  Zniorz  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_ipv6Fr4  c                 C   sP   z*t   t jt j¡}|  |j¡ | d¡ W n t jy>   Y n0 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   sJ   t dt d¡ƒ&}tjdd |js(J ‚W d   ƒ n1 s<0    Y  d S )Nz/proc/net/unixa.                  0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
                0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
                0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
                000000000000000000000000000000000000000000000000000000
                Úunixr‘  )r›   rÃ   rÄ   r£   r—  rÉ   rü   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"ri   r   r>   ÚnonerX   )r   r|   rB   Úpoprm   )r-  rn   ro   rL   Údevrq   rr   rc   r5   r5   r6   Údf[  s    


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)Úallr¡   )
r£   Údisk_partitionsÚ
disk_usageZ
mountpointrÊ   rq   r¥   rc   r   rr   )r§   r   ÚpartÚusagerŸ  rq   rr   rc   r5   r5   r6   Útest_against_dfV  s    
ÿ
ÿz(TestSystemDiskPartitions.test_against_dfc              	   C   s
  t ddƒ}| ¡ }W d   ƒ n1 s(0    Y  d|v rbt ¡ D ]}|jdkrB q`qB|  d¡‚n¤t tdƒ¡}t	j
d|ddv}t	j
d	d
gdF}t ¡ }|js¦J ‚|js°J ‚|s¸J ‚|  |d jd¡ W d   ƒ n1 sÞ0    Y  W d   ƒ n1 sü0    Y  d S )Nz/proc/filesystemsrd  Úzfszcouldn't find any ZFS partitionz
nodev	zfs
ró   Tr$  ú$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3ú/r§  Úrwr4  r   )r@   rí   r£   r¢  Zfstyper€  r†   r‡   r   r   r˜   rÉ   rÊ   )r§   rK   rî   r¤  r*  r7  r8  rÓ   r5   r5   r6   Útest_zfs_fso  s,    &
ÿþ

z$TestSystemDiskPartitions.test_zfs_fsc              	   C   s‚   ztt jdddL}|  t¡ t ¡  W d   ƒ n1 s:0    Y  |jsNJ ‚W d   ƒ n1 sb0    Y  W dt_ndt_0 d S )Nzos.path.realpathz/non/existentr4  ú/proc)r   r˜   ÚassertRaisesr   r£   r¢  rÉ   ÚPROCFS_PATHrü   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 d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nú/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12ú!psutil._pslinux.is_storage_deviceTr4  F©r  rv   r   rª   r>   rw   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 d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nr²  z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r³  Tr4  Fr´  rv   r   rª   r>   rw   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 d   ƒ n1 sÂ0    Y  W d   ƒ n1 sà0    Y  d S )Nr²  z   3    1   hda 1 2 3 4r³  Tr4  Fr´  rv   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v tjddd}|  t|ƒd¡ |  |d	 j	d
¡ |  |d j	d
¡ |  |d	 j
d¡ |  |d j
d¡ W d   ƒ n1 sœ0    Y  W d   ƒ n1 sº0    Y  d S )Nr²  ú                    3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
                    3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
                    r³  Fr4  T©Úperdiskr  r   Únvme0n1rv   Z	nvme0n1p1rw   )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¡ƒV tjddd( tjddd}|  |¡ W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  dd„ }t dt d¡ƒj tjdd	|d
: tjddd}|  |j	d¡ |  |j
d¡ W d   ƒ n1 sà0    Y  W d   ƒ n1 sþ0    Y  d S )Nr²  rÇ  r³  Fr4  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”   rv   rw   )r›   rÃ   rÄ   r   r˜   r£   r¸  r(  rÊ   r¹  r¾  )r§   rÓ   rÌ  r5   r5   r6   Útest_emulate_exclude_partitionsç  s(    þÿFþÿz8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc                 C   sh   dd„ }t jdd}tjdd|d t jdd}W d   ƒ n1 sF0    Y  |  t|ƒt|ƒ¡ d S )Nc                 S   s   | dkrdS dS )Nr²  FTr5   r=  r5   r5   r6   r.    s    z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)rÉ  úpsutil._pslinux.os.path.existsr”   )r£   r¸  r   r˜   rÊ   rD   )r§   r.  ZwprocfsZwsysfsr5   r5   r6   Útest_emulate_use_sysfs  s    ÿ*z/TestSystemDiskIoCounters.test_emulate_use_sysfsc                 C   sJ   dd„ }t jdd|d |  ttj¡ W d   ƒ n1 s<0    Y  d S )Nc                 S   s   dS )NFr5   r=  r5   r5   r6   r.    s    z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsrÎ  Tr”   )r   r˜   r­  ÚNotImplementedErrorr£   r¸  )r§   r.  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-  r.  Ú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-  r.  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   s€   t jddgd\}t ¡ d }|js(J ‚tsP|  |jd¡ |  |jt	ƒ  
¡ ¡ n|  |jd¡ W d   ƒ n1 sr0    Y  d S )Nr¨  )ú	/dev/rootr©  Zext4rª  r4  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)rz   r£   Ú	boot_timerÊ   rm   r¦   r5   r5   r6   Útest_boot_timea  s    zTestMisc.test_boot_timec              	      sp  |   ¡ }t |¡ ttj |d¡dƒ.}| d¡ | d¡ | d¡ W d   ƒ n1 sZ0    Y  zât‰ ‡ fdd„}tr€dnd	}tj	||d
Ž t
tƒ |  ttj¡ | jttjdd |  ttj¡ | jttjdd |  ttj¡ | jttjdd |t_|  t ¡ d¡ |  tt ¡ ƒd¡ tjdd}|  t|ƒd¡ tjdd}|  ttt|ƒƒd¡ ttj |d¡dƒ.}| d¡ | d¡ | d¡ W d   ƒ n1 s°0    Y  |  t ¡ d¡ |  ttjddƒd¡ |  tt ¡ ƒd¡ |  ttttjddƒƒd¡ W d   ƒ n1 s*0    Y  W t |¡ t
tƒ nt |¡ t
tƒ 0 |  tjd¡ d S )Nr}   rÔ   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                    s,   |   d¡rttjdƒ‚ˆ | g|¢R i |¤ŽS )Nr¬  zrejecting access for test)rj   rá   râ   rã   r‰   rå   r5   r6   r‘   r  s    
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr’   r“   r   TrE  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   Úwriter   r   r˜   r   r£   r­  rá   r  Úcpu_percentÚcpu_times_percentr®  rÊ   Úsumrƒ   rä  ÚshutilÚrmtree)r§   Z	my_procfsrK   r‘   r™   Zper_cpu_percentZper_cpu_times_percentr5   rå   r6   Útest_no_procfs_on_importf  sX    


(ÿ

*ÿÿ&

ÿ

z!TestMisc.test_no_procfs_on_importc                 C   sV  t dt d¡ ¡ ƒB}t ¡  |js(J ‚tjdd t ¡  tjdd W d   ƒ n1 s\0    Y  t dt d¡ ¡ ƒÆ}t ¡ }|jsŽJ ‚tjdd}t ¡ }tjdd}|  |d¡ |  t	|ƒd¡ |  t	|ƒd¡ |  t	|ƒd¡ |  t	t
t	|ƒƒd¡ |  t	t
t	|ƒƒd¡ |  |jd¡ |  |jd¡ W d   ƒ n1 sH0    Y  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
                TrE  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   rY  )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   sL   t jddd*}|  ttjj¡ |js*J ‚W d   ƒ n1 s>0    Y  d S )Nró   Trô   )r   r˜   r­  rx  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0}|  t ¡ d jd¡ |js2J ‚W d   ƒ n1 sF0    Y  t jddgd0}|  t ¡ d jd¡ |js‚J ‚W d   ƒ n1 s–0    Y  t jddgd0}|  t ¡ d jd¡ |jsÒJ ‚W d   ƒ n1 sæ0    Y  d S )	Nzpsutil._pslinux.cext.users)Ú	giampaoloúpts/2z:0ç   €hÕATr   r4  r   Ú	localhost)rõ  rö  z:0.0r÷  Tr   )rõ  rö  Úfoor÷  Tr   rù  )r   r˜   rÊ   r£   ZusersÚhostrÉ   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 dt_ndt_0 d S )NTrE  r¬  )ré  r  rê  r£   r®  r­  rá   r¤   r  rç  r—  r  rw  r¢  ZNoSuchProcessÚProcess)r§   Ztdirr5   r5   r6   Útest_procfs_pathç  s    
zTestMisc.test_procfs_pathc                 C   s   t ƒ v t ¡ }| ¡ }|  t|ƒd¡ t|dd„ dd j}|  |j	|¡ t |¡}| 
¡  |  |t ¡ ¡ W d   ƒ n1 s‚0    Y  d S )Nr   c                 S   s   | j S rT   )ÚidrU   r5   r5   r6   Ú<lambda>  r]   z)TestMisc.test_issue_687.<locals>.<lambda>)Úkeyrv   )r   r£   rü  ÚthreadsrÊ   rD   Úsortedrþ  rä  ÚpidÚas_dictr
  Zpids)r§   Úpr  ÚtidÚptr5   r5   r6   Útest_issue_687ú  s    
zTestMisc.test_issue_687c                 C   sJ   t ddƒ,}t t ¡ ¡sJ ‚|js(J ‚W d   ƒ n1 s<0    Y  d S )Nú/proc/%s/statusrX   )r›   r£   Z
pid_existsr  ÚgetpidrÉ   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 -br0  rv   ri  rX   r¡   )	r   rm   rB   r|   Úreplacer£   Úsensors_batteryÚpercentr¥   )r§   rn   Z
acpi_valuer¨   r5   r5   r6   Útest_percent  s    
zTestSensorsBattery.test_percentc                    s~   ‡ fdd„}t ‰ trdnd}tj||d@}|  t ¡ jd¡ |  t ¡ jtj	¡ |j
s\J ‚W d   ƒ n1 sp0    Y  d S )Nc                    s8   |   d¡s|   d¡rt d¡S ˆ | g|¢R i |¤Ž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š   r5   rå   r6   Útest_emulate_power_plugged$  s    ÿz-TestSensorsBattery.test_emulate_power_pluggedc                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    sT   |   d¡s|   d¡r"ttjdƒ‚n.|   d¡r:t tdƒ¡S ˆ | g|¢R i |¤Ž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  r5   rå   r6   Útest_emulate_power_plugged_24  s    z/TestSensorsBattery.test_emulate_power_plugged_2c                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    s8   |   d¡s|   d¡rt d¡S ˆ | g|¢R i |¤Ž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                    sj   ‡ fdd„}t ‰ trdnd}tj||d,}|  t ¡ jd¡ |jsHJ ‚W d   ƒ n1 s\0    Y  d S )Nc                    sT   |   d¡s|   d¡r"ttjdƒ‚n.|   d¡r:t tdƒ¡S ˆ | g|¢R i |¤Ž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                    sh   ‡ fdd„}t ‰ trdnd}tj||d*}|  t ¡ j¡ |jsFJ ‚W d   ƒ n1 sZ0    Y  d S )Nc                    sP   |   d¡s|   d¡r"ttjdƒ‚n*|   d¡r6t d¡S ˆ | g|¢R i |¤ŽS d S )Nú"/sys/class/power_supply/AC0/onlineú!/sys/class/power_supply/AC/onlinerX   ú#/sys/class/power_supply/BAT0/statuss   ???)rj   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  r5   rå   r6   Útest_emulate_power_undeterminedd  s    	z2TestSensorsBattery.test_emulate_power_undeterminedc                 C   sJ   t ddƒ,}|  t ¡ jd¡ |js(J ‚W d   ƒ n1 s<0    Y  d S )Nú(/sys/class/power_supply/BAT0/energy_fullr  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   s¤   t dttjdƒƒ~ t dttjdƒƒL tddƒ" |  t ¡ jd¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  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   sª   t dttjdƒƒ„ t dttjdƒƒR t dttjdƒƒ  |  t ¡ j¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  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              	      s    ‡ fdd„}t ‰ trdnd}tjddgdL}tj||d}|  t ¡ ¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  |js’J ‚|jsœJ ‚d S )	Nc                    sb   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | g|¢R i |¤Ž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BAT0r4  r   )r@   r   r   r˜   rÝ  r£   r  rÉ   )r§   r‘   r™   ZmlistdirZmopenr5   rå   r6   Útest_it›  s    
J
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ˆ tjddgdX t ¡ d	 d
 }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  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 ˆ | g|¢R i |¤Ž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   r3  z/sys/class/hwmon/hwmon0/temp1r4  rŠ   r   r/  ç      >@g      D@ç      I@©r@   r   r   r˜   r£   Zsensors_temperaturesrÊ   r/  rS  Ú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ˆ tjdd	|d
X t ¡ d d }|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ W d   ƒ n1 s¢0    Y  W d   ƒ n1 sÀ0    Y  d S )Nc                    sr   |   d¡rt d¡S |   d¡r(t d¡S |   d¡r@t tdƒ¡S |   d¡rXt tdƒ¡S ˆ | g|¢R i |¤Ž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   r3  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l tjddgd< t ¡ d	 d
 }|  |jd¡ |  |jd¡ W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  d S )Nc                    sb   |   d¡rt tdƒ¡S |   d¡r0t tdƒ¡S |   d¡rHt tdƒ¡S ˆ | g|¢R i |¤Ž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   r3  z/sys/class/hwmon/hwmon2/fan1r4  rŠ   r   r/  iÐ  )	r@   r   r   r˜   r£   Zsensors_fansrÊ   r/  rS  )r§   r‘   r™   Úfanr5   rå   r6   rU  ô  s    
ÿz!TestSensorsFans.test_emulate_dataN)ré   rê   rë   rU  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)Úgroupedc                 S   s   g | ]}|j |j ‘qS r5   )Zprivate_dirtyZprivate_cleanru   r5   r5   r6   r\     r]   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>ræ   r¡   c                 S   s   g | ]
}|j ‘qS r5   )Úpssru   r5   r5   r6   r\     r]   c                 S   s   g | ]
}|j ‘qS r5   )rú   ru   r5   r5   r6   r\     r]   )	Zspawn_testprocr£   r'  rü  r  Ú_parse_smapsÚmemory_mapsr¥   rî  )r§   ZsprocÚussrA  rú   Úmapsr5   r5   r6   Útest_parse_smaps_vs_memory_maps  s    þÿÿz+TestProcess.test_parse_smaps_vs_memory_mapsc                 C   sŒ   t dt ¡  t d¡ ¡ ƒ\}tj t ¡ ¡}| 	¡ \}}}|j
sFJ ‚|  |d¡ |  |d¡ |  |d¡ W d   ƒ n1 s~0    Y  d S )Nú/proc/%s/smapsaÆ                  fffff0 r-xp 00000000 00:00 0                  [vsyscall]
                Size:                  1 kB
                Rss:                   2 kB
                Pss:                   3 kB
                Shared_Clean:          4 kB
                Shared_Dirty:          5 kB
                Private_Clean:         6 kB
                Private_Dirty:         7 kB
                Referenced:            8 kB
                Anonymous:             9 kB
                LazyFree:              10 kB
                AnonHugePages:         11 kB
                ShmemPmdMapped:        12 kB
                Shared_Hugetlb:        13 kB
                Private_Hugetlb:       14 kB
                Swap:                  15 kB
                SwapPss:               16 kB
                KernelPageSize:        17 kB
                MMUPageSize:           18 kB
                Locked:                19 kB
                VmFlags: rd ex
                i l  rç   i <  )r›   r  r
  rÃ   rÄ   rÅ   r£   r'  rü  rB  rÉ   rÊ   )r§   rš   r  rD  rA  rú   r5   r5   r6   Útest_parse_smaps_mocked  s    
þ
z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYc                 C   s  dd„ }|   ¡ }t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sB0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 s~0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sº0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sö0    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 s40    Y  t|dƒ" |  ||ƒjd¡ W d   ƒ n1 sr0    Y  trt|ƒ t|d	ƒ" |  ||ƒjd¡ W d   ƒ n1 s¾0    Y  t|ƒ t|d
ƒ" |  ||ƒjd¡ W d   ƒ n1 s0    Y  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  Úabspathrx  )Úfnamer  Z	giveup_atÚfiler5   r5   r6   Úget_test_fileC  s    z7TestProcess.test_open_files_mode.<locals>.get_test_filerÔ   rd  rØ   zr+zw+za+rV   zx+)ré  r@   rÊ   Úmoder   r   )r§   rN  Ztestfnr5   r5   r6   Útest_open_files_modeA  s*    0000222z TestProcess.test_open_files_modec              	   C   sö   t  ¡ }| ¡ }t|  ¡ dƒÄ t|jdt|ƒ ƒ tjdt	t
jdƒd*}| ¡ }|r\J ‚|jsfJ ‚W d   ƒ n1 sz0    Y  tjdt	t
jdƒd*}|  | ¡ g ¡ |js¶J ‚W d   ƒ n1 sÊ0    Y  W d   ƒ n1 sè0    Y  d S )NrÔ   úlen(ret) != %iúpsutil._pslinux.os.readlinkrX   r   )r£   rü  rJ  r@   ré  r   rD   r   r˜   ÚOSErrorrâ   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ƒ€ t|jdt|ƒ ƒ tr<dnd}tj	|t
tjdƒd*}| ¡ }|rhJ ‚|jsrJ ‚W d   ƒ n1 s†0    Y  W d   ƒ n1 s¤0    Y  d S )NrÔ   rQ  r’   r“   rX   r   )r£   rü  rJ  r@   ré  r   rD   r   r   r˜   rá   râ   rã   rÉ   ©r§   r  rU  r™   rš   r5   r5   r6   Útest_open_files_fd_gonez  s    
ÿz#TestProcess.test_open_files_fd_gonec              
   C   sÔ   t  ¡ }| ¡ }t|  ¡ dƒ¢ t|jdt|ƒ ƒ d}tj|t	t
jdƒdT}t d¡* | ¡ }|rlJ ‚|jsvJ ‚W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )NrÔ   rQ  rR  rX   r   úpsutil._pslinux.debug)r£   rü  rJ  r@   ré  r   rD   r   r˜   rS  râ   ÚENAMETOOLONGrÉ   rW  r5   r5   r6   Útest_open_files_enametoolongŠ  s    
ÿz(TestProcess.test_open_files_enametoolongc                 C   sV   t jdi d4}|  tj t ¡ ¡ ¡ ¡ |j	s4J ‚W d   ƒ n1 sH0    Y  d S )Nz)psutil._pslinux._psposix.get_terminal_mapr4  )
r   r˜   r(  r£   r'  rü  r  r
  ZterminalrÉ   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	sFJ ‚W d   ƒ n1 sZ0    Y  t tdƒ¡}tjd|dd.}|  | ¡ g d¢¡ |j	s¢J ‚W d   ƒ n1 s¶0    Y  d S )	Nzfoo bar ró   Tr$  rù  Úbarz	foo bar  ©rù  r]  rX   ©
r£   rü  r†   r‡   r   r   r˜   rÊ   ZcmdlinerÉ   ©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	sFJ ‚W d   ƒ n1 sZ0    Y  t tdƒ¡}tjd|dd.}|  | ¡ g d¢¡ |j	s¢J ‚W d   ƒ n1 s¶0    Y  d S )	Nzfoo bar ró   Tr$  rù  r]  z	foo bar  r^  r_  r`  r5   r5   r6   Útest_cmdline_spaces_mocked¹  s    ÿ(ÿz&TestProcess.test_cmdline_spaces_mockedc                 C   sh   t  ¡ }t tdƒ¡}tjd|dd.}|  | ¡ ddg¡ |j	sFJ ‚W d   ƒ n1 sZ0    Y  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   sZ   t jddd8 |  t ¡  ¡ d¡ |  t ¡  ¡ d¡ W d   ƒ n1 sL0    Y  d S )NrR  z/home/foo (deleted)r4  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2}t ¡  ¡ }|jsBJ ‚|  |g ¡ W d   ƒ n1 sb0    Y  ‡ fdd„}tj||d$ |  	tj
t ¡ j¡ W d   ƒ n1 s°0    Y  d S )Nc                    s:   |   dt ¡  ¡r ttjdƒ‚nˆ | g|¢R i |¤ŽS d S ©Nz/proc/%s/taskrX   )rj   r  r
  rá   râ   rã   r‰   rå   r5   r6   r‘   Ü  s    z2TestProcess.test_threads_mocked.<locals>.open_mockr’   r“   r   c                    s:   |   dt ¡  ¡r ttjdƒ‚nˆ | g|¢R i |¤ŽS d S rg  )rj   r  r
  rá   râ   ÚEPERMr‰   rå   r5   r6   r‘   ë  s    )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	sFJ ‚|j	sPJ ‚|  
|d¡ t jddd$ |  tjt ¡ j¡ W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  d S )	Nzpsutil._pslinux.readlinkrX   r   zpsutil.Process.cmdliner   zpsutil._pslinux.os.path.lexistsFr4  )r   r˜   rS  râ   rã   r£   ri  rü  rd  rÉ   rÊ   r­  ÚZombieProcess)r§   r7  r8  rÓ   r5   r5   r6   Útest_exe_mockedô  s$    
ÿ
ÿ

ÿÿzTestProcess.test_exe_mockedc              	   C   s‚   t dt ¡  ttjdƒƒT}t ¡ }|  t	¡ | 
¡  W d   ƒ n1 sL0    Y  |js`J ‚W d   ƒ n1 st0    Y  d S )NrG  rX   )rž   r  r
  rá   râ   rã   r£   rü  r­  r   rC  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b}t ¡ }| ¡  |  tj	¡}| 
tj¡ W d   ƒ n1 sV0    Y  |jsjJ ‚W d   ƒ n1 s~0    Y  |  |jj|j¡ |  |jj| ¡ ¡ d S )Nzpsutil._pslinux.prlimitrX   r   )r   r˜   rS  râ   ZENOSYSr£   rü  rŠ   r­  rk  ZrlimitZRLIMIT_NOFILErÉ   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 d   ƒ n1 sR0    Y  |jsfJ ‚W d   ƒ n1 sz0    Y  |  |jj|j¡ |  |jj| ¡ ¡ d S )NrR  rX   r   )r   r˜   rS  râ   rã   r£   rü  rŠ   r­  rk  re  rÉ   rÊ   ro  r  rp  r5   r5   r6   Útest_cwd_zombie#  s    
ÿ&(zTestProcess.test_cwd_zombiec                 C   s  g d¢}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 d   ƒ n1 s0    Y  d S )N)*r*  z(cat)ÚZÚ1r*  r*  r*  r*  r*  r*  r*  r*  r*  Ú2Ú3Ú4Ú5r*  r*  r*  r*  Ú6r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  r*  ry  r*  r*  Ú7r{   z/proc/%s/statÚcatrv   r  r   rª   r>   rw   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.  s"    ,ÿz"TestProcess.test_stat_file_parsingc                 C   sü   t dt ¡  t d¡ ¡ ƒÌ t ¡ }|  | 	¡ j
d¡ |  | 	¡ jd¡ |  | ¡ d¡ | ¡ }|  |jd¡ |  |jd¡ |  |jd¡ | ¡ }|  |jd	¡ |  |jd
¡ |  |jd¡ |  |j ¡ ttddƒƒ¡ W d   ƒ n1 sî0    Y  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   s‚   t jdttjdƒdX}t ¡ }t  d¡& | ¡ r8J ‚|jsBJ ‚W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )NrR  rX   r   rY  )	r   r˜   rS  râ   rZ  r£   rü  ÚconnectionsrÉ   rm  r5   r5   r6   Útest_connections_enametoolong„  s    
ÿz)TestProcess.test_connections_enametoolongN)ré   rê   rë   r   rF  rH  r€   r,  r   rP  rV  rX  r[  r\  ra  rb  rc  rf  rj  rl  rn  r   rq  rr  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 ]j}| ¡ }| |¡r| d¡d }zt|ƒW   W  d   ƒ S  t	y‚   | Y   W  d   ƒ S 0 qt	d| ƒ‚W d   ƒ n1 s¦0    Y  d S )Nr	  ú	r   zcan't find %r)
r£   Ú_psplatformÚ	open_textr“  r  r|   rj   Ú	partitionrm   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:ú(rv   ú)r{   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:rv   r>   )rš  r‚   rƒ   rm   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:rv   r>   )rš  r‚   rƒ   rm   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|ƒv rJtt| d¡ƒ\}}|  | j ¡ tt	||d ƒƒ¡ d S )NúCpus_allowed_list:r  rv   )
rš  rÎ   rƒ   rm   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   sf   |   d¡}t d¡}| jj ¡  W d   ƒ n1 s60    Y  dt|ƒv rX|jrbJ ‚n
|jsbJ ‚d S )Nr¦  zpsutil._pslinux.per_cpu_timesr  )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   sP   t jddd.}|  tj d¡d¡ |js.J ‚W d   ƒ n1 sB0    Y  d S )Nzos.readlinkzfoo (deleted)r4  r]  rù  )r   r˜   rÊ   r£   r—  ÚreadlinkrÉ   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   rk   r*   râ   Úglobr†   r  r  rï  r'   r0   rÃ   rI  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-  rK  ÚdirnameÚ__file__ZHEREr/   ZSIOCGIFCONFr_   r8   r:   r¼  ZEMPTY_TEMPERATURESr7   r9   r;   rS   rb   rt   ry   rz   r„   Úcontextmanagerr›   rž   r,  rŸ   rì   rÿ   r  r/  r:  r]  rc  rh  rr  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
