U
    ;g                     @   sf  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, dd"lm-Z- G d#d$ d$e'Z.G d%d& d&e'Z/G d'd( d(e'Z0G d)d* d*e'Z1e2d+d,Z3G d-d. d.e'Z4e*j5j6ej78e& d/d0G d1d2 d2e'Z9dS )3zMiscellaneous tests.    N)POSIX)WINDOWS)bcat)cat)debug)isfile_strict)memoize)memoize_when_activated)parse_environ_block)supports_ipv6)wrap_numbers)PY3)FileNotFoundError)redirect_stderr)
CI_TESTING)HAS_BATTERY)HAS_MEMORY_MAPS)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)
PYTHON_EXE)PYTHON_EXE_ENV)	QEMU_USER)SCRIPTS_DIR)PsutilTestCase)mock)process_namespace)pytest)reload_module)sh)system_namespacec                   @   s   e Zd Zd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   sR   t t tjjdd  W 5 Q R X t tj tdd  W 5 Q R X d S )N      )	r   raisesOverflowErrorpsutilZ_psplatformZcextZcheck_pid_rangeNoSuchProcessProcessself r,   :/tmp/pip-unpacked-wheel-u0epr1ex/psutil/tests/test_misc.pytest_check_pid_range>   s    z'TestSpecialMethods.test_check_pid_rangec              	   C   s  t |  j}||}d|ks$td|j |ks6tdt|  |ddksVtd|ksbtd|ksnt|  |	  ||}d|kstd|kstt
jjt jd	t t d
@ t  }||}d|j |kstd|kstd|kstW 5 Q R X t
jjt jd	t t d
F t  }||}d|j |ksFtd|ksTtd|ksbtW 5 Q R X t
jjt jd	t t d
8 t  }||}d|j |kstd|kst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)r'   r)   Zspawn_testprocpidAssertionErrorstrr/   replace	terminatewaitr   patchobjectZombieProcessosgetpidr(   AccessDenied)r+   funcprr,   r,   r-   test_process__repr__D   sR     z'TestSpecialMethods.test_process__repr__c                 C   s   | j td d S )N)r=   )r@   r3   r*   r,   r,   r-   test_process__str__p   s    z&TestSpecialMethods.test_process__str__c                 C   s   t t dkstd S )Nzpsutil.Error())reprr'   Errorr2   r*   r,   r,   r-   test_error__repr__s   s    z%TestSpecialMethods.test_error__repr__c                 C   s   t t dkstd S )N )r3   r'   rC   r2   r*   r,   r,   r-   test_error__str__v   s    z$TestSpecialMethods.test_error__str__c                 C   s6   t tddkstt tjdddddks2td S )NA  z=psutil.NoSuchProcess(pid=321, msg='process no longer exists')r/   msgr/   rH   z5psutil.NoSuchProcess(pid=321, name='name', msg='msg'))rB   r'   r(   r2   r*   r,   r,   r-   test_no_such_process__repr__y   s    z/TestSpecialMethods.test_no_such_process__repr__c                 C   s6   t tddkstt tjdddddks2td S )NrG   z"process no longer exists (pid=321)r/   rH   rI   msg (pid=321, name='name'))r3   r'   r(   r2   r*   r,   r,   r-   test_no_such_process__str__   s    z.TestSpecialMethods.test_no_such_process__str__c                 C   s8   t tddkstt tjddddddks4td S )NrG   zGpsutil.ZombieProcess(pid=321, msg="PID still exists but it's a zombie")r/   @  foor/   ppidrH   z?psutil.ZombieProcess(pid=321, ppid=320, name='name', msg='foo'))rB   r'   r9   r2   r*   r,   r,   r-   test_zombie_process__repr__   s    z.TestSpecialMethods.test_zombie_process__repr__c                 C   s8   t tddkstt tjddddddks4td S )NrG   z,PID still exists but it's a zombie (pid=321)r/   rM   rN   rO   z$foo (pid=321, ppid=320, name='name'))r3   r'   r9   r2   r*   r,   r,   r-   test_zombie_process__str__   s    z-TestSpecialMethods.test_zombie_process__str__c                 C   s6   t tddkstt tjdddddks2td S )NrG   zpsutil.AccessDenied(pid=321)r/   rH   rI   z4psutil.AccessDenied(pid=321, name='name', msg='msg'))rB   r'   r<   r2   r*   r,   r,   r-   test_access_denied__repr__   s
    z-TestSpecialMethods.test_access_denied__repr__c                 C   s6   t tddkstt tjdddddks2td S )NrG   z	(pid=321)r/   rH   rI   rK   )r3   r'   r<   r2   r*   r,   r,   r-   test_access_denied__str__   s
    z,TestSpecialMethods.test_access_denied__str__c                 C   s6   t tddkstt tjdddddks2td S )N   z?psutil.TimeoutExpired(seconds=5, msg='timeout after 5 seconds')rG   r/   r1   r/   zUpsutil.TimeoutExpired(pid=321, name='name', seconds=5, msg='timeout after 5 seconds'))rB   r'   TimeoutExpiredr2   r*   r,   r,   r-   test_timeout_expired__repr__   s    z/TestSpecialMethods.test_timeout_expired__repr__c                 C   s6   t tddkstt tjdddddks2td S )NrU   ztimeout after 5 secondsrG   r/   rV   z.timeout after 5 seconds (pid=321, name='name'))r3   r'   rW   r2   r*   r,   r,   r-   test_timeout_expired__str__   s
    z.TestSpecialMethods.test_timeout_expired__str__c                 C   s>   t  }t  }||kstd|_||ks.t|dks:td S )N)r   r   rN   )r'   r)   r2   _ident)r+   p1p2r,   r,   r-   test_process__eq__   s    z%TestSpecialMethods.test_process__eq__c                 C   s(   t t t g}t|dks$td S )N   )setr'   r)   lenr2   )r+   sr,   r,   r-   test_process__hash__   s    z'TestSpecialMethods.test_process__hash__N)__name__
__module____qualname__r.   rB   r@   rA   rD   rF   rJ   rL   rQ   rR   rS   rT   rX   rY   r]   rb   r,   r,   r,   r-   r"   =   s   ,


r"   c                   @   s<   e Zd Zdd Zdd Zdd Z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rtt|}|d kr`Y q|jd k	rd|j kr| 	d| Y qX qtjD ]}||kst
qd S )N)r   longteststestPermissionErrorProcessLookupError_
deprecatedz%r not in psutil.__all__)dirr'   
startswith
__import__ImportError__all__getattr__doc__lowerfailr2   )r+   Z
dir_psutilr/   funr,   r,   r-   test__all__   s&    



zTestMisc.test__all__c                 C   s$   d dd tjD tjks td S )N.c                 S   s   g | ]}t |qS r,   )r3   ).0xr,   r,   r-   
<listcomp>   s     z)TestMisc.test_version.<locals>.<listcomp>)joinr'   version_info__version__r2   r*   r,   r,   r-   test_version   s    zTestMisc.test_versionc                 C   s"   t  }d|_d| kstd S )N1rN   )r'   r)   rN   as_dictr2   )r+   r>   r,   r,   r-   !test_process_as_dict_no_new_names   s    z*TestMisc.test_process_as_dict_no_new_namesc              
   C   s  dd }t  }|t    t|}|j|jddD ]L\}}| j||d0 z
| }W n t jk
rp   Y n
X || W 5 Q R X q8t }||jD ]b\}}|dkrqt	r|dkrq| j|d0 z
| }W n t j
k
r   Y n
X || W 5 Q R X qttt jd	d
dd}t|t js*t|jd	ks:t|jd
ksJt|jdksZtttt jd	d
ddd}t|t jst|jd	kst|jdkst|jd
kst|jdkstttt j
dd
dd}t|t j
st|jdkst|jd
kst|jdks(tttt jdd	d
d}t|t jsVt|jdksft|jd	ksvt|jd
kstd S )Nc                 S   s4   t t |  t| }t|}| |ks0td S N)jsonloadsdumpspickler2   )retabr,   r,   r-   check  s    

z*TestMisc.test_serialization.<locals>.checkT)clear_cache)procr/   >   win_service_iterwin_service_getZnet_if_stats)r/   i  r/   rH   )r1   r/   rH   *   )r1   r/   rP   rH   {   !   )secondsr1   r/   )r'   r)   r   r   iterZgettersZsubTestrC   r!   r   r<   r   r   r   r(   
isinstancer2   r1   r/   rH   r9   rP   rW   r   )r+   r   r   nsrw   r/   r   r   r,   r,   r-   test_serialization  st    	

zTestMisc.test_serializationc              
   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	 t  W 5 Q R X |jstW 5 Q R X t jjtjdtdd0}| tj t  W 5 Q R X |jstW 5 Q R X d S )NZ
_get_identr0   r^   )r   r7   r8   r'   r)   r<   calledr2   r9   
ValueErrorr   r%   r(   assertRaises)r+   methr,   r,   r-   test_ad_on_process_creationa  sD            z$TestMisc.test_ad_on_process_creationc              
   C   sR   t jddd: tt}tt W 5 Q R X dt|j	 ksDt
W 5 Q R X d S )Nzpsutil._psplatform.cext.versionz0.0.0Zreturn_valuezversion conflict)r   r7   r   r%   rq   r   r'   r3   valueru   r2   )r+   cmr,   r,   r-   test_sanity_version_check~  s     z"TestMisc.test_sanity_version_checkN)	rc   rd   re   rx   r   r   r   r   r   r,   r,   r,   r-   rf      s   !]rf   c                   @   sR   e Zd Zdd ZeZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )TestMemoizeDecoratorc                 C   s
   g | _ d S r   callsr*   r,   r,   r-   setUp  s    zTestMemoizeDecorator.setUpNc                 C   s2  t dD ]2}| }| jdi fgks&t|d k	r||kstqt dD ]:}|d}| jdi fdi fgksjt|d k	rD||ksDtqDt dD ]H}|ddd}| jdi fdi fdddifgkst|d k	r||kstqt| jdkst|  | }|d k	r
||ks
tt| jdkst|jd	ks.td S )
Nr#   r,   r^   r^   barr         My docstring.)ranger   r2   r`   cache_clearrt   )r+   objexpected_retvalrl   r   r,   r,   r-   run_against  s,    $
z TestMemoizeDecorator.run_againstc                    s&   t  fdd}|  | j|dd d S )Nc                     s    j | |f dS r      r   appendargskwargsZ	baseclassr,   r-   rN     s    z/TestMemoizeDecorator.test_function.<locals>.foor   r   )r   r   )r+   rN   r,   r   r-   test_function  s    z"TestMemoizeDecorator.test_functionc                    s>   t G  fddd}|  | j|d d |  dks:td S )Nc                       s$   e Zd ZdZ fddZdd ZdS )z,TestMemoizeDecorator.test_class.<locals>.Foor   c                    s    j ||f d S r   r   r+   r   r   r   r,   r-   __init__  s    z5TestMemoizeDecorator.test_class.<locals>.Foo.__init__c                 S   s   dS )Nr   r,   r*   r,   r,   r-   r     s    z0TestMemoizeDecorator.test_class.<locals>.Foo.barN)rc   rd   re   rt   r   r   r,   r   r,   r-   Foo  s   r   r   r   )r   r   r   r2   r+   r   r,   r   r-   
test_class  s
    	zTestMemoizeDecorator.test_classc                 C   s   t G dd d}| | ks"tt| t| ks:tt|dt|dksVtt|dddt|dddksztt|dt|dkstd S )Nc                   @   s   e Zd Zdd ZdS )z6TestMemoizeDecorator.test_class_singleton.<locals>.Barc                 _   s   d S r   r,   r   r,   r,   r-   r     s    z?TestMemoizeDecorator.test_class_singleton.<locals>.Bar.__init__N)rc   rd   re   r   r,   r,   r,   r-   Bar  s   r   r^   r   )rN   r#   )r   r2   id)r+   r   r,   r,   r-   test_class_singleton  s    $z)TestMemoizeDecorator.test_class_singletonc                    s,   G  fddd}|  | j | jdd d S )Nc                       s    e Zd Zee fddZdS )z3TestMemoizeDecorator.test_staticmethod.<locals>.Fooc                     s    j | |f dS r   r   r   r   r,   r-   r     s    z7TestMemoizeDecorator.test_staticmethod.<locals>.Foo.barN)rc   rd   re   staticmethodr   r   r,   r   r,   r-   r     s   r   r   r   r   r   r   r,   r   r-   test_staticmethod  s    z&TestMemoizeDecorator.test_staticmethodc                    s,   G  fddd}|  | j | jdd d S )Nc                       s    e Zd Zee fddZdS )z2TestMemoizeDecorator.test_classmethod.<locals>.Fooc                    s    j ||f dS r   r   )clsr   r   r   r,   r-   r     s    z6TestMemoizeDecorator.test_classmethod.<locals>.Foo.barN)rc   rd   re   classmethodr   r   r,   r   r,   r-   r     s   r   r   r   r   r   r,   r   r-   test_classmethod  s    z%TestMemoizeDecorator.test_classmethodc                    s  t  fdd}g  tdD ].}| }di f}||ks:tt dkstqtdD ]0}|d}di f}||ksttt dksTtqTtdD ]8}|ddd}dddif}||kstt d	kstq|  | }di f}||kstt d
kst|jdks
td S )Nc                     s     d | |fS )Foo docstring.Nr   r   r   r,   r-   rN     s    
z/TestMemoizeDecorator.test_original.<locals>.foor#   r,   r^   r   r   r   r   r   r   )r   r   r2   r`   r   rt   )r+   rN   rl   r   expectedr,   r   r-   test_original  s0    z"TestMemoizeDecorator.test_original)N)rc   rd   re   r   tearDownr   r   r   r   r   r   r   r,   r,   r,   r-   r     s   

r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestCommonModulec                    s   G  fddd}| }g  |   |   t dks<tg  |j | |   |   t dksltg  |j | |   |   t dkst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   r,   r-   rN     s    z=TestCommonModule.test_memoize_when_activated.<locals>.Foo.fooN)rc   rd   re   r	   rN   r,   r   r,   r-   r     s   r   r#   r^   )rN   r`   r2   Zcache_activateZcache_deactivate)r+   r   fr,   r   r-   test_memoize_when_activated  s     z,TestCommonModule.test_memoize_when_activatedc                 C   s   dd }t d|ddiks tt d|dd|ddiks@tt d	|dd|dd
iks`tt d|dd|ddikstt d|ddikstt d|ddikstt d|ddikstd S )Nc                 S   s   t r|  S | S r   )r   upper)ra   r,   r,   r-   k0  s    z4TestCommonModule.test_parse_environ_block.<locals>.kza=1 r   r   z	a=1 b=2  r   2za=1 b=  rE   za=1 b=2  c=3 zxxx a=1 z	a=1 =b=2 za=1 b=2)r
   r2   )r+   r   r,   r,   r-   test_parse_environ_block/  s$      
   
z)TestCommonModule.test_parse_environ_blockc              	   C   s@  |  tj t rt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 rtt  |j	stW 5 Q R X t  tjdtj
d"}t rtt  |j	stW 5 Q R X nBt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.socketr0   z!psutil._common.socket.socket.bind)z::1r   )Z
addCleanupr   r   r   r7   has_ipv6r2   socketerrorr   gaierrorr   r%   AF_INET6SOCK_STREAMclosebind)r+   ra   sockr,   r,   r-   test_supports_ipv6D  sJ     
 

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	 t| W 5 Q R X W 5 Q R X tjdt	t
jdd$ tt	 t| W 5 Q R X W 5 Q R X tjdt	t
jdd t|rtW 5 Q R X tjddd t|rtW 5 Q R X d S )Nzpsutil._common.os.statrN   r0   zpsutil._common.stat.S_ISREGFr   )r:   pathabspath__file__r   r2   dirnamer   r7   OSErrorerrnoEPERMr   r%   EACCESENOENT)r+   Z	this_filer,   r,   r-   test_isfile_strictk  s,     
 
 
z#TestCommonModule.test_isfile_strictc              
   C   sr  t rddlm} nddlm} tjtjdd. t| }t	d t
j  W 5 Q R X W 5 Q R X | }|ds~t|d|ksttdd|ksttjtjdd( t| }t	td	 W 5 Q R X W 5 Q R X | }d
|kstd|ksttjtjdd4 t| }tdd}d|_t	| W 5 Q R X W 5 Q R X | }d|ks`td|ksntd S )Nr   )StringIOZPSUTIL_DEBUGTZhellozpsutil-debugz.pyc.pyzthis is an errorzignoring ValueErrorz'this is an error'r#   zno such filez/foo)r   ior   r   r7   r8   r'   Z_commonr   r   sysstderrflushgetvaluero   r2   r   r4   r   r   filename)r+   r   r   rH   excr,   r,   r-   
test_debug  s2     
zTestCommonModule.test_debugc              	   C   s   |   }t|d}|d W 5 Q R X t|dks8tt|dksHttt t|d  W 5 Q R X tt t|d  W 5 Q R X t|d dddkstt|d dddkstd S )NwrN   s   fooz-invalidr   )fallback)	Z
get_testfnopenwriter   r2   r   r   r%   r   )r+   Ztestfnr   r,   r,   r-   test_cat_bcat  s    zTestCommonModule.test_cat_bcatN)	rc   rd   re   r   r   r   r   r   r   r,   r,   r,   r-   r     s   '!r   rN   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jje dddd ZdS ) TestWrapNumbersc                 C   s   t   d S r   )r   r   r*   r,   r,   r-   r     s    zTestWrapNumbers.setUpc                 C   s&   dt dddi}t|d|ks"td S Ndisk1rU   disk_iontr   r2   r+   inputr,   r,   r-   test_first_call  s    zTestWrapNumbers.test_first_callc                 C   s8   dt dddi}t|d|ks"tt|d|ks4td S r   r   r   r,   r,   r-   test_input_hasnt_changed  s    z(TestWrapNumbers.test_input_hasnt_changedc                 C   s   dt dddi}t|d|ks"tdt dddi}t|d|ksDtdt dddi}t|d|ksftdt dddi}t|d|kstd S )	Nr   rU   r   
               r   r   r,   r,   r-   test_increase_but_no_wrap  s    z)TestWrapNumbers.test_increase_but_no_wrapc                 C   s  dt dddi}t|d|ks"tdt dddi}t|ddt dddiksPtdt dddi}t|ddt dddiks~tdt dddi}t|ddt dddikstdt dddi}t|ddt ddd	ikstdt dddi}t|ddt ddd	iks
tdt d
ddi}t|ddt ddd	iks:tdt dddi}t|ddt ddd	iksjtdt dddi}t|ddt ddd	ikstd S )Nr   d   r   r  n   Z      r     2      (   r   r   r,   r,   r-   	test_wrap  s$       zTestWrapNumbers.test_wrapc                 C   st   dt dddi}t|d|ks"tt dddt dddd}t|d|ksNtdt dddi}t|d|ksptd S )Nr   rU   r      r   Zdisk2   r   r   r,   r,   r-   test_changing_keys  s    z"TestWrapNumbers.test_changing_keysc                 C   s0  t dddt dddd}t|d|ks,tt dddt dddd}t|dt dddt ddddksntdt dddi}t|d|kstt dddt dddd}t|d|kstt dddt dddd}t|d|kstt dddt dddd}t|dt dddt ddddks,td S )Nr  r  r  r   r  r	  r   r   r   r,   r,   r-   test_changing_keys_w_wrap  s$    



z)TestWrapNumbers.test_changing_keys_w_wrapc                 C   sb   ddddd}t |d|ks tt |d|ks2tddddd}t |d}|d d	 d
ks^t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   r2   )r+   doutr,   r,   r-   test_real_data  s    
zTestWrapNumbers.test_real_datac                 C   sb   dt dddi}t|d t }|d d|iks6t|d di iksJt|d di iks^td S )Nr   rU   r   r   r^   r#   r   r   
cache_infor2   r+   r   cacher,   r,   r-   test_cache_first_call(  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ksPt|d dddddikslt|d di ikstd S )	Nr   rU   r   r  r   r^   )r   r   )r   r^   r   r#   r#   r%  r'  r,   r,   r-   test_cache_call_twice0  s    

 

z%TestWrapNumbers.test_cache_call_twicec                 C   s  dt dddi}t|d dt dddi}t|d t }|d d|iksPt|d dddddikslt|d ddtd	giikstd
d }dt dddi}t|d t }|d d|ikst|  dt dddi}t|d t }|d d|ikst|  dt dddi}t|d t }|d d|iksDt|d dddddiksbt|d ddtd	giikstd S )Nr   r  r   r  r   r^   r*  r#   r+  c                  S   sF   t  } | d dddddiks$t| d ddtdgiiksBtd S )	Nr^   r   r   r  r*  r#   r   r+  )r   r&  r2   r_   )r(  r,   r,   r-   check_cache_infoK  s    
z9TestWrapNumbers.test_cache_wrap.<locals>.check_cache_infor
  r  r  )r   r   r&  r2   r_   )r+   r   r(  r-  r,   r,   r-   test_cache_wrap<  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ksZt|d dddddiksvt|d	 di ikstd S )
Nr   rU   r   r  r  r   r^   r*  r#   r%  r'  r,   r,   r-   test_cache_changing_keysn  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ksDttd td d S )Nr   rU   r   z?!?)r   r   r   r&  r2   r   r,   r,   r-   test_cache_clearz  s    



z TestWrapNumbers.test_cache_clearnot supportedreasonc                 C   s   t  rt  stdt   t   t }|D ]}d|ksFtd|ks6tq6t j  t }|D ]}d|ksztd|ksjtqjt j  t }|i i i fkstd S )Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters)	r'   Zdisk_io_countersZnet_io_countersr   skipr   r&  r2   r   )r+   cachesr(  r,   r,   r-   test_cache_clear_public_apis  s     


z,TestWrapNumbers.test_cache_clear_public_apisN)rc   rd   re   r   r   r   r  r  r  r  r  r$  r)  r,  r.  r/  r0  r   markskipifr   r6  r,   r,   r,   r-   r     s    
2	r   zcan't locate scripts directoryr2  c                   @   s  e Zd ZdZedd Zedd Zdd Zej	j
e dd	d
d Zdd Zdd Zdd Zdd Zej	j
eoxe  dd	dd Zdd Zdd Zdd Zej	j
edd	dd Zej	j
e d d	d!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z d-d. Z!ej	j
e" d/d	d0d1 Z#d2d3 Z$ej	j
e% d d	d4d5 Z&ej	j
e' d d	d6d7 Z(ej	j
e) d d	ej	j
e* d8d	d9d: Z+ej	j
e) d d	ej	j
e* d8d	d;d< Z,d=S )>TestScriptsz-Tests for scripts in the "scripts" directory.c              
   O   s   | dt dtjt|  } t| g}|D ]}|| q*zt|f|	 }W n@ t
k
r } z"dt|kr|t| W Y S  W 5 d }~X Y nX |st||S )Nenvz%sr<   )
setdefaultr   r:   r   r}   r   r   r   r    stripRuntimeErrorr3   r2   )exer   r   cmdargr#  errr,   r,   r-   assert_stdout  s    zTestScripts.assert_stdoutc              	   C   sH   t jt| } trt| ddnt| }| }W 5 Q R X t| d S )Nutf8)encoding)	r:   r   r}   r   r   r   readastparse)r>  r   srcr,   r,   r-   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)	rn   r:   listdirr   endswithr   splitextrv   r}   )r+   Zmethsr/   r,   r,   r-   test_coverage  s    
zTestScripts.test_coveragez
POSIX onlyr2  c                 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)
r:   walkr   rK  r   r}   statS_IXUSRST_MODErv   )r+   rootdirsfilesfiler   r,   r,   r-   test_executable  s    
zTestScripts.test_executablec                 C   s   |  d d S )Nzdisk_usage.pyrB  r*   r,   r,   r-   test_disk_usage  s    zTestScripts.test_disk_usagec                 C   s   |  d d S )Nzfree.pyrW  r*   r,   r,   r-   	test_free  s    zTestScripts.test_freec                 C   s   |  d d S )Nz
meminfo.pyrW  r*   r,   r,   r-   test_meminfo  s    zTestScripts.test_meminfoc                 C   s   |  dtt  d S )Nzprocinfo.pyrB  r3   r:   r;   r*   r,   r,   r-   test_procinfo  s    zTestScripts.test_procinfozno usersc                 C   s   |  d d S )Nzwho.pyrW  r*   r,   r,   r-   test_who  s    zTestScripts.test_whoc                 C   s   |  d d S )Nzps.pyrW  r*   r,   r,   r-   test_ps  s    zTestScripts.test_psc                 C   s   |  d d S )Nz	pstree.pyrW  r*   r,   r,   r-   test_pstree  s    zTestScripts.test_pstreec                 C   s   |  d d S )Nz
netstat.pyrW  r*   r,   r,   r-   test_netstat  s    zTestScripts.test_netstatzQEMU user not supportedc                 C   s   |  d d S )Nzifconfig.pyrW  r*   r,   r,   r-   test_ifconfig  s    zTestScripts.test_ifconfigr1  c                 C   s   |  dtt  d S )Nzpmap.pyr[  r*   r,   r,   r-   	test_pmap  s    zTestScripts.test_pmapc                 C   s*   dt   jkrtd| d d S )NZussr1  zprocsmem.py)r'   r)   Zmemory_full_info_fieldsr   r4  rB  r*   r,   r,   r-   test_procsmem  s    
zTestScripts.test_procsmemc                 C   s   |  d d S )Nz
killall.pyrI  r*   r,   r,   r-   test_killall  s    zTestScripts.test_killallc                 C   s   |  d d S )Nz	nettop.pyre  r*   r,   r,   r-   test_nettop  s    zTestScripts.test_nettopc                 C   s   |  d d S )Nztop.pyre  r*   r,   r,   r-   test_top  s    zTestScripts.test_topc                 C   s   |  d d S )Nziotop.pyre  r*   r,   r,   r-   
test_iotop   s    zTestScripts.test_iotopc                 C   s,   |  dt  }tt |ks(td S )Nzpidof.py)rB  r'   r)   r/   r3   r:   r;   r2   )r+   outputr,   r,   r-   
test_pidof  s    zTestScripts.test_pidofzWINDOWS onlyc                 C   s   |  d d S )Nzwinservices.pyrW  r*   r,   r,   r-   test_winservices  s    zTestScripts.test_winservicesc                 C   s   |  d d S )Nzcpu_distribution.pyre  r*   r,   r,   r-   test_cpu_distribution  s    z!TestScripts.test_cpu_distributionc                 C   s    t  std| d d S )Nzno temperaturesztemperatures.py)r'   Zsensors_temperaturesr   r4  rB  r*   r,   r,   r-   test_temperatures  s    
zTestScripts.test_temperaturesc                 C   s    t  std| d d S )Nzno fanszfans.py)r'   Zsensors_fansr   r4  rB  r*   r,   r,   r-   	test_fans  s    
zTestScripts.test_fansz
no batteryc                 C   s   |  d d S )Nz
battery.pyrW  r*   r,   r,   r-   test_battery  s    zTestScripts.test_batteryc                 C   s   |  d d S )Nz
sensors.pyrW  r*   r,   r,   r-   test_sensors  s    zTestScripts.test_sensorsN)-rc   rd   re   rt   r   rB  rI  rM  r   r7  r8  r   rV  rX  rY  rZ  r\  r   r'   Zusersr]  r^  r_  r`  r   ra  r   rb  rd  rf  rg  rh  ri  rk  r   rl  rm  r   rn  r   ro  r   r   rp  rq  r,   r,   r,   r-   r9    sP   








r9  ):rt   rF  collectionsr   r   r:   r   r   rO  r   r'   Zpsutil.testsr   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    r!   r"   rf   r   r   
namedtupler   r   r7  r8  r   existsr9  r,   r,   r,   r-   <module>   sv     8  ! h 