o
    i[8                     @   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+ 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 d/d0 d0eZ2G d1d2 d2eZ3e4d3kr=dd4l5m6Z6 e6e7 dS dS )5z3
Tests for testing utils (psutil.tests namespace).
    N)FREEBSD)NETBSD)POSIX)open_binary)	open_text)supports_ipv6)
CI_TESTING)HAS_CONNECTIONS_UNIX)
PYTHON_EXE)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intervallogfunc                          r    dd   sdS Nr$   r   pop queuer-   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/psutil/tests/test_testutils.pyfooD   
   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                      r)   r*   r+   r-   r.   r-   r0   r1   R   r2   z2TestRetryDecorator.test_retry_failure.<locals>.foo   )r   r4   r5   assertRaisesZeroDivisionErrorr6   r7   r8   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 N)	TypeErrorr-   r-   r-   r0   r1   _   s   z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   
ValueErrorr=   rB   r6   r7   r8   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      dd  d S r*   r-   r-   r-   r-   r0   r1   j      z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   r   r=   r>   r6   r7   r8   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   rE   r*   r-   r-   r-   r-   r0   r1   t   rF   z0TestRetryDecorator.test_retries_arg.<locals>.foorG   r8   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=   rC   r   )r9   r:   r-   r-   r0   test_retries_and_timeout_args{   s   z0TestRetryDecorator.test_retries_and_timeout_argsN)__name__
__module____qualname__r   patchr;   r?   rD   rH   rI   rK   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   sf   t t  tt d }tjdtdgd | 	tj
t | W d    d S 1 s,w   Y  d S )Ni psutil.tests.retry.__iter__r   return_value)r!   osgetpidmaxpsutilpidsr   rO   iterr=   NoSuchProcess)r9   nopidr-   r-   r0   test_wait_for_pid   s
   "z#TestSyncTestUtils.test_wait_for_pidc                 C   sX   |   }t|d}|d W d    n1 sw   Y  t| tj|r*J d S )Nwr1   
get_testfnopenwriter    rT   pathexistsr9   testfnfr-   r-   r0   test_wait_for_file   s   z$TestSyncTestUtils.test_wait_for_filec                 C   sR   |   }t|d W d    n1 sw   Y  t|dd tj|r'J d S )Nr]   T)empty)r_   r`   r    rT   rb   rc   r9   re   r-   r-   r0   test_wait_for_file_empty   s   z*TestSyncTestUtils.test_wait_for_file_emptyc                 C   sP   |   }tjdtdgd | tt| W d    d S 1 s!w   Y  d S )NrQ   r   rR   )r_   r   rO   rY   r=   IOErrorr    ri   r-   r-   r0   test_wait_for_file_no_file   s   "z,TestSyncTestUtils.test_wait_for_file_no_filec                 C   s\   |   }t|d}|d W d    n1 sw   Y  t|dd tj|s,J d S )Nr]   r1   F)deleter^   rd   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      dS )Nr$   r-   r-   r-   r-   r0   <lambda>       z3TestSyncTestUtils.test_call_until.<locals>.<lambda>zret == 1r$   )r   r6   )r9   retr-   r-   r0   test_call_until   s   z!TestSyncTestUtils.test_call_untilN)	rL   rM   rN   r\   rg   rj   rl   rn   rs   r-   r-   r-   r0   rP      s    rP   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   <   t t}| |jd W d    d S 1 sw   Y  d S )Nrt)r   __file__r6   moder9   rf   r-   r-   r0   test_open_text      
"zTestFSTestUtils.test_open_textc                 C   ru   )Nrb)r   rw   r6   rx   ry   r-   r-   r0   test_open_binary   r{   z TestFSTestUtils.test_open_binaryc                 C   s<   |   }t| tj|sJ t| tj|sJ d S rA   )r_   r   rT   rb   isdirri   r-   r-   r0   test_safe_mkdir   s
   zTestFSTestUtils.test_safe_mkdirc              	   C   s   |   }t|d  t| tj|rJ t| t| t| tj|r,J tj	dt
tjdd'}| t
 t| W d    n1 sLw   Y  |jsVJ W d    d S 1 saw   Y  d S )Nr]   zpsutil.tests.os.stat )side_effect)r_   r`   closer   rT   rb   rc   mkdirr   rO   OSErrorerrnoEINVALr=   called)r9   re   mr-   r-   r0   test_safe_rmpath   s"   


"z TestFSTestUtils.test_safe_rmpathc                 C   sp   |   }t }t| t| | t tj|| W d    n1 s)w   Y  | t | d S rA   )r_   rT   getcwdr   r   r6   rb   join)r9   re   baser-   r-   r0   
test_chdir   s   

zTestFSTestUtils.test_chdirN)rL   rM   rN   rz   r}   r   r   r   r-   r-   r-   r0   rt      s    rt   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J t  | rJ tjjrJ tjjr%J d S rA   )	spawn_testprocrW   Processpid
is_runningr   tests_pids_started_subprocesses_started)r9   subppr-   r-   r0   test_reap_children   s   z#TestProcessUtils.test_reap_childrenc                 C   s   |   \}}| |j|j | sJ | sJ t  }| ||g t jdd}| t|d | 	|| | 	|| | |
 t  | |
 |j t| | r`J | sfJ t| | rpJ d S )NT)	recursive   )spawn_children_pairassertNotEqualr   r   rW   r   childrenr6   lenassertInppidrT   rU   r   )r9   child
grandchildr   r-   r-   r0   test_spawn_children_pair   s"   z)TestProcessUtils.test_spawn_children_pair
POSIX onlyc                 C   s"   |   \}}| | tj d S rA   )spawn_zombier6   statusrW   STATUS_ZOMBIE)r9   parentzombier-   r-   r0   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
rp|  \}}t| t| | | | | d S d S )Nz-czimport time; time.sleep(60);)stdoutstderr)r   r   assertProcessGonerW   r   r   r
   Popen
subprocessPIPEr   r   )r9   r   cmdr   r   r   r-   r-   r0   test_terminate   s0   






zTestProcessUtils.test_terminateN)
rL   rM   rN   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	p"e
dd	d
 Zdd ZdS )TestNetUtilsc                 C   sT   t  }ttd|fd}| | d | W d    d S 1 s#w   Y  d S )Nr   addrr$   )r   
contextlibclosingr   r6   getsockname)r9   portsr-   r-   r0   r     s   "zTestNetUtils.bind_socketr   c                 C   s   |   }t|}t|3 | |jtj | |jtj	 | |
 | tj|s.J tt|js9J W d    n1 sCw   Y  |   }t|tjd}t| | |jtj W d    d S 1 slw   Y  d S )N)type)r_   r   r   r   r6   familysocketAF_UNIXr   SOCK_STREAMr   rT   rb   rc   statS_ISSOCKst_mode
SOCK_DGRAM)r9   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|> t|  | | | | | | | 	| | W d    n1 s<w   Y  W d    d S W d    d S 1 sTw   Y  d S )Nz	127.0.0.1r   )
r   r   r   AF_INETr   r   r6   r   getpeernamer   )r9   r   serverclientr-   r-   r0   tcp_tcp_socketpair/  s   
"zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   s   t  }| }|jddrJ |  }t|\}}zDtj|s#J t	
t	|js.J | | | d | t|jddd | | | | | | W |  |  d S |  |  w )Nunix)kindr   )rW   r   num_fdsconnectionsr_   r   rT   rb   rc   r   r   r   r6   r   r   r   r   )r9   r   r   r   r   r   r-   r-   r0   test_unix_socketpair:  s    
z!TestNetUtils.test_unix_socketpairc                 C   s   t  c}tt}tt}|D ]}||j  d7  < ||tjtj  d7  < q| 	|tj
 d t r?| 	|tj d trLtrL| 	|tj d | 	|tj d | 	|tj d W d    d S 1 siw   Y  d S )Nr$   r   )r   collectionsdefaultdictintr   
getsockoptr   
SOL_SOCKETSO_TYPEassertGreaterEqualr   r   AF_INET6r   r	   r   r   r   )r9   socksfamstypesr   r-   r-   r0   test_create_socketsN  s   

"z TestNetUtils.test_create_socketsN)rL   rM   rN   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r0   r     s    

r   c                   @   sT   e Zd Ze 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-   r0   fund  s   z(TestMemLeakClass.test_times.<locals>.funr   r   
      )timeswarmup_times   )executer6   r9   r   r-   r   r0   
test_timesb  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   ro   Nr   r-   r-   r-   r-   r0   rp   k  rq   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   r   c                   S   ro   r   r-   r-   r-   r-   r0   rp   l  rq   c                   S   ro   r   r-   r-   r-   r-   r0   rp   m  rq   )r   c                   S   ro   r   r-   r-   r-   r-   r0   rp   n  rq   )	tolerancec                   S   ro   r   r-   r-   r-   r-   r0   rp   o  rq   )r&   )r=   rC   r   r9   r-   r-   r0   test_param_errj  s
   zTestMemLeakClass.test_param_errzskipped on CIc                 C   s4   g }|fdd}z| j td| j|dd W ~d S ~w )Nc                 S   s   |  dd  d S Nxxxxxxxxxxxxxxxxxxxxxxxxi   appendlsr-   r-   r0   r   v     z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem2   r   )assertRaisesRegexAssertionErrorr   )r9   r   r   r-   r-   r0   test_leak_memq  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 rA   )r`   rw   
addCleanupr   r   )rf   boxr9   r-   r0   r     s   z1TestMemLeakClass.test_unclosed_files.<locals>.funfdhandlez	unclosed )r   r   r   r   )r9   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     r   z,TestMemLeakClass.test_tolerance.<locals>.fund   r   i  )r   r   r   r$   )r   r6   r   )r9   r   r   r-   r   r0   test_tolerance  s   
zTestMemLeakClass.test_tolerancec                 C   s   dd }|  t| | t |  t| W d    n1 s w   Y  dd }| t |  t| W d    d S 1 s@w   Y  d S )Nc                   S   rE   r*   r-   r-   r-   r-   r0   r     s   z0TestMemLeakClass.test_execute_w_exc.<locals>.func                   S   s   d S rA   r-   r-   r-   r-   r0   r     s   )execute_w_excr>   r=   r   r   r   r-   r-   r0   test_execute_w_exc  s   "z#TestMemLeakClass.test_execute_w_excN)rL   rM   rN   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      g | ]
}|d  dkr|qS )r$   r   r-   .0xr-   r-   r0   
<listcomp>      z;TestTestingUtils.test_process_namespace.<locals>.<listcomp>r   )rW   r   r   testrY   gettersr6   r   )r9   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   r  )r$   net_if_addrsr-   r  r-   r-   r0   r    r  z:TestTestingUtils.test_system_namespace.<locals>.<listcomp>r   )r   rY   r  r6   rW   r  )r9   r  r   r-   r-   r0   test_system_namespace  s   z&TestTestingUtils.test_system_namespaceN)rL   rM   rN   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J t t rJ d S )Nr1   za b cr$   r   r3   )r   r   
namedtupletupler   r-   r-   r0   test_is_namedtuple  s   z!TestOtherUtils.test_is_namedtupleN)rL   rM   rN   r  r-   r-   r-   r0   r    s    r  __main__)run_from_name)8__doc__r   r   r   rT   r   r   r   r   rW   psutil.testsr   r   r   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"   rP   rt   r   r   r   r  r  rL   psutil.tests.runnerr  rw   r-   r-   r-   r0   <module>   sp   B'-DGA
