
    XhAG                        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 exr e xr e Zd Z G d de      Z  G d de      Z!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)
CI_TESTING)PYTEST_PARALLEL)VALID_PROC_STATUSES)PsutilTestCase)check_connection_ntuple)create_sockets)is_namedtuple)is_win_secure_system_proc)process_namespace)pytestc                 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                   k(  sJ | j                  | j                  |k(  sJ t        | t        j                        r?j                  |       | j                  M| j                  dk\  sJ | j                  |k(  s-J t        | t        j                        rj                  |       t        |        t        |        y Nr   )pidname
isinstancepsutilZombieProcessassert_proc_zombieppidNoSuchProcessassert_proc_gonestrrepr)excprocr   r    r   tcases       Q/var/www/html/myenv/lib/python3.12/site-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception1   s    ww#~~8888t###c6//0$$T*xx#xx1}$}xx4'''V112""4(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_wait?   sF    !87		!  << 7T4667s    A>Ar    r   r   F)clear_cache)r   r   Processr!   assert_pid_goneas_dictr   r   itergettersr-   r"   )r   r.   dinfonsfunfun_namer%   r)   r   r    r&   r'   s   `       @@@@@r(   	proc_infor:   .   s(   E7 7~~c"LL&&)* vY&	
dtxx t$  WWRZZUWC 	MC!$X	 		)  c"	  << T46  %t$%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                 n    t        j                  d       t        rt        j                         | _        y y NF)r   
_set_debugUSE_PROC_POOLmultiprocessingPoolpoolselfs    r(   setUpzTestFetchAllProcesses.setUpe   s*    %  ',,.DI r*   c                     t        j                  d       t        r5| j                  j	                          | j                  j                          y y NT)r   r?   r@   rC   	terminatejoinrD   s    r(   tearDownzTestFetchAllProcesses.tearDownl   s6    $II!IINN r*   c                     ddl m} t        r.| j                  j	                  |t        j                               S t        j                         D cg c]
  } ||       }}|S c c}w )Nr   )r:   )psutil.tests.test_process_allr:   r@   rC   imap_unorderedr   pids)rE   r:   r   lss       r(   iter_proc_infoz$TestFetchAllProcesses.iter_proc_infor   sN     	<99++Iv{{}EE,2KKM:S)C.:B:I ;s   A$c                    g }| j                         D ]D  }|j                         D ]/  \  }}t        | |      }	  |||       |ddg d di fvs'|r*J |        F |r$t        j                  dj                  |            y # t        $ r d}|dj	                  ||d   t        |      |      z  }|dz  }|dt        j                          z  }dj                  d	 |j                         D              dz   }|j                  |       Y w xY w)
Nr            zH
======================================================================
z+FAIL: name=test_{}, pid={}, ret={}
info={}
r   zF----------------------------------------------------------------------
c              3   &   K   | ]	  }d |z     yw)z    N ).0is     r(   	<genexpr>z1TestFetchAllProcesses.test_all.<locals>.<genexpr>   s     !HA7a-!Hs   )rQ   itemsgetattr	Exceptionformatr$   	traceback
format_excrJ   
splitlinesappendr   fail)rE   failuresr6   r   valuemethss          r(   test_allzTestFetchAllProcesses.test_all}   s,   '') 	,D#zz| ,etT*,%  QRr2$>>$+e+u),	,, ++bggh/00 # ! '.AGNN  K K 	A MA2i224566A		!H!HH4OAOOA&'s   	BBD
Dc                 Z    t        |t              sJ |D ]  }t        |t              rJ  y N)r   listr#   )rE   retr6   parts       r(   cmdlinezTestFetchAllProcesses.cmdline   s1    #t$$$ 	)DdC(((	)r*   c                 "   t        |t              sJ |j                         |k(  s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)r   r#   stripr   endswithospathisabsr   isfilehasattrrp   rq   AssertionErrorexistsr   rE   rl   r6   s      r(   exezTestFetchAllProcesses.exe   s    #s###yy{c!!!s||F377==%*s*% ,2x(WR-@"!yybgg666 .A( -u  * "77>>#.z! 8B."s   .&C /DDc                 6    t        |t              sJ |dk\  sJ y r   r   intr{   s      r(   r   zTestFetchAllProcesses.pid       #s###axxr*   c                 L    t        |t              sJ |dk\  sJ t        |       y r   )r   r   r:   r{   s      r(   r    zTestFetchAllProcesses.ppid   s$    #s###axx#r*   c                     t        |t              sJ t        r|st        |d         ry t        s|sJ t        |             y y )Nr   )r   r#   r   r   r   r$   r{   s      r(   r   zTestFetchAllProcesses.name   s?    #s###3#<T%[#I!S	!3 r*   c                     t        |t              sJ 	 |dk\  sJ 	 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)	r   floatry   r	   r   STATUS_ZOMBIEtimestrftime	localtimer{   s      r(   create_timez!TestFetchAllProcesses.create_time   sl    #u%%%	!8O8 	)4>>#+>?  	4>V-A-AA 	s   A 'A0/A0c                 ^    t        |      sJ |D ]  }t        |t              sJ |dk\  rJ  y r   r   r   r   )rE   rl   r6   uids       r(   uidszTestFetchAllProcesses.uids   s:    S!!! 	Cc3'''!8O8	r*   c                 z    t        |      sJ |D ])  }t        |t              sJ t        rt        r#|dk\  r)J  y r   )r   r   r   r   r   )rE   rl   r6   gids       r(   gidszTestFetchAllProcesses.gids   sA    S!!!  	 Cc3'''axx	 r*   c                 v    t        |t              sJ |j                         |k(  sJ |j                         sJ y rj   )r   r#   rr   r{   s      r(   usernamezTestFetchAllProcesses.username   s4    #s###yy{c!!!yy{{r*   c                 \    t        |t              sJ |sJ |       |dk7  sJ |t        v sJ y )N?)r   r#   r   r{   s      r(   r   zTestFetchAllProcesses.status   s8    #s###Csczz))))r*   c                 j    t        |      sJ |D ]!  }t        |t              sJ |dk7  s|dk\  r!J  y )Nr   r   )rE   rl   r6   fields       r(   io_countersz!TestFetchAllProcesses.io_counters   sB    S!!! 	"EeS))){z!z	"r*   c                    t         r[t        |j                  t              sJ t        |j                  t              sJ |j                  dk\  sJ |j                  dk\  sJ y t
        j                  t
        j                  t
        j                  t
        j                  g}t        |t              sJ |dk\  sJ ||v sJ y r   )
r   r   ioclassr   re   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)rE   rl   r6   choicess       r(   ionicezTestFetchAllProcesses.ionice   s    ckk3///cii---;;!###99>!> %%!!$$""	G c3'''!8O8'>!>r*   c                 j    t        |t              sJ t        r|dk(  rt        |d         ry |dk\  sJ y )Nr   r      )r   r   r   r   r{   s      r(   num_threadsz!TestFetchAllProcesses.num_threads  s5    #s###sax$=d5k$Jaxxr*   c                     t        |t              sJ |D ]a  }t        |      sJ |j                  dk\  sJ |j                  dk\  sJ |j
                  dk\  sJ |D ]  }t        |t        t        f      rJ  c y r   )r   rk   r   id	user_timesystem_timer   r   )rE   rl   r6   tr   s        r(   threadszTestFetchAllProcesses.threads  s    #t$$$ 	7A ###44199;;!###==A%%% 7!%#u6667	7r*   c                 ^    t        |      sJ |D ]  }t        |t              sJ |dk\  rJ  y r   )r   r   r   )rE   rl   r6   ns       r(   	cpu_timeszTestFetchAllProcesses.cpu_times  s:    S!!! 	Aa'''6M6	r*   c                 \    t        |t              sJ d|cxk  rdk  sJ |        J |       y )NrS   g      Y@r   r   r{   s      r(   cpu_percentz!TestFetchAllProcesses.cpu_percent  s5    #u%%%c"U"'C'"'C'"r*   c                     t        |t              sJ t        r|dk(  ry |dk\  sJ t        j                         dk(  r|dk(  sJ |t        t        t        j                                     v sJ y )Nr   r   r   )r   r   r   r   	cpu_countrk   ranger{   s      r(   cpu_numzTestFetchAllProcesses.cpu_num   sf    #s###sbyaxx"!8O8d5!1!1!345555r*   c                 D   t        |      sJ |D ]  }t        |t              sJ |dk\  rJ  t        rm|j                  |j
                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ |j                  |j                  k\  sJ y y r   )r   r   r   r   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefilerE   rl   r6   re   s       r(   memory_infoz!TestFetchAllProcesses.memory_info)  s    S!!! 	EeS)))A::	 ==CHH,,,&&#..888))S->->>>>$$444	 r*   c                 D   t        |      sJ t        j                         j                  }|j                  D ]D  }t        ||      }t        |t              sJ |dk\  sJ t        s
t        r|dv r9||k  r?J |        t        r|j                  |j                  k\  sJ y y )Nr   >   vmsdata)r   r   virtual_memorytotal_fieldsr\   r   r   r   r
   pssuss)rE   rl   r6   r   r   re   s         r(   memory_full_infoz&TestFetchAllProcesses.memory_full_info4  s    S!!!%%'--KK 	(DC&EeS)))A::!8 E>'4'>	( 77cgg%%% r*   c                 v   t        |t              sJ |D ]  }t        |j                  t              sJ t        |j                  t
              sJ |j                  j                         |j                  k(  sJ t        r|j                  dk(  sJ t        rt        |j                  t              sJ t        |j                  t
              sJ t        |j                  t              sJ |j                  dk\  sJ |j                  dv sJ |j                  dkD  sJ t        r|j                  st        j                  j                  |j                        sJ |       	 t        j                  |j                        }t        j                   |j"                        rJ |        y # t$        $ r Y w xY w)Nr   r   >   a+r+arw)r   rk   fdr   ru   r#   rr   r   r   positionmodeflagsr   rt   rv   statS_ISREGst_modeFileNotFoundError)rE   rl   r6   fsts        r(   
open_filesz TestFetchAllProcesses.open_filesD  s\   #t$$$ 	3AaddC(((affc***66<<>QVV+++ttrz!z!!**c222!!&&#...!!''3///zzQ&vv!<<<<ww{"{QVV77==(+!+(3WWQVV_ ||BJJ/22/-	3& % s   "F++	F87F8c                 6    t        |t              sJ |dk\  sJ y r   r~   r{   s      r(   num_fdszTestFetchAllProcesses.num_fds^  r   r*   c                     t               5  t        |      t        t        |            k(  sJ |D ]  }t        |      sJ t	        |        	 d d d        y # 1 sw Y   y xY wrj   )r   lensetr   r   )rE   rl   r6   conns       r(   net_connectionsz%TestFetchAllProcesses.net_connectionsb  s\     	.s8s3s8},,, .$T***'-.	. 	. 	.s   AAA c                    t        |t              sJ |j                         |k(  s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rj   )r   r#   rr   rt   ru   rv   r   S_ISDIRr   OSErrorr   r   _psplatformis_permission_errerrnoENOENT)rE   rl   r6   r   errs        r(   cwdzTestFetchAllProcesses.cwdi  s    #s###yy{c!!!77==%*s*%	0WWS\ ||BJJ///   v11CCCHYY%,,. / s   B	 		C%AC  C%c                 \    t        |t              sJ d|cxk  rdk  sJ |        J |       y )Nr   d   r   r{   s      r(   memory_percentz$TestFetchAllProcesses.memory_percenty  s1    #u%%%C3####r*   c                 (    t        |t              sJ y rj   )r   boolr{   s      r(   
is_runningz TestFetchAllProcesses.is_running}  s    #t$$$r*   c                     t        |t              sJ |g k7  sJ t        t        t        j                                     }|D ]  }t        |t
              sJ ||v rJ  y rj   )r   rk   r   r   r   r   )rE   rl   r6   cpusr   s        r(   cpu_affinityz"TestFetchAllProcesses.cpu_affinity  sa    #t$$$byyE&**,-. 	Aa%%%99	r*   c                     t        |t        t        d       f      sJ |Mt        j                  j                  |      sJ |       t        j                  j                  |      sJ |       y y rj   )r   r#   typert   ru   rv   rz   r{   s      r(   terminalzTestFetchAllProcesses.terminal  s[    #T$Z0111?77==%*s*%77>>#&++& r*   c                 T   |D ]"  }t        |j                  t              sJ t        |j                  t              sJ t        |j                  t              sJ |j
                  D ]  }t        ||      }|dk(  rY|j                  d      r&t        r|dk(  r2t        j                  j                  |j                        r\J |j                         |dk(  r|ruJ t        |             |dk(  rt        r|rJ t        |             t        |t              sJ |dk\  rJ  % y )Nru   )[zanon_inode:pvclockaddrpermsr   )r   r   r#   r   ru   r   r\   
startswithr   rt   rv   r$   r   r   )rE   rl   r6   ntfnamere   s         r(   memory_mapsz!TestFetchAllProcesses.memory_maps  s    	&Bbggs+++bhh,,,bggs+++ &E*F?''(<= u	1 77==1:277:1 f_ -$u+-5g%"$1d5k1u%eS111 A:%:%&		&r*   c                 6    t        |t              sJ |dk\  sJ y r   r~   r{   s      r(   num_handlesz!TestFetchAllProcesses.num_handles  r   r*   c                 .   t        |t              sJ t        rd|cxk  rdk  sJ |        J |       y t        t              D cg c]#  }|j                  d      rt        t        |      % }}||v sJ t        |t        j                        sJ y c c}w )Ni   _PRIORITY_CLASS)	r   r   r   dirr   rs   r\   enumIntEnum)rE   rl   r6   x
prioritiess        r(   nicezTestFetchAllProcesses.nice  s    #s######(S(#(S(# V::/0 "J 
 *$$$c4<<000s   (Bc                 ^    t        |      sJ |D ]  }t        |t              sJ |dk\  rJ  y r   r   r   s       r(   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  s;    S!!! 	EeS)))A::	r*   c                 p    t        |t              sJ t        |      dk(  sJ |d   dk\  sJ |d   dk\  sJ y )N   r   r   r   )r   tupler   r{   s      r(   rlimitzTestFetchAllProcesses.rlimit  sB    #u%%%3x1}}1v||1v||r*   c                     t        |t              sJ |j                         D ])  \  }}t        |t              sJ t        |t              r)J  y rj   )r   dictr[   r#   )rE   rl   r6   kvs        r(   environzTestFetchAllProcesses.environ  sK    #t$$$IIK 	&DAqa%%%a%%%	&r*   N))__name__
__module____qualname____doc__rF   rK   rQ   rh   rn   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  rW   r*   r(   r<   r<   _   s    
/	16)
"&
"@  
*"""7(6	5& 34.0 $%,&21&r*   r<   c                   "    e Zd ZdZd Zd Zd Zy)TestPidsRangea@  Given pid_exists() return value for a range of PIDs which may or
    may not exist, make sure that psutil.Process() and psutil.pids()
    agree with pid_exists(). This guarantees that the 3 APIs are all
    consistent with each other. See:
    https://github.com/giampaolo/psutil/issues/2359

    XXX - Note about Windows: it turns out there are some "hidden" PIDs
    which are not returned by psutil.pids() and are also not revealed
    by taskmgr.exe and ProcessHacker, still they can be instantiated by
    psutil.Process() and queried. One of such PIDs is "conhost.exe".
    Running as_dict() for it reveals that some Process() APIs
    erroneously raise NoSuchProcess, so we know we have problem there.
    Let's ignore this for now, since it's quite a corner case (who even
    imagined hidden PIDs existed on Windows?).
    c                 .    t        j                  d       y r>   r   r?   rD   s    r(   rF   zTestPidsRange.setUp  s    % r*   c                 .    t        j                  d       y rH   r  rD   s    r(   rK   zTestPidsRange.tearDown  s    $r*   c                 `    d }d }t        dd      D ]  }t        r	 ||      r ||        y )Nc                     	 t        d|  dd      }|5  |D ]?  }|j                  d      st        |j                         d         }|| k7  c cd d d        S  t	        d      # 1 sw Y   y xY w# t
        $ r Y yw xY w)Nz/proc/z/statusrbs   Tgid:r   z'Tgid' line not foundF)openr   r   split
ValueErrorr   )r   r   linetgids       r(   is_linux_tidz+TestPidsRange.test_it.<locals>.is_linux_tid  s    >6#g.5  > ! /??84#&tzz|A#7D $(3;.> >/ %%<==> > % s'   A0 A$"A$A$$A-0	A<;A<c                    d}	 t        j                  |       }	 |r4t        j                  |        t        s| t        j                         v sJ y t
        sAt        j                  t         j                        5  t        j                  |        d d d        t        s| t        j                         vsJ y # 1 sw Y   (xY w# t         j                  t        f$ r |dz  }|dk(  r Y nw xY w)N   r   r   )r   
pid_existsr0   r   rO   r	   r   raisesr!   r-   ry   )r   r  rz   s      r(   checkz$TestPidsRange.test_it.<locals>.check  s    
 A**3/s+&#&&++-#77#7   '!'v/C/C!D 4 &s 34&#&fkkm#;;#; 4 4 n5 FAAv ! s/   5C )C 9B6&C 6B?;C $C)(C)r   i  )r   r   )rE   r&  r+  r   s       r(   test_itzTestPidsRange.test_it  s9    	>	: D> 	Cc* #J	r*   N)r  r  r  r  rF   rK   r,  rW   r*   r(   r  r    s     ! 3r*   r  )"r  r  r   rA   rt   r   r   r_   r   r   r   r   r   r   r   r	   r
   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r@   r:   r<   r  rW   r*   r(   <module>r.     s       	               # ( , ' 0 ' & 2 *  @j.@-@.bi&N i&XJN Jr*   