
    f9                        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- dd%l
m.Z.  G d& d'e      Z/ G d( d)e      Z0 G d* d+e      Z1 G d, d-e      Z2 G d. d/e      Z3e( G d0 d1e             Z4 G d2 d3e      Z5 G d4 d5e      Z6e7d6k(  rdd7l8m9Z9  e9e:       yy)8z1Tests 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)filter_proc_connections)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                   ,   e Zd Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z	 ej                  d      d        Z
y)	TestRetryDecoratorz
time.sleepc                     t        ddd       fd       }t        t        d            | j                   |       d       | j                  |j                  d       y )N      retriesintervallogfunc                  :     r j                          ddz    ryNr*   r   popqueues   =/usr/lib/python3/dist-packages/psutil/tests/test_testutils.pyfooz2TestRetryDecorator.test_retry_success.<locals>.fooD        		A         )r   listrangeassertEqual
call_countselfsleepr6   r4   s      @r5   test_retry_successz%TestRetryDecorator.test_retry_success@   sW     
q1T	2	 
3	 U1X"))1-r8   c                     t        ddd       fd       }t        t        d            | j                  t        |       | j                  |j                  d       y )Nr)   r*   r+   c                  :     r j                          ddz    ryr0   r1   r3   s   r5   r6   z2TestRetryDecorator.test_retry_failure.<locals>.fooR   r7   r8      )r   r:   r;   assertRaisesZeroDivisionErrorr<   r=   r>   s      @r5   test_retry_failurez%TestRetryDecorator.test_retry_failureO   sV     
q1T	2	 
3	 U1X+S1))1-r8   c                     t        t        d      d        }| j                  t        |       | j	                  |j
                  d       y )Nr*   )	exceptionr-   c                      t         N)	TypeError r8   r5   r6   z2TestRetryDecorator.test_exception_arg.<locals>.foo_   s    Or8   r   )r   
ValueErrorrE   rL   r<   r=   r?   r@   r6   s      r5   test_exception_argz%TestRetryDecorator.test_exception_arg]   sC    	a	0	 
1	 	)S)))1-r8   c                     t        dd d       d        }| j                  t        |       | j                  |j                  d       y )Nr)   r+   c                      ddz   y r0   rM   rM   r8   r5   r6   z4TestRetryDecorator.test_no_interval_arg.<locals>.fooj   	    Er8   r   r   rE   rF   r<   r=   rO   s      r5   test_no_interval_argz'TestRetryDecorator.test_no_interval_argf   sH     
q4	5	 
6	 	+S1))1-r8   c                     t        ddd       d        }| j                  t        |       | j                  |j                  d       y )Nr)   r*   r+   c                      ddz   y r0   rM   rM   r8   r5   r6   z0TestRetryDecorator.test_retries_arg.<locals>.foos   rS   r8   rT   rO   s      r5   test_retries_argz#TestRetryDecorator.test_retries_argq   sF    	q1T	2	 
3	 	+S1))1-r8   c                 >    | j                  t        t        dd       y )Nr)   r*   )r,   timeout)rE   rN   r   )r?   r@   s     r5   test_retries_and_timeout_argsz0TestRetryDecorator.test_retries_and_timeout_argsz   s    *eQBr8   N)__name__
__module____qualname__r   patchrA   rG   rP   rU   rX   r[   rM   r8   r5   r'   r'   ?   s    TZZ. . TZZ. . TZZ. . TZZ. . TZZ. . TZZC Cr8   r'   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestSyncTestUtilsc                 4   t        t        j                                t        t	        j
                               dz   }t        j                  dt        dg            5  | j                  t        j                  t         |       d d d        y # 1 sw Y   y xY w)Ni psutil.tests.retry.__iter__r   return_value)r%   osgetpidmaxpsutilpidsr   r_   iterrE   NoSuchProcess)r?   nopids     r5   test_wait_for_pidz#TestSyncTestUtils.test_wait_for_pid   sk    RYY[!FKKM"U*ZZ5D!IN 	If22L%H	I 	I 	Is   &BBc                     | j                         }t        |d      5 }|j                  d       d d d        t        |       t        j
                  j                  |      rJ y # 1 sw Y   6xY w)Nwr6   
get_testfnopenwriter$   rf   pathexistsr?   testfnfs      r5   test_wait_for_filez$TestSyncTestUtils.test_wait_for_file   s[    "&# 	!GGEN	f77>>&))))	 	s   A$$A-c                     | j                         }t        |d      5  	 d d d        t        |d       t        j                  j                  |      rJ y # 1 sw Y   8xY w)Nrp   T)empty)rr   rs   r$   rf   ru   rv   r?   rx   s     r5   test_wait_for_file_emptyz*TestSyncTestUtils.test_wait_for_file_empty   sS    "&# 		fD)77>>&))))	 	s   AAc                     | j                         }t        j                  dt        dg            5  | j	                  t
        t        |       d d d        y # 1 sw Y   y xY w)Nrc   r   rd   )rr   r   r_   rk   rE   IOErrorr$   r}   s     r5   test_wait_for_file_no_filez,TestSyncTestUtils.test_wait_for_file_no_file   sJ    "ZZ5D!IN 	>g}f=	> 	> 	>s   AA c                     | j                         }t        |d      5 }|j                  d       d d d        t        |d       t        j
                  j                  |      sJ y # 1 sw Y   8xY w)Nrp   r6   F)deleterq   rw   s      r5   test_wait_for_file_no_deletez.TestSyncTestUtils.test_wait_for_file_no_delete   sZ    "&# 	!GGEN	fU+ww~~f%%%	 	s   A&&A/c                 B    t        d d      }| j                  |d       y )Nc                       y)Nr*   rM   rM   r8   r5   <lambda>z3TestSyncTestUtils.test_call_until.<locals>.<lambda>       r8   zret == 1r*   )r   r<   )r?   rets     r5   test_call_untilz!TestSyncTestUtils.test_call_until   s    J/a r8   N)	r\   r]   r^   rn   rz   r~   r   r   r   rM   r8   r5   ra   ra      s!    I**>
&!r8   ra   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestFSTestUtilsc                     t        t              5 }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr)r   __file__r<   moder?   ry   s     r5   test_open_textzTestFSTestUtils.test_open_text   s5    x  	*AQVVS)	* 	* 	*   6?c                     t        t              5 }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nrb)r   r   r<   r   r   s     r5   test_open_binaryz TestFSTestUtils.test_open_binary   s5    " 	+aQVVT*	+ 	+ 	+r   c                     | j                         }t        |       t        j                  j	                  |      sJ t        |       t        j                  j	                  |      sJ y rK   )rr   r   rf   ru   isdirr}   s     r5   test_safe_mkdirzTestFSTestUtils.test_safe_mkdir   sJ    "6ww}}V$$$6ww}}V$$$r8   c                 X   | j                         }t        |d      j                          t        |       t        j
                  j                  |      rJ t        |       t	        j                  |       t        |       t        j
                  j                  |      rJ t        j                  dt        t        j                  d            5 }| j                  t              5  t        |       d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nrp   zpsutil.tests.os.stat )side_effect)rr   rs   closer   rf   ru   rv   mkdirr   r_   OSErrorerrnoEINVALrE   called)r?   rx   ms      r5   test_safe_rmpathz TestFSTestUtils.test_safe_rmpath   s    "VS!F77>>&)))F
F77>>&)))ZZ"b0I
 	""7+ $F#$88O8	 	$ $	 	s$   D (D4D D	D  D)c                    | j                         }t        j                         }t        j                  |       t	        |      5  | j                  t        j                         t        j                  j                  ||             d d d        | j                  t        j                         |       y # 1 sw Y   .xY wrK   )rr   rf   getcwdr   r   r<   ru   join)r?   rx   bases      r5   
test_chdirzTestFSTestUtils.test_chdir   s    "yy{
6] 	FRYY["'',,tV*DE	Fd+	F 	Fs   AB55B>N)r\   r]   r^   r   r   r   r   r   rM   r8   r5   r   r      s    *+%(,r8   r   c                   R    e Zd Zd Zd Z ej                  e d      d        Zd Z	y)TestProcessUtilsc                 .   | j                         }t        j                  |j                        }|j	                         sJ t                |j	                         rJ t        j                  j                  rJ t        j                  j                  rJ y rK   )	spawn_testprocri   Processpid
is_runningr   tests_pids_started_subprocesses_started)r?   subpps      r5   test_reap_childrenz#TestProcessUtils.test_reap_children   sm    ""$NN488$||~~<<>!!<<----<<55555r8   c                 >   | j                         \  }}| j                  |j                  |j                         |j                         sJ |j                         sJ t	        j
                         j                         }| j                  ||g       t	        j
                         j                  d      }| j                  t        |      d       | j                  ||       | j                  ||       | j                  |j                         t        j                                | j                  |j                         |j                         t        |       |j                         rJ |j                         sJ t        |       |j                         rJ y )NT)	recursive   )spawn_children_pairassertNotEqualr   r   ri   r   childrenr<   lenassertInppidrf   rg   r"   )r?   child
grandchildr   s       r5   test_spawn_children_pairz)TestProcessUtils.test_spawn_children_pair   sB    446zEIIz~~6!!!$$&&&>>#,,.E7+>>#,,t,<X*eX&j(+ryy{3*EII6%##%%%$$&&&*((****r8   
POSIX onlyc                     | j                         \  }}| j                  |j                         t        j                         y rK   )spawn_zombier<   statusri   STATUS_ZOMBIE)r?   parentzombies      r5   test_spawn_zombiez"TestProcessUtils.test_spawn_zombie   s0    **,&*>*>?r8   c                    | j                         }t        |       | j                  |j                         t        |       t	        j
                  | j                         j                        }t        |       | j                  |j                         t        |       t        ddg}t	        j                  |t        j                  t        j                  t              }t        |       | j                  |j                         t        |       | j                         j                  }t        |       | j                  |j                         t        |       t        r`| j                         \  }}t        |       t        |       | j                  |j                         | j                  |j                         y y )Nz-czimport time; time.sleep(60);)stdoutstderrenv)r   r"   assertPidGoner   ri   r   r   Popen
subprocessPIPEr   r   r   )r?   r   cmdr   r   r   s         r5   test_terminatezTestProcessUtils.test_terminate   s@   !!155!!NN4..0445!155!!4!?@LL????	
 	!155!!!!#''#155!#!..0NFFffvzz*vzz* r8   N)
r\   r]   r^   r   r   unittestskipIfr   r   r   rM   r8   r5   r   r      s6    6+* X__Y-@ .@!+r8   r   c                       e Zd Zd Z ej
                  e d      d        Zd Z ej
                  e d       ej
                  e	xs e
d      d               Zd Zy)	TestNetUtilsc                     t               }t        j                  t        d|f            5 }| j	                  |j                         d   |       d d d        y # 1 sw Y   y xY w)Nr   addrr*   )r   
contextlibclosingr   r<   getsockname)r?   portss      r5   r   zTestNetUtils.bind_socket  sR    "d <= 	7Q]]_Q/6	7 	7 	7s   $AA"r   c                     | j                         }t        |      }t        j                  |      5  | j	                  |j
                  t        j                         | j	                  |j                  t        j                         | j	                  |j                         |       t        j                  j                  |      sJ t        j                  t        j                  |      j                         sJ 	 d d d        | j                         }t        |t        j"                        }t        j                  |      5  | j	                  |j                  t        j"                         d d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)N)type)rr   r   r   r   r<   familysocketAF_UNIXr   SOCK_STREAMr   rf   ru   rv   statS_ISSOCKst_mode
SOCK_DGRAM)r?   namesocks      r5   test_bind_unix_socketz"TestNetUtils.test_bind_unix_socket   s    %% 	8T[[&..9TYY(:(:;T--/677>>$'''==!6!6777	8  6+<+<=% 	;TYY(9(9:	; 	;	8 	8	; 	;s   C
E8+F8FFc                    dt               f}t        t        j                  |      \  }}t	        j
                  |      5  t	        j
                  |      5  | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz	127.0.0.1r   )
r   r!   r   AF_INETr   r   r<   r   getpeernamer   )r?   r   serverclients       r5   tcp_tcp_socketpairzTestNetUtils.tcp_tcp_socketpair0  s    ]_-'TB' 	@##F+ @   !3!3!5t<  !3!3!5t<##F$6$6$8$?@	@ 	@@ @	@ 	@s%    CA!C7CC	CCz*/var/run/log UNIX socket opened by defaultc           	      B   t        j                         }|j                         }| j                  t	        |j                  d            g        | j                         }t        |      \  }}	 t        j                  j                  |      sJ t        j                  t        j                  |      j                        sJ | j                  |j                         |z
  d       | j                  t        t	        |j                  d                  d       | j                  |j                         |       | j                  |j!                         |       |j#                          |j#                          y # |j#                          |j#                          w xY w)Nunix)kindr   )ri   r   num_fdsr<   r   connectionsrr   r#   rf   ru   rv   r   r   r   r   r   r   r   )r?   r   r   r   r   r   s         r5   test_unix_socketpairz!TestNetUtils.test_unix_socketpair;  s5   
 NN))+#AMMvM$>?	
  (.	77>>$'''==!6!6777QYY[72A6+AMMvM,FGH! V//148V//148LLNLLN LLNLLNs   /C,E< <"Fc                    t               5 }t        j                  t              }t        j                  t              }|D ]R  }||j                  xx   dz  cc<   ||j                  t        j                  t        j                        xx   dz  cc<   T | j                  |t        j                     d       t               r#| j                  |t        j                     d       t        r)t        r#| j                  |t        j                     d       | j                  |t        j                      d       | j                  |t        j"                     d       d d d        y # 1 sw Y   y xY w)Nr*   r   )r   collectionsdefaultdictintr   
getsockoptr   
SOL_SOCKETSO_TYPEassertGreaterEqualr   r   AF_INET6r   r   r   r   r   )r?   socksfamstypesr   s        r5   test_create_socketsz TestNetUtils.test_create_socketsT  s    	A**3/D++C0E LQXX!#all6#4#4fnnEF!KFL ##D$8!<''V__(=qA-''V^^(<a@##E&*<*<$=qA##E&*;*;$<a@	A 	A 	As   EE##E,N)r\   r]   r^   r   r   r   r   r   r   r   r   r   r  rM   r8   r5   r   r     sw    7
 X__Y-; .;	@ X__Y-X__'G .*Ar8   r   c                       e Zd Z e       d        Zd Z e        ej                  ed       ej                  e	d      d                      Z
d Zd Zd Zy	)
TestMemLeakClassc                 j    fd}ddi| j                  |dd       | j                  d   d       y )Nc                        dxx   dz  cc<   y )Ncntr*   rM   )r  s   r5   funz(TestMemLeakClass.test_times.<locals>.funi  s    J!OJr8   r  r   
      )timeswarmup_times   )executer<   )r?   r  r  s     @r5   
test_timeszTestMemLeakClass.test_timesg  s9    	 ajS4UR(r8   c                 l   | j                  t        | j                  d d       | j                  t        | j                  d d       | j                  t        | j                  d d       | j                  t        | j                  d d	       | j                  t        | j                  d
 d       y )Nc                       yNr   rM   rM   r8   r5   r   z1TestMemLeakClass.test_param_err.<locals>.<lambda>q  r   r8   r   r  c                       yr  rM   rM   r8   r5   r   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r  r   r8   c                       yr  rM   rM   r8   r5   r   z1TestMemLeakClass.test_param_err.<locals>.<lambda>s  r   r8   )r  c                       yr  rM   rM   r8   r5   r   z1TestMemLeakClass.test_param_err.<locals>.<lambda>t  r   r8   )	tolerancec                       yr  rM   rM   r8   r5   r   z1TestMemLeakClass.test_param_err.<locals>.<lambda>u  r   r8   )r,   )rE   rN   r  r?   s    r5   test_param_errzTestMemLeakClass.test_param_errp  s    *dllIQG*dllIRH*dllIBO*dllIL*dllIrJr8   zskipped on CIzskipped during test coveragec                 j    g }|fd}	 | j                  t        d| j                  |d       ~y # ~w xY w)Nc                 ,    | j                  ddz         y )N|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   appendlss    r5   r  z+TestMemLeakClass.test_leak_mem.<locals>.fun}  s    IIi$&'r8   z	extra-mem2   r  )assertRaisesRegexAssertionErrorr  )r?   r'  r  s      r5   test_leak_memzTestMemLeakClass.test_leak_memw  sA      	(	""T\\3b #  s   $/ 2c                 v      fd}g t         rdnd} j                  t        d|z    j                  |       y )Nc                  |    t        t              } j                  | j                         j	                  |        y rK   )rs   r   
addCleanupr   r%  )ry   boxr?   s    r5   r  z1TestMemLeakClass.test_unclosed_files.<locals>.fun  s'    XAOOAGG$JJqMr8   fdhandlez	unclosed )r   r)  r*  r  )r?   r  r   r/  s   `  @r5   test_unclosed_filesz$TestMemLeakClass.test_unclosed_files  s8    	
 t(K$.c	
r8   c                 ~    fd}g d}| j                  ||dd       | j                  t              |dz          y )Nc                  .     j                  ddz         y )Nxxxxxxxxxxxxxxxxxxxxxxxxr#  r$  r&  s   r5   r  z,TestMemLeakClass.test_tolerance.<locals>.fun  s    IIho&r8   d   r   i  )r  r  r  r*   )r  r<   r   )r?   r  r  r'  s      @r5   test_tolerancezTestMemLeakClass.test_tolerance  sI    	' u18I 	 	
 	R%!),r8   c                 <   d }| j                  t        |       | j                  t              5  | j                  t        |       d d d        d }| j                  t              5  | j                  t        |       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nc                      ddz   y r0   rM   rM   r8   r5   fun_1z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1  s	    Er8   c                       y rK   rM   rM   r8   r5   fun_2z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2  s    r8   )execute_w_excrF   rE   r   r*  )r?   r:  r<  s      r5   test_execute_w_excz#TestMemLeakClass.test_execute_w_exc  s    	 	,e401 	/w.	/	 ~. 	90%8	9 	9	/ 	/	9 	9s   B&BBBN)r\   r]   r^   r   r  r  r   r   r	   r
   r+  r2  r7  r>  rM   r8   r5   r  r  e  sn    ) )K X__Z1X__X=> ? 2 

	-9r8   r  c                       e Zd Zd Zd Zy)TestTestingUtilsc                 &   t        j                         }t        |      }|j                          |j	                  |j
                        D cg c]  }|d   dk(  s| c}d   d   }| j                   |       |j                                y c c}w )Nr*   r   r   )ri   r   r   testrk   gettersr<   r   )r?   r   nsxr  s        r5   test_process_namespacez'TestTestingUtils.test_process_namespace  sp    NNq!
	''"**-@Q1q@CAF) As   BBc                     t               }|j                  |j                        D cg c]  }|d   dk(  s| c}d   d   }| j                   |       t	        j
                                y c c}w )Nr*   net_if_addrsr   )r    rk   rC  r<   ri   rH  )r?   rD  rE  r  s       r5   test_system_namespacez&TestTestingUtils.test_system_namespace  s]    ''"**-HQ11GqHKAN 3 3 56 Is
   A-A-N)r\   r]   r^   rF  rI  rM   r8   r5   r@  r@    s    *7r8   r@  c                       e Zd Zd Zy)TestOtherUtilsc                     t         t        j                  dd      ddd            sJ t        t                     rJ y )Nr6   za b cr*   r   r9   )r   r   
namedtupletupler  s    r5   test_is_namedtuplez!TestOtherUtils.test_is_namedtuple  s<    C[33E7CAq!LMMM ))))r8   N)r\   r]   r^   rO  rM   r8   r5   rK  rK    s    *r8   rK  __main__)run_from_name);__doc__r   r   r   rf   r   r   r   r   ri   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#   r$   r%   r'   ra   r   r   r   r  r@  rK  r\   psutil.tests.runnerrQ  r   rM   r8   r5   <module>rV     s+   8    	          & $ ( # ! - # ' ' ' $ ) #  ' 0 & &  * &  ) # $ " ) ' " ( & %=C =C@#! #!L*,n *,ZE+~ E+PHA> HAV E9~ E9 E9P7~ 7*^ * z1( r8   