U
    !ºÖhÝG  ã                   @   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m
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/ dd&lm0Z0 dd'lm1Z1 G d(d)„ d)eƒZ2G d*d+„ d+eƒZ3G d,d-„ d-eƒZ4G d.d/„ d/eƒZ5G d0d1„ d1eƒZ6e&j7j8d2d3G d4d5„ d5eƒƒZ9G d6d7„ d7eƒZ:G d8d9„ d9eƒZ;G d:d;„ d;eƒZ<dS )<z1Tests for testing utils (psutil.tests namespace).é    N)Úmock)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Úopen_binary)Ú	open_text)Úsupports_ipv6)Ú
CI_TESTING)ÚCOVERAGE)ÚHAS_NET_CONNECTIONS_UNIX)ÚHERE)Ú
PYTHON_EXE)ÚPYTHON_EXE_ENV)ÚPsutilTestCase)ÚTestMemoryLeak)Úbind_socket)Úbind_unix_socket©Ú
call_until)Úchdir)Úcreate_sockets)Úfake_pytest)Úfilter_proc_net_connections)Úget_free_port)Úis_namedtuple)Úprocess_namespace)Úpytest)Úreap_children)Úretry)Úretry_on_failure)Ú
safe_mkdir)Úsafe_rmpath)Ú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ks4t‚|jdksBt‚d S )Né   é   ©ÚretriesÚintervalZlogfunc                      s   ˆ rˆ   ¡  dd  q dS ©Nr*   r   ©Úpop© ©Zqueuer1   úA./venv/lib/python3.8/site-packages/psutil/tests/test_testutils.pyÚfooE   s    
z2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚAssertionErrorÚ
call_count©ÚselfÚsleepr4   r1   r2   r3   Útest_retry_successA   s
    z%TestRetryDecorator.test_retry_successc              	      sT   t ddd d‡ fdd„ƒ}ttdƒƒ‰ t t¡ |ƒ  W 5 Q R X |jdksPt‚d S )Nr)   r*   r+   c                      s   ˆ rˆ   ¡  dd  q dS r.   r/   r1   r2   r1   r3   r4   S   s    
z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r6   r7   r   ÚraisesÚZeroDivisionErrorr9   r8   r:   r1   r2   r3   Útest_retry_failureP   s    z%TestRetryDecorator.test_retry_failurec              	   C   sB   t tdddd„ ƒ}t t¡ |ƒ  W 5 Q R X |jdks>t‚d S )Nr*   )Z	exceptionr-   c                   S   s   t ‚d S ©N)Ú	TypeErrorr1   r1   r1   r3   r4   a   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr   r?   rC   r9   r8   r:   r1   r1   r3   Útest_exception_arg_   s
    

z%TestRetryDecorator.test_exception_argc              	   C   sD   t dd d ddd„ ƒ}t t¡ |ƒ  W 5 Q R X |jdks@t‚d S )Nr)   r+   c                   S   s   dd  d S r.   r1   r1   r1   r1   r3   r4   m   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r   r?   r@   r9   r8   r:   r1   r1   r3   Útest_no_interval_argi   s
    
z'TestRetryDecorator.test_no_interval_argc              	   C   sD   t ddd ddd„ ƒ}t t¡ |ƒ  W 5 Q R X |jdks@t‚d S )Nr)   r*   r+   c                   S   s   dd  d S r.   r1   r1   r1   r1   r3   r4   w   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorF   r:   r1   r1   r3   Útest_retries_argu   s
    
z#TestRetryDecorator.test_retries_argc              	   C   s&   t  t¡ tddd W 5 Q R X d S )Nr)   r*   )r,   Útimeout)r   r?   rD   r   )r;   r<   r1   r1   r3   Útest_retries_and_timeout_args   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr=   rA   rE   rG   rH   rJ   r1   r1   r1   r3   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   s`   t t ¡ ƒ tt ¡ ƒd }tjdtdgƒd& t	 
tj¡ t |ƒ W 5 Q R X W 5 Q R X d S )NiŸ† úpsutil.tests.retry.__iter__r   ©Zreturn_value)r'   ÚosÚgetpidÚmaxÚpsutilZpidsr   rN   Úiterr   r?   ZNoSuchProcess)r;   Znopidr1   r1   r3   Ú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Úwr4   ©Ú
get_testfnÚopenÚwriter&   rR   ÚpathÚexistsr8   ©r;   ÚtestfnÚfr1   r1   r3   Ú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 )NrX   T)Úempty)rZ   r[   r&   rR   r]   r^   r8   ©r;   r`   r1   r1   r3   Útest_wait_for_file_empty”   s
    
z*TestSyncTestUtils.test_wait_for_file_emptyc              
   C   sJ   |   ¡ }tjdtdgƒd$ t t¡ t|ƒ W 5 Q R X W 5 Q R X d S )NrP   r   rQ   )rZ   r   rN   rV   r   r?   ÚOSErrorr&   rd   r1   r1   r3   Ú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 )NrX   r4   F)ÚdeleterY   r_   r1   r1   r3   Útest_wait_for_file_no_delete¡   s
    z.TestSyncTestUtils.test_wait_for_file_no_deletec                 C   s   t dd„ ƒ d S )Nc                   S   s   dS ©Nr*   r1   r1   r1   r1   r3   Ú<lambda>©   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>r   ©r;   r1   r1   r3   Útest_call_until¨   s    z!TestSyncTestUtils.test_call_untilN)	rK   rL   rM   rW   rb   re   rg   ri   rn   r1   r1   r1   r3   rO   …   s   rO   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kst‚W 5 Q R X d S )NÚr)r   Ú__file__Úmoder8   ©r;   ra   r1   r1   r3   Útest_open_text®   s    
zTestFSTestUtils.test_open_textc              	   C   s&   t tƒ}|jdkst‚W 5 Q R X d S )NÚrb)r   rq   rr   r8   rs   r1   r1   r3   Útest_open_binary²   s    
z TestFSTestUtils.test_open_binaryc                 C   s<   |   ¡ }t|ƒ tj |¡s t‚t|ƒ tj |¡s8t‚d S rB   )rZ   r    rR   r]   Úisdirr8   rd   r1   r1   r3   Ú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¡ t|ƒ W 5 Q R X |js˜t‚W 5 Q R X d S )NrX   zpsutil.tests.os.statÚ )Zside_effect)rZ   r[   Úcloser!   rR   r]   r^   r8   Úmkdirr   rN   rf   ÚerrnoÚEINVALr   r?   Zcalled)r;   r`   Úmr1   r1   r3   Útest_safe_rmpath½   s     
 
ÿz TestFSTestUtils.test_safe_rmpathc              	   C   s\   |   ¡ }t ¡ }t |¡ t|ƒ  t ¡ tj ||¡ks>t‚W 5 Q R X t ¡ |ksXt‚d S rB   )rZ   rR   Úgetcwdr{   r   r]   Újoinr8   )r;   r`   Úbaser1   r1   r3   Ú
test_chdirÑ   s    

$zTestFSTestUtils.test_chdirN)rK   rL   rM   rt   rv   rx   r   rƒ   r1   r1   r1   r3   ro   ­   s
   ro   c                   @   s>   e Zd Zdd„ Zdd„ Zejje d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 rB   )
Úspawn_subprocrU   ÚProcessÚpidÚ
is_runningr8   r   ÚtestsZ_pids_startedZ_subprocesses_started)r;   ZsubpÚpr1   r1   r3   Útest_reap_childrenÛ   s    z#TestProcessUtils.test_reap_childrenc                 C   sä   |   ¡ \}}|j|jkst‚| ¡ s(t‚| ¡ s4t‚t ¡  ¡ }||gksNt‚t ¡ jdd}t|ƒdksnt‚||kszt‚||ks†t‚| ¡ t	 
¡ ksšt‚| ¡ |jks¬t‚t|ƒ | ¡ rÀt‚| ¡ sÌt‚t|ƒ | ¡ ràt‚d S )NT)Ú	recursiveé   )Zspawn_children_pairr‡   r8   rˆ   rU   r†   ÚchildrenÚlenÚppidrR   rS   r$   )r;   ZchildZ
grandchildrŽ   r1   r1   r3   Útest_spawn_children_pairä   s"    z)TestProcessUtils.test_spawn_children_pairú
POSIX only©Úreasonc                 C   s"   |   ¡ \}}| ¡ tjkst‚d S rB   )Úspawn_zombieÚstatusrU   ZSTATUS_ZOMBIEr8   )r;   Z_parentÚzombier1   r1   r3   Ú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-cz3import time; [time.sleep(0.1) for x in range(100)];)ÚstdoutÚstderrÚenv)r…   r$   Zassert_pid_goner‡   rU   r†   r   ÚPopenÚ
subprocessÚPIPEr   r   r•   )r;   rŠ   Úcmdr‡   Úparentr—   r1   r1   r3   Útest_terminateþ   s>    ýü
zTestProcessUtils.test_terminateN)rK   rL   rM   r‹   r‘   r   ÚmarkÚskipifr   r˜   r¡   r1   r1   r1   r3   r„   Ú   s
   	
r„   c                   @   sl   e Zd Zdd„ Zejje dddd„ ƒZdd„ Z	ejje ddejje
pNed	dd
d„ ƒƒZdd„ ZdS )ÚTestNetUtilsc              	   C   s8   t ƒ }td|fd}| ¡ d |ks*t‚W 5 Q R X d S )Nry   ©Úaddrr*   )r   r   Úgetsocknamer8   )r;   ZportÚsr1   r1   r3   r   '  s    zTestNetUtils.bind_socketr’   r“   c              	   C   s¨   |   ¡ }t|ƒ\}|jtjks"t‚|jtjks2t‚| ¡ |ksBt‚t	j
 |¡sRt‚t t	 |¡j¡sht‚W 5 Q R X |   ¡ }t|tjd}|jtjksšt‚W 5 Q R X d S )N)Útype)rZ   r   ÚfamilyÚsocketÚAF_UNIXr8   r©   ÚSOCK_STREAMr§   rR   r]   r^   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r;   ÚnameZsockr1   r1   r3   Útest_bind_unix_socket,  s    
 z"TestNetUtils.test_bind_unix_socketc              
   C   sp   dt ƒ f}ttj|d\}}|F |6 | ¡ |ks8t‚| ¡ |ksHt‚| ¡ |ksXt‚W 5 Q R X W 5 Q R X d S )Nz	127.0.0.1r¥   )r   r#   r«   ÚAF_INETr§   r8   Úgetpeername)r;   r¦   ÚserverÚclientr1   r1   r3   Útest_tcp_socketpair:  s    
z TestNetUtils.test_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   sÊ   t  ¡ }| ¡ }t|jddƒr$t‚|  ¡ }t|ƒ\}}zzt	j
 |¡sJt‚t t	 |¡j¡s`t‚| ¡ | dkstt‚tt|jddƒƒdkst‚| ¡ |ks t‚| ¡ |ks°t‚W 5 | ¡  | ¡  X d S )NZunix)Úkindr   )rU   r†   Únum_fdsr   Znet_connectionsr8   rZ   r%   rz   rR   r]   r^   r®   r¯   r°   r   r§   rµ   )r;   rŠ   rº   r²   r¶   r·   r1   r1   r3   Útest_unix_socketpairC  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ksft
‚tƒ r~|tj dks~t
‚tr˜tr˜|tj dks˜t
‚|tj dksªt
‚|tj dks¼t
‚W 5 Q R X d S )Nr*   r   )r   ÚcollectionsÚdefaultdictÚintrª   Z
getsockoptr«   Z
SOL_SOCKETZSO_TYPEr´   r8   r   ZAF_INET6r   r   r¬   r­   r±   )r;   ZsocksZfamsÚtypesr¨   r1   r1   r3   Útest_create_sockets]  s    

z TestNetUtils.test_create_socketsN)rK   rL   rM   r   r   r¢   r£   r   r³   r¸   r   r   r»   rÀ   r1   r1   r1   r3   r¤   &  s   
	 ÿr¤   Úserial©r²   c                   @   sh   e Zd Zeƒ dd„ ƒZdd„ Zeƒ ejje	ddejje
d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ks4t‚d S )	Nc                      s   ˆ d  d7  < d S )NÚcntr*   r1   r1   ©rÄ   r1   r3   Úfunr  s    z(TestMemLeakClass.test_times.<locals>.funrÄ   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecuter8   )r;   rÆ   r1   rÅ   r3   Ú
test_timesp  s    zTestMemLeakClass.test_timesc              	   C   sÌ   t  t¡ | jdd„ dd W 5 Q R X t  t¡ | jdd„ dd W 5 Q R X t  t¡ | jdd„ dd W 5 Q R X t  t¡ | jd	d„ dd
 W 5 Q R X t  t¡ | jdd„ dd W 5 Q R X d S )Nc                   S   s   dS ©Nr   r1   r1   r1   r1   r3   rk   {  rl   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rÉ   c                   S   s   dS rÎ   r1   r1   r1   r1   r3   rk   }  rl   éÿÿÿÿc                   S   s   dS rÎ   r1   r1   r1   r1   r3   rk     rl   )rÊ   c                   S   s   dS rÎ   r1   r1   r1   r1   r3   rk     rl   )Ú	tolerancec                   S   s   dS rÎ   r1   r1   r1   r1   r3   rk   ƒ  rl   )r,   )r   r?   rD   rÌ   rm   r1   r1   r3   Útest_param_erry  s    zTestMemLeakClass.test_param_errzskipped on CIr“   zskipped during test coveragec              	   C   sJ   g }|fdd„}z0t jt jjdd | j|dd W 5 Q R X W 5 ~X d S )Nc                 S   s   |   dd ¡ d S )NZøxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   ©Úappend©Úlsr1   r1   r3   rÆ   ‹  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem©Úmatchéd   rÏ   )r   r?   ÚfailÚ	ExceptionrÌ   )r;   r×   rÆ   r1   r1   r3   Útest_leak_mem…  s    zTestMemLeakClass.test_leak_memc              	      sN   ‡ ‡fdd„}g ‰ t rdnd}tjtjjd| d ˆ |¡ W 5 Q R X d S )Nc                     s"   t tƒ} ˆ | j¡ ˆ  | ¡ d S rB   )r[   rq   Z
addCleanuprz   rÕ   )ra   ©Zboxr;   r1   r3   rÆ   –  s    z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdZhandlez	unclosed rØ   )r   r   r?   rÛ   rÜ   rÌ   )r;   rÆ   r¹   r1   rÞ   r3   Útest_unclosed_files•  s
    z$TestMemLeakClass.test_unclosed_filesc                    s>   ‡ fdd„}g ‰ d}| j ||ddd tˆ ƒ|d ks:t‚d S )Nc                      s   ˆ   dd ¡ d S )NZxxxxxxxxxxxxxxxxxxxxxxxxrÓ   rÔ   r1   rÖ   r1   r3   rÆ   ¡  s    z,TestMemLeakClass.test_tolerance.<locals>.funrÚ   r   i  €)rÉ   rÊ   rÑ   r*   )rÌ   r   r8   )r;   rÆ   rÉ   r1   rÖ   r3   Útest_tolerance   s       ÿzTestMemLeakClass.test_tolerancec              	   C   sh   dd„ }|   t|¡ t t¡ |   t|¡ W 5 Q R X dd„ }t tjj¡ |   t|¡ W 5 Q R X d S )Nc                   S   s   dd  d S r.   r1   r1   r1   r1   r3   Úfun_1¬  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S rB   r1   r1   r1   r1   r3   Úfun_2³  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Zexecute_w_excr@   r   r?   rf   rÛ   rÜ   )r;   râ   rã   r1   r1   r3   Útest_execute_w_exc«  s    z#TestMemLeakClass.test_execute_w_excN)rK   rL   rM   r   rÍ   rÒ   r   r¢   r£   r	   r
   rÝ   rà   rá   rä   r1   r1   r1   r3   rÃ   n  s   
rÃ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFakePytestc                 C   s(   t  ¡ }| |¡ t  ¡ }| |¡}|S rB   )ÚunittestZ	TestSuiteZaddTestZTextTestRunnerÚrun)r;   ÚklassÚsuiteZrunnerÚresultr1   r1   r3   Úrun_test_class»  s
    

zTestFakePytest.run_test_classc              
   C   s¸   t  t¡}dd  W 5 Q R X t|jtƒs.t‚t jtdd}tdƒ‚W 5 Q R X z&t jtdd}tdƒ‚W 5 Q R X W n2 tk
r¨ } zt|ƒdks˜t‚W 5 d }~X Y nX t 	d¡‚d S )Nr*   r   r4   rØ   Úbarz"foo" does not match "bar"úexception not raised)
r   r?   r@   Ú
isinstanceÚvaluer8   rD   Ústrr   rÛ   )r;   ÚcmÚerrr1   r1   r3   Útest_raisesÂ  s    "zTestFakePytest.test_raisesc                 C   sV   t jjdddd„ ƒ}|ƒ dks$t‚t jjddG dd„ dƒƒ}|ƒ  ¡ dksRt‚d S )NrÁ   rÂ   c                   S   s   dS rj   r1   r1   r1   r1   r3   r4   Ó  s    z%TestFakePytest.test_mark.<locals>.foor*   c                   @   s   e Zd Zdd„ ZdS )z%TestFakePytest.test_mark.<locals>.Fooc                 S   s   dS rj   r1   rm   r1   r1   r3   rì   Û  s    z)TestFakePytest.test_mark.<locals>.Foo.barN)rK   rL   rM   rì   r1   r1   r1   r3   ÚFooÙ  s   rô   )r   r¢   Úxdist_groupr8   rì   )r;   r4   rô   r1   r1   r3   Ú	test_markÒ  s    
zTestFakePytest.test_markc                 C   s–   G dd„ dt jƒ}|  |dƒ¡}| ¡ s,t‚t|jƒdks>t‚|jd d dksTt‚G dd„ dt jƒ}|  |dƒ¡}| ¡ s€t‚t|jƒdks’t‚d S )Nc                   @   s$   e Zd Zejjddddd„ ƒZdS )ú,TestFakePytest.test_skipif.<locals>.TestCaseTr”   r“   c                 S   s   ddkst ‚d S rj   ©r8   rm   r1   r1   r3   r4   â  s    ú0TestFakePytest.test_skipif.<locals>.TestCase.fooN©rK   rL   rM   r   r¢   r£   r4   r1   r1   r1   r3   ÚTestCaseá  s   rû   r4   r*   r   r”   c                   @   s$   e Zd Zejjddddd„ ƒZdS )r÷   Fr”   r“   c                 S   s   ddkst ‚d S rj   rø   rm   r1   r1   r3   r4   ì  s    rù   Nrú   r1   r1   r1   r3   rû   ë  s   ©ræ   rû   rë   ZwasSuccessfulr8   r   Zskipped©r;   rû   rê   r1   r1   r3   Útest_skipifà  s    zTestFakePytest.test_skipifc                 C   sX   G dd„ dt jƒ}|  |dƒ¡}| ¡ s,t‚t|jƒdks>t‚|jd d dksTt‚d S )Nc                   @   s   e Zd Zdd„ ZdS )z*TestFakePytest.test_skip.<locals>.TestCasec                 S   s   t  d¡ ddkst‚d S )Nr”   r*   r   )r   Úskipr8   rm   r1   r1   r3   r4   ö  s    
z.TestFakePytest.test_skip.<locals>.TestCase.fooN)rK   rL   rM   r4   r1   r1   r1   r3   rû   õ  s   rû   r4   r*   r   r”   rü   rý   r1   r1   r3   Ú	test_skipô  s
    zTestFakePytest.test_skipc              	   C   s¤   | j td}t |¡ ttj |d¡dƒ W 5 Q R X ttj |d¡dƒ}| t 	d¡ 
¡ ¡ W 5 Q R X tj tjd|¡ t ¡ }| ¡ dks–t‚W 5 Q R X d S )N)Údirz__init__.pyrX   ztest_file.pyz¬                import unittest

                class TestCase(unittest.TestCase):
                    def test_passed(self):
                        pass
                r   r*   )rZ   r   rR   r{   r[   r]   r   r\   ÚtextwrapÚdedentÚlstripr   rN   ÚobjectrU   r‰   r   ÚmainZcountTestCasesr8   )r;   Ztmpdirra   ré   r1   r1   r3   Ú	test_mainÿ  s    

zTestFakePytest.test_mainc              	   C   sì   t  t¡ tjdtdd W 5 Q R X z*t  t¡ tjdtdd W 5 Q R X W n tk
rd   Y nX t d¡‚t jtdd tjdtdd W 5 Q R X z.t jtdd tjdtdd W 5 Q R X W n tk
rÜ   Y nX t d¡‚d S )Nr4   r*   )Ú
stacklevelrí   rØ   rì   )	r   ZwarnsÚUserWarningÚwarningsÚwarnÚDeprecationWarningr8   r   rÛ   rm   r1   r1   r3   Ú
test_warns  s     
zTestFakePytest.test_warnsc              	   C   s(   t  t jj¡ t  d¡‚W 5 Q R X d S )Nr”   )r   r?   rÛ   rÜ   rm   r1   r1   r3   Ú	test_fail+  s    zTestFakePytest.test_failN)rK   rL   rM   rë   ró   rö   rþ   r   r  r  r  r1   r1   r1   r3   rå   º  s   rå   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestTestingUtilsc                 C   sL   t  ¡ }t|ƒ}| ¡  tdd„ | |j¡D ƒƒd }|ƒ | ¡ ksHt‚d S )Nc                 s   s   | ]}|d  dkr|V  qdS )r*   r   Nr1   ©Ú.0Úxr1   r1   r3   Ú	<genexpr>5  s      z:TestTestingUtils.test_process_namespace.<locals>.<genexpr>r   )	rU   r†   r   ZtestÚnextrV   Úgettersr   r8   )r;   rŠ   ÚnsrÆ   r1   r1   r3   Útest_process_namespace1  s
    z'TestTestingUtils.test_process_namespacec                 C   s:   t ƒ }tdd„ | |j¡D ƒƒd }|ƒ t ¡ ks6t‚d S )Nc                 s   s   | ]}|d  dkr|V  qdS )r*   Únet_if_addrsNr1   r  r1   r1   r3   r  :  s      z9TestTestingUtils.test_system_namespace.<locals>.<genexpr>r   )r"   r  rV   r  rU   r  r8   )r;   r  rÆ   r1   r1   r3   Útest_system_namespace8  s    z&TestTestingUtils.test_system_namespaceN)rK   rL   rM   r  r  r1   r1   r1   r3   r  0  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 )Nr4   za b cr*   r   r5   )r   r¼   Ú
namedtupler8   Útuplerm   r1   r1   r3   Útest_is_namedtuple?  s    z!TestOtherUtils.test_is_namedtupleN)rK   rL   rM   r  r1   r1   r1   r3   r  >  s   r  )=Ú__doc__r¼   r|   rR   r«   r®   r   r  ræ   r
  r   rU   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&   r'   r(   rO   ro   r„   r¤   r¢   rõ   rÃ   rå   r  r  r1   r1   r1   r3   Ú<module>   st   E(-LHKv