o
    ÎÊÌav  ã                   @   s  d 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$ ddl
m%Z% ddl
m&Z& ddl
m'Z' G dd„ de"ƒZ(e )d d!¡Z*G d"d#„ d#e"ƒZ+e' ,ej- .e!¡ d$¡G d%d&„ d&e"ƒƒZ/e0d'k�rdd(l1m2Z2 e2e3ƒ dS dS ))z
Miscellaneous tests.
é    N)ÚLINUX)ÚPOSIX)ÚWINDOWS)Údebug)Úmemoize)Úmemoize_when_activated)Úsupports_ipv6)Úwrap_numbers)ÚPY3)Úredirect_stderr)ÚAPPVEYOR)Ú
CI_TESTING)ÚHAS_BATTERY)ÚHAS_MEMORY_MAPS)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)Ú
PYTHON_EXE)ÚROOT_DIR)ÚSCRIPTS_DIR)ÚPsutilTestCase)Úimport_module_by_path)Úmock)Úreload_module)Úsh)Úunittestc                   @   sä   e Zd Zef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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d0d1„ Zd2d3„ Zd4S )5ÚTestMiscc                 C   s   t  |  ¡ j¡}||ƒ}|  d|¡ |  d|j |¡ |  dt| ¡ ƒ | dd¡¡ |  d|¡ |  d|¡ | 	¡  | 
¡  ||ƒ}|  d|¡ |  d|¡ tjjt jd	t  t ¡ ¡d
��% t  ¡ }||ƒ}|  d|j |¡ |  d|¡ |  d|¡ W d   ƒ n1 s†w   Y  tjjt jd	t  t ¡ ¡d
��% t  ¡ }||ƒ}|  d|j |¡ |  d|¡ |  d|¡ W d   ƒ n1 sÂw   Y  tjjt jd	t  t ¡ ¡d
��  t  ¡ }||ƒ}|  d|j |¡ |  d|¡ W d   ƒ d S 1 sùw   Y  d S )Nzpsutil.Processzpid=%sz	name='%s'zname=u'zname='zstatus=z	exitcode=zstatus='terminated'Úname©Úside_effectzstatus='zombie'zname=Ú
terminated)ÚpsutilÚProcessÚspawn_testprocÚpidÚassertInÚstrr   ÚreplaceÚassertNotInÚ	terminateÚwaitr   ÚpatchÚobjectÚZombieProcessÚosÚgetpidÚNoSuchProcessÚAccessDenied)ÚselfÚfuncÚpÚr© r7   ú8/usr/lib/python3/dist-packages/psutil/tests/test_misc.pyÚtest_process__repr__;   sP   
ÿÿúÿúÿ"ûzTestMisc.test_process__repr__c                 C   s   | j td� d S )N)r4   )r9   r'   ©r3   r7   r7   r8   Útest_process__str___   ó   zTestMisc.test_process__str__c                 C   ó6   |   tt d¡ƒd¡ |   ttjdddd�ƒd¡ d S )NéA  z=psutil.NoSuchProcess(pid=321, msg='process no longer exists')r   Úmsg©r   r?   z5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))ÚassertEqualÚreprr"   r1   r:   r7   r7   r8   Útest_no_such_process__repr__b   ó   þþz%TestMisc.test_no_such_process__repr__c                 C   r=   )Nr>   z"process no longer exists (pid=321)r   r?   r@   úmsg (pid=321, name='name'))rA   r'   r"   r1   r:   r7   r7   r8   Útest_no_such_process__str__j   rD   z$TestMisc.test_no_such_process__str__c              	   C   ó8   |   tt d¡ƒd¡ |   ttjddddd�ƒd¡ d S )Nr>   zGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r   é@  Úfoo©r   Úppidr?   z?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))rA   rB   r"   r.   r:   r7   r7   r8   Útest_zombie_process__repr__r   s   þþz$TestMisc.test_zombie_process__repr__c              	   C   rG   )Nr>   z,PID still exists but it's a zombie (pid=321)r   rH   rI   rJ   z$foo (pid=321, ppid=320, name='name'))rA   r'   r"   r.   r:   r7   r7   r8   Útest_zombie_process__str__{   s   þþz#TestMisc.test_zombie_process__str__c                 C   r=   )Nr>   zpsutil.AccessDenied(pid=321)r   r?   r@   z4psutil.AccessDenied(pid=321, name='name', msg='msg'))rA   rB   r"   r2   r:   r7   r7   r8   Útest_access_denied__repr__ƒ   rD   z#TestMisc.test_access_denied__repr__c                 C   r=   )Nr>   z	(pid=321)r   r?   r@   rE   )rA   r'   r"   r2   r:   r7   r7   r8   Útest_access_denied__str__‹   rD   z"TestMisc.test_access_denied__str__c                 C   r=   )Né   z?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')r>   r   ©r%   r   zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))rA   rB   r"   ÚTimeoutExpiredr:   r7   r7   r8   Útest_timeout_expired__repr__“   rD   z%TestMisc.test_timeout_expired__repr__c                 C   r=   )NrP   ztimeout after 5 secondsr>   r   rQ   z.timeout after 5 seconds (pid=321, name='name'))rA   r'   r"   rR   r:   r7   r7   r8   Útest_timeout_expired__str__œ   rD   z$TestMisc.test_timeout_expired__str__c                 C   s>   t  ¡ }t  ¡ }|  ||¡ d|_|  ||¡ |  |d¡ d S )N)r   r   rI   )r"   r#   rA   Ú_identÚassertNotEqual)r3   Úp1Úp2r7   r7   r8   Útest_process__eq__¤   s   zTestMisc.test_process__eq__c                 C   s(   t t ¡ t ¡ gƒ}|  t|ƒd¡ d S )Né   )Úsetr"   r#   rA   Úlen)r3   Úsr7   r7   r8   Útest_process__hash__¬   s   zTestMisc.test_process__hash__c              	   C   s¨   t tƒ}|D ]?}|dv rq| d¡sEzt|ƒ W q tyD   |tjvrBtt|ƒ}|d u r/Y q|jd urBd|j ¡ vrB|  	d| ¡ Y qw qtjD ]}|  
||¡ qId S )N)ÚlongÚtestsÚtestÚPermissionErrorÚProcessLookupErrorÚ_Ú
deprecatedz%r not in psutil.__all__)Údirr"   Ú
startswithÚ
__import__ÚImportErrorÚ__all__ÚgetattrÚ__doc__ÚlowerÚfailr&   )r3   Ú
dir_psutilr   Úfunr7   r7   r8   Útest__all__°   s*   



€ùý
ÿzTestMisc.test__all__c                 C   s$   |   d dd„ tjD ƒ¡tj¡ d S )NÚ.c                 S   s   g | ]}t |ƒ‘qS r7   )r'   )Ú.0Úxr7   r7   r8   Ú
<listcomp>Ê   s    z)TestMisc.test_version.<locals>.<listcomp>)rA   Újoinr"   Úversion_infoÚ__version__r:   r7   r7   r8   Útest_versionÉ   s   ÿzTestMisc.test_versionc                 C   s"   t  ¡ }d|_|  d| ¡ ¡ d S )NÚ1rI   )r"   r#   rI   r)   Úas_dict)r3   r5   r7   r7   r8   Ú!test_process_as_dict_no_new_namesÍ   s   z*TestMisc.test_process_as_dict_no_new_namesc                    s  t ‡ fdd„ƒ}g ‰ tdƒD ]}|ƒ }di f}|  ||¡ |  tˆ ƒd¡ qtdƒD ]}|dƒ}di f}|  ||¡ |  tˆ ƒd¡ q*tdƒD ]}|ddd�}dddif}|  ||¡ |  tˆ ƒd	¡ qG| ¡  |ƒ }di f}|  ||¡ |  tˆ ƒd
¡ |  |jd¡ d S )Nc                     s   ˆ   d¡ | |fS )úfoo docstringN©Úappend)ÚargsÚkwargs©Úcallsr7   r8   rI   Ô   s   
z"TestMisc.test_memoize.<locals>.fooé   r7   rZ   )rZ   )Úbarr…   é   é   r}   )r   ÚrangerA   r\   Úcache_clearrl   )r3   rI   rt   ÚretÚexpectedr7   r‚   r8   Útest_memoizeÓ   s0   zTestMisc.test_memoizec                    s    G ‡ fdd„dƒ}|ƒ }g ‰ |  ¡  |  ¡  |  tˆ ƒd¡ g ‰ |j  |¡ |  ¡  |  ¡  |  tˆ ƒd¡ g ‰ |j  |¡ |  ¡  |  ¡  |  tˆ ƒd¡ d S )Nc                       s   e Zd Ze‡ fdd„ƒZdS )z1TestMisc.test_memoize_when_activated.<locals>.Fooc                    s   ˆ   d ¡ d S ©Nr~   r:   r‚   r7   r8   rI   ù   ó   z5TestMisc.test_memoize_when_activated.<locals>.Foo.fooN)Ú__name__Ú
__module__Ú__qualname__r   rI   r7   r‚   r7   r8   ÚFoo÷   s    r’   r„   rZ   )rI   rA   r\   Úcache_activateÚcache_deactivate)r3   r’   Úfr7   r‚   r8   Útest_memoize_when_activatedö   s    z$TestMisc.test_memoize_when_activatedc                 C   sØ   ddl m} dd„ }|  |dƒ|dƒdi¡ |  |dƒ|dƒd|d	ƒd
i¡ |  |dƒ|dƒd|d	ƒdi¡ |  |dƒ|dƒd|d	ƒd
i¡ |  |dƒ|dƒdi¡ |  |dƒ|dƒdi¡ |  |dƒ|dƒdi¡ d S )Nr   )Úparse_environ_blockc                 S   s   t r|  ¡ S | S r�   )r   Úupper)r]   r7   r7   r8   Úk  r<   z,TestMisc.test_parse_environ_block.<locals>.kza=1 Úarz   z	a=1 b=2  ÚbÚ2za=1 b=  Ú za=1 b=2  c=3 zxxx a=1 z	a=1 =b=2 za=1 b=2)Úpsutil._commonr—   rA   )r3   r—   r™   r7   r7   r8   Útest_parse_environ_block  s"   

ÿ
ÿ
ÿ
ÿz!TestMisc.test_parse_environ_blockc              	   C   s°  |   tj¡ tƒ r§t d¡�}d|_t ¡  tƒ rJ ‚W d   ƒ n1 s%w   Y  t ¡  tjdtjd��}tƒ r<J ‚|jsAJ ‚W d   ƒ n1 sKw   Y  t ¡  tjdtj	d��}tƒ rbJ ‚t ¡  |jskJ ‚W d   ƒ n1 suw   Y  t ¡  tjdtj	d��}tƒ rŒJ ‚t ¡  |js•J ‚W d   ƒ d S 1 s w   Y  d S |  
t¡�" t tjtj¡}z| d¡ W | ¡  n| ¡  w W d   ƒ d S 1 sÑw   Y  d S )Nzpsutil._common.socketFzpsutil._common.socket.socketr   z!psutil._common.socket.socket.bind)z::1r   )Ú
addCleanupr   r‰   r   r,   Úhas_ipv6ÚsocketÚerrorÚcalledÚgaierrorÚassertRaisesÚ	ExceptionÚAF_INET6ÚSOCK_STREAMÚbindÚclose)r3   r]   Úsockr7   r7   r8   Útest_supports_ipv6&  sN   ýÿ
ýÿ
üÿ
"ü"ûzTestMisc.test_supports_ipv6c                 C   sB  ddl m} tj t¡}||ƒsJ ‚|tj |¡ƒrJ ‚tjdt	t
jdƒd�� |  t	||¡ W d   ƒ n1 s9w   Y  tjdt	t
jdƒd�� |  t	||¡ W d   ƒ n1 s[w   Y  tjdt	t
jdƒd�� ||ƒrrJ ‚W d   ƒ n1 s|w   Y  tjddd�� ||ƒr�J ‚W d   ƒ d S 1 sšw   Y  d S )	Nr   )Úisfile_strictzpsutil._common.os.statrI   r   zpsutil._common.stat.S_ISREGF©Úreturn_value)rž   r®   r/   ÚpathÚabspathÚ__file__Údirnamer   r,   ÚOSErrorÚerrnoÚEPERMr¦   ÚEACCESÚENOENT)r3   r®   Ú	this_filer7   r7   r8   Útest_isfile_strictI  s,   
ÿþ
ÿþ
ÿþ"ÿzTestMisc.test_isfile_strictc                    s¬   ‡ fdd„}|t  ¡  ¡ ƒ |t  ¡ ƒ |t  ¡ ƒ |t  ¡ ƒ |t jdd�ƒ |t  ¡ ƒ tr7t	j
 d¡s7nts?|t  ¡ ƒ |t  ¡ ƒ |t  t	 ¡ ¡ƒ |t  ¡ ƒ d S )Nc                    s<   t d urt  t  | ¡¡ t | ¡}t |¡}ˆ  | |¡ d S r�   )ÚjsonÚloadsÚdumpsÚpicklerA   )rŠ   rš   r›   r:   r7   r8   Úcheck[  s
   

z*TestMisc.test_serialization.<locals>.checkr   )Úintervalz/proc/diskstats)r"   r#   r{   Úvirtual_memoryÚswap_memoryÚ	cpu_timesÚcpu_times_percentÚnet_io_countersr   r/   r±   Úexistsr   Údisk_io_countersÚdisk_partitionsÚ
disk_usageÚgetcwdÚusers)r3   rÀ   r7   r:   r8   Útest_serializationZ  s   zTestMisc.test_serializationz*temporarily disabled due to setuptools bugc                 C   sT   t j td¡}trt j |¡s|  d¡S t|ƒ}|  t	|j
¡ |  | ¡ tj¡ d S )Nzsetup.pyzcan't find setup.py)r/   r±   rv   r   r   rÇ   ÚskipTestr   r¦   Ú
SystemExitÚsetuprA   Úget_versionr"   rx   )r3   Úsetup_pyÚmoduler7   r7   r8   Útest_setup_scriptr  s   
zTestMisc.test_setup_scriptc              	   C   s
  t jjtjdtjd��}t ¡  |jsJ ‚W d   ƒ n1 sw   Y  t jjtjdt d¡d��}t ¡  |js;J ‚W d   ƒ n1 sEw   Y  t jjtjdtd��'}|  	t¡� t ¡  W d   ƒ n1 siw   Y  |jssJ ‚W d   ƒ d S 1 s~w   Y  d S )NÚcreate_timer   rZ   )
r   r,   r-   r"   r#   r2   r¤   r.   Ú
ValueErrorr¦   )r3   Úmethr7   r7   r8   Útest_ad_on_process_creation{  s.   ÿýÿýÿ
ÿ"üz$TestMisc.test_ad_on_process_creationc              	   C   s|   t jddd��- |  t¡�}ttƒ W d   ƒ n1 sw   Y  |  dt|jƒ 	¡ ¡ W d   ƒ d S 1 s7w   Y  d S )Nzpsutil._psplatform.cext.versionz0.0.0r¯   zversion conflict)
r   r,   r¦   ri   r   r"   r&   r'   Ú	exceptionrm   )r3   Úcmr7   r7   r8   Útest_sanity_version_checkŒ  s   ÿ
ÿ"üz"TestMisc.test_sanity_version_checkc                 C   sF  t r	ddlm} nddlm} t|ƒ ƒ�}tdƒ W d   ƒ n1 s#w   Y  | ¡ }| d¡s5J |ƒ‚|  d|¡ |  t 	dd¡|¡ t|ƒ ƒ�}tt
dƒƒ W d   ƒ n1 s[w   Y  | ¡ }|  d|¡ |  d	|¡ t|ƒ ƒ�}td
dƒ}d|_t|ƒ W d   ƒ n1 sŒw   Y  | ¡ }|  d|¡ |  d|¡ d S )Nr   )ÚStringIOÚhellozpsutil-debugz.pycú.pyzthis is an errorzignoring ValueErrorz'this is an error'r„   zno such filez/foo)r
   ÚiorÜ   r   r   Úgetvaluerg   r&   r³   r(   rÖ   rµ   Úfilename)r3   rÜ   r•   r?   Úexcr7   r7   r8   Ú
test_debug”  s0   
ÿÿ

ýzTestMisc.test_debugN) r�   r�   r‘   rB   r9   r;   rC   rF   rL   rM   rN   rO   rS   rT   rY   r^   rq   ry   r|   rŒ   r–   rŸ   r­   r»   rÍ   r   ÚskipIfr   rÔ   rØ   rÛ   rã   r7   r7   r7   r8   r   9   s6    $		##

r   rI   za b cc                   @   sŽ   e Zd Zdd„ Ze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dd„ Ze e d¡dd„ ƒZdS )ÚTestWrapNumbersc                 C   s   t  ¡  d S r�   )r	   r‰   r:   r7   r7   r8   ÚsetUp¼  s   zTestWrapNumbers.setUpc                 C   s&   dt dddƒi}|  t|dƒ|¡ d S ©NÚdisk1rP   Údisk_io©ÚntrA   r	   ©r3   Úinputr7   r7   r8   Útest_first_callÁ  s   zTestWrapNumbers.test_first_callc                 C   s8   dt dddƒi}|  t|dƒ|¡ |  t|dƒ|¡ d S rç   rê   rì   r7   r7   r8   Útest_input_hasnt_changedÅ  s   z(TestWrapNumbers.test_input_hasnt_changedc                 C   sŒ   dt dddƒi}|  t|dƒ|¡ dt dddƒi}|  t|dƒ|¡ dt dddƒi}|  t|dƒ|¡ dt dddƒi}|  t|dƒ|¡ d S )	Nrè   rP   ré   é
   é   é   é   é   rê   rì   r7   r7   r8   Útest_increase_but_no_wrapÊ  s   z)TestWrapNumbers.test_increase_but_no_wrapc                 C   s–  dt dddƒi}|  t|dƒ|¡ dt dddƒi}|  t|dƒdt dddƒi¡ dt dddƒi}|  t|dƒdt dddƒi¡ dt dddƒi}|  t|dƒdt dddƒi¡ dt dddƒi}|  t|dƒdt ddd	ƒi¡ dt dddƒi}|  t|dƒdt ddd	ƒi¡ dt d
ddƒi}|  t|dƒdt ddd	ƒi¡ dt dddƒi}|  t|dƒdt ddd	ƒi¡ dt dddƒi}|  t|dƒdt ddd	ƒi¡ d S )Nrè   éd   ré   rð   én   éZ   é¾   rò   éÒ   é2   é–   é(   rê   rì   r7   r7   r8   Ú	test_wrapÔ  sD   ÿÿÿÿÿÿÿÿzTestWrapNumbers.test_wrapc                 C   st   dt dddƒi}|  t|dƒ|¡ t dddƒt dddƒdœ}|  t|dƒ|¡ dt dddƒi}|  t|dƒ|¡ d S )Nrè   rP   ré   é   ©rè   Údisk2é   rê   rì   r7   r7   r8   Útest_changing_keysù  s   

ÿz"TestWrapNumbers.test_changing_keysc                 C   s.  t dddƒt dddƒdœ}|  t|dƒ|¡ t dddƒt dddƒdœ}|  t|dƒt dddƒt dddƒdœ¡ dt dddƒi}|  t|dƒ|¡ t dddƒt dddƒdœ}|  t|dƒ|¡ t dddƒt dddƒdœ}|  t|dƒ|¡ t dddƒt dddƒdœ}|  t|dƒt dddƒt dddƒdœ¡ d S )Nrû   rö   r   ré   rð   r÷   rè   rê   rì   r7   r7   r8   Útest_changing_keys_w_wrap  s<   

ÿ

ÿ

ÿÿ

ÿ

ÿ

ÿ

ÿÿz)TestWrapNumbers.test_changing_keys_w_wrapc                 C   sb   dddddœ}|   t|dƒ|¡ |   t|dƒ|¡ dddddœ}t|dƒ}|   |d d	 d
¡ d S )N)	i,  éü  é€  é#  éR  éÃ  é  é§ä éÈ·  )	i“  r„   i tU i   i  r   r   r   r  )	é6   r  i �$ i ÐN r‡   é   rô   i·  é   )	iU	  i»  i"  rü   iÜ  i4  iã  iŽ  i\  )Únvme0n1Ú	nvme0n1p1Ú	nvme0n1p2Ú	nvme0n1p3ré   )	rö   r  r  r  r  r	  r
  r  r  r  r   i�  )rA   r	   )r3   ÚdÚoutr7   r7   r8   Útest_real_data#  s   ýý
zTestWrapNumbers.test_real_datac                 C   sb   dt dddƒi}t|dƒ t ¡ }|  |d d|i¡ |  |d di i¡ |  |d di i¡ d S )Nrè   rP   ré   r   rZ   r„   ©rë   r	   Ú
cache_inforA   ©r3   rí   Úcacher7   r7   r8   Útest_cache_first_call4  s   
z%TestWrapNumbers.test_cache_first_callc                 C   s„   dt dddƒi}t|dƒ dt dddƒi}t|dƒ t ¡ }|  |d d|i¡ |  |d dddddœi¡ |  |d di i¡ d S )	Nrè   rP   ré   rð   r   rZ   ©)rè   r   )rè   rZ   ©rè   r„   r„   r  r  r7   r7   r8   Útest_cache_call_twice<  s   

þz%TestWrapNumbers.test_cache_call_twicec                    s‚  dt dddƒi}t|dƒ dt dddƒi}t|dƒ t ¡ }ˆ  |d d|i¡ ˆ  |d dddddœi¡ ˆ  |d ddtd	gƒii¡ ‡ fd
d„}dt dddƒi}t|dƒ t ¡ }ˆ  |d d|i¡ |ƒ  dt dddƒi}t|dƒ t ¡ }ˆ  |d d|i¡ |ƒ  dt dddƒi}t|dƒ t ¡ }ˆ  |d d|i¡ ˆ  |d dddddœi¡ ˆ  |d ddtd	gƒii¡ d S )Nrè   rö   ré   rð   r   rZ   r  r„   r  c                     sF   t  ¡ } ˆ  | d dddddœi¡ ˆ  | d ddtdgƒii¡ d S )	NrZ   ré   r   rö   r  r„   rè   r  )r	   r  rA   r[   )r  r:   r7   r8   Úassert_W  s   ÿþ
ÿz0TestWrapNumbers.test_cache_wrap.<locals>.assert_rø   rò   rù   )rë   r	   r  rA   r[   )r3   rí   r  r  r7   r:   r8   Útest_cache_wrapH  s>   

þ



þ"zTestWrapNumbers.test_cache_wrapc                 C   sŽ   dt dddƒi}t|dƒ t dddƒt dddƒdœ}t|dƒ t ¡ }|  |d d|i¡ |  |d dddddœi¡ |  |d	 di i¡ d S )
Nrè   rP   ré   rÿ   r   r   rZ   r  r„   r  r  r7   r7   r8   Útest_cache_changing_keysx  s   


ÿ
þz(TestWrapNumbers.test_cache_changing_keysc                 C   s\   dt dddƒi}t|dƒ t|dƒ t d¡ |  t ¡ i i i f¡ t d¡ t d¡ d S )Nrè   rP   ré   z?!?)rë   r	   r‰   rA   r  rì   r7   r7   r8   Útest_cache_clear…  s   



z TestWrapNumbers.test_cache_clearúnot supportedc                 C   s°   t  ¡ rt  ¡ s|  d¡S t  ¡  t  ¡  t ¡ }|D ]}|  d|¡ |  d|¡ qt j ¡  t ¡ }|D ]}|  d|¡ |  d|¡ q5t j ¡  t ¡ }|  	|i i i f¡ d S )Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters)
r"   rÈ   rÆ   rÎ   r	   r  r&   r‰   r)   rA   )r3   Úcachesr  r7   r7   r8   Útest_cache_clear_public_apisŽ  s    


z,TestWrapNumbers.test_cache_clear_public_apisN)r�   r�   r‘   ræ   ÚtearDownrî   rï   rõ   rþ   r  r  r  r  r  r   r!  r"  r   rä   r   r%  r7   r7   r7   r8   rå   º  s"    
%0	rå   zcan't locate scripts directoryc                   @   s~  e Zd ZdZedd„ ƒZed<dd„ƒZdd„ Ze 	e
 d	¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ Ze 	eo:e ¡  d¡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*d+„ Zd,d-„ Ze 	e  d.¡d/d0„ ƒZ!d1d2„ Z"e 	e# d¡d3d4„ ƒZ$e 	e% d¡d5d6„ ƒZ&e 	e' d¡e 	e( d7¡d8d9„ ƒƒZ)e 	e' d¡e 	e( d7¡d:d;„ ƒƒZ*dS )=ÚTestScriptsz-Tests for scripts in the "scripts" directory.c              
   O   s’   dt j t| ¡ } t| g}|D ]}| |¡ qzt|fi |¤Ž ¡ }W n ty@ } zdt	|ƒv r;t	|ƒW  Y d }~S ‚ d }~ww |sGJ |ƒ‚|S )Nz%sr2   )
r/   r±   rv   r   r   r   r   ÚstripÚRuntimeErrorr'   )Úexer€   r�   ÚcmdÚargr  Úerrr7   r7   r8   Úassert_stdout®  s   €üzTestScripts.assert_stdoutNc                 C   sf   t j t| ¡} trt| ddd�}nt| dƒ}|� | ¡ }W d   ƒ n1 s'w   Y  t |¡ d S )NÚrtÚutf8)Úencoding)	r/   r±   rv   r   r
   ÚopenÚreadÚastÚparse)r*  r€   r•   Úsrcr7   r7   r8   Úassert_syntax¾  s   

ÿzTestScripts.assert_syntaxc                 C   sV   t | ƒ}t t¡D ]}| d¡r(dtj |¡d  |vr(|  dtj t|¡ ¡ q	d S )NrÞ   Útest_r   zno test defined for %r script)	rf   r/   Úlistdirr   Úendswithr±   Úsplitextrn   rv   )r3   Úmethsr   r7   r7   r8   Útest_coverageÉ  s   
ÿ€üzTestScripts.test_coveragez
POSIX onlyc                 C   s`   t  t¡D ](\}}}|D ] }| d¡r,t j ||¡}tjt  |¡tj @ s,|  	d| ¡‚qqd S )NrÞ   z%r is not executable)
r/   Úwalkr   r:  r±   rv   ÚstatÚS_IXUSRÚST_MODErn   )r3   ÚrootÚdirsÚfilesÚfiler±   r7   r7   r8   Útest_executableÓ  s   
€üÿzTestScripts.test_executablec                 C   ó   |   d¡ d S )Nzdisk_usage.py©r.  r:   r7   r7   r8   Útest_disk_usageÜ  ó   zTestScripts.test_disk_usagec                 C   rG  )Nzfree.pyrH  r:   r7   r7   r8   Ú	test_freeß  rJ  zTestScripts.test_freec                 C   rG  )Nz
meminfo.pyrH  r:   r7   r7   r8   Útest_meminfoâ  rJ  zTestScripts.test_meminfoc                 C   ó   |   dtt ¡ ƒ¡ d S )Nzprocinfo.py©r.  r'   r/   r0   r:   r7   r7   r8   Útest_procinfoå  s   zTestScripts.test_procinfozno usersc                 C   rG  )Nzwho.pyrH  r:   r7   r7   r8   Útest_whoè  rŽ   zTestScripts.test_whoc                 C   rG  )Nzps.pyrH  r:   r7   r7   r8   Útest_psì  rJ  zTestScripts.test_psc                 C   rG  )Nz	pstree.pyrH  r:   r7   r7   r8   Útest_pstreeï  rJ  zTestScripts.test_pstreec                 C   rG  )Nz
netstat.pyrH  r:   r7   r7   r8   Útest_netstatò  rJ  zTestScripts.test_netstatc                 C   rG  )Nzifconfig.pyrH  r:   r7   r7   r8   Útest_ifconfigõ  rJ  zTestScripts.test_ifconfigr#  c                 C   rM  )Nzpmap.pyrN  r:   r7   r7   r8   Ú	test_pmapø  s   zTestScripts.test_pmapc                 C   s*   dt  ¡  ¡ jvr|  d¡‚|  d¡ d S )NÚussr#  zprocsmem.py)r"   r#   Úmemory_full_infoÚ_fieldsrÎ   r.  r:   r7   r7   r8   Útest_procsmemü  s   
zTestScripts.test_procsmemc                 C   rG  )Nz
killall.py©r7  r:   r7   r7   r8   Útest_killall  rJ  zTestScripts.test_killallc                 C   rG  )Nz	nettop.pyrZ  r:   r7   r7   r8   Útest_nettop  rJ  zTestScripts.test_nettopc                 C   rG  )Nztop.pyrZ  r:   r7   r7   r8   Útest_top  rJ  zTestScripts.test_topc                 C   rG  )Nziotop.pyrZ  r:   r7   r7   r8   Ú
test_iotop
  rJ  zTestScripts.test_iotopc                 C   s,   |   dt ¡  ¡ ¡}|  tt ¡ ƒ|¡ d S )Nzpidof.py)r.  r"   r#   r   r&   r'   r/   r0   )r3   Úoutputr7   r7   r8   Ú
test_pidof  s   zTestScripts.test_pidofzWINDOWS onlyc                 C   rG  )Nzwinservices.pyrH  r:   r7   r7   r8   Útest_winservices  rŽ   zTestScripts.test_winservicesc                 C   rG  )Nzcpu_distribution.pyrZ  r:   r7   r7   r8   Útest_cpu_distribution  rJ  z!TestScripts.test_cpu_distributionc                 C   ó    t  ¡ s	|  d¡ |  d¡ d S )Nzno temperaturesztemperatures.py)r"   Úsensors_temperaturesrÎ   r.  r:   r7   r7   r8   Útest_temperatures  ó   
zTestScripts.test_temperaturesc                 C   rc  )Nzno fanszfans.py)r"   Úsensors_fansrÎ   r.  r:   r7   r7   r8   Ú	test_fans  rf  zTestScripts.test_fansz
no batteryc                 C   rG  )Nz
battery.pyrH  r:   r7   r7   r8   Útest_battery$  ó   zTestScripts.test_batteryc                 C   rG  )Nz
sensors.pyrH  r:   r7   r7   r8   Útest_sensors)  rj  zTestScripts.test_sensorsr�   )+r�   r�   r‘   rl   Ústaticmethodr.  r7  r=  r   rä   r   rF  rI  rK  rL  rO  r   r"   rÌ   rP  rQ  rR  rS  rT  r   rU  rY  r[  r\  r]  r^  r`  r   ra  rb  r   re  r   rh  r   r   ri  rk  r7   r7   r7   r8   r'  ©  sP    








r'  Ú__main__)Úrun_from_name)4rl   r4  Úcollectionsr¶   r¼   r/   r¿   r¢   r?  r"   Úpsutil.testsr   r   r   rž   r   r   r   r   r	   Úpsutil._compatr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
namedtuplerë   rå   rä   r±   rÇ   r'  r�   Úpsutil.tests.runnerrn  r³   r7   r7   r7   r8   Ú<module>   sl       pÿ 
þ