a
    d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rdd6l7m8Z8 e8e9 dS )7z3
Tests 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-   d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/psutil/tests/test_testutils.pyfooF   s    
z2TestRetryDecorator.test_retry_success.<locals>.foo   )r   listrangeassertEqual
call_countselfsleepr1   r-   r.   r0   test_retry_successB   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   T   s    
z2TestRetryDecorator.test_retry_failure.<locals>.foo   )r   r3   r4   assertRaisesZeroDivisionErrorr5   r6   r7   r-   r.   r0   test_retry_failureQ   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   a   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   l   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   r   r<   r=   r5   r6   r7   r-   r-   r0   test_no_interval_argh   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   v   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorD   r7   r-   r-   r0   test_retries_args   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   sd   t t  tt d }tjdtdgd  | 	tj
t | W d    n1 sV0    Y  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   sX   |   }t|d}|d W d    n1 s20    Y  t| tj|rTJ d S )Nwr1   
get_testfnopenwriter"   rP   pathexistsr8   testfnfr-   r-   r0   test_wait_for_file   s
    (z$TestSyncTestUtils.test_wait_for_filec                 C   sR   |   }t|d W d    n1 s(0    Y  t|dd tj|rNJ d S )NrV   T)empty)rX   rY   r"   rP   r[   r\   r8   r^   r-   r-   r0   test_wait_for_file_empty   s
    z*TestSyncTestUtils.test_wait_for_file_emptyc                 C   sN   |   }tjdtdgd | tt| W d    n1 s@0    Y  d S )NrN   r   rO   )rX   r   rL   rT   r<   IOErrorr"   rb   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 s20    Y  t|dd tj|sXJ 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   r`   rc   re   rg   rk   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 d    n1 s,0    Y  d S )Nrt)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 d    n1 s,0    Y  d S )Nrb)r   rn   r5   ro   rp   r-   r-   r0   test_open_binary   s    
z TestFSTestUtils.test_open_binaryc                 C   s<   |   }t| tj|s J t| tj|s8J d S r@   )rX   r   rP   r[   isdirrb   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|rXJ tj	dt
tjddL}| t
 t| W d    n1 s0    Y  |jsJ W d    n1 s0    Y  d S )NrV   zpsutil.tests.os.stat )Zside_effect)rX   rY   closer   rP   r[   r\   mkdirr   rL   OSErrorerrnoEINVALr<   called)r8   r^   mr-   r-   r0   test_safe_rmpath   s    

&z TestFSTestUtils.test_safe_rmpathc                 C   sp   |   }t }t| t|* | t tj|| W d    n1 sR0    Y  | t | d S r@   )rX   rP   getcwdrx   r   r5   r[   join)r8   r^   baser-   r-   r0   
test_chdir   s    

8zTestFSTestUtils.test_chdirN)rI   rJ   rK   rq   rs   ru   r~   r   r-   r-   r-   r0   rl      s
   rl   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  | r2J tjjr>J tjjrJJ d S r@   )	spawn_testprocrS   Processpid
is_runningr   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(J | s4J t  }| ||g t jdd}| t|d | 	|| | 	|| | |
 t  | |
 |j t| | rJ | sJ t| | rJ d S )NT)	recursive   )Zspawn_children_pairassertNotEqualr   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| | | t| t|   j}t| | | t| tddg}tj|tj	tj	t
d}t| | | t| |   j}t| | | t| tr|  \}}t| t| | | | | d S )Nz-czimport time; time.sleep(60);)stdoutstderrenv)r   r    ZassertProcessGonerS   r   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   sR   t  }ttd|fd$}| | d | W d    n1 sD0    Y  d S )Nrv   addrr&   )r   
contextlibclosingr   r5   getsockname)r8   portsr-   r-   r0   r     s    zTestNetUtils.bind_socketr   c                 C   s   |   }t|}t|f | |jtj | |jtj	 | |
 | tj|s\J tt|jsrJ W d    n1 s0    Y  |   }t|tjd}t|  | |jtj W d    n1 s0    Y  d S )N)type)rX   r   r   r   r5   familysocketAF_UNIXr   SOCK_STREAMr   rP   r[   r\   statS_ISSOCKst_mode
SOCK_DGRAM)r8   namesockr-   r-   r0   test_bind_unix_socket"  s    4z"TestNetUtils.test_bind_unix_socketc              	   C   s   dt  f}ttj|d\}}t|j t|@ | | | | | | | 	| | W d    n1 sx0    Y  W d    n1 s0    Y  d S )Nz	127.0.0.1r   )
r   r   r   AF_INETr   r   r5   r   getpeernamer   )r8   r   serverclientr-   r-   r0   tcp_tcp_socketpair2  s    
zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   s   t  }| }|jddr J |  }t|\}}ztj|sFJ t	
t	|js\J | | | d | t|jddd | | | | | | W |  |  n|  |  0 d S )Nunix)kindr   )rS   r   num_fdsconnectionsrX   r!   rP   r[   r\   r   r   r   r5   r   r   r   rw   )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rtr| 	|tj d | 	|tj d | 	|tj d W d    n1 s0    Y  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_socketsQ  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   fung  s    z(TestMemLeakClass.test_times.<locals>.funr   r   
      )timeswarmup_times   )executer5   )r8   r   r-   r   r0   
test_timese  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   rh   n  ri   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   r   c                   S   s   dS r   r-   r-   r-   r-   r0   rh   o  ri   c                   S   s   dS r   r-   r-   r-   r-   r0   rh   p  ri   )r   c                   S   s   dS r   r-   r-   r-   r-   r0   rh   q  ri   )	tolerancec                   S   s   dS r   r-   r-   r-   r-   r0   rh   r  ri   )r(   )r<   rB   r   r8   r-   r-   r0   test_param_errm  s
    zTestMemLeakClass.test_param_errzskipped on CIzskipped during test coveragec                 C   s6   g }|fdd}z| j td| j|dd W ~n~0 d S )Nc                 S   s   |  dd  d S NZxxxxxxxxxxxxxxxxxxxxxxxxi   appendlsr-   r-   r0   r   z  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem2   r   )assertRaisesRegexAssertionErrorr   )r8   r   r   r-   r-   r0   test_leak_memt  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   rn   Z
addCleanuprw   r   )r_   Z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>.fund   r   i  )r   r   r   r&   )r   r5   r   )r8   r   r   r-   r   r0   test_tolerance  s    
zTestMemLeakClass.test_tolerancec                 C   s   dd }|  t| | t |  t| W d    n1 s@0    Y  dd }| t |  t| W d    n1 s~0    Y  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<   ry   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   b  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>  ri   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     ri   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J t t r*J d S )Nr1   za b cr&   r   r2   )r   r   
namedtuple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   rz   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   rl   r   r   r   r   r   rI   Zpsutil.tests.runnerr   rn   r-   r-   r-   r0   <module>   sp   B'-EGB
