<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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s˜t‚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|ƒ | ¡ rÀt‚| ¡ sÌt‚t|ƒ | ¡ ràt‚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rœt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-memé2   )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>.funéd   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@
