U
    +È-e@9  ã                   @   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
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- G d%d&„ d&eƒZ.G d'd(„ d(eƒZ/G d)d*„ d*eƒZ0G d+d,„ d,eƒZ1G d-d.„ d.eƒZ2e'G d/d0„ d0eƒƒZ3G d1d2„ d2eƒZ4G d3d4„ d4eƒZ5e6d5krŽdd6l7m8Z8 e8e9ƒ dS )7z1Tests for testing utils (psutil.tests namespace).é    N)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Úopen_binary)Ú	open_text)Úsupports_ipv6)Ú
CI_TESTING)ÚCOVERAGE)ÚHAS_CONNECTIONS_UNIX)Ú
PYTHON_EXE)ÚPYTHON_EXE_ENV)ÚPsutilTestCase)ÚTestMemoryLeak)Úbind_socket)Úbind_unix_socket)Ú
call_until)Úchdir)Úcreate_sockets)Úget_free_port)Úis_namedtuple)Úmock)Úprocess_namespace)Úreap_children)Úretry)Úretry_on_failure)Ú
safe_mkdir)Úsafe_rmpath)Ú	serialrun)Úsystem_namespace)Útcp_socketpair)Ú	terminate)Ú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-   ú\/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/psutil/tests/test_testutils.pyÚfooD   s    
z2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚassertEqualÚ
call_count©ÚselfÚsleepr1   r-   r.   r0   Ú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-   r0   r1   R   s    
z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r3   r4   ÚassertRaisesÚZeroDivisionErrorr5   r6   r7   r-   r.   r0   Útest_retry_failureO   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-   r0   r1   _   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr<   rA   r5   r6   r7   r-   r-   r0   Ú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-   r0   r1   j   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r<   r=   r5   r6   r7   r-   r-   r0   Útest_no_interval_argf   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-   r0   r1   t   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorD   r7   r-   r-   r0   Útest_retries_argq   s    
z#TestRetryDecorator.test_retries_argc                 C   s   | j ttddd d S )Nr%   r&   )r(   Útimeout)r<   rB   r   )r8   r9   r-   r-   r0   Útest_retries_and_timeout_args{   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr:   r>   rC   rE   rF   rH   r-   r-   r-   r0   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   rL   Úiterr<   ZNoSuchProcess)r8   Znopidr-   r-   r0   Ú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Úwr1   ©Ú
get_testfnÚopenÚwriter"   rP   ÚpathÚexistsÚAssertionError©r8   ÚtestfnÚfr-   r-   r0   Ú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"   rP   r[   r\   r]   ©r8   r_   r-   r-   r0   Ú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 )NrN   r   rO   )rX   r   rL   rT   r<   ÚIOErrorr"   rc   r-   r-   r0   Ú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   r1   F)ÚdeleterW   r^   r-   r-   r0   Ú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-   r0   Ú<lambda>£   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>zret == 1r&   )r   r5   )r8   Úretr-   r-   r0   Útest_call_until¢   s    z!TestSyncTestUtils.test_call_untilN)	rI   rJ   rK   rU   ra   rd   rf   rh   rl   r-   r-   r-   r0   rM   €   s   rM   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Úr)r   Ú__file__r5   Úmode©r8   r`   r-   r-   r0   Ú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   r5   rp   rq   r-   r-   r0   Ú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   rP   r[   Úisdirr]   rc   r-   r-   r0   Ú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s˜t‚W 5 Q R X d S )NrV   zpsutil.tests.os.statÚ )Zside_effect)rX   rY   Úcloser   rP   r[   r\   r]   Úmkdirr   rL   ÚOSErrorÚerrnoÚEINVALr<   Úcalled)r8   r_   Úmr-   r-   r0   Ú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   rP   Úgetcwdry   r   r5   r[   Újoin)r8   r_   Úbaser-   r-   r0   Ú
test_chdirË   s    

$zTestFSTestUtils.test_chdirN)rI   rJ   rK   rr   rt   rv   r   rƒ   r-   r-   r-   r0   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_testprocrS   ÚProcessÚpidÚ
is_runningr]   r   ÚtestsZ_pids_startedZ_subprocesses_started)r8   ZsubpÚpr-   r-   r0   Ú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ˆ   r]   rS   r†   Úchildrenr5   ÚlenZassertInÚppidrP   rQ   r    )r8   ÚchildZ
grandchildr   r-   r-   r0   Útest_spawn_children_pairß   s"    z)TestProcessUtils.test_spawn_children_pairú
POSIX onlyc                 C   s"   |   ¡ \}}|  | ¡ tj¡ d S r@   )Úspawn_zombier5   ÚstatusrS   ZSTATUS_ZOMBIE)r8   ÚparentÚzombier-   r-   r0   Útest_spawn_zombieô   s    z"TestProcessUtils.test_spawn_zombiec                 C   sî   |   ¡ }t|ƒ |  |j¡ t|ƒ t |   ¡ j¡}t|ƒ |  |j¡ t|ƒ tddg}tj|tj	tj	t
d}t|ƒ |  |j¡ t|ƒ |   ¡ j}t|ƒ |  |j¡ t|ƒ trê|  ¡ \}}t|ƒ t|ƒ |  |j¡ |  |j¡ d S )Nz-czimport time; time.sleep(60);)ÚstdoutÚstderrÚenv)r…   r    ZassertPidGoner‡   rS   r†   r   ÚPopenÚ
subprocessÚPIPEr   r   r•   )r8   rŠ   Úcmdr‡   r—   r˜   r-   r-   r0   Útest_terminateù   s2    
ÿ
zTestProcessUtils.test_terminateN)
rI   rJ   rK   r‹   r“   ÚunittestÚskipIfr   r™   r¡   r-   r-   r-   r0   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   r5   Úgetsockname)r8   ÚportÚsr-   r-   r0   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¨   r5   ÚfamilyÚsocketÚAF_UNIXr¬   ÚSOCK_STREAMr©   rP   r[   r\   r]   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r8   ÚnameÚsockr-   r-   r0   Ú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¨   r5   r©   ÚgetpeernamerŽ   )r8   r¦   ÚserverÚclientr-   r-   r0   Útcp_tcp_socketpair0  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   )rS   r†   Únum_fdsÚconnectionsr]   rX   r!   rx   rP   r[   r\   r±   r²   r³   r5   r   r©   r¹   )r8   rŠ   r¿   rµ   rº   r»   r-   r-   r0   Útest_unix_socketpair;  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r˜t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´   )r8   ÚsocksZfamsÚtypesr«   r-   r-   r0   Útest_create_socketsO  s    

z TestNetUtils.test_create_socketsN)rI   rJ   rK   r   r¢   r£   r   r·   r¼   r   r   rÁ   rË   r-   r-   r-   r0   r¤     s   

ÿr¤   c                   @   s`   e Zd Zeƒ dd„ ƒZdd„ Zeƒ e ed¡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-   r0   Úfune  s    z(TestMemLeakClass.test_times.<locals>.funrÍ   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecuter5   )r8   rÏ   r-   rÎ   r0   Ú
test_timesc  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-   r0   ri   l  rj   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rÒ   c                   S   s   dS r×   r-   r-   r-   r-   r0   ri   m  rj   éÿÿÿÿc                   S   s   dS r×   r-   r-   r-   r-   r0   ri   n  rj   )rÓ   c                   S   s   dS r×   r-   r-   r-   r-   r0   ri   o  rj   )Ú	tolerancec                   S   s   dS r×   r-   r-   r-   r-   r0   ri   p  rj   )r(   )r<   rB   rÕ   ©r8   r-   r-   r0   Útest_param_errk  s
    zTestMemLeakClass.test_param_errzskipped on CIzskipped during test coveragec                 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-   r0   rÏ   x  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-memé2   rØ   )ÚassertRaisesRegexr]   rÕ   )r8   rá   rÏ   r-   r-   r0   Útest_leak_memr  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
addCleanuprx   rß   )r`   ©Úboxr8   r-   r0   rÏ   ƒ  s    z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdÚhandlez	unclosed )r   rã   r]   rÕ   )r8   rÏ   r¾   r-   rå   r0   Ú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-   r0   rÏ   Ž  s    z,TestMemLeakClass.test_tolerance.<locals>.funéd   r   i  €)rÒ   rÓ   rÚ   r&   )rÕ   r5   r   )r8   rÏ   rÒ   r-   rà   r0   Ú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-   r0   Úfun_1—  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S r@   r-   r-   r-   r-   r0   Úfun_2  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Zexecute_w_excr=   r<   rz   r]   )r8   rì   rí   r-   r-   r0   Útest_execute_w_exc–  s    z#TestMemLeakClass.test_execute_w_excN)rI   rJ   rK   r   rÖ   rÜ   r¢   r£   r   r	   rä   ré   rë   rî   r-   r-   r-   r0   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-   r0   Ú
<listcomp>©  s      z;TestTestingUtils.test_process_namespace.<locals>.<listcomp>r   )rS   r†   r   ÚtestrT   Úgettersr5   r‘   )r8   rŠ   ÚnsrÏ   r-   r-   r0   Ú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-   r0   ró   ®  s      z:TestTestingUtils.test_system_namespace.<locals>.<listcomp>r   )r   rT   rõ   r5   rS   rø   )r8   rö   rÏ   r-   r-   r0   Útest_system_namespace¬  s    z&TestTestingUtils.test_system_namespaceN)rI   rJ   rK   r÷   rù   r-   r-   r-   r0   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 )Nr1   za b cr&   r   r2   )r   rÂ   Ú
namedtupler]   ÚtuplerÛ   r-   r-   r0   Útest_is_namedtuple´  s    z!TestOtherUtils.test_is_namedtupleN)rI   rJ   rK   rý   r-   r-   r-   r0   rú   ²  s   rú   Ú__main__)Úrun_from_name):Ú__doc__rÂ   r§   r{   rP   r®   r±   rž   r¢   rS   Zpsutil.testsr   r   r   Zpsutil._commonr   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$   rM   rm   r„   r¤   rÌ   rï   rú   rI   Zpsutil.tests.runnerrÿ   ro   r-   r-   r-   r0   Ú<module>   sp   B'-EGB
