U
    ÷;g™H  ã                   @   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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m0Z0 dd%lm1Z1 dd&lm2Z2 dd'lm3Z3 dd(lm4Z4 G d)d*„ d*eƒZ5G d+d,„ d,eƒZ6G d-d.„ d.eƒZ7G d/d0„ d0eƒZ8G d1d2„ d2eƒZ9e)j:j;d3d4G d5d6„ d6eƒƒZ<G d7d8„ d8eƒZ=G d9d:„ d:eƒZ>G d;d<„ d<eƒZ?dS )=z1Tests for testing utils (psutil.tests namespace).é    N)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Úopen_binary)Ú	open_text)Úsupports_ipv6)ÚPY3)Ú
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)Úmock)Ú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© ©Úqueuer2   ú?/tmp/pip-unpacked-wheel-u0epr1ex/psutil/tests/test_testutils.pyÚfooI   s    
z2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚAssertionErrorÚ
call_count©ÚselfÚsleepr6   r2   r3   r5   Útest_retry_successE   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/   r0   r2   r3   r2   r5   r6   W   s    
z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r8   r9   r   ÚraisesÚZeroDivisionErrorr;   r:   r<   r2   r3   r5   Útest_retry_failureT   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+   )Ú	exceptionr.   c                   S   s   t ‚d S ©N)Ú	TypeErrorr2   r2   r2   r5   r6   e   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr   rA   rF   r;   r:   r<   r2   r2   r5   Útest_exception_argc   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/   r2   r2   r2   r2   r5   r6   q   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r   rA   rB   r;   r:   r<   r2   r2   r5   Útest_no_interval_argm   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/   r2   r2   r2   r2   r5   r6   {   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorI   r<   r2   r2   r5   Útest_retries_argy   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   rA   rG   r   )r=   r>   r2   r2   r5   Útest_retries_and_timeout_argsƒ   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr?   rC   rH   rJ   rK   rM   r2   r2   r2   r5   r)   D   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   rQ   Úiterr   rA   ZNoSuchProcess)r=   Znopidr2   r2   r5   Ú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Úwr6   ©Ú
get_testfnÚopenÚwriter'   rU   ÚpathÚexistsr:   ©r=   ÚtestfnÚfr2   r2   r5   Ú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 )Nr[   T)Úempty)r]   r^   r'   rU   r`   ra   r:   ©r=   rc   r2   r2   r5   Ú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 )NrS   r   rT   )r]   r   rQ   rY   r   rA   ÚIOErrorr'   rg   r2   r2   r5   Ú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 )Nr[   r6   F)Údeleter\   rb   r2   r2   r5   Ú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+   r2   r2   r2   r2   r5   Ú<lambda>­   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>r   ©r=   r2   r2   r5   Útest_call_until¬   s    z!TestSyncTestUtils.test_call_untilN)	rN   rO   rP   rZ   re   rh   rj   rl   rq   r2   r2   r2   r5   rR   ‰   s   rR   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__Úmoder:   ©r=   rd   r2   r2   r5   Ú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   rt   ru   r:   rv   r2   r2   r5   Útest_open_binary¶   s    
z TestFSTestUtils.test_open_binaryc                 C   s<   |   ¡ }t|ƒ tj |¡s t‚t|ƒ tj |¡s8t‚d S rE   )r]   r!   rU   r`   Úisdirr:   rg   r2   r2   r5   Ú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 )Nr[   zpsutil.tests.os.statÚ )Zside_effect)r]   r^   Úcloser"   rU   r`   ra   r:   Úmkdirr   rQ   ÚOSErrorÚerrnoÚEINVALr   rA   Úcalled)r=   rc   Úmr2   r2   r5   Ú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 rE   )r]   rU   Úgetcwdr~   r   r`   Újoinr:   )r=   rc   Úbaser2   r2   r5   Ú
test_chdirÕ   s    

$zTestFSTestUtils.test_chdirN)rN   rO   rP   rw   ry   r{   r„   rˆ   r2   r2   r2   r5   rr   ±   s
   rr   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 rE   )
Úspawn_testprocrX   ÚProcessÚpidÚ
is_runningr:   r   ÚtestsZ_pids_startedZ_subprocesses_started)r=   ZsubpÚpr2   r2   r5   Ú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Œ   r:   r   rX   r‹   ÚchildrenÚlenÚppidrU   rV   r%   )r=   ÚchildZ
grandchildr“   r2   r2   r5   Útest_spawn_children_pairè   s"    z)TestProcessUtils.test_spawn_children_pairú
POSIX only©Úreasonc                 C   s"   |   ¡ \}}| ¡ tjkst‚d S rE   )Úspawn_zombieÚstatusrX   ZSTATUS_ZOMBIEr:   )r=   Ú_parentÚzombier2   r2   r5   Ú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assertPidGonerŒ   rX   r‹   r   ÚPopenÚ
subprocessÚPIPEr   r   r›   )r=   r   ÚcmdrŒ   Úparentrž   r2   r2   r5   Útest_terminate  s>    ýü
zTestProcessUtils.test_terminateN)rN   rO   rP   r   r—   r   ÚmarkÚskipifr   rŸ   r¨   r2   r2   r2   r5   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   s>   t ƒ }t td|fd¡}| ¡ d |ks0t‚W 5 Q R X d S )Nr|   ©Úaddrr+   )r   Ú
contextlibÚclosingr   Úgetsocknamer:   )r=   ÚportÚsr2   r2   r5   r   +  s    zTestNetUtils.bind_socketr˜   r™   c              	   C   s¼   |   ¡ }t|ƒ}t |¡\ |jtjks,t‚|jtj	ks<t‚| 
¡ |ksLt‚tj |¡s\t‚t t |¡j¡srt‚W 5 Q R X |   ¡ }t|tjd}t |¡ |jtjks®t‚W 5 Q R X d S )N)Útype)r]   r   r®   r¯   ÚfamilyÚsocketÚAF_UNIXr:   r³   ÚSOCK_STREAMr°   rU   r`   ra   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r=   ÚnameÚsockr2   r2   r5   Útest_bind_unix_socket0  s     z"TestNetUtils.test_bind_unix_socketc              
   C   s|   dt ƒ f}ttj|d\}}t |¡L t |¡6 | ¡ |ksDt‚| ¡ |ksTt‚| ¡ |ksdt‚W 5 Q R X W 5 Q R X d S )Nz	127.0.0.1r¬   )	r   r$   rµ   ÚAF_INETr®   r¯   r°   r:   Úgetpeername)r=   r­   ÚserverÚclientr2   r2   r5   Útcp_tcp_socketpair@  s    
zTestNetUtils.tcp_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   sÎ   t  ¡ }| ¡ }t|jddƒg ks(t‚|  ¡ }t|ƒ\}}zzt	j
 |¡sNt‚t t	 |¡j¡sdt‚| ¡ | dksxt‚tt|jddƒƒdks”t‚| ¡ |ks¤t‚| ¡ |ks´t‚W 5 | ¡  | ¡  X d S )NÚunix)Úkindr’   )rX   r‹   Únum_fdsr   Znet_connectionsr:   r]   r&   r}   rU   r`   ra   r¸   r¹   rº   r”   r°   rÀ   )r=   r   rÆ   r¼   rÁ   rÂ   r2   r2   r5   Útest_unix_socketpairK  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´   Ú
getsockoptrµ   Ú
SOL_SOCKETÚSO_TYPEr¿   r:   r   ÚAF_INET6r   r   r¶   r·   r»   )r=   ÚsocksZfamsÚtypesr²   r2   r2   r5   Útest_create_socketsg  s    

z TestNetUtils.test_create_socketsN)rN   rO   rP   r   r   r©   rª   r   r¾   rÃ   r   r   rÇ   rÑ   r2   r2   r2   r5   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+   r2   r2   ©rÕ   r2   r5   Úfun|  s    z(TestMemLeakClass.test_times.<locals>.funrÕ   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecuter:   )r=   r×   r2   rÖ   r5   Ú
test_timesz  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   r2   r2   r2   r2   r5   rn   …  ro   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rÚ   c                   S   s   dS rß   r2   r2   r2   r2   r5   rn   ‡  ro   éÿÿÿÿc                   S   s   dS rß   r2   r2   r2   r2   r5   rn   ‰  ro   )rÛ   c                   S   s   dS rß   r2   r2   r2   r2   r5   rn   ‹  ro   )Ú	tolerancec                   S   s   dS rß   r2   r2   r2   r2   r5   rn     ro   )r-   )r   rA   rG   rÝ   rp   r2   r2   r5   Útest_param_errƒ  s    zTestMemLeakClass.test_param_errzskipped on CIr™   zskipped during test coveragec              	   C   sF   g }|fdd„}z,t jt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©Úlsr2   r2   r5   r×   •  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem©Úmatchéd   rà   )r   rA   r:   rÝ   )r=   rè   r×   r2   r2   r5   Útest_leak_mem  s    zTestMemLeakClass.test_leak_memc              	      sJ   ‡ ‡fdd„}g ‰ t rdnd}tjtd| d ˆ |¡ W 5 Q R X d S )Nc                     s"   t tƒ} ˆ | j¡ ˆ  | ¡ d S rE   )r^   rt   Z
addCleanupr}   ræ   )rd   ©Zboxr=   r2   r5   r×      s    z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdÚhandlez	unclosed ré   )r   r   rA   r:   rÝ   )r=   r×   rÅ   r2   rí   r5   Ú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å   r2   rç   r2   r5   r×   «  s    z,TestMemLeakClass.test_tolerance.<locals>.funrë   r   i  €)rÚ   rÛ   râ   r+   )rÝ   r”   r:   )r=   r×   rÚ   r2   rç   r5   Útest_toleranceª  s       ÿzTestMemLeakClass.test_tolerancec              	   C   sd   dd„ }|   t|¡ t t¡ |   t|¡ W 5 Q R X dd„ }t t¡ |   t|¡ W 5 Q R X d S )Nc                   S   s   dd  d S r/   r2   r2   r2   r2   r5   Úfun_1¶  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S rE   r2   r2   r2   r2   r5   Úfun_2½  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Zexecute_w_excrB   r   rA   r   r:   )r=   rò   ró   r2   r2   r5   Útest_execute_w_excµ  s    z#TestMemLeakClass.test_execute_w_excN)rN   rO   rP   r    rÞ   rã   r   r©   rª   r	   r
   rì   rð   rñ   rô   r2   r2   r2   r5   rÔ   x  s   
rÔ   c                   @   sV   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	e
 d	d
dd„ ƒZdd„ Zdd„ ZdS )ÚTestFakePytestc                 C   s(   t  ¡ }| |¡ t  ¡ }| |¡}|S rE   )ÚunittestZ	TestSuiteZaddTestZTextTestRunnerÚrun)r=   ÚklassÚsuiteÚrunnerÚresultr2   r2   r5   Ú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 |  d¡‚d S )Nr+   r   r6   ré   Úbarz"foo" does not match "bar"úexception not raised)	r   rA   rB   Ú
isinstanceÚvaluer:   rG   ÚstrÚfail)r=   ÚcmÚerrr2   r2   r5   Ú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 rm   r2   r2   r2   r2   r5   r6   Ý  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 rm   r2   rp   r2   r2   r5   rý   å  s    z)TestFakePytest.test_mark.<locals>.Foo.barN)rN   rO   rP   rý   r2   r2   r2   r5   ÚFooã  s   r  )r   r©   Úxdist_groupr:   rý   )r=   r6   r  r2   r2   r5   Ú	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 rm   ©r:   rp   r2   r2   r5   r6   ì  s    ú0TestFakePytest.test_skipif.<locals>.TestCase.fooN©rN   rO   rP   r   r©   rª   r6   r2   r2   r2   r5   ÚTestCaseë  s   r  r6   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 rm   r
  rp   r2   r2   r5   r6   ö  s    r  Nr  r2   r2   r2   r5   r  õ  s   ©rö   r  rü   ZwasSuccessfulr:   r”   Úskipped©r=   r  rû   r2   r2   r5   Útest_skipifê  s    zTestFakePytest.test_skipifznot PY3r™   c                 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   Úskipr:   rp   r2   r2   r5   r6     s    
z.TestFakePytest.test_skip.<locals>.TestCase.fooN)rN   rO   rP   r6   r2   r2   r2   r5   r     s   r  r6   r+   r   rš   r  r  r2   r2   r5   Ú	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|¡6 |  td¡ t ¡ }| ¡ dks¤t‚W 5 Q R X W 5 Q R X d S )	N)Údirz__init__.pyr[   ztest_file.pyz¬                import unittest

                class TestCase(unittest.TestCase):
                    def test_passed(self):
                        pass
                r   zFake pytest module was usedr+   )r]   r   rU   r~   r^   r`   r†   r_   ÚtextwrapÚdedentÚlstripr   rQ   ÚobjectrX   rŽ   ZassertWarnsRegexÚUserWarningr   ÚmainZcountTestCasesr:   )r=   Ztmpdirrd   rù   r2   r2   r5   Ú	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 |  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 |  d¡‚d S )Nr6   r+   )Ú
stacklevelrþ   ré   rý   )r   Zwarnsr  ÚwarningsÚwarnÚDeprecationWarningr:   r  rp   r2   r2   r5   Ú
test_warns  s     
zTestFakePytest.test_warnsN)rN   rO   rP   rü   r  r  r  r   r©   rª   r   r  r  r   r2   r2   r2   r5   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 }|ƒ | ¡ ksHt‚d S )Nc                 S   s   g | ]}|d  dkr|‘qS )r+   r•   r2   ©Ú.0Úxr2   r2   r5   Ú
<listcomp>?  s      z;TestTestingUtils.test_process_namespace.<locals>.<listcomp>r   )rX   r‹   r   ÚtestrY   Úgettersr•   r:   )r=   r   Únsr×   r2   r2   r5   Útest_process_namespace;  s
    z'TestTestingUtils.test_process_namespacec                 C   s:   t ƒ }dd„ | |j¡D ƒd d }|ƒ t ¡ ks6t‚d S )Nc                 S   s   g | ]}|d  dkr|‘qS )r+   Únet_if_addrsr2   r"  r2   r2   r5   r%  D  s      z:TestTestingUtils.test_system_namespace.<locals>.<listcomp>r   )r#   rY   r'  rX   r*  r:   )r=   r(  r×   r2   r2   r5   Útest_system_namespaceB  s    z&TestTestingUtils.test_system_namespaceN)rN   rO   rP   r)  r+  r2   r2   r2   r5   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 )Nr6   za b cr+   r’   r7   )r   rÈ   Ú
namedtupler:   Útuplerp   r2   r2   r5   Útest_is_namedtupleI  s    z!TestOtherUtils.test_is_namedtupleN)rN   rO   rP   r/  r2   r2   r2   r5   r,  H  s   r,  )@Ú__doc__rÈ   r®   r€   rU   rµ   r¸   r¤   r  rö   r  rX   Zpsutil.testsr   r   r   Zpsutil._commonr   r   r   Zpsutil._compatr   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)   rR   rr   r‰   r«   r©   r  rÔ   rõ   r!  r,  r2   r2   r2   r5   Ú<module>   sx   E(-LNKv