U
    (Ûcïz  ã                   @   sd  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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( 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-G d$d%„ d%e(ƒZ.G d&d'„ d'e(ƒZ/e 0d(d)¡Z1G d*d+„ d+e(ƒZ2e	 3ej4 5e'¡ d,¡G d-d.„ d.e(ƒƒZ6e7d/kr`dd0l8m9Z9 e9e:ƒ dS )1z
Miscellaneous tests.
é    N)ÚLINUX)ÚPOSIX)ÚWINDOWS)Úbcat)Úcat)Údebug)Úisfile_strict)Úmemoize)Úmemoize_when_activated)Úparse_environ_block)Úsupports_ipv6)Úwrap_numbers)ÚPY3)ÚFileNotFoundError)Ú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)Úshc                   @   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S )ÚTestSpecialMethodsc              	   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 5 Q R X tjjt jd	t  t ¡ ¡d
@ t  ¡ }||ƒ}|  d|j |¡ |  d|¡ |  d|¡ W 5 Q R X tjjt jd	t  t ¡ ¡d
4 t  ¡ }||ƒ}|  d|j |¡ |  d|¡ W 5 Q R X d S )Nzpsutil.Processzpid=%sz	name='%s'zname=u'zname='zstatus=z	exitcode=zstatus='terminated'Úname©Zside_effectzstatus='zombie'zname=Z
terminated)ÚpsutilÚProcessZspawn_testprocÚpidÚassertInÚstrr"   ÚreplaceÚassertNotInÚ	terminateÚwaitr   ÚpatchÚobjectÚZombieProcessÚosÚgetpidÚNoSuchProcessÚAccessDenied)ÚselfÚfuncÚpÚr© r8   ú:/tmp/pip-unpacked-wheel-l83rk7k5/psutil/tests/test_misc.pyÚtest_process__repr__@   sJ    
ÿÿÿÿz'TestSpecialMethods.test_process__repr__c                 C   s   | j td d S )N)r5   )r:   r(   ©r4   r8   r8   r9   Útest_process__str__d   s    z&TestSpecialMethods.test_process__str__c                 C   s   |   tt ¡ ƒd¡ d S )Nzpsutil.Error())ÚassertEqualÚreprr$   ÚErrorr;   r8   r8   r9   Útest_error__repr__g   s    z%TestSpecialMethods.test_error__repr__c                 C   s   |   tt ¡ ƒd¡ d S )NÚ )r=   r(   r$   r?   r;   r8   r8   r9   Útest_error__str__j   s    z$TestSpecialMethods.test_error__str__c                 C   s6   |   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"   rD   z5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))r=   r>   r$   r2   r;   r8   r8   r9   Útest_no_such_process__repr__m   s    þþz/TestSpecialMethods.test_no_such_process__repr__c                 C   s6   |   tt d¡ƒd¡ |   ttjddddƒd¡ d S )NrC   z"process no longer exists (pid=321)r"   rD   rE   úmsg (pid=321, name='name'))r=   r(   r$   r2   r;   r8   r8   r9   Útest_no_such_process__str__u   s    þþz.TestSpecialMethods.test_no_such_process__str__c              	   C   s8   |   tt d¡ƒd¡ |   ttjdddddƒd¡ d S )NrC   zGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r"   é@  Úfoo©r"   ZppidrD   z?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))r=   r>   r$   r/   r;   r8   r8   r9   Útest_zombie_process__repr__}   s    þþz.TestSpecialMethods.test_zombie_process__repr__c              	   C   s8   |   tt d¡ƒd¡ |   ttjdddddƒd¡ d S )NrC   z,PID still exists but it's a zombie (pid=321)r"   rI   rJ   rK   z$foo (pid=321, ppid=320, name='name'))r=   r(   r$   r/   r;   r8   r8   r9   Útest_zombie_process__str__†   s    þþz-TestSpecialMethods.test_zombie_process__str__c                 C   s6   |   tt d¡ƒd¡ |   ttjddddƒd¡ d S )NrC   zpsutil.AccessDenied(pid=321)r"   rD   rE   z4psutil.AccessDenied(pid=321, name='name', msg='msg'))r=   r>   r$   r3   r;   r8   r8   r9   Útest_access_denied__repr__Ž   s    þþz-TestSpecialMethods.test_access_denied__repr__c                 C   s6   |   tt d¡ƒd¡ |   ttjddddƒd¡ d S )NrC   z	(pid=321)r"   rD   rE   rG   )r=   r(   r$   r3   r;   r8   r8   r9   Útest_access_denied__str__–   s    þþz,TestSpecialMethods.test_access_denied__str__c                 C   s6   |   tt d¡ƒd¡ |   ttjddddƒd¡ d S )Né   z?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')rC   r"   ©r&   r"   zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))r=   r>   r$   ÚTimeoutExpiredr;   r8   r8   r9   Útest_timeout_expired__repr__ž   s    þþz/TestSpecialMethods.test_timeout_expired__repr__c                 C   s6   |   tt d¡ƒd¡ |   ttjddddƒd¡ d S )NrP   ztimeout after 5 secondsrC   r"   rQ   z.timeout after 5 seconds (pid=321, name='name'))r=   r(   r$   rR   r;   r8   r8   r9   Útest_timeout_expired__str__§   s    þþz.TestSpecialMethods.test_timeout_expired__str__c                 C   s>   t  ¡ }t  ¡ }|  ||¡ d|_|  ||¡ |  |d¡ d S )N)r   r   rJ   )r$   r%   r=   Ú_identZassertNotEqual)r4   Úp1Úp2r8   r8   r9   Útest_process__eq__¯   s    z%TestSpecialMethods.test_process__eq__c                 C   s(   t t ¡ t ¡ gƒ}|  t|ƒd¡ d S )Né   )Úsetr$   r%   r=   Úlen)r4   Úsr8   r8   r9   Útest_process__hash__·   s    z'TestSpecialMethods.test_process__hash__N)Ú__name__Ú
__module__Ú__qualname__r>   r:   r<   r@   rB   rF   rH   rL   rM   rN   rO   rS   rT   rX   r]   r8   r8   r8   r9   r!   >   s   $		r!   c                   @   sP   e Z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S )ÚTestMiscc              	   C   sª   t tƒ}|D ]€}|dkrq| d¡szt|ƒ W q tk
rŠ   |tjkr†tt|ƒ}|d kr`Y q|jd k	r†d|j ¡ kr†|  	d| ¡‚Y qX qtjD ]}|  
||¡ q”d S )N)ÚlongÚtestsÚtestÚPermissionErrorÚProcessLookupErrorÚ_Ú
deprecatedz%r not in psutil.__all__)Údirr$   Ú
startswithÚ
__import__ÚImportErrorÚ__all__ÚgetattrÚ__doc__ÚlowerÚfailr'   )r4   Z
dir_psutilr"   Zfunr8   r8   r9   Ú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 r8   )r(   )Ú.0Úxr8   r8   r9   Ú
<listcomp>Ý   s     z)TestMisc.test_version.<locals>.<listcomp>)r=   Újoinr$   Úversion_infoÚ__version__r;   r8   r8   r9   Útest_versionÜ   s    ÿzTestMisc.test_versionc                 C   s"   t  ¡ }d|_|  d| ¡ ¡ d S )NÚ1rJ   )r$   r%   rJ   r*   Úas_dict)r4   r6   r8   r8   r9   Ú!test_process_as_dict_no_new_namesà   s    z*TestMisc.test_process_as_dict_no_new_namesc                    s¬   ‡ fdd„}|t  ¡  ¡ ƒ |t  ¡ ƒ |t  ¡ ƒ |t  ¡ ƒ |t jddƒ |t  ¡ ƒ trnt	j
 d¡snnts~|t  ¡ ƒ |t  ¡ ƒ |t  t	 ¡ ¡ƒ |t  ¡ ƒ d S )Nc                    s<   t d k	rt  t  | ¡¡ t | ¡}t |¡}ˆ  | |¡ d S ©N)ÚjsonÚloadsÚdumpsÚpickler=   )ÚretÚaÚbr;   r8   r9   Úcheckç   s
    

z*TestMisc.test_serialization.<locals>.checkr   )Úintervalz/proc/diskstats)r$   r%   r|   Zvirtual_memoryZswap_memoryZ	cpu_timesZcpu_times_percentÚnet_io_countersr   r0   ÚpathÚexistsr   Údisk_io_countersZdisk_partitionsÚ
disk_usageÚgetcwdÚusers)r4   r†   r8   r;   r9   Útest_serializationæ   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)r0   r‰   rw   r   r   rŠ   ÚskipTestr   ÚassertRaisesÚ
SystemExitÚsetupr=   Úget_versionr$   ry   )r4   Úsetup_pyÚmoduler8   r8   r9   Útest_setup_scriptþ   s    
zTestMisc.test_setup_scriptc              
   C   s¸   t jjtjdtjd}t ¡  |js*t‚W 5 Q R X t jjtjdt d¡d}t ¡  |jsbt‚W 5 Q R X t jjtjdt	d.}|  
t	¡ t ¡  W 5 Q R X |jsªt‚W 5 Q R X d S )NZcreate_timer#   rY   )r   r-   r.   r$   r%   r3   ÚcalledÚAssertionErrorr/   Ú
ValueErrorr‘   )r4   Úmethr8   r8   r9   Útest_ad_on_process_creation  s&    ÿÿÿz$TestMisc.test_ad_on_process_creationc              
   C   sR   t jddd: |  t¡}ttƒ W 5 Q R X |  dt|jƒ 	¡ ¡ W 5 Q R X d S )Nzpsutil._psplatform.cext.versionz0.0.0©Zreturn_valuezversion conflict)
r   r-   r‘   rl   r   r$   r'   r(   Ú	exceptionrp   )r4   Úcmr8   r8   r9   Útest_sanity_version_check  s     ÿz"TestMisc.test_sanity_version_checkN)r^   r_   r`   rr   rz   r}   r   ÚunittestÚskipIfr   r—   rœ   r    r8   r8   r8   r9   ra   Á   s   

ra   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 )ÚTestCommonModulec                    s  t ‡ fdd„ƒ}g ‰ tdƒD ].}|ƒ }di f}|  ||¡ |  tˆ ƒd¡ qtdƒD ]0}|dƒ}di f}|  ||¡ |  tˆ ƒd¡ qTtdƒD ]8}|ddd}dddif}|  ||¡ |  tˆ ƒd	¡ qŽ| ¡  |ƒ }di f}|  ||¡ |  tˆ ƒd
¡ |  |jd¡ d S )Nc                     s   ˆ   d¡ | |fS )úfoo docstringN©Úappend)ÚargsÚkwargs©Zcallsr8   r9   rJ   )  s    
z*TestCommonModule.test_memoize.<locals>.fooé   r8   rY   )rY   )Úbarr«   é   é   r¤   )r	   Úranger=   r[   Úcache_clearro   )r4   rJ   ru   rƒ   Úexpectedr8   r©   r9   Útest_memoize(  s0    zTestCommonModule.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 )z9TestCommonModule.test_memoize_when_activated.<locals>.Fooc                    s   ˆ   d ¡ d S r~   r¥   r;   r©   r8   r9   rJ   N  s    z=TestCommonModule.test_memoize_when_activated.<locals>.Foo.fooN)r^   r_   r`   r
   rJ   r8   r©   r8   r9   ÚFooL  s   r²   rª   rY   )rJ   r=   r[   Zcache_activateZcache_deactivate)r4   r²   Úfr8   r©   r9   Útest_memoize_when_activatedK  s     z,TestCommonModule.test_memoize_when_activatedc                 C   sÌ   dd„ }|   tdƒ|dƒdi¡ |   tdƒ|dƒd|dƒdi¡ |   td	ƒ|dƒd|dƒd
i¡ |   tdƒ|dƒd|dƒdi¡ |   tdƒ|dƒdi¡ |   tdƒ|dƒdi¡ |   tdƒ|dƒdi¡ d S )Nc                 S   s   t r|  ¡ S | S r~   )r   Úupper)r\   r8   r8   r9   Úkg  s    z4TestCommonModule.test_parse_environ_block.<locals>.kza=1 r„   r{   z	a=1 b=2  r…   Ú2za=1 b=  rA   za=1 b=2  c=3 zxxx a=1 z	a=1 =b=2 za=1 b=2)r=   r   )r4   r¶   r8   r8   r9   Útest_parse_environ_blockf  s     

ÿ
ÿ
ÿ
ÿz)TestCommonModule.test_parse_environ_blockc              	   C   s@  |   tj¡ tƒ rút d¡}d|_t ¡  tƒ r6t‚W 5 Q R X t ¡  tjdtjd}tƒ rdt‚|j	snt‚W 5 Q R X t ¡  tjdtj
d"}tƒ rœt‚t ¡  |j	s®t‚W 5 Q R X t ¡  tjdtj
d"}tƒ rÜt‚t ¡  |j	sît‚W 5 Q R X nB|  tj¡0 t tjtj¡}z| d¡ W 5 | ¡  X W 5 Q R X d S )Nzpsutil._common.socketFzpsutil._common.socket.socketr#   z!psutil._common.socket.socket.bind)z::1r   )Z
addCleanupr   r¯   r   r-   Úhas_ipv6r™   ÚsocketÚerrorr˜   Úgaierrorr‘   ÚAF_INET6ÚSOCK_STREAMÚcloseÚbind)r4   r\   Úsockr8   r8   r9   Útest_supports_ipv6y  sD    ÿ
ÿ
ÿ
z#TestCommonModule.test_supports_ipv6c              	   C   sä   t j t¡}t|ƒst‚tt j |¡ƒr,t‚tjdt	t
jdƒd |  t	t|¡ W 5 Q R X tjdt	t
jdƒd |  t	t|¡ W 5 Q R X tjdt	t
jdƒd t|ƒr°t‚W 5 Q R X tjddd t|ƒrÖt‚W 5 Q R X d S )Nzpsutil._common.os.statrJ   r#   zpsutil._common.stat.S_ISREGFr   )r0   r‰   ÚabspathÚ__file__r   r™   Údirnamer   r-   ÚOSErrorÚerrnoÚEPERMr‘   ÚEACCESÚENOENT)r4   Z	this_filer8   r8   r9   Útest_isfile_strictœ  s"    
ÿ
ÿ
ÿz#TestCommonModule.test_isfile_strictc              	   C   s
  t rddlm} nddlm} t|ƒ ƒ}tdƒ W 5 Q R X | ¡ }| d¡sVt|ƒ‚|  d|¡ |  t	 
dd¡|¡ t|ƒ ƒ}ttdƒƒ W 5 Q R X | ¡ }|  d|¡ |  d	|¡ t|ƒ ƒ}td
dƒ}d|_t|ƒ W 5 Q R X | ¡ }|  d|¡ |  d|¡ d S )Nr   )ÚStringIOZ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   Úgetvaluerj   r™   r'   rÄ   r)   rš   rÆ   Úfilename)r4   rÌ   r³   rD   Úexcr8   r8   r9   Ú
test_debug¬  s*    
zTestCommonModule.test_debugc              	   C   s    |   ¡ }t|dƒ}| d¡ W 5 Q R X |  t|ƒd¡ |  t|ƒd¡ |  tt|d ¡ |  tt|d ¡ |  t|d ddd¡ |  t|d ddd¡ d S )NÚwtrJ   s   fooz-invalidr«   )Úfallback)Z
get_testfnÚopenÚwriter=   r   r   r‘   r   )r4   Ztestfnr³   r8   r8   r9   Útest_cat_bcatÉ  s    zTestCommonModule.test_cat_bcatN)
r^   r_   r`   r±   r´   r¸   rÂ   rË   rÒ   r×   r8   r8   r8   r9   r£   &  s   ##r£   rJ   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;   r8   r8   r9   ÚsetUpß  s    zTestWrapNumbers.setUpc                 C   s&   dt dddƒi}|  t|dƒ|¡ d S ©NÚdisk1rP   Údisk_io©Úntr=   r   ©r4   Úinputr8   r8   r9   Ú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ß   r8   r8   r9   Ú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ß   r8   r8   r9   Ú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ß   r8   r8   r9   Ú	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Û   Zdisk2é   rÝ   rß   r8   r8   r9   Ú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ß   r8   r8   r9   Ú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\  )Únvme0n1Z	nvme0n1p1Z	nvme0n1p2Z	nvme0n1p3rÜ   )	ré   r÷   rø   rù   rú   rû   rü   rý   rþ   r  r   i  )r=   r   )r4   ÚdÚoutr8   r8   r9   Útest_real_dataF  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   rY   rª   ©rÞ   r   Ú
cache_infor=   ©r4   rà   Úcacher8   r8   r9   Útest_cache_first_callW  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   rY   ©)rÛ   r   )rÛ   rY   ©rÛ   rª   rª   r  r  r8   r8   r9   Ú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   rY   r  rª   r  c                     sF   t  ¡ } ˆ  | d dddddœi¡ ˆ  | d ddtdgƒii¡ d S )	NrY   rÜ   r   ré   r  rª   rÛ   r  )r   r  r=   rZ   )r	  r;   r8   r9   Úassert_z  s    ÿþ
ÿz0TestWrapNumbers.test_cache_wrap.<locals>.assert_rë   rå   rì   )rÞ   r   r  r=   rZ   )r4   rà   r	  r  r8   r;   r9   Útest_cache_wrapk  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   rY   r  rª   r  r  r8   r8   r9   Útest_cache_changing_keys›  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¯   r=   r  rß   r8   r8   r9   Ú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|¡ q6t j ¡  t ¡ }|D ]}|  d|¡ |  d|¡ qjt 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*   r=   )r4   Úcachesr	  r8   r8   r9   Útest_cache_clear_public_apis±  s     


z,TestWrapNumbers.test_cache_clear_public_apisN)r^   r_   r`   rÙ   ZtearDownrá   râ   rè   rñ   rõ   rö   r  r
  r  r  r  r  r¡   r¢   r   r  r8   r8   r8   r9   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ote ¡  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|Ž ¡ }W n@ tk
r‚ } z"dt	|ƒkrpt	|ƒ W Y ¢S ‚ W 5 d }~X Y nX |st
|ƒ‚|S )Nz%sr3   )r0   r‰   rw   r   r   r¦   r    ÚstripÚRuntimeErrorr(   r™   )Úexer§   r¨   ÚcmdÚargr  Úerrr8   r8   r9   Úassert_stdoutÑ  s    zTestScripts.assert_stdoutNc              	   C   sR   t j t| ¡} tr"t| ddd}n
t| dƒ}| | ¡ }W 5 Q R X t |¡ d S )NÚrtÚutf8)Úencoding)	r0   r‰   rw   r   r   rÕ   ÚreadÚastÚparse)r  r§   r³   Úsrcr8   r8   r9   Úassert_syntaxá  s    
zTestScripts.assert_syntaxc                 C   sV   t | ƒ}t t¡D ]>}| d¡rdtj |¡d  |kr|  dtj t|¡ ¡‚qd S )NrÍ   Ztest_r   zno test defined for %r script)	ri   r0   Úlistdirr   Úendswithr‰   Úsplitextrq   rw   )r4   Zmethsr"   r8   r8   r9   Útest_coverageì  s    
ÿzTestScripts.test_coveragez
POSIX onlyc                 C   s`   t  t¡D ]P\}}}|D ]@}| d¡rt j ||¡}tjt  |¡tj @ s|  	d| ¡‚qq
d S )NrÍ   z%r is not executable)
r0   Úwalkr   r&  r‰   rw   ÚstatÚS_IXUSRÚST_MODErq   )r4   ÚrootÚdirsÚfilesÚfiler‰   r8   r8   r9   Útest_executableö  s    
zTestScripts.test_executablec                 C   s   |   d¡ d S )Nzdisk_usage.py©r  r;   r8   r8   r9   Útest_disk_usageÿ  s    zTestScripts.test_disk_usagec                 C   s   |   d¡ d S )Nzfree.pyr2  r;   r8   r8   r9   Ú	test_free  s    zTestScripts.test_freec                 C   s   |   d¡ d S )Nz
meminfo.pyr2  r;   r8   r8   r9   Útest_meminfo  s    zTestScripts.test_meminfoc                 C   s   |   dtt ¡ ƒ¡ d S )Nzprocinfo.py©r  r(   r0   r1   r;   r8   r8   r9   Útest_procinfo  s    zTestScripts.test_procinfozno usersc                 C   s   |   d¡ d S )Nzwho.pyr2  r;   r8   r8   r9   Útest_who  s    zTestScripts.test_whoc                 C   s   |   d¡ d S )Nzps.pyr2  r;   r8   r8   r9   Útest_ps  s    zTestScripts.test_psc                 C   s   |   d¡ d S )Nz	pstree.pyr2  r;   r8   r8   r9   Útest_pstree  s    zTestScripts.test_pstreec                 C   s   |   d¡ d S )Nz
netstat.pyr2  r;   r8   r8   r9   Útest_netstat  s    zTestScripts.test_netstatc                 C   s   |   d¡ d S )Nzifconfig.pyr2  r;   r8   r8   r9   Útest_ifconfig  s    zTestScripts.test_ifconfigr  c                 C   s   |   dtt ¡ ƒ¡ d S )Nzpmap.pyr6  r;   r8   r8   r9   Ú	test_pmap  s    zTestScripts.test_pmapc                 C   s*   dt  ¡  ¡ jkr|  d¡‚|  d¡ d S )NZussr  zprocsmem.py)r$   r%   Zmemory_full_infoÚ_fieldsr   r  r;   r8   r8   r9   Útest_procsmem  s    
zTestScripts.test_procsmemc                 C   s   |   d¡ d S )Nz
killall.py©r$  r;   r8   r8   r9   Útest_killall$  s    zTestScripts.test_killallc                 C   s   |   d¡ d S )Nz	nettop.pyr@  r;   r8   r8   r9   Útest_nettop'  s    zTestScripts.test_nettopc                 C   s   |   d¡ d S )Nztop.pyr@  r;   r8   r8   r9   Útest_top*  s    zTestScripts.test_topc                 C   s   |   d¡ d S )Nziotop.pyr@  r;   r8   r8   r9   Ú
test_iotop-  s    zTestScripts.test_iotopc                 C   s,   |   dt ¡  ¡ ¡}|  tt ¡ ƒ|¡ d S )Nzpidof.py)r  r$   r%   r"   r'   r(   r0   r1   )r4   Úoutputr8   r8   r9   Ú
test_pidof0  s    zTestScripts.test_pidofzWINDOWS onlyc                 C   s   |   d¡ d S )Nzwinservices.pyr2  r;   r8   r8   r9   Útest_winservices4  s    zTestScripts.test_winservicesc                 C   s   |   d¡ d S )Nzcpu_distribution.pyr@  r;   r8   r8   r9   Útest_cpu_distribution8  s    z!TestScripts.test_cpu_distributionc                 C   s    t  ¡ s|  d¡ |  d¡ d S )Nzno temperaturesztemperatures.py)r$   Zsensors_temperaturesr   r  r;   r8   r8   r9   Útest_temperatures;  s    
zTestScripts.test_temperaturesc                 C   s    t  ¡ s|  d¡ |  d¡ d S )Nzno fanszfans.py)r$   Zsensors_fansr   r  r;   r8   r8   r9   Ú	test_fansA  s    
zTestScripts.test_fansz
no batteryc                 C   s   |   d¡ d S )Nz
battery.pyr2  r;   r8   r8   r9   Útest_batteryG  s    zTestScripts.test_batteryc                 C   s   |   d¡ d S )Nz
sensors.pyr2  r;   r8   r8   r9   Útest_sensorsL  s    zTestScripts.test_sensors)N)+r^   r_   r`   ro   Ústaticmethodr  r$  r(  r¡   r¢   r   r1  r3  r4  r5  r7  r   r$   rŽ   r8  r9  r:  r;  r<  r   r=  r?  rA  rB  rC  rD  rF  r   rG  rH  r   rI  r   rJ  r   r   rK  rL  r8   r8   r8   r9   r  Ì  sN   








r  Ú__main__)Úrun_from_name);ro   r!  ÚcollectionsrÇ   r   r0   r‚   rº   r*  r¡   r$   Zpsutil.testsr   r   r   Zpsutil._commonr   r   r   r   r	   r
   r   r   r   Zpsutil._compatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   ra   r£   Ú
namedtuplerÞ   rØ   r¢   r‰   rŠ   r  r^   Zpsutil.tests.runnerrO  rÄ   r8   r8   r8   r9   Ú<module>   st    e 5 pÿ 
