£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    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intervallogfunc                  s   x r    dd  qW dS )Nr%   r   )pop )queuer*   N/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_testutils.pyfooC   s    z2TestRetryDecorator.test_retry_success.<locals>.foo   )r   listrangeassertEqual
call_count)selfsleepr-   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&   r'   r(   c                  s   x r    dd  qW dS )Nr%   r   )r)   r*   )r+   r*   r,   r-   Q   s    z2TestRetryDecorator.test_retry_failure.<locals>.foo   )r   r/   r0   assertRaisesZeroDivisionErrorr1   r2   )r3   r4   r-   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,   r-   ^   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   
ValueErrorr7   r;   r1   r2   )r3   r4   r-   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&   r'   r(   c               S   s   dd  d S )Nr%   r   r*   r*   r*   r*   r,   r-   i   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   )r   r7   r8   r1   r2   )r3   r4   r-   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&   r'   r(   c               S   s   dd  d S )Nr%   r   r*   r*   r*   r*   r,   r-   s   s    z0TestRetryDecorator.test_retries_arg.<locals>.foo)r   r7   r8   r1   r2   )r3   r4   r-   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)r7   r<   r   )r3   r4   r*   r*   r,   test_retries_and_timeout_argsz   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)__name__
__module____qualname__r   patchr5   r9   r=   r>   r?   rA   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 d Q R X d S )Ni zpsutil.tests.retry.__iter__r   )return_value)r"   osgetpidmaxpsutilZpidsr   rE   iterr7   NoSuchProcess)r3   Znopidr*   r*   r,   test_wait_for_pid   s    z#TestSyncTestUtils.test_wait_for_pidc          	   C   sD   |   }t|d}|d W d Q R X t| tj|r@td S )Nwr-   )
get_testfnopenwriter!   rH   pathexistsAssertionError)r3   testfnfr*   r*   r,   test_wait_for_file   s
    z$TestSyncTestUtils.test_wait_for_filec          	   C   s>   |   }t|d W d Q R X t|dd tj|r:td S )NrO   T)empty)rP   rQ   r!   rH   rS   rT   rU   )r3   rV   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 d Q R X d S )Nzpsutil.tests.retry.__iter__r   )rG   )rP   r   rE   rL   r7   IOErrorr!   )r3   rV   r*   r*   r,   test_wait_for_file_no_file   s    z,TestSyncTestUtils.test_wait_for_file_no_filec          	   C   sH   |   }t|d}|d W d Q R X t|dd tj|sDtd S )NrO   r-   F)delete)rP   rQ   rR   r!   rH   rS   rT   rU   )r3   rV   rW   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
   r1   )r3   retr*   r*   r,   test_call_until   s    z!TestSyncTestUtils.test_call_untilN)	rB   rC   rD   rN   rX   rZ   r\   r^   rb   r*   r*   r*   r,   rF      s   rF   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 d Q R X d S )Nrt)r   __file__r1   mode)r3   rW   r*   r*   r,   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   re   r1   rf   )r3   rW   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 )N)rP   r   rH   rS   isdirrU   )r3   rV   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 d Q R X |jstW d Q R X d S )NrO   zpsutil.tests.os.stat )side_effect)rP   rQ   closer   rH   rS   rT   rU   mkdirr   rE   OSErrorerrnoEINVALr7   called)r3   rV   mr*   r*   r,   test_safe_rmpath   s    
z TestFSTestUtils.test_safe_rmpathc          	   C   s\   |   }t }t| t|  | t tj|| W d Q R X | t | d S )N)rP   rH   getcwdro   r   r1   rS   join)r3   rV   baser*   r*   r,   
test_chdir   s    

$zTestFSTestUtils.test_chdirN)rB   rC   rD   rg   ri   rk   ru   ry   r*   r*   r*   r,   rc      s
   rc   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 )N)
spawn_testprocrK   Processpid
is_runningrU   r   testsZ_pids_startedZ_subprocesses_started)r3   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~   rU   rK   r|   childrenr1   lenZassertInppidrH   rI   r   )r3   childZ
grandchildr   r*   r*   r,   test_spawn_children_pair   s"    z)TestProcessUtils.test_spawn_children_pairz
POSIX onlyc             C   s"   |   \}}| | tj d S )N)spawn_zombier1   statusrK   STATUS_ZOMBIE)r3   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assertProcessGonerK   r|   r}   r   Popen
subprocessPIPEr   r   )r3   r   cmdr}   r   r   r*   r*   r,   test_terminate   s.    






zTestProcessUtils.test_terminateN)
rB   rC   rD   r   r   r   skipIfr   r   r   r*   r*   r*   r,   rz      s   	rz   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 d Q R X d S )Nrl   )addrr%   )r   
contextlibclosingr   r1   getsockname)r3   portsr*   r*   r,   r     s    zTestNetUtils.bind_socketz
POSIX onlyc          	   C   s   |   }t|}t|\ | |jtj | |jtj	 | |
 | tj|s\ttt|jsrtW d Q R X |   }t|tjd}t| | |jtj W d Q R X d S )N)type)rP   r	   r   r   r1   familysocketAF_UNIXr   SOCK_STREAMr   rH   rS   rT   rU   statS_ISSOCKst_mode
SOCK_DGRAM)r3   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 d Q R X W d Q R X d S )Nz	127.0.0.1)r   )
r   r   r   AF_INETr   r   r1   r   getpeernamer   )r3   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 d |  |  X d S )Nunix)kindr   )rK   r|   num_fdsZconnectionsrU   rP   r    rH   rS   rT   r   r   r   r1   r   r   r   rn   )r3   r   r   r   r   r   r*   r*   r,   test_unix_socketpair9  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rtr| 	|tj d | 	|tj d | 	|tj d W d Q R X d S )Nr%   r   )r   collectionsdefaultdictintr   
getsockoptr   
SOL_SOCKETSO_TYPEZassertGreaterEqualr   r   AF_INET6r   r   r   r   r   )r3   ZsocksZfamstypesr   r*   r*   r,   test_create_socketsM  s    


 z TestNetUtils.test_create_socketsN)rB   rC   rD   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   )executer1   )r3   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,   r_   i  r`   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   )r   c               S   s   dS )Nr   r*   r*   r*   r*   r,   r_   j  r`   c               S   s   dS )Nr   r*   r*   r*   r*   r,   r_   k  r`   )r   c               S   s   dS )Nr   r*   r*   r*   r*   r,   r_   l  r`   )	tolerancec               S   s   dS )Nr   r*   r*   r*   r*   r,   r_   m  r`   )r&   )r7   r<   r   )r3   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 d ~X d S )Nc             S   s   |  dd  d S )Nxxxxxxxxxxxxxxxxxxxxxxxxi   )append)lsr*   r*   r,   r   t  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem2   )r   )assertRaisesRegexrU   r   )r3   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 )N)rQ   re   Z
addCleanuprn   r   )rW   )boxr3   r*   r,   r     s    z1TestMemLeakClass.test_unclosed_files.<locals>.funfdhandlez	unclosed )r   r   rU   r   )r3   r   r   r*   )r   r3   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 )Nr   i   )r   r*   )r   r*   r,   r     s    z,TestMemLeakClass.test_tolerance.<locals>.fund   r   i  )r   r   r   r%   )r   r1   r   )r3   r   r   r*   )r   r,   test_tolerance  s    
zTestMemLeakClass.test_tolerancec          	   C   sd   dd }|  t| | t |  t| W d Q R X dd }| t |  t| W d Q R X d S )Nc               S   s   dd  d S )Nr%   r   r*   r*   r*   r*   r,   r     s    z0TestMemLeakClass.test_execute_w_exc.<locals>.func               S   s   d S )Nr*   r*   r*   r*   r,   r     s    )Zexecute_w_excr8   r7   rp   rU   )r3   r   r*   r*   r,   test_execute_w_exc  s    z#TestMemLeakClass.test_execute_w_excN)rB   rC   rD   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   )rK   r|   r   testrL   gettersr1   r   )r3   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,   r     s    z:TestTestingUtils.test_system_namespace.<locals>.<listcomp>r   )r   rL   r   r1   rK   r   )r3   r   r   r*   r*   r,   test_system_namespace  s    z&TestTestingUtils.test_system_namespaceN)rB   rC   rD   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 )Nr-   za b cr%   r   r.   )r   r   
namedtuplerU   tuple)r3   r*   r*   r,   test_is_namedtuple  s    z!TestOtherUtils.test_is_namedtupleN)rB   rC   rD   r   r*   r*   r*   r,   r     s   r   __main__)run_from_name)8__doc__r   r   rq   rH   r   r   r   rK   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#   rF   rc   rz   r   r   r   r   rB   Zpsutil.tests.runnerr   re   r*   r*   r*   r,   <module>
   sl   B'-DG@
