
    gH                        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  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)PY3)FileNotFoundError)long)unicode)
CI_TESTING)PYTEST_PARALLEL)	QEMU_USER)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       R/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception7   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,   r0   r!   r    r&   r-   s    r/   do_waitzproc_info.<locals>.do_waitE   sF    !87		!  << 7T4667s    A>Ar&   r!   r    F)clear_cache)r   r#   Processr(   assertPidGoneas_dictr    r   itergettersr4   r)   )r    r5   dinfonsfunfun_namer,   r0   r!   r&   r-   r.   s   `       @@@@@r/   	proc_inforA   4   s$   E7 7~~c"LL&&)* vY&	
dtxx t$  WWRZZUWCMC!$X D 		)  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.setUpk   s*    %  ',,.DI r1   c                     t        j                  d       t        r5| j                  j	                          | j                  j                          y y NT)r#   rF   rG   rJ   	terminatejoinrK   s    r/   tearDownzTestFetchAllProcesses.tearDownr   s6    $II!IINN r1   c                     ddl m} t        r.| j                  j	                  |t        j                               S g }t        j                         D ]  }|j                   ||              |S )Nr   )rA   )psutil.tests.test_process_allrA   rG   rJ   imap_unorderedr#   pidsappend)rL   rA   lsr    s       r/   iter_proc_infoz$TestFetchAllProcesses.iter_proc_infox   sQ     	<99++Iv{{}EEB{{}		)C.) %Ir1   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     !HA7a-s   )rY   itemsgetattr	Exceptionr+   	traceback
format_excrQ   
splitlinesrW   fail)rL   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                 Z    t        |t              sJ |D ]  }t        |t              rJ  y N)r"   listr*   )rL   retr=   parts       r/   cmdlinezTestFetchAllProcesses.cmdline   s,    #t$$$DdC((( r1   c                 .   t        |t        t        f      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*   r   stripr   endswithospathisabsr   isfilehasattrrv   rw   AssertionErrorexistsr   rL   rr   r=   s      r/   exezTestFetchAllProcesses.exe   s    #W~...yy{c!!!s||F377==%*s*% ,2x(WR-@"!yybgg666 .A( -u  * "77>>#.z! 8B."s   4&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xr1   c                 X    t        |t        t        f      sJ |dk\  sJ t        |       y r   )r"   r   r   rA   r   s      r/   r&   zTestFetchAllProcesses.ppid   s(    #T{+++axx#r1   c                     t        |t        t        f      sJ t        r|st	        |d         ry t
        s|sJ t        |             y y )Nr    )r"   r*   r   r   r   r   r+   r   s      r/   r!   zTestFetchAllProcesses.name   sC    #W~...3#<T%[#I!S	!3 r1   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   )rL   rr   r=   uids       r/   uidszTestFetchAllProcesses.uids   s5    S!!!Cc3'''!8O8 r1   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   )rL   rr   r=   gids       r/   gidszTestFetchAllProcesses.gids   s<    S!!! Cc3'''axx r1   c                 v    t        |t              sJ |j                         |k(  sJ |j                         sJ y rp   )r"   r*   rx   r   s      r/   usernamezTestFetchAllProcesses.username   s4    #s###yy{c!!!yy{{r1   c                 j    t        |t              sJ |sJ |       t        ry |dk7  sJ |t        v sJ y )N?)r"   r*   r   r   r   s      r/   r   zTestFetchAllProcesses.status   s>    #s###Csczz))))r1   c                 v    t        |      sJ |D ]'  }t        |t        t        f      sJ |dk7  s!|dk\  r'J  y )Nr   r   r"   r   r   )rL   rr   r=   fields       r/   io_countersz!TestFetchAllProcesses.io_counters   sA    S!!!Eec4[111{z!z r1   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   rk   r#   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)rL   rr   r=   choicess       r/   ionicezTestFetchAllProcesses.ionice   s    ckk3///cii---;;!###99>!> %%!!$$""	G c3'''!8O8'>!>r1   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xr1   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"   rq   r   id	user_timesystem_timer   r   )rL   rr   r=   tr   s        r/   threadszTestFetchAllProcesses.threads  s|    #t$$$A ###44199;;!###==A%%%!%#u666  r1   c                 ^    t        |      sJ |D ]  }t        |t              sJ |dk\  rJ  y r   )r   r"   r   )rL   rr   r=   ns       r/   	cpu_timeszTestFetchAllProcesses.cpu_times  s5    S!!!Aa'''6M6 r1   c                 \    t        |t              sJ d|cxk  rdk  sJ |        J |       y )Nr[   g      Y@r"   r   r   s      r/   cpu_percentz!TestFetchAllProcesses.cpu_percent%  s5    #u%%%c"U"'C'"'C'"r1   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_countrq   ranger   s      r/   cpu_numzTestFetchAllProcesses.cpu_num)  sf    #s###sbyaxx"!8O8d5!1!1!345555r1   c                 P   t        |      sJ |D ]!  }t        |t        t        f      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   r   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefilerL   rr   r=   rk   s       r/   memory_infoz!TestFetchAllProcesses.memory_info2  s    S!!!Eec4[111A::  ==CHH,,,&&#..888))S->->>>>$$444	 r1   c                 P   t        |      sJ t        j                         j                  }|j                  D ]J  }t        ||      }t        |t        t        f      sJ |dk\  sJ t        s
t        r|dv r?||k  rEJ |        t        r|j                  |j                  k\  sJ y y )Nr   >   vmsdata)r   r#   virtual_memorytotal_fieldsrd   r"   r   r   r   r
   pssuss)rL   rr   r=   r   r!   rk   s         r/   memory_full_infoz&TestFetchAllProcesses.memory_full_info=  s    S!!!%%'--KKDC&Eec4[111A::!8 E>'4'>   77cgg%%% r1   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"   rq   fdr   r{   r*   rx   r   r   positionmodeflagsr   rz   r|   statS_ISREGst_moder   )rL   rr   r=   fsts        r/   
open_filesz TestFetchAllProcesses.open_filesM  sW   #t$$$AaddC(((affc***66<<>QVV+++ttrz!z!!**c222!!&&#...!!''3///zzQ&vv!<<<<ww{"{QVV77==(+!+(3WWQVV_ ||BJJ/22/- & % 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_fdsg  r   r1   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rp   )r   lensetr   r   )rL   rr   r=   conns       r/   net_connectionsz%TestFetchAllProcesses.net_connectionsk  sN    s8s3s8},,,$T***'-  s   AAA c                    t        |t        t        f      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rp   )r"   r*   r   rx   rz   r{   r|   r   S_ISDIRr   OSErrorr   r#   _psplatformis_permission_errerrnoENOENT)rL   rr   r=   r   errs        r/   cwdzTestFetchAllProcesses.cwdr  s    #W~...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_percent  s1    #u%%%C3####r1   c                 (    t        |t              sJ y rp   )r"   boolr   s      r/   
is_runningz TestFetchAllProcesses.is_running  s    #t$$$r1   c                     t        |t              sJ |g k7  sJ t        t        t        j                                     }|D ]  }t        |t
              sJ ||v rJ  y rp   )r"   rq   r   r#   r   r   )rL   rr   r=   cpusr   s        r/   cpu_affinityz"TestFetchAllProcesses.cpu_affinity  s\    #t$$$byyE&**,-.Aa%%%99 r1   c                     t        |t        t        d       f      sJ |Mt        j                  j                  |      sJ |       t        j                  j                  |      sJ |       y y rp   )r"   r*   typerz   r{   r|   r   r   s      r/   terminalzTestFetchAllProcesses.terminal  s[    #T$Z0111?77==%*s*%77>>#&++& r1   c                 H   |D ]  }t        |j                  t              sJ t        |j                  t              sJ t        |j                  t              sJ |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        |             t        |t        t        f      sJ |dk\  rJ   y )Nr{   )[zanon_inode:addrpermsr   )r"   r   r*   r   r{   r   rd   
startswithrz   r|   r+   r   r   r   )rL   rr   r=   ntfnamerk   s         r/   memory_mapsz!TestFetchAllProcesses.memory_maps  s    Bbggs+++bhh,,,bggs+++E*F? ++,@A!ww}}RWW5>rww>5 f_ -$u+-5g%"$1d5k1u%ec4[999 A:%: $	 r1   c                 6    t        |t              sJ |dk\  sJ y r   r   r   s      r/   num_handlesz!TestFetchAllProcesses.num_handles  r   r1   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        rt        |t        j                        sJ y t        |t              sJ y c c}w )Ni   _PRIORITY_CLASS)
r"   r   r   dirr#   ry   rd   r   enumIntEnum)rL   rr   r=   x
prioritiess        r/   nicezTestFetchAllProcesses.nice  s    #s######(S(#(S(# V$A::/0 "$  
 *$$$!#t||444!#s+++s   (B+c                 j    t        |      sJ |D ]!  }t        |t        t        f      sJ |dk\  r!J  y r   r   r   s       r/   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  s:    S!!!Eec4[111A:: r1   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||r1   c                     t        |t              sJ |j                         D ])  \  }}t        |t              sJ t        |t              r)J  y rp   )r"   dictrc   r*   )rL   rr   r=   kvs        r/   environzTestFetchAllProcesses.environ  sF    #t$$$IIKDAqa%%%a%%%  r1   N))__name__
__module____qualname____doc__rM   rR   rY   rn   rt   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  r_   r1   r/   rC   rC   e   s    
//2)
"&
"@  
*"""7(6	5& 34.0 $%,&,, &r1   rC   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 rE   r#   rF   rK   s    r/   rM   zTestPidsRange.setUp  s    % r1   c                 .    t        j                  d       y rO   r   rK   s    r/   rR   zTestPidsRange.tearDown  s    $r1   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| z  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/%s/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    >*S0$7  !??84#&tzz|A#7D $(3;. Q ! %%<== Q % s'   A/ A#"A#A##A,/	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_existsr7   r   rV   r	   r   raisesr(   r4   r   )r    r  r   s      r/   checkz$TestPidsRange.test_it.<locals>.check  s    
 A**3/s+&#&&++-#77#7   '!'v/C/C!D &s 3 "E&#&fkkm#;;#;  "E!D n5 FAAv ! s/   5C )C 9B6&C 6B?;C $C)(C)r   i  )r    )r   r   subTest)rL   r*  r/  r    s       r/   test_itzTestPidsRange.test_it  sS    	>	: D>Cc* #&c
 '& " '&s   	AA	N)r  r  r  r  rM   rR   r1  r_   r1   r/   r  r    s     ! 4r1   r  )(r  r	  r   rH   rz   r   r   rf   r#   r   r   r   r   r   r   r	   r
   r   r   psutil._compatr   r   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r   rG   rA   rC   r  r_   r1   r/   <module>r4     s       	                ,  " # ( " , ' 0 ' & 2 * 
 @j.@-@.bl&N l&^KN Kr1   