B
    çÚ†\/–  ã               @   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
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- dd#lm.Z. dd$lm/Z/ dd%lm0Z0 dd&lm1Z1 dd'lm2Z2 dd(lm3Z3 dd)lm4Z4 dd*lm5Z5 dd+lm6Z6 dd,lm7Z7 dd-lm8Z8 dd.lm9Z9 dd/lm:Z: dd0lm;Z; dd1lm<Z< dd2lm=Z= dd3lm>Z> dd4lm?Z? ddl
Z
ddlZ
G d5d6„ d6e;j@ƒZAe Bd7d8¡ZCG d9d:„ d:e;j@ƒZDe; Ee9d;¡e; Ee:oejF Ge5¡ d<¡G d=d>„ d>e;j@ƒƒƒZHG d?d@„ d@e;j@ƒZIG dAdB„ dBe;j@ƒZJG dCdD„ dDe;j@ƒZKG dEdF„ dFe;j@ƒZLG dGdH„ dHe;j@ƒZMG dIdJ„ dJe;j@ƒZNeOdKkrœe2ePƒ dS )Lz
Miscellaneous tests.
é    N)ÚLINUX)ÚPOSIX)ÚWINDOWS)Úmemoize)Úmemoize_when_activated)Úsupports_ipv6)Úwrap_numbers)Ú	open_text)Úopen_binary)ÚPY3)ÚAPPVEYOR)Úbind_socket)Úbind_unix_socket)Ú
call_until)Úchdir)Úcreate_proc_children_pair)Úcreate_sockets)Úcreate_zombie_proc)ÚDEVNULL)Úget_free_port)Úget_test_subprocess)ÚHAS_BATTERY)ÚHAS_CONNECTIONS_UNIX)ÚHAS_MEMORY_MAPS)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)Úimport_module_by_path)Úis_namedtuple)Úmock)Ú
PYTHON_EXE)Úreap_children)Úreload_module)Úretry)ÚROOT_DIR)Úrun_test_module_by_name)Ú
safe_mkdir)Úsafe_rmpath)ÚSCRIPTS_DIR)Úsh)Útcp_socketpair)ÚTESTFN)ÚTOX)ÚTRAVIS)Úunittest)Úunix_socket_path)Úunix_socketpair)Úwait_for_file)Úwait_for_pidc               @   sÀ   e Zd Zefdd„Zdd„ Zefdd„Zefdd„Zef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'd(„ Zd)S )*ÚTestMiscc          	   C   sn  t  ¡ }||ƒ}|  d|¡ |  d|j |¡ |  d|¡ |  | ¡ |¡ tjjt jdt  t	 
¡ ¡d@ t  ¡ }||ƒ}|  d|j |¡ |  d|¡ |  d|¡ W d Q R X tjjt jdt  t	 
¡ ¡d@ t  ¡ }||ƒ}|  d|j |¡ |  d|¡ |  d|¡ W d Q R X tjjt jdt  t	 
¡ ¡d4 t  ¡ }||ƒ}|  d|j |¡ |  d|¡ W d Q R X d S )Nzpsutil.Processzpid=%szname=Úname)Úside_effectZzombieZ
terminated)ÚpsutilÚProcessÚassertInÚpidr5   r    ÚpatchÚobjectÚZombieProcessÚosÚgetpidÚassertNotInÚNoSuchProcessÚAccessDenied)ÚselfÚfuncÚpÚr© rG   ú5lib/python3.7/site-packages/psutil/tests/test_misc.pyÚtest_process__repr__S   s4    zTestMisc.test_process__repr__c             C   s   | j td d S )N)rD   )rI   Ústr)rC   rG   rG   rH   Útest_process__str__o   s    zTestMisc.test_process__str__c             C   sN   |   tt d¡ƒd¡ |   ttjdddƒd¡ |   ttjdddƒd¡ d S )NiA  z7psutil.NoSuchProcess process no longer exists (pid=321)Úfoo)r5   zCpsutil.NoSuchProcess process no longer exists (pid=321, name='foo'))Úmsgzpsutil.NoSuchProcess foo)ÚassertEqualÚreprr7   rA   )rC   rD   rG   rG   rH   Útest_no_such_process__repr__r   s    z%TestMisc.test_no_such_process__repr__c             C   sj   |   tt d¡ƒd¡ |   ttjdddƒd¡ |   ttjddddƒd¡ |   ttjddd	ƒd
¡ d S )NiA  zEpsutil.ZombieProcess process still exists but it's a zombie (pid=321)rL   )r5   zQpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo')é   )r5   ÚppidzYpsutil.ZombieProcess process still exists but it's a zombie (pid=321, name='foo', ppid=1))rM   zpsutil.ZombieProcess foo)rN   rO   r7   r=   )rC   rD   rG   rG   rH   Útest_zombie_process__repr__~   s    z$TestMisc.test_zombie_process__repr__c             C   sN   |   tt d¡ƒd¡ |   ttjdddƒd¡ |   ttjdddƒd¡ d S )NiA  zpsutil.AccessDenied (pid=321)rL   )r5   z)psutil.AccessDenied (pid=321, name='foo'))rM   zpsutil.AccessDenied foo)rN   rO   r7   rB   )rC   rD   rG   rG   rH   Útest_access_denied__repr__   s    z#TestMisc.test_access_denied__repr__c             C   sP   |   tt d¡ƒd¡ |   ttjdddƒd¡ |   ttjddddƒd¡ d S )	NiA  z/psutil.TimeoutExpired timeout after 321 secondséo   )r:   z9psutil.TimeoutExpired timeout after 321 seconds (pid=111)rL   )r:   r5   zEpsutil.TimeoutExpired timeout after 321 seconds (pid=111, name='foo'))rN   rO   r7   ZTimeoutExpired)rC   rD   rG   rG   rH   Útest_timeout_expired__repr__š   s    z%TestMisc.test_timeout_expired__repr__c             C   s>   t  ¡ }t  ¡ }|  ||¡ d|_|  ||¡ |  |d¡ d S )N)r   r   rL   )r7   r8   rN   Z_identÚassertNotEqual)rC   Úp1Úp2rG   rG   rH   Útest_process__eq__¦   s    zTestMisc.test_process__eq__c             C   s(   t t ¡ t ¡ gƒ}|  t|ƒd¡ d S )NrQ   )Úsetr7   r8   rN   Úlen)rC   ÚsrG   rG   rH   Útest_process__hash__®   s    zTestMisc.test_process__hash__c          	   C   s°   t tƒ}x†|D ]~}|dkrq| d¡syt|ƒ W q tk
rŠ   |tjkr†tt|ƒ}|d kr`w|jd k	r†d|j ¡ kr†|  	d| ¡ Y qX qW xtjD ]}|  
||¡ q˜W d S )N)	ÚcallableÚerrorÚ
namedtupleÚtestsZlongZtestZNUM_CPUSZ	BOOT_TIMEZTOTAL_PHYMEMÚ_Z
deprecatedz%r not in psutil.__all__)Údirr7   Ú
startswithÚ
__import__ÚImportErrorÚ__all__ÚgetattrÚ__doc__ÚlowerÚfailr9   )rC   Z
dir_psutilr5   ZfunrG   rG   rH   Ú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 rG   )rJ   )Ú.0ÚxrG   rG   rH   ú
<listcomp>Í   s    z)TestMisc.test_version.<locals>.<listcomp>)rN   Újoinr7   Úversion_infoÚ__version__)rC   rG   rG   rH   Útest_versionÌ   s    zTestMisc.test_versionc             C   s"   t  ¡ }d|_|  d| ¡ ¡ d S )NÚ1rL   )r7   r8   rL   r@   Úas_dict)rC   rE   rG   rG   rH   Ú!test_process_as_dict_no_new_namesÐ   s    z*TestMisc.test_process_as_dict_no_new_namesc                s  t ‡ fdd„ƒ}g ‰ x:tdƒD ].}|ƒ }di f}|  ||¡ |  tˆ ƒd¡ qW x<tdƒD ]0}|dƒ}di f}|  ||¡ |  tˆ ƒd¡ qZW xDtdƒD ]8}|ddd}dddif}|  ||¡ |  tˆ ƒd	¡ q˜W | ¡  |ƒ }di f}|  ||¡ |  tˆ ƒd
¡ |  |jd¡ d S )Nc                 s   ˆ   d¡ | |fS )zfoo docstringN)Úappend)ÚargsÚkwargs)ÚcallsrG   rH   rL   ×   s    
z"TestMisc.test_memoize.<locals>.fooé   rG   rQ   )rQ   )Úbarr~   é   é   zfoo docstring)r   ÚrangerN   r\   Úcache_clearrj   )rC   rL   rp   ÚretZexpectedrG   )r|   rH   Útest_memoizeÖ   s.    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 )N)ry   )rC   )r|   rG   rH   rL   ü   s    z5TestMisc.test_memoize_when_activated.<locals>.Foo.fooN)Ú__name__Ú
__module__Ú__qualname__r   rL   rG   )r|   rG   rH   ÚFooú   s   rˆ   r}   rQ   )rL   rN   r\   Zcache_activateZcache_deactivate)rC   rˆ   ÚfrG   )r|   rH   Ú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 )N)r   Úupper)r]   rG   rG   rH   Úk  s    z,TestMisc.test_parse_environ_block.<locals>.kza=1 Úarv   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‹   rN   )rC   r‹   r   rG   rG   rH   Útest_parse_environ_block  s    



z!TestMisc.test_parse_environ_blockc          	   C   s.  |   tj¡ tƒ rút d¡}d|_t ¡  tƒ r6t‚W d Q R X t ¡  tjdtjd}tƒ rdt‚|j	snt‚W d Q R X t ¡  tjdtj
d"}tƒ rœt‚t ¡  |j	s®t‚W d Q R X t ¡  tjdtj
d"}tƒ rÜt‚t ¡  |j	sît‚W d Q R X n0|  t¡  t tjtj¡}| d¡ W d Q R X d S )Nzpsutil._common.socketFzpsutil._common.socket.socket)r6   z!psutil._common.socket.socket.bind)z::1r   )Ú
addCleanupr   r‚   r    r;   Zhas_ipv6ÚAssertionErrorÚsocketr`   ÚcalledZgaierrorÚassertRaisesÚ	ExceptionÚAF_INET6ÚSOCK_STREAMZbind)rC   r]   ÚsockrG   rG   rH   Útest_supports_ipv6)  s4    


zTestMisc.test_supports_ipv6c          	   C   sð   ddl m} tj t¡}||ƒs$t‚|tj |¡ƒr8t‚tj	dt
tjdƒd |  t
||¡ W d Q R X tj	dt
tjdƒd |  t
||¡ W d Q R X tj	dt
tjdƒd ||ƒr¼t‚W d Q R X tj	ddd ||ƒrât‚W d Q R X d S )	Nr   )Úisfile_strictzpsutil._common.os.statrL   )r6   zpsutil._common.stat.S_ISREGF)Úreturn_value)r’   rž   r>   ÚpathÚabspathÚ__file__r•   Údirnamer    r;   ÚOSErrorÚerrnoZEPERMr˜   ZEACCESÚEINVAL)rC   rž   Z	this_filerG   rG   rH   Útest_isfile_strictI  s    zTestMisc.test_isfile_strictc                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ÚpicklerN   )rƒ   rŽ   r   )rC   rG   rH   Úcheck[  s
    

z*TestMisc.test_serialization.<locals>.checkr   )Úintervalz/proc/diskstats)r7   r8   rw   Zvirtual_memoryZswap_memoryZ	cpu_timesZcpu_times_percentÚnet_io_countersr   r>   r    Úexistsr   Údisk_io_countersZdisk_partitionsZ
disk_usageÚgetcwdÚusers)rC   r¬   rG   )rC   rH   Útest_serializationZ  s    zTestMisc.test_serializationc             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    rr   r%   r.   r¯   ÚskipTestr   r˜   Ú
SystemExitZsetuprN   Zget_versionr7   rt   )rC   Zsetup_pyÚmodulerG   rG   rH   Útest_setup_scriptq  s    
zTestMisc.test_setup_scriptc          
   C   s¸   t jjtjdtjd}t ¡  |js*t‚W d Q R X t jjtjdt d¡d}t ¡  |jsbt‚W d Q R X t jjtjdt	d.}|  
t	¡ t ¡  W d Q R X |jsªt‚W d Q R X d S )NZcreate_time)r6   rQ   )r    r;   r<   r7   r8   rB   r—   r•   r=   Ú
ValueErrorr˜   )rC   ÚmethrG   rG   rH   Útest_ad_on_process_creationy  s    
z$TestMisc.test_ad_on_process_creationc          
   C   sR   t jddd: |  t¡}ttƒ W d Q R X |  dt|jƒ 	¡ ¡ W d Q R X d S )Nzpsutil._psplatform.cext.versionz0.0.0)rŸ   zversion conflict)
r    r;   r˜   rg   r#   r7   r9   rJ   Ú	exceptionrk   )rC   ÚcmrG   rG   rH   Útest_sanity_version_checkŠ  s
    z"TestMisc.test_sanity_version_checkN)r…   r†   r‡   rO   rI   rK   rP   rS   rT   rV   rZ   r^   rm   ru   rx   r„   rŠ   r“   r   r§   r³   r·   rº   r½   rG   rG   rG   rH   r4   Q   s(   # r4   rL   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 )N)r   r‚   )rC   rG   rG   rH   ÚsetUp  s    zTestWrapNumbers.setUpc             C   s&   dt dddƒi}|  t|dƒ|¡ d S )NÚdisk1é   Údisk_io)ÚntrN   r   )rC   ÚinputrG   rG   rH   Útest_first_call¢  s    zTestWrapNumbers.test_first_callc             C   s8   dt dddƒi}|  t|dƒ|¡ |  t|dƒ|¡ d S )NrÀ   rÁ   rÂ   )rÃ   rN   r   )rC   rÄ   rG   rG   rH   Ú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À   rÁ   rÂ   é
   é   é   é   é   )rÃ   rN   r   )rC   rÄ   rG   rG   rH   Ú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Ã   rN   r   )rC   rÄ   rG   rG   rH   Ú	test_wrapµ  s4    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À   rÁ   rÂ   é   )rÀ   Údisk2é   )rÃ   rN   r   )rC   rÄ   rG   rG   rH   Ú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Ã   rN   r   )rC   rÄ   rG   rG   rH   Ú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,  iü  i€  i#  iR  iÃ  i  i§ä iÈ·  )	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Í   iü  i€  i#  iR  iÃ  i  i§ä iÈ·  rÞ   r   i  )rN   r   )rC   ÚdÚoutrG   rG   rH   Ú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À   rÁ   rÂ   r   rQ   r}   )rÃ   r   Ú
cache_inforN   )rC   rÄ   ÚcacherG   rG   rH   Ú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¡ |  |d dddddœi¡ |  |d di i¡ d S )	NrÀ   rÁ   rÂ   rÇ   r   rQ   ))rÀ   r   )rÀ   rQ   )rÀ   r}   r}   )rÃ   r   râ   rN   )rC   rÄ   rã   rG   rG   rH   Ú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   rQ   ))rÀ   r   )rÀ   rQ   )rÀ   r}   r}   )rÀ   r}   c                 sF   t  ¡ } ˆ  | d dddddœi¡ ˆ  | d ddtdgƒii¡ d S )	NrQ   rÂ   r   rÍ   ))rÀ   r   )rÀ   rQ   )rÀ   r}   r}   rÀ   )rÀ   r}   )r   râ   rN   r[   )rã   )rC   rG   rH   Úassert_8  s    
z0TestWrapNumbers.test_cache_wrap.<locals>.assert_rÏ   rÉ   rÐ   )rÃ   r   râ   rN   r[   )rC   rÄ   rã   ræ   rG   )rC   rH   Ú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¡ |  |d dddddœi¡ |  |d	 di i¡ d S )
NrÀ   rÁ   rÂ   rÖ   )rÀ   r×   r   rQ   ))rÀ   r   )rÀ   rQ   )rÀ   r}   r}   )rÃ   r   râ   rN   )rC   rÄ   rã   rG   rG   rH   Útest_cache_changing_keysY  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À   rÁ   rÂ   z?!?)rÃ   r   r‚   rN   râ   )rC   rÄ   rG   rG   rH   Útest_cache_clearf  s    



z TestWrapNumbers.test_cache_clearznot supportedc             C   s¸   t  ¡ rt  ¡ s|  d¡S t  ¡  t  ¡  t ¡ }x$|D ]}|  d|¡ |  d|¡ q8W t j ¡  t ¡ }x$|D ]}|  d|¡ |  d|¡ qpW t j ¡  t ¡ }|  	|i i i f¡ d S )Nzno disks or NICs availablezpsutil.disk_io_counterszpsutil.net_io_counters)
r7   r°   r®   r´   r   râ   r9   r‚   r@   rN   )rC   Zcachesrã   rG   rG   rH   Útest_cache_clear_public_apiso  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/   ÚskipIfr   rê   rG   rG   rG   rH   r¾   ›  s   
%0	r¾   zcan't test on TOXz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pxeoxe ¡  d¡dd„ ƒZdd„ Zdd„ Zdd„ Ze 	ed¡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/¡d0d1„ ƒZ"d2d3„ Z#e 	e$ d ¡e 	ed¡d4d5„ ƒƒZ%e 	e& d ¡e 	ed¡d6d7„ ƒƒZ'e 	e( d ¡e 	e) d8¡d9d:„ ƒƒZ*d;d<„ Z+dS )>ÚTestScriptsz-Tests for scripts in the "scripts" directory.c          
   O   s   dt j t| ¡ } t| g}x|D ]}| |¡ q W yt|f|Ž ¡ }W n8 tk
r~ } zdt	|ƒkrlt	|ƒS ‚ W d d }~X Y nX |sŒt
|ƒ‚|S )Nz%srB   )r>   r    rr   r)   r!   ry   r*   ÚstripÚRuntimeErrorrJ   r•   )Úexerz   r{   ÚcmdÚargrà   ÚerrrG   rG   rH   Úassert_stdout‘  s    
zTestScripts.assert_stdoutNc          	   C   sR   t j t| ¡} tr"t| ddd}n
t| dƒ}| | ¡ }W d Q R X t |¡ d S )NÚrtÚutf8)Úencoding)	r>   r    rr   r)   r   ÚopenÚreadÚastÚparse)rð   rz   r‰   ÚsrcrG   rG   rH   Úassert_syntax¡  s    
zTestScripts.assert_syntaxc             C   sZ   t | ƒ}xLt t¡D ]>}| d¡rdtj |¡d  |kr|  dtj t|¡ ¡ qW d S )Nz.pyZtest_r   zno test defined for %r script)	rd   r>   Úlistdirr)   Úendswithr    Úsplitextrl   rr   )rC   Zmethsr5   rG   rG   rH   Útest_coverage¬  s    
zTestScripts.test_coveragez
POSIX onlyc             C   sT   xNt  t¡D ]@}| d¡rt j t|¡}tjt  |¡tj @ s|  	d| ¡ qW d S )Nz.pyz%r is not executable)
r>   rþ   r)   rÿ   r    rr   ÚstatÚS_IXUSRÚST_MODErl   )rC   r5   r    rG   rG   rH   Útest_executable¶  s
    
zTestScripts.test_executablec             C   s   |   d¡ d S )Nzdisk_usage.py)rô   )rC   rG   rG   rH   Útest_disk_usage¾  s    zTestScripts.test_disk_usagec             C   s   |   d¡ d S )Nzfree.py)rô   )rC   rG   rG   rH   Ú	test_freeÁ  s    zTestScripts.test_freec             C   s   |   d¡ d S )Nz
meminfo.py)rô   )rC   rG   rG   rH   Útest_meminfoÄ  s    zTestScripts.test_meminfoc             C   s   |   dtt ¡ ƒ¡ d S )Nzprocinfo.py)rô   rJ   r>   r?   )rC   rG   rG   rH   Útest_procinfoÇ  s    zTestScripts.test_procinfoz unreliable on APPVEYOR or TRAVISc             C   s   |   d¡ d S )Nzwho.py)rô   )rC   rG   rG   rH   Útest_whoË  s    zTestScripts.test_whoc             C   s   |   d¡ d S )Nzps.py)rô   )rC   rG   rG   rH   Útest_psÐ  s    zTestScripts.test_psc             C   s   |   d¡ d S )Nz	pstree.py)rô   )rC   rG   rG   rH   Útest_pstreeÓ  s    zTestScripts.test_pstreec             C   s   |   d¡ d S )Nz
netstat.py)rô   )rC   rG   rG   rH   Útest_netstatÖ  s    zTestScripts.test_netstatzunreliable on TRAVISc             C   s   |   d¡ d S )Nzifconfig.py)rô   )rC   rG   rG   rH   Útest_ifconfigÚ  s    zTestScripts.test_ifconfigznot supportedc             C   s   |   dtt ¡ ƒ¡ d S )Nzpmap.py)rô   rJ   r>   r?   )rC   rG   rG   rH   Ú	test_pmapÞ  s    zTestScripts.test_pmapc             C   s.   dt  ¡  ¡ jkr|  d¡‚| jdtd d S )NZussznot supportedzprocsmem.py)Ústderr)r7   r8   Zmemory_full_infoÚ_fieldsr´   rô   r   )rC   rG   rG   rH   Útest_procsmemâ  s    
zTestScripts.test_procsmemc             C   s   |   d¡ d S )Nz
killall.py)rý   )rC   rG   rG   rH   Útest_killallç  s    zTestScripts.test_killallc             C   s   |   d¡ d S )Nz	nettop.py)rý   )rC   rG   rG   rH   Útest_nettopê  s    zTestScripts.test_nettopc             C   s   |   d¡ d S )Nztop.py)rý   )rC   rG   rG   rH   Útest_topí  s    zTestScripts.test_topc             C   s   |   d¡ d S )Nziotop.py)rý   )rC   rG   rG   rH   Ú
test_iotopð  s    zTestScripts.test_iotopc             C   s,   |   dt ¡  ¡ ¡}|  tt ¡ ƒ|¡ d S )Nzpidof.py)rô   r7   r8   r5   r9   rJ   r>   r?   )rC   ÚoutputrG   rG   rH   Ú
test_pidofó  s    zTestScripts.test_pidofzWINDOWS onlyc             C   s   |   d¡ d S )Nzwinservices.py)rô   )rC   rG   rG   rH   Útest_winservices÷  s    zTestScripts.test_winservicesc             C   s   |   d¡ d S )Nzcpu_distribution.py)rý   )rC   rG   rG   rH   Útest_cpu_distributionû  s    z!TestScripts.test_cpu_distributionc             C   s   |   d¡ d S )Nztemperatures.py)rô   )rC   rG   rG   rH   Útest_temperaturesþ  s    zTestScripts.test_temperaturesc             C   s   |   d¡ d S )Nzfans.py)rô   )rC   rG   rG   rH   Ú	test_fans  s    zTestScripts.test_fansz
no batteryc             C   s   |   d¡ d S )Nz
battery.py)rô   )rC   rG   rG   rH   Útest_battery  s    zTestScripts.test_batteryc             C   s   |   d¡ d S )Nz
sensors.py)rô   )rC   rG   rG   rH   Útest_sensors  s    zTestScripts.test_sensors)N),r…   r†   r‡   rj   Ústaticmethodrô   rý   r  r/   rì   r   r  r  r  r  r	  r   r.   r7   r²   r
  r  r  r  r  r   r  r  r  r  r  r  r  r   r  r  r   r  r   r  r   r   r  r  rG   rG   rG   rH   rí   Š  s@   

rí   c               @   sx   e Zd Ze d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd	„ ƒZe d¡d
d„ ƒZ	e d¡dd„ ƒZ
dS )ÚTestRetryDecoratorz
time.sleepc                sF   t ddd d‡ fdd„ƒ}ttdƒƒ‰ |  |ƒ d¡ |  |jd¡ d S )NrÁ   rQ   )Úretriesr­   Úlogfunc                  s   xˆ rˆ   ¡  dd  qW dS )NrQ   r   )ÚpoprG   )ÚqueuerG   rH   rL     s    z2TestRetryDecorator.test_retry_success.<locals>.foor   )r$   Úlistr   rN   Ú
call_count)rC   ÚsleeprL   rG   )r$  rH   Útest_retry_success  s    z%TestRetryDecorator.test_retry_successc                sD   t ddd d‡ fdd„ƒ}ttdƒƒ‰ |  t|¡ |  |jd¡ d S )NrÁ   rQ   )r!  r­   r"  c                  s   xˆ rˆ   ¡  dd  qW dS )NrQ   r   )r#  rG   )r$  rG   rH   rL   +  s    z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r$   r%  r   r˜   ÚZeroDivisionErrorrN   r&  )rC   r'  rL   rG   )r$  rH   Útest_retry_failure'  s    z%TestRetryDecorator.test_retry_failurec             C   s2   t tdddd„ ƒ}|  t|¡ |  |jd¡ d S )NrQ   )r»   r­   c               S   s   t ‚d S )N)Ú	TypeErrorrG   rG   rG   rH   rL   8  s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r$   r¸   r˜   r,  rN   r&  )rC   r'  rL   rG   rG   rH   Útest_exception_arg6  s    z%TestRetryDecorator.test_exception_argc             C   s4   t dd d ddd„ ƒ}|  t|¡ |  |jd¡ d S )NrÁ   )r!  r­   r"  c               S   s   dd  d S )NrQ   r   rG   rG   rG   rG   rH   rL   C  s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   )r$   r˜   r*  rN   r&  )rC   r'  rL   rG   rG   rH   Útest_no_interval_arg?  s    z'TestRetryDecorator.test_no_interval_argc             C   s4   t ddd ddd„ ƒ}|  t|¡ |  |jd¡ d S )NrÁ   rQ   )r!  r­   r"  c               S   s   dd  d S )NrQ   r   rG   rG   rG   rG   rH   rL   M  s    z0TestRetryDecorator.test_retries_arg.<locals>.foo)r$   r˜   r*  rN   r&  )rC   r'  rL   rG   rG   rH   Útest_retries_argJ  s    z#TestRetryDecorator.test_retries_argc             C   s   | j ttddd d S )NrÁ   rQ   )r!  Ztimeout)r˜   r¸   r$   )rC   r'  rG   rG   rH   Útest_retries_and_timeout_argsT  s    z0TestRetryDecorator.test_retries_and_timeout_argsN)r…   r†   r‡   r    r;   r(  r+  r-  r.  r/  r0  rG   rG   rG   rH   r     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 )ÚTestSyncTestUtilsc             C   s   t tƒ d S )N)r(   r,   )rC   rG   rG   rH   rë   [  s    zTestSyncTestUtils.tearDownc          	   C   sP   t t ¡ ƒ tt ¡ ƒd }tjdtdgƒd |  	tj
t |¡ W d Q R X d S )NiŸ† zpsutil.tests.retry.__iter__r   )rŸ   )r3   r>   r?   Úmaxr7   Zpidsr    r;   Úiterr˜   rA   )rC   ZnopidrG   rG   rH   Útest_wait_for_pid^  s    z#TestSyncTestUtils.test_wait_for_pidc          	   C   s<   t tdƒ}| d¡ W d Q R X ttƒ tj t¡r8t‚d S )NÚwrL   )rø   r,   Úwriter2   r>   r    r¯   r•   )rC   r‰   rG   rG   rH   Útest_wait_for_filed  s    z$TestSyncTestUtils.test_wait_for_filec          	   C   s6   t tdƒ W d Q R X ttdd tj t¡r2t‚d S )Nr5  T)Úempty)rø   r,   r2   r>   r    r¯   r•   )rC   rG   rG   rH   Útest_wait_for_file_emptyj  s    
z*TestSyncTestUtils.test_wait_for_file_emptyc          	   C   s2   t jdtdgƒd |  ttt¡ W d Q R X d S )Nzpsutil.tests.retry.__iter__r   )rŸ   )r    r;   r3  r˜   ÚIOErrorr2   r,   )rC   rG   rG   rH   Útest_wait_for_file_no_filep  s    z,TestSyncTestUtils.test_wait_for_file_no_filec          	   C   s@   t tdƒ}| d¡ W d Q R X ttdd tj t¡s<t‚d S )Nr5  rL   F)Údelete)rø   r,   r6  r2   r>   r    r¯   r•   )rC   r‰   rG   rG   rH   Útest_wait_for_file_no_deletet  s    z.TestSyncTestUtils.test_wait_for_file_no_deletec             C   s   t dd„ dƒ}|  |d¡ d S )Nc               S   s   dS )NrQ   rG   rG   rG   rG   rH   Ú<lambda>{  s    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>zret == 1rQ   )r   rN   )rC   rƒ   rG   rG   rH   Útest_call_untilz  s    z!TestSyncTestUtils.test_call_untilN)
r…   r†   r‡   rë   r4  r7  r9  r;  r=  r?  rG   rG   rG   rH   r1  Y  s   r1  c               @   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S )ÚTestFSTestUtilsc             C   s   t tƒ d S )N)r(   r,   )rC   rG   rG   rH   r¿     s    zTestFSTestUtils.setUpc          	   C   s&   t tƒ}|  |jd¡ W d Q R X d S )Nrõ   )r	   r¢   rN   Úmode)rC   r‰   rG   rG   rH   Útest_open_text†  s    
zTestFSTestUtils.test_open_textc          	   C   s&   t tƒ}|  |jd¡ W d Q R X d S )NÚrb)r
   r¢   rN   rA  )rC   r‰   rG   rG   rH   Útest_open_binaryŠ  s    
z TestFSTestUtils.test_open_binaryc             C   s4   t tƒ tj t¡st‚t tƒ tj t¡s0t‚d S )N)r'   r,   r>   r    Úisdirr•   )rC   rG   rG   rH   Útest_safe_mkdirŽ  s    zTestFSTestUtils.test_safe_mkdirc          
   C   sž   t tdƒ ¡  ttƒ tj t¡r&t‚ttƒ t t¡ ttƒ tj t¡rPt‚t	j
dttjdƒd.}|  t¡ ttƒ W d Q R X |jst‚W d Q R X d S )Nr5  zpsutil.tests.os.statr‘   )r6   )rø   r,   Úcloser(   r>   r    r¯   r•   Úmkdirr    r;   r¤   r¥   r¦   r˜   r—   )rC   ÚmrG   rG   rH   Útest_safe_rmpath”  s    
z TestFSTestUtils.test_safe_rmpathc          	   C   sT   t  ¡ }t  t¡ ttƒ  |  t  ¡ t j |t¡¡ W d Q R X |  t  ¡ |¡ d S )N)r>   r±   rH  r,   r   rN   r    rr   )rC   ÚbaserG   rG   rH   Ú
test_chdir¦  s
    

$zTestFSTestUtils.test_chdirN)
r…   r†   r‡   r¿   rë   rB  rD  rF  rJ  rL  rG   rG   rG   rH   r@    s   r@  c               @   s2   e Zd Zdd„ Zdd„ Ze e d¡dd„ ƒZdS )	ÚTestProcessUtilsc             C   sL   t ƒ }t |j¡}| ¡ st‚tƒ  | ¡ r0t‚tjjr<t‚tjj	rHt‚d S )N)
r   r7   r8   r:   Ú
is_runningr•   r"   rb   Ú_pids_startedÚ_subprocesses_started)rC   ZsubprE   rG   rG   rH   Útest_reap_children°  s    z#TestProcessUtils.test_reap_childrenc             C   sÊ   t ƒ \}}|  |j|j¡ | ¡ s&t‚| ¡ s2t‚t ¡ jdd}|  t	|ƒd¡ |  
||¡ |  
||¡ |  | ¡ t ¡ ¡ |  | ¡ |j¡ tƒ  | ¡ r¢t‚| ¡ r®t‚tjjrºt‚tjjrÆt‚d S )NT)Ú	recursiver}   )r   rW   r:   rN  r•   r7   r8   ÚchildrenrN   r\   r9   rR   r>   r?   r"   rb   rO  rP  )rC   rX   rY   rS  rG   rG   rH   Útest_create_proc_children_pair¹  s    
z/TestProcessUtils.test_create_proc_children_pairz
POSIX onlyc             C   s4   t ƒ }| jtdd t |¡}|  | ¡ tj¡ d S )NT)rR  )r   r”   r"   r7   r8   rN   ZstatusZSTATUS_ZOMBIE)rC   ZzpidrE   rG   rG   rH   Útest_create_zombie_procÌ  s    
z(TestProcessUtils.test_create_zombie_procN)	r…   r†   r‡   rQ  rT  r/   rì   r   rU  rG   rG   rG   rH   rM  ®  s   	rM  c               @   sP   e Zd Zdd„ Ze e d¡dd„ ƒZdd„ Ze e d¡dd	„ ƒZ	d
d„ Z
dS )ÚTestNetUtilsc          	   C   s>   t ƒ }t td|fd¡}|  | ¡ d |¡ W d Q R X d S )Nr‘   )ÚaddrrQ   )r   Ú
contextlibÚclosingr   rN   Úgetsockname)rC   Zportr]   rG   rG   rH   r   Ö  s    zTestNetUtils.bind_socketz
POSIX onlyc          
   C   sÐ   t ƒ z}t|ƒ}t |¡\ |  |jtj¡ |  |jtj	¡ |  | 
¡ |¡ tj |¡s\t‚t t |¡j¡srt‚W d Q R X W d Q R X t ƒ :}t|tjd}t |¡ |  |jtj¡ W d Q R X W d Q R X d S )N)Útype)r0   r   rX  rY  rN   Úfamilyr–   ÚAF_UNIXr[  r›   rZ  r>   r    r¯   r•   r  ÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)rC   r5   rœ   rG   rG   rH   Útest_bind_unix_socketÛ  s    *z"TestNetUtils.test_bind_unix_socketc          
   C   s|   dt ƒ f}ttj|d\}}t |¡L t |¡6 |  | ¡ |¡ |  | ¡ |¡ |  	| ¡ |¡ W d Q R X W d Q R X d S )Nz	127.0.0.1)rW  )
r   r+   r–   ÚAF_INETrX  rY  rN   rZ  ÚgetpeernamerW   )rC   rW  ÚserverÚclientrG   rG   rH   Útcp_tcp_socketpairë  s    
zTestNetUtils.tcp_tcp_socketpairc          	   C   sÌ   t  ¡ }| ¡ }|jddr t‚tƒ œ}t|ƒ\}}zvtj 	|¡sFt‚t
 t 
|¡j¡s\t‚|  | ¡ | d¡ |  t|jddƒd¡ |  | ¡ |¡ |  | ¡ |¡ W d | ¡  | ¡  X W d Q R X d S )NZunix)Zkindr}   )r7   r8   Únum_fdsZconnectionsr•   r0   r1   r>   r    r¯   r  r^  r_  rN   r\   rZ  rc  rG  )rC   rE   rg  r5   rd  re  rG   rG   rH   Útest_unix_socketpairö  s    z!TestNetUtils.test_unix_socketpairc          	   C   sÎ   t ƒ ¾}t t¡}t t¡}x:|D ]2}||j  d7  < || tjtj¡  d7  < q"W |  	|tj
 d¡ tƒ r‚|  	|tj d¡ trœtrœ|  	|tj d¡ |  	|tj d¡ |  	|tj d¡ W d Q R X d S )NrQ   r}   )r   ÚcollectionsÚdefaultdictÚintr\  Z
getsockoptr–   Z
SOL_SOCKETZSO_TYPEZassertGreaterEqualrb  r   rš   r   r   r]  r›   r`  )rC   ZsocksZfamsÚtypesr]   rG   rG   rH   Útest_create_sockets  s    


 z TestNetUtils.test_create_socketsN)r…   r†   r‡   r   r/   rì   r   ra  rf  rh  rm  rG   rG   rG   rH   rV  Ô  s
   rV  c               @   s   e Zd Zdd„ ZdS )ÚTestOtherUtilsc             C   s.   t t dd¡dddƒƒst‚t tƒ ƒr*t‚d S )NrL   za b crQ   r}   r   )r   ri  ra   r•   Útuple)rC   rG   rG   rH   Útest_is_namedtuple  s    z!TestOtherUtils.test_is_namedtupleN)r…   r†   r‡   rp  rG   rG   rG   rH   rn    s   rn  Ú__main__)Qrj   rú   ri  rX  r¥   r¨   r>   r«   r–   r  r7   r   r   r   r’   r   r   r   r   r	   r
   Zpsutil._compatr   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$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   ZTestCaser4   ra   rÃ   r¾   rì   r    r¯   rí   r   r1  r@  rM  rV  rn  r…   r¢   rG   rG   rG   rH   Ú<module>
   s      I p
 	C&/&E
