
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    xe_T8                     @   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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ZddlZG d$d% d%eZ,G d&d' d'eZ-G d(d) d)eZ.G d*d+ d+eZ/G d,d- d-eZ0e#G d.d/ d/e'Z1G d0d1 d1eZ2G d2d3 d3eZ3e4d4krzdd5l5m6Z6 e6e7 dS )6z3
Tests for testing utils (psutil.tests namespace).
    N)FREEBSD)NETBSD)POSIX)open_binary)	open_text)supports_ipv6)bind_socket)bind_unix_socket)
call_until)chdir)
CI_TESTING)create_sockets)get_free_port)HAS_CONNECTIONS_UNIX)is_namedtuple)mock)process_namespace)PsutilTestCase)
PYTHON_EXE)reap_children)retry)retry_on_failure)
safe_mkdir)safe_rmpath)	serialrun)system_namespace)tcp_socketpair)	terminate)TestMemoryLeak)unittest)unix_socketpair)wait_for_file)wait_for_pidc                   @   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 )N      retriesintervalZlogfunc                      s    r    dd  q dS Nr%   r   pop queuer,   N/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_testutils.pyfooC   s    
z2TestRetryDecorator.test_retry_success.<locals>.foo   )r   listrangeassertEqual
call_countselfsleepr0   r,   r-   r/   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$   r%   r&   c                      s    r    dd  q dS r)   r*   r,   r-   r,   r/   r0   Q   s    
z2TestRetryDecorator.test_retry_failure.<locals>.foo   )r   r2   r3   assertRaisesZeroDivisionErrorr4   r5   r6   r,   r-   r/   test_retry_failureN   s
    z%TestRetryDecorator.test_retry_failurec                 C   s2   t tdddd }| t| | |jd d S )Nr%   )	exceptionr(   c                   S   s   t d S N)	TypeErrorr,   r,   r,   r/   r0   ^   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   
ValueErrorr;   r@   r4   r5   r6   r,   r,   r/   test_exception_arg\   s    

z%TestRetryDecorator.test_exception_argc                 C   s4   t dd d ddd }| t| | |jd d S )Nr$   r&   c                   S   s   dd  d S r)   r,   r,   r,   r,   r/   r0   i   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   r   r;   r<   r4   r5   r6   r,   r,   r/   test_no_interval_arge   s    
z'TestRetryDecorator.test_no_interval_argc                 C   s4   t ddd ddd }| t| | |jd d S )Nr$   r%   r&   c                   S   s   dd  d S r)   r,   r,   r,   r,   r/   r0   s   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorC   r6   r,   r,   r/   test_retries_argp   s    
z#TestRetryDecorator.test_retries_argc                 C   s   | j ttddd d S )Nr$   r%   )r'   timeout)r;   rA   r   )r7   r8   r,   r,   r/   test_retries_and_timeout_argsz   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)__name__
__module____qualname__r   patchr9   r=   rB   rD   rE   rG   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 )TestSyncTestUtilsc              	   C   sP   t t  tt d }tjdtdgd | 	tj
t | W 5 Q R X d S )Ni psutil.tests.retry.__iter__r   Zreturn_value)r"   osgetpidmaxpsutilZpidsr   rK   iterr;   NoSuchProcess)r7   Znopidr,   r,   r/   test_wait_for_pid   s    z#TestSyncTestUtils.test_wait_for_pidc              	   C   sD   |   }t|d}|d W 5 Q R X t| tj|r@td S )Nwr0   
get_testfnopenwriter!   rO   pathexistsAssertionErrorr7   testfnfr,   r,   r/   test_wait_for_file   s
    z$TestSyncTestUtils.test_wait_for_filec              	   C   s>   |   }t|d W 5 Q R X t|dd tj|r:td S )NrV   T)empty)rX   rY   r!   rO   r[   r\   r]   r7   r_   r,   r,   r/   test_wait_for_file_empty   s
    
z*TestSyncTestUtils.test_wait_for_file_emptyc              	   C   s:   |   }tjdtdgd | tt| W 5 Q R X d S )NrM   r   rN   )rX   r   rK   rS   r;   IOErrorr!   rc   r,   r,   r/   test_wait_for_file_no_file   s    z,TestSyncTestUtils.test_wait_for_file_no_filec              	   C   sH   |   }t|d}|d W 5 Q R X t|dd tj|sDtd S )NrV   r0   F)deleterW   r^   r,   r,   r/   test_wait_for_file_no_delete   s
    z.TestSyncTestUtils.test_wait_for_file_no_deletec                 C   s   t dd d}| |d d S )Nc                   S   s   dS )Nr%   r,   r,   r,   r,   r/   <lambda>       z3TestSyncTestUtils.test_call_until.<locals>.<lambda>zret == 1r%   )r
   r4   )r7   retr,   r,   r/   test_call_until   s    z!TestSyncTestUtils.test_call_untilN)	rH   rI   rJ   rU   ra   rd   rf   rh   rl   r,   r,   r,   r/   rL      s   rL   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFSTestUtilsc              	   C   s&   t t}| |jd W 5 Q R X d S )Nrt)r   __file__r4   moder7   r`   r,   r,   r/   test_open_text   s    
zTestFSTestUtils.test_open_textc              	   C   s&   t t}| |jd W 5 Q R X d S )Nrb)r   ro   r4   rp   rq   r,   r,   r/   test_open_binary   s    
z TestFSTestUtils.test_open_binaryc                 C   s<   |   }t| tj|s tt| tj|s8td S r?   )rX   r   rO   r[   isdirr]   rc   r,   r,   r/   test_safe_mkdir   s
    zTestFSTestUtils.test_safe_mkdirc              
   C   s   |   }t|d  t| tj|r.tt| t| t| tj|rXtt	j
dttjdd.}| t t| W 5 Q R X |jstW 5 Q R X d S )NrV   zpsutil.tests.os.stat )side_effect)rX   rY   closer   rO   r[   r\   r]   mkdirr   rK   OSErrorerrnoEINVALr;   called)r7   r_   mr,   r,   r/   test_safe_rmpath   s    

z TestFSTestUtils.test_safe_rmpathc              	   C   s\   |   }t }t| t|  | t tj|| W 5 Q R X | t | d S r?   )rX   rO   getcwdrz   r   r4   r[   join)r7   r_   baser,   r,   r/   
test_chdir   s    

$zTestFSTestUtils.test_chdirN)rH   rI   rJ   rr   rt   rv   r   r   r,   r,   r,   r/   rm      s
   rm   c                   @   s:   e Zd Zdd Zdd Zee ddd Zdd	 Z	d
S )TestProcessUtilsc                 C   sN   |   }t|j}| s tt  | r2ttjjr>ttjj	rJtd S r?   )
spawn_testprocrR   Processpid
is_runningr]   r   testsZ_pids_startedZ_subprocesses_started)r7   Zsubppr,   r,   r/   test_reap_children   s    z#TestProcessUtils.test_reap_childrenc                 C   s   |   \}}| |j|j | s(t| s4tt  }| ||g t jdd}| t	|d | 
|| | 
|| | | t  | | |j t| | rt| stt| | rtd S )NT)	recursive   )Zspawn_children_pairassertNotEqualr   r   r]   rR   r   childrenr4   lenZassertInppidrO   rP   r   )r7   childZ
grandchildr   r,   r,   r/   test_spawn_children_pair   s"    z)TestProcessUtils.test_spawn_children_pair
POSIX onlyc                 C   s"   |   \}}| | tj d S r?   )spawn_zombier4   statusrR   STATUS_ZOMBIE)r7   parentzombier,   r,   r/   test_spawn_zombie   s    z"TestProcessUtils.test_spawn_zombiec                 C   s   |   }t| | | t| t|   j}t| | | t| tddg}tj|tj	tj	d}t| | | t| |   j}t| | | t| t
r|  \}}t| t| | | | | d S )Nz-czimport time; time.sleep(60);)stdoutstderr)r   r   ZassertProcessGonerR   r   r   r   Popen
subprocessPIPEr   r   )r7   r   cmdr   r   r   r,   r,   r/   test_terminate   s.    






zTestProcessUtils.test_terminateN)
rH   rI   rJ   r   r   r   skipIfr   r   r   r,   r,   r,   r/   r      s
   	
r   c                   @   s`   e Zd Zdd Zee ddd Zdd Zee dee	pDe
dd	d
 Zdd ZdS )TestNetUtilsc              	   C   s>   t  }ttd|fd}| | d | W 5 Q R X d S )Nrw   addrr%   )r   
contextlibclosingr   r4   getsockname)r7   portsr,   r,   r/   r     s    zTestNetUtils.bind_socketr   c              	   C   s   |   }t|}t|\ | |jtj | |jtj	 | |
 | tj|s\ttt|jsrtW 5 Q R X |   }t|tjd}t| | |jtj W 5 Q R X d S )N)type)rX   r	   r   r   r4   familysocketAF_UNIXr   SOCK_STREAMr   rO   r[   r\   r]   statS_ISSOCKst_mode
SOCK_DGRAM)r7   namesockr,   r,   r/   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 5 Q R X W 5 Q R X d S )Nz	127.0.0.1r   )
r   r   r   AF_INETr   r   r4   r   getpeernamer   )r7   r   serverclientr,   r,   r/   tcp_tcp_socketpair.  s    
zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   s   t  }| }|jddr t|  }t|\}}zvtj	
|sFttt|js\t| | | d | t|jddd | | | | | | W 5 |  |  X d S )Nunix)kindr   )rR   r   num_fdsZconnectionsr]   rX   r    ry   rO   r[   r\   r   r   r   r4   r   r   r   )r7   r   r   r   r   r   r,   r,   r/   test_unix_socketpair9  s    z!TestNetUtils.test_unix_socketpairc              	   C   s   t  }tt}tt}|D ]2}||j  d7  < ||tjtj  d7  < q | 	|tj
 d t r~| 	|tj d trtr| 	|tj d | 	|tj d | 	|tj d W 5 Q R X d S )Nr%   r   )r   collectionsdefaultdictintr   
getsockoptr   
SOL_SOCKETSO_TYPEZassertGreaterEqualr   r   AF_INET6r   r   r   r   r   )r7   ZsocksZfamstypesr   r,   r,   r/   test_create_socketsM  s    

z TestNetUtils.test_create_socketsN)rH   rI   rJ   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r/   r     s   

r   c                   @   sN   e Zd Zdd Zdd Ze eeddd Z	dd	 Z
d
d Zdd ZdS )TestMemLeakClassc                    s8    fdd}ddi | j |ddd |  d d d S )	Nc                      s    d  d7  < d S )Ncntr%   r,   r,   r   r,   r/   funb  s    z(TestMemLeakClass.test_times.<locals>.funr   r   
      )timeswarmup_times   )executer4   r7   r   r,   r   r/   
test_timesa  s    zTestMemLeakClass.test_timesc                 C   s|   | j t| jdd dd | j t| jdd dd | j t| jdd dd | j t| jd	d dd
 | j t| jdd dd d S )Nc                   S   s   dS Nr   r,   r,   r,   r,   r/   ri   i  rj   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   r   c                   S   s   dS r   r,   r,   r,   r,   r/   ri   j  rj   c                   S   s   dS r   r,   r,   r,   r,   r/   ri   k  rj   )r   c                   S   s   dS r   r,   r,   r,   r,   r/   ri   l  rj   )	tolerancec                   S   s   dS r   r,   r,   r,   r,   r/   ri   m  rj   )r'   )r;   rA   r   r7   r,   r,   r/   test_param_errh  s
    zTestMemLeakClass.test_param_errzskipped on CIc                 C   s4   g }|fdd}z| j td| j|dd W 5 ~X d S )Nc                 S   s   |  dd  d S NZxxxxxxxxxxxxxxxxxxxxxxxxi   appendlsr,   r,   r/   r   t  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem2   r   )assertRaisesRegexr]   r   )r7   r   r   r,   r,   r/   test_leak_memo  s      
zTestMemLeakClass.test_leak_memc                    s8    fdd}g  t rdnd}td| j| d S )Nc                     s"   t t} | j  |  d S r?   )rY   ro   Z
addCleanupry   r   )r`   Zboxr7   r,   r/   r     s    z1TestMemLeakClass.test_unclosed_files.<locals>.funfdhandlez	unclosed )r   r   r]   r   )r7   r   r   r,   r   r/   test_unclosed_files~  s     z$TestMemLeakClass.test_unclosed_filesc                    s>    fdd}g  d}| j ||ddd | t |d  d S )Nc                      s     dd  d S r   r   r,   r   r,   r/   r     s    z,TestMemLeakClass.test_tolerance.<locals>.fund   r   i  )r   r   r   r%   )r   r4   r   )r7   r   r   r,   r   r/   test_tolerance  s    
zTestMemLeakClass.test_tolerancec              	   C   sd   dd }|  t| | t |  t| W 5 Q R X dd }| t |  t| W 5 Q R X d S )Nc                   S   s   dd  d S r)   r,   r,   r,   r,   r/   r     s    z0TestMemLeakClass.test_execute_w_exc.<locals>.func                   S   s   d S r?   r,   r,   r,   r,   r/   r     s    )Zexecute_w_excr<   r;   r{   r]   r   r,   r,   r/   test_execute_w_exc  s    z#TestMemLeakClass.test_execute_w_excN)rH   rI   rJ   r   r   r   r   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S )TestTestingUtilsc                 C   sL   t  }t|}|  dd ||jD d d }| | |  d S )Nc                 S   s   g | ]}|d  dkr|qS )r%   r   r,   .0xr,   r,   r/   
<listcomp>  s      z;TestTestingUtils.test_process_namespace.<locals>.<listcomp>r   )rR   r   r   testrS   gettersr4   r   )r7   r   nsr   r,   r,   r/   test_process_namespace  s
    z'TestTestingUtils.test_process_namespacec                 C   s:   t  }dd ||jD d d }| | t  d S )Nc                 S   s   g | ]}|d  dkr|qS )r%   net_if_addrsr,   r   r,   r,   r/   r     s      z:TestTestingUtils.test_system_namespace.<locals>.<listcomp>r   )r   rS   r   r4   rR   r   )r7   r   r   r,   r,   r/   test_system_namespace  s    z&TestTestingUtils.test_system_namespaceN)rH   rI   rJ   r   r   r,   r,   r,   r/   r     s   r   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 )Nr0   za b cr%   r   r1   )r   r   
namedtupler]   tupler   r,   r,   r/   test_is_namedtuple  s    z!TestOtherUtils.test_is_namedtupleN)rH   rI   rJ   r   r,   r,   r,   r/   r     s   r   __main__)run_from_name)8__doc__r   r   r|   rO   r   r   r   rR   r   r   r   Zpsutil._commonr   r   r   Zpsutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   rL   rm   r   r   r   r   r   rH   Zpsutil.tests.runnerr   ro   r,   r,   r,   r/   <module>   sl   B'-DG@
