
    [hG                        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                  | 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       X/var/www/html/backend/venv/lib/python3.12/site-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception2   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_wait@   sF    !87		!  << 7T4667s    A>Ar!   r   r   F)clear_cache)r   r   Processr#   assertPidGoneas_dictr   r   itergettersr/   r$   )r   r0   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  &%&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.setUpf   s*    %  ',,.DI r,   c                     t        j                  d       t        r5| j                  j	                          | j                  j                          y y NT)r   rA   rB   rE   	terminatejoinrF   s    r*   tearDownzTestFetchAllProcesses.tearDownm   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<   rB   rE   imap_unorderedr   pids)rG   r<   r   lss       r*   iter_proc_infoz$TestFetchAllProcesses.iter_proc_infos   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 | 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   )rS   itemsgetattr	Exceptionformatr&   	traceback
format_excrL   
splitlinesappendfail)rG   failuresr8   r   valuemethss          r*   test_allzTestFetchAllProcesses.test_all~   s,   '') 	,D#zz| ,etT*,%  QRr2$>>$+e+u),	,, ))BGGH-.. # ! '.AGNN  K K 	A MA2i224566A		!H!HH4OAOOA&'s   	A==BDDc                 Z    t        |t              sJ |D ]  }t        |t              rJ  y N)r   listr%   )rG   retr8   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hasattrrr   rs   AssertionErrorexistsr   rG   rn   r8   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   floatr{   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   )rG   rn   r8   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   )rG   rn   r8   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 rl   )r   r%   rt   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   )rG   rn   r8   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   rg   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)rG   rn   r8   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   rm   r   id	user_timesystem_timer   r   )rG   rn   r8   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   )rG   rn   r8   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 )NrU   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_countrm   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rG   rn   r8   rg   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)rG   rn   r8   r   r   rg   s         r*   memory_full_infoz&TestFetchAllProcesses.memory_full_info5  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   rm   fdr   rw   r%   rt   r   r   positionmodeflagsr   rv   rx   statS_ISREGst_modeFileNotFoundError)rG   rn   r8   fsts        r*   
open_filesz TestFetchAllProcesses.open_filesE  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rl   )r   lensetr   r   )rG   rn   r8   conns       r*   net_connectionsz%TestFetchAllProcesses.net_connectionsc  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rl   )r   r%   rt   rv   rw   rx   r   S_ISDIRr   OSErrorr   r   _psplatformis_permission_errerrnoENOENT)rG   rn   r8   r   errs        r*   cwdzTestFetchAllProcesses.cwdj  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_percentz  s1    #u%%%C3####r,   c                 (    t        |t              sJ y rl   )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 rl   )r   rm   r   r   r   r   )rG   rn   r8   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 rl   )r   r%   typerv   rw   rx   r|   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 )Nrw   )[zanon_inode:pvclockaddrpermsr   )r   r   r%   r   rw   r   r^   
startswithr   rv   rx   r&   r   r   )rG   rn   r8   ntfnamerg   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   ru   r^   enumIntEnum)rG   rn   r8   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 rl   )r   dictr]   r%   )rG   rn   r8   kvs        r*   environzTestFetchAllProcesses.environ  sK    #t$$$IIK 	&DAqa%%%a%%%	&r,   N))__name__
__module____qualname____doc__rH   rM   rS   rj   rp   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  rY   r,   r*   r>   r>   `   s    
/	/6)
"&
"@  
*"""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   rA   rF   s    r*   rH   zTestPidsRange.setUp  s    % r,   c                 .    t        j                  d       y rJ   r  rF   s    r*   rM   zTestPidsRange.tearDown  s    $r,   c                     d }d }t        dd      D ]4  }t        r	 ||      r| j                  |      5   ||       d d d        6 y # 1 sw Y   AxY w)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_existsr2   r   rQ   r	   r   raisesr#   r/   r{   )r   r	  r|   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   r   subTest)rG   r(  r-  r   s       r*   test_itzTestPidsRange.test_it  sa    	>	: D> 	Cc* #& c
 	 s   	AA	N)r  r  r  r  rH   rM   r/  rY   r,   r*   r  r    s     ! 4r,   r  )"r  r  r   rC   rv   r   r   ra   r   r   r   r   r   r   r   r	   r
   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   rB   r<   r>   r  rY   r,   r*   <module>r1     s       	               # ( , ' 0 ' & 2 * 
 @j.@-@.bi&N i&XKN Kr,   