
    f>                        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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  exr e Z!d Z"e  G d de             Z#e$dk(  rddl%m&Z&  e&e'       yy)zeIterate over all process PIDs and for each one of them invoke and
test all psutil.Process() methods.
    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)WINDOWS)PY3)long)unicode)
CI_TESTING)VALID_PROC_STATUSES)PsutilTestCase)check_connection_ntuple)create_sockets)is_namedtuple)is_win_secure_system_proc)process_namespace)	serialrunc                 P   	
 t                fd	 
fd}	 t        j                         	 j                  ddg      }|d   |d   c	
dj                  i}t              }|j                  |j                  d      D ]  \  }}	  |       ||<     |        |S # t        j                  $ r j	                          i cY S w xY w# t        j                  $ r} |	
       Y d }~kd }~ww xY w# t        j                  $ r j                         Y y w xY w)Nc                    j                  | j                         | j                  j                  | j                  |       t        | t        j
                        rVj                  |       | j                  dj                  | j                  d       j                  | j                  |       n+t        | t        j                        rj                  |       t        |        t        |        y Nr   )assertEqualpidname
isinstancepsutilZombieProcessassertProcessZombieppidassertGreaterEqualNoSuchProcessassertProcessGonestrrepr)excprocr   r#   r   tcases       ?/usr/lib/python3/dist-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception4   s    #''3'88chh-c6//0%%d+xx#((15!!#((D1V112##D)CS	    c                      dk7  r	 j                  d       y y # t        j                  $ r}  |        Y d } ~ y d } ~ ww xY wr   )waitr    Error)r)   r-   r   r   r#   r*   s    r,   do_waitzproc_info.<locals>.do_waitB   sF    !87		!  << 7T4667s    A>Ar#   r   r   F)clear_cache)r   r    Processr%   assertPidGoneas_dictr   r   itergettersr1   r&   )r   r2   dinfonsfunfun_namer)   r-   r   r#   r*   r+   s   `       @@@@@r,   	proc_infor>   1   s(   E7 7~~c"LL&&)* vY&	
dtxx t$  WWRZZUWC 	MC!$X	 		)  C 	  << T46  &%&s:   B' C> 
C'&CCC;&C66C;>$D%$D%c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(y')(TestFetchAllProcesseszTest which iterates over all running processes and performs
    some sanity checks against Process API's returned values.
    Uses a process pool to get info about all processes.
    c                 D    t         rt        j                         | _        y y N)USE_PROC_POOLmultiprocessingPoolpoolselfs    r,   setUpzTestFetchAllProcesses.setUpi   s     ',,.DI r.   c                 z    t         r5| j                  j                          | j                  j                          y y rB   )rC   rF   	terminatejoinrG   s    r,   tearDownzTestFetchAllProcesses.tearDowno   s(    II!IINN r.   c                     ddl m} t        r.| j                  j	                  |t        j                               S g }t        j                         D ]  }|j                   ||              |S )Nr   )r>   )psutil.tests.test_process_allr>   rC   rF   imap_unorderedr    pidsappend)rH   r>   lsr   s       r,   iter_proc_infoz$TestFetchAllProcesses.iter_proc_infot   sV     	<99++Iv{{}EEB{{} *		)C.)*Ir.   c                 
   g }| j                         D ]D  }|j                         D ]/  \  }}t        | |      }	  |||       |ddg d di fvs'|r*J |        F |r | j                  dj                  |            y # t        $ r| d}|d|d|d   dt	        |      d	|d
	z  }|dz  }|dt        j                         z  z  }d
j                  d |j                         D              d
z   }|j                  |       Y w xY w)Nr            zH
======================================================================
zFAIL: name=test_z, pid=r   z, ret=z
info=
zF----------------------------------------------------------------------z
%sc              3   &   K   | ]	  }d |z     yw)z    N ).0is     r,   	<genexpr>z1TestFetchAllProcesses.test_all.<locals>.<genexpr>   s     !HA7a-!Hs   )rT   itemsgetattr	Exceptionr(   	traceback
format_excrL   
splitlinesrR   fail)rH   failuresr:   r   valuemethss          r,   test_allzTestFetchAllProcesses.test_all   s    '') 	,D#zz| ,etT*,% QRr2$>>$+e+u%,	,( ))BGGH-..  ! '.AUU	 A MA)"6"6"888A		!H!HH4OAOOA&'s   	A==BDDc                 j    | j                  |t               |D ]  }| j                  |t                y rB   )assertIsInstancelistr'   )rH   retr:   parts       r,   cmdlinezTestFetchAllProcesses.cmdline   s1    c4( 	-D!!$,	-r.   c                 L   | j                  |t        t        f       | j                  |j	                         |       |rt
        r|j                  d      sy t        j                  j                  |      sJ |       t        rjt        j                  j                  |      rJt        t        d      r9t        t        d      r(	 t        j                  |t        j                        sJ y y y y y y # t        $ r+ t        j                  j!                  |      r	t"        s Y y Y y w xY w)Nz.exeaccessX_OK)rk   r'   r   r   stripr   endswithospathisabsr   isfilehasattrrq   rr   AssertionErrorexistsr   rH   rm   r:   s      r,   exezTestFetchAllProcesses.exe   s    cC>2c*s||F377==%*s*% ,2x(WR-@"!yybgg666 .A( -u  * "77>>#.z! 8B."s   &C/ //D#"D#c                 T    | j                  |t               | j                  |d       y r   rk   intr$   r|   s      r,   r   zTestFetchAllProcesses.pid   "    c3'Q'r.   c                 v    | j                  |t        t        f       | j                  |d       t	        |       y r   )rk   r   r   r$   r>   r|   s      r,   r#   zTestFetchAllProcesses.ppid   s-    cC;/Q'#r.   c                     | j                  |t        t        f       t        r|st	        |d         ry t
        s|sJ t        |             y y )Nr   )rk   r'   r   r   r   r   r(   r|   s      r,   r   zTestFetchAllProcesses.name   sC    cC>23#<T%[#I!S	!3 r.   c                    | j                  |t               	 | j                  |d       t        j                  dt        j                  |             y # t        $ r! t        r|d   t
        j                  k(  rn Y Sw xY w)Nr   statusz%Y %m %d %H:%M:%S)
rk   floatr$   rz   r	   r    STATUS_ZOMBIEtimestrftime	localtimer|   s      r,   create_timez!TestFetchAllProcesses.create_time   sq    c5)	##C+ 	)4>>#+>?  	4>V-A-AA 	s   A 'A>=A>c                 |    t        |      sJ |D ]*  }| j                  |t               | j                  |d       , y r   )r   rk   r   r$   )rH   rm   r:   uids       r,   uidszTestFetchAllProcesses.uids   s?    S!!! 	,C!!#s+##C+	,r.   c                     t        |      sJ |D ]8  }| j                  |t               t        r t        r'| j                  |d       : y r   )r   rk   r   r   r   r$   )rH   rm   r:   gids       r,   gidszTestFetchAllProcesses.gids   sF    S!!!  	0C!!#s+''Q/	0r.   c                     | j                  |t               | j                  |j                         |       |j                         sJ y rB   )rk   r'   r   rs   r|   s      r,   usernamezTestFetchAllProcesses.username   s6    c3'c*yy{{r.   c                     | j                  |t               |sJ |       | j                  |d       | j                  |t               y )N?)rk   r'   assertNotEqualassertInr   r|   s      r,   r   zTestFetchAllProcesses.status   s<    c3'CsC%c./r.   c                     t        |      sJ |D ]6  }| j                  |t        t        f       |dk7  s%| j	                  |d       8 y )Nr   r   rk   r   r   r$   )rH   rm   r:   fields       r,   io_countersz!TestFetchAllProcesses.io_counters   sJ    S!!! 	2E!!%#t5{''q1	2r.   c                    t         ry| j                  |j                  t               | j                  |j                  t               | j                  |j                  d       | j                  |j                  d       y t        j                  t        j                  t        j                  t        j                  g}| j                  |t               | j                  |d       | j                  ||       y r   )r   rk   ioclassr   rf   r$   r    IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGHr   )rH   rm   r:   choicess       r,   ionicezTestFetchAllProcesses.ionice   s    !!#++s3!!#))S1##CKK3##CIIq1 %%!!$$""	G !!#s+##C+MM#w'r.   c                     | j                  |t               t        r|dk(  rt        |d         ry | j	                  |d       y )Nr   r      )rk   r   r   r   r$   r|   s      r,   num_threadsz!TestFetchAllProcesses.num_threads  s:    c3'sax$=d5k$JQ'r.   c                 F   | j                  |t               |D ]  }t        |      sJ | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d       |D ]  }| j                  |t        t        f          y r   )	rk   rl   r   r$   id	user_timesystem_timer   r   )rH   rm   r:   tr   s        r,   threadszTestFetchAllProcesses.threads  s    c4( 	;A #####ADD!,##AKK3##AMM15 ;%%ec5\:;	;r.   c                 |    t        |      sJ |D ]*  }| j                  |t               | j                  |d       , y r   )r   rk   r   r$   )rH   rm   r:   ns       r,   	cpu_timeszTestFetchAllProcesses.cpu_times  s?    S!!! 	*A!!!U+##Aq)	*r.   c                 d    | j                  |t               d|cxk  rdk  sJ |        J |       y )NrV   g      Y@rk   r   r|   s      r,   cpu_percentz!TestFetchAllProcesses.cpu_percent  s5    c5)c"U"'C'"'C'"r.   c           	      *   | j                  |t               t        r|dk(  ry | j                  |d       t	        j
                         dk(  r| j                  |d       | j                  |t        t        t	        j
                                            y )Nr   r   r   )
rk   r   r   r$   r    	cpu_countr   r   rl   ranger|   s      r,   cpu_numzTestFetchAllProcesses.cpu_num"  sp    c3'sbyQ'"S!$c4f&6&6&8 9:;r.   c                    t        |      sJ |D ]0  }| j                  |t        t        f       | j	                  |d       2 t
        r| j	                  |j                  |j                         | j	                  |j                  |j                         | j	                  |j                  |j                         | j	                  |j                  |j                         y y r   )r   rk   r   r   r$   r   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefilerH   rm   r:   rf   s       r,   memory_infoz!TestFetchAllProcesses.memory_info+  s    S!!! 	.E!!%#t5##E1-	. ##CMM388<##C$7$7H##C$:$:C<M<MN##C$5$5s||D	 r.   c                    t        |      sJ t        j                         j                  }|j                  D ]h  }t        ||      }| j                  |t        t        f       | j                  |d||f       t        s
t        r|dv rR| j                  |||||f       j t        r'| j                  |j                  |j                         y y )Nr   )msg)vmsdata)r   r    virtual_memorytotal_fieldsr_   rk   r   r   r$   r   r
   assertLessEqualpssuss)rH   rm   r:   r   r   rf   s         r,   memory_full_infoz&TestFetchAllProcesses.memory_full_info6  s    S!!!%%'--KK 	IDC&E!!%#t5##E14-#@ 7   D%3G H	I ##CGGSWW5 r.   c                    | j                  |t               |D ]  }| j                  |j                  t               | j                  |j                  t
               | j                  |j                  j                         |j                         t        r| j                  |j                  d       nt        r| j                  |j                  t               | j                  |j                  t
               | j                  |j                  t               | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       nt         r|j                  sjt"        j                  j%                  |j                        sJ |       	 t#        j&                  |j                        }t'        j(                  |j*                        rJ |        y # t,        $ r Y w xY w)Nr   r   )rwazr+za+)rk   rl   fdr   rv   r'   r   rs   r   r   positionmodeflagsr$   r   assertGreaterr   ru   rw   statS_ISREGst_modeFileNotFoundError)rH   rm   r:   fsts        r,   
open_filesz TestFetchAllProcesses.open_filesF  sj   c4( 	3A!!!$$,!!!&&#.QVV\\^QVV4  r*%%ajj#6%%affc2%%aggs3''

A6aff&AB""177A.QVV77==(+!+(3WWQVV_ ||BJJ/22/-	3& % s   4G==	H
	H
c                 T    | j                  |t               | j                  |d       y r   r   r|   s      r,   num_fdszTestFetchAllProcesses.num_fds`  r   r.   c           	          t               5  | j                  t        |      t        t        |                   |D ]  }t	        |      sJ t        |        	 d d d        y # 1 sw Y   y xY wrB   )r   r   lensetr   r   )rH   rm   r:   conns       r,   connectionsz!TestFetchAllProcesses.connectionsd  s^     	.SXs3s8}5 .$T***'-.	. 	. 	.s   AA""A+c                    | j                  |t        t        f       | j                  |j	                         |       |r^t
        j                  j                  |      sJ |       	 t        j                  |      }t        j                  |j                        sJ y y # t        $ rS}t        r t        j                  j                  |      rn#|j                   t         j"                  k7  r Y d }~y Y d }~y d }~ww xY wrB   )rk   r'   r   r   rs   ru   rv   rw   r   S_ISDIRr   OSErrorr   r    _psplatformis_permission_errerrnoENOENT)rH   rm   r:   r   errs        r,   cwdzTestFetchAllProcesses.cwdk  s    cC>2c*77==%*s*%	0WWS\ ||BJJ///   v11CCCHYY%,,. / s   &B 	C:'AC55C:c                 d    | j                  |t               d|cxk  rdk  sJ |        J |       y )Nr   d   r   r|   s      r,   memory_percentz$TestFetchAllProcesses.memory_percent{  s1    c5)C3####r.   c                 0    | j                  |t               y rB   )rk   boolr|   s      r,   
is_runningz TestFetchAllProcesses.is_running  s    c4(r.   c                     | j                  |t               | j                  |g        t        t        t	        j
                                     }|D ]*  }| j                  |t               | j                  ||       , y rB   )rk   rl   r   r   r    r   r   r   )rH   rm   r:   cpusr   s        r,   cpu_affinityz"TestFetchAllProcesses.cpu_affinity  sg    c4(C$E&**,-. 	#A!!!S)MM!T"	#r.   c                     | j                  |t        t        d       f       |Mt        j                  j                  |      sJ |       t        j                  j                  |      sJ |       y y rB   )rk   r'   typeru   rv   rw   r{   r|   s      r,   terminalzTestFetchAllProcesses.terminal  s[    cCd#45?77==%*s*%77>>#&++& r.   c                 ~   |D ]7  }| j                  |j                  t               | j                  |j                  t               | j                  |j                  t               |j
                  D ]  }t        ||      }|dk(  rM|j                  d      r&t        j                  j                  |j                        rPJ |j                         |dk(  r|riJ t        |             |dk(  rt        r|rJ t        |             | j                  |t        t        f       | j                  |d        : y )Nrv   )[zanon_inode:addrpermsr   )rk   r   r'   r   rv   r   r_   
startswithru   rw   r(   r   r   r   r$   )rH   rm   r:   ntfnamerf   s         r,   memory_mapsz!TestFetchAllProcesses.memory_maps  s     	6B!!"''3/!!"((C0!!"''3/ 6E*F? ++,@A!ww}}RWW5>rww>5 f_ -$u+-5g%"$1d5k1u))%#t=++E156		6r.   c                 T    | j                  |t               | j                  |d       y r   r   r|   s      r,   num_handlesz!TestFetchAllProcesses.num_handles  r   r.   c                    | j                  |t               t        rd|cxk  rdk  sJ |        J |       y t        t              D cg c]#  }|j                  d      rt        t        |      % }}| j                  ||       t        r!| j                  |t        j                         y | j                  |t               y c c}w )Ni   _PRIORITY_CLASS)rk   r   r   dirr    rt   r_   r   r   enumIntEnum)rH   rm   r:   x
prioritiess        r,   nicezTestFetchAllProcesses.nice  s    c3'###(S(#(S(# V::/0 "J 
 MM#z*%%c4<<8%%c3/s   	(Cc                     t        |      sJ |D ]0  }| j                  |t        t        f       | j	                  |d       2 y r   r   r   s       r,   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  sC    S!!! 	.E!!%#t5##E1-	.r.   c                     | j                  |t               | j                  t        |      d       | j	                  |d   d       | j	                  |d   d       y )N   r   r   r   )rk   tupler   r   r$   r|   s      r,   rlimitzTestFetchAllProcesses.rlimit  sN    c5)S1%A+A+r.   c                     | j                  |t               |j                         D ]1  \  }}| j                  |t               | j                  |t               3 y rB   )rk   dictr^   r'   )rH   rm   r:   kvs        r,   environzTestFetchAllProcesses.environ  sK    c4(IIK 	*DAq!!!S)!!!S)	*r.   N))__name__
__module____qualname____doc__rI   rM   rT   ri   ro   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  rZ   r.   r,   r@   r@   b   s    
/
/2-
"&(
"@ ,0
02("(;*(<	E6 34(.0 $)#,6,(0 .,*r.   r@   __main__)run_from_name)(r  r  r   rD   ru   r   r   ra   r    r   r   r   r   r   r   r	   r
   r   r   psutil._compatr   r   r   psutil.testsr   r   r   r   r   r   r   r   r   rC   r>   r@   r  psutil.tests.runnerr  __file__rZ   r.   r,   <module>r"     s       	                 " # , ' 0 ' & 2 * "
 (j..b g*N g* g*T z1( r.   