
    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oe oe Z$d Z% G d de          Z& G d d e          Z'dS )!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                   n,# t          j        $ r                                 i cY S w xY w	                     ddg          }|d         |d         c	
dj        i}t                    }|                    |j	        d          D ]=\  }}	  |            ||<   # t          j
        $ r} |	
           Y d }~6d }~ww xY w |             |S # t          j        $ r                                Y d S w xY w)Nc                                         | j                   | j                             | j        |           t          | t          j                  rS                    |           | j        6                    | j        d                                | j        |           n/t          | t          j	                  r
                    |           t          |            t          |            d S Nr   )assertEqualpidname
isinstancepsutilZombieProcessassertProcessZombieppidassertGreaterEqualNoSuchProcessassertProcessGonestrrepr)excprocr!   r&   r    tcases       Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception7   s    #'3'''8ch---c6/00 	*%%d+++x#((1555!!#(D111V122 	*##D)))CS					    c                      dk    rC	                      d           d S # t          j        $ r}  |            Y d } ~ d S d } ~ ww xY wd S r   )waitr#   Error)r,   r0   r!   r    r&   r-   s    r/   do_waitzproc_info.<locals>.do_waitE   st    !887		!< 7 7 7T46666666667 8s     A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 7 7 7 7 7 7 7~c""   C   			LL&&)** vY&	
dtx t$$  WWRZUWCC 	 	MC!$X<   T4666 				  & & &%%%%%%&s9   : &A#"A#'D 	CC>&C99C>$D54D5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(d'S )(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                 p    t          j        d           t          rt          j                    | _        d S d S NF)r#   
_set_debugUSE_PROC_POOLmultiprocessingPoolpoolselfs    r/   setUpzTestFetchAllProcesses.setUpk   s;    %     	/',..DIII	/ 	/r1   c                     t          j        d           t          r4| j                                         | j                                         d S d S NT)r#   rF   rG   rJ   	terminatejoinrK   s    r/   tearDownzTestFetchAllProcesses.tearDownr   sQ    $ 	I!!!INN	 	r1   c                     ddl m} t          r,| j                            |t          j                              S g }t          j                    D ] }|                     ||                     !|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   sx     	<;;;;; 	9++Iv{}}EEEB{}} * *		))C..))))Ir1   c                 b   g }|                                  D ]}|                                D ]\  }}t          | |          }	  |||           |ddg d di fvr|s
J |            9# t          $ r d}|d|d|d         dt	          |          d	|d
	z  }|dz  }|dt          j                    z  z  }d
                    d |                                D                       d
z   }|	                    |           Y w xY w|r(| 
                    d                    |                    d S )Nr            zH
======================================================================
zFAIL: name=test_z, pid=r    z, ret=z
info=
zF----------------------------------------------------------------------z
%sc              3       K   | ]	}d |z   V  
dS )z    N ).0is     r/   	<genexpr>z1TestFetchAllProcesses.test_all.<locals>.<genexpr>   s&      !H!HA7a-!H!H!H!H!H!Hr1   )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**,D%%% QRr2$>>>$++e+++ ! ' ' '.AAUU	 A MA)"6"8"888A		!H!H!H!H!HHH4OAOOA&&&&&'	,&  	/))BGGH--...	/ 	/s   A&&BD Dc                 l    t          |t                    sJ |D ]}t          |t                    sJ d S N)r"   listr*   )rL   retr=   parts       r/   cmdlinezTestFetchAllProcesses.cmdline   sJ    #t$$$$$ 	) 	)DdC((((((	) 	)r1   c                 v   t          |t          t          f          sJ |                                |k    sJ |rt          r|                    d          sd S t          j                            |          s
J |            t          rt          j        
                    |          rt          t          d          rzt          t          d          rg	 t          j        |t          j                  sJ d S # t          $ r. t          j                            |          rt           s Y d S Y d S w xY wd S d S d S d S d S )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   sq   #W~.....yy{{c!!!! 	" s||F33 7==%%**s***  ",, "2x(( "WR-@-@ ""!ybg6666666) " " "7>>#.. "z "!" " " " " ""	" 	"" " " "" " " "s   !C6 61D.-D.c                 D    t          |t                    sJ |dk    sJ d S r   r"   intr   s      r/   r    zTestFetchAllProcesses.pid   )    #s#####axxxxxxr1   c                 p    t          |t          t          f          sJ |dk    sJ t          |           d S r   )r"   r   r   rA   r   s      r/   r&   zTestFetchAllProcesses.ppid   s8    #T{+++++axxxx#r1   c                     t          |t          t          f          sJ t          r|st	          |d                   rd S t
          s|sJ t          |                      d S d S )Nr    )r"   r*   r   r   r   r   r+   r   s      r/   r!   zTestFetchAllProcesses.name   sv    #W~..... 	3 	#<T%[#I#I 	F 	"!!S		!!!	" 	"!!r1   c                     t          |t                    sJ 	 |dk    sJ n/# t          $ r" t          r|d         t          j        k    rn Y nw xY wt          j        dt          j        |                     d S )Nr   statusz%Y %m %d %H:%M:%S)	r"   floatr   r	   r#   STATUS_ZOMBIEtimestrftime	localtimer   s      r/   create_timez!TestFetchAllProcesses.create_time   s    #u%%%%%	!88888 	 	 	 4>V-AAA 	 	)4>#+>+>?????s   " )AAc                 p    t          |          sJ |D ]!}t          |t                    sJ |dk    sJ "d S r   )r   r"   r   )rL   rr   r=   uids       r/   uidszTestFetchAllProcesses.uids   sT    S!!!!! 	 	Cc3'''''!88888	 	r1   c                     t          |          sJ |D ]/}t          |t                    sJ t          st          s|dk    sJ 0d S r   )r   r"   r   r   r   )rL   rr   r=   gids       r/   gidszTestFetchAllProcesses.gids   sd    S!!!!!  	  	 Cc3'''''    axxxx	  	 r1   c                     t          |t                    sJ |                                |k    sJ |                                sJ d S rp   )r"   r*   rx   r   s      r/   usernamezTestFetchAllProcesses.username   sK    #s#####yy{{c!!!!yy{{r1   c                     t          |t                    sJ |s
J |            t          rd S |dk    sJ |t          v sJ d S )N?)r"   r*   r   r   r   s      r/   r   zTestFetchAllProcesses.status   sY    #s#####C 	Fczzzz)))))))r1   c                     t          |          sJ |D ].}t          |t          t          f          sJ |dk    r|dk    sJ /d S )Nr   r   r"   r   r   )rL   rr   r=   fields       r/   io_countersz!TestFetchAllProcesses.io_counters   s`    S!!!!! 	" 	"Eec4[11111{{zzzz	" 	"r1   c                 b   t           rTt          |j        t                    sJ t          |j        t                    sJ |j        dk    sJ |j        dk    sJ d S t
          j        t
          j        t
          j        t
          j	        g}t          |t                    sJ |dk    sJ ||v sJ d S r   )
r   r"   ioclassr   rk   r#   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)rL   rr   r=   choicess       r/   ionicezTestFetchAllProcesses.ionice   s     	"ck3/////ci-----;!####9>>>>>> %!$"	G c3'''''!8888'>>>>>>r1   c                     t          |t                    sJ t          r|dk    rt          |d                   rd S |dk    sJ d S )Nr   r       )r"   r   r   r   r   s      r/   num_threadsz!TestFetchAllProcesses.num_threads  sO    #s##### 	saxx$=d5k$J$JxFaxxxxxxr1   c                     t          |t                    sJ |D ]]}t          |          sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |D ] }t          |t          t          f          sJ !^d S r   )r"   rq   r   id	user_timesystem_timer   r   )rL   rr   r=   tr   s        r/   threadszTestFetchAllProcesses.threads  s    #t$$$$$ 	7 	7A #####419999;!####=A%%%% 7 7!%#u6666667	7 	7r1   c                 p    t          |          sJ |D ]!}t          |t                    sJ |dk    sJ "d S r   )r   r"   r   )rL   rr   r=   ns       r/   	cpu_timeszTestFetchAllProcesses.cpu_times  sT    S!!!!! 	 	Aa'''''66666	 	r1   c                 f    t          |t                    sJ d|cxk    rdk    sn J |            d S )Nr[   g      Y@r"   r   r   s      r/   cpu_percentz!TestFetchAllProcesses.cpu_percent%  sK    #u%%%%%c""""U"""""C"""""r1   c                    t          |t                    sJ t          r|dk    rd S |dk    sJ t          j                    dk    r|dk    sJ |t          t          t          j                                        v sJ d S )Nr   r   r   )r"   r   r   r#   	cpu_countrq   ranger   s      r/   cpu_numzTestFetchAllProcesses.cpu_num)  s    #s##### 	sbyyFaxxxx""!8888d5!1!3!34455555555r1   c                     t          |          sJ |D ](}t          |t          t          f          sJ |dk    sJ )t          rH|j        |j        k    sJ |j        |j        k    sJ |j	        |j
        k    sJ |j        |j        k    sJ d S d S 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11A::::: 	5=CH,,,,&#.8888)S->>>>>$4444		5 	5 54r1   c                 T   t          |          sJ t          j                    j        }|j        D ][}t          ||          }t          |t          t          f          sJ |dk    sJ t          st          r|dv rK||k    s
J |            \t          r|j        |j        k    sJ d S d S )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!!!!!%''-K 	( 	(DC&&Eec4[11111A::::  !8!8 E>>>4>>>> 	&7cg%%%%	& 	&%%r1   c                 >   t          |t                    sJ |D ]}t          |j        t                    sJ t          |j        t
                    sJ |j                                        |j        k    sJ t          r|j        dk    sJ nt          rzt          |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k    sJ nt          r	|j        st          j                            |j                  s
J |            	 t          j        |j                  }t          j        |j                  s
J |            r# t$          $ r Y w xY wd S )Nr   r   )rwazr+za+)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  s   #t$$$$$ 	3 	3AadC(((((afc*****6<<>>QV++++ trzzzzz 	!!*c22222!!&#.....!!'3/////zQv!<<<<<w{{{{{ QV 7==((++!+++3WQV__ |BJ//222222 %   '	3 	3s   F
FFc                 D    t          |t                    sJ |dk    sJ d S 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            d S # 1 swxY w Y   d S rp   )r   lensetr   r   )rL   rr   r=   conns       r/   net_connectionsz%TestFetchAllProcesses.net_connectionsk  s     	. 	.s88s3s88}},,,, . .$T*****'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AA22A69A6c                    t          |t          t          f          sJ |                                |k    sJ |rt          j                            |          s
J |            	 t	          j        |          }t          j        |j	                  sJ d S # t          $ rN}t          r t          j                            |          rn|j        t          j        k    r Y d }~d S Y d }~d S d }~ww xY wd S 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!!!! 	07==%%**s***	0WS\\ |BJ///////     v1CCCHH Y%,.. /..... DDDDD		0 	0s   %B 
C. =C))C.c                 f    t          |t                    sJ d|cxk    rdk    sn J |            d S )Nr   d   r   r   s      r/   memory_percentz$TestFetchAllProcesses.memory_percent  s=    #u%%%%%C3r1   c                 4    t          |t                    sJ d S rp   )r"   boolr   s      r/   
is_runningz TestFetchAllProcesses.is_running  s    #t$$$$$$$r1   c                     t          |t                    sJ |g k    sJ t          t          t          j                                        }|D ]}t          |t
                    sJ ||v sJ  d S rp   )r"   rq   r   r#   r   r   )rL   rr   r=   cpusr   s        r/   cpu_affinityz"TestFetchAllProcesses.cpu_affinity  s    #t$$$$$byyyyE&*,,--.. 	 	Aa%%%%%99999	 	r1   c                     t          |t          t          d           f          sJ |Rt          j                            |          s
J |            t          j                            |          sJ |            d S d S rp   )r"   r*   typerz   r{   r|   r   r   s      r/   terminalzTestFetchAllProcesses.terminal  sy    #T$ZZ011111?7==%%**s***7>>#&&+++++ ?++r1   c                 h   |D ]-}t          |j        t                    sJ t          |j        t                    sJ t          |j        t                    sJ |j        D ]}t          ||          }|dk    rI|                    d          s3t          j        	                    |j                  sJ |j                    a|dk    r|sJ t          |                      |dk    r!t          s|sJ t          |                      t          |t          t          f          sJ |dk    sJ ϐ/d S )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  sN    	& 	&Bbgs+++++bh,,,,,bgs+++++ & &E**F?? ++,@AA ?!w}}RW55>>rw>>> f__ --$u++----g%%" 2$11d5kk111%ec4[99999 A:::::&		& 	&r1   c                 D    t          |t                    sJ |dk    sJ d S r   r   r   s      r/   num_handlesz!TestFetchAllProcesses.num_handles  r   r1   c                 8   t          |t                    sJ t          rd|cxk    rdk    sn J |            d S d t          t                    D             }||v sJ t
          rt          |t          j                  sJ d S t          |t                    sJ d S )Ni   c                 b    g | ],}|                     d           t          t          |          -S )_PRIORITY_CLASS)ry   rd   r#   )r`   xs     r/   
<listcomp>z.TestFetchAllProcesses.nice.<locals>.<listcomp>  sE       ::/00""  r1   )r"   r   r   dirr#   r   enumIntEnum)rL   rr   r=   
prioritiess       r/   nicezTestFetchAllProcesses.nice  s    #s##### 	,##########S##### V  J
 *$$$$ ,!#t|4444444!#s+++++++r1   c                 ~    t          |          sJ |D ](}t          |t          t          f          sJ |dk    sJ )d S r   r   r   s       r/   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  sX    S!!!!! 	 	Eec4[11111A:::::	 	r1   c                     t          |t                    sJ t          |          dk    sJ |d         dk    sJ |d         dk    sJ d S )N   r   r   r   )r"   tupler   r   s      r/   rlimitzTestFetchAllProcesses.rlimit  sQ    #u%%%%%3xx1}}}}1v||||1v||||||r1   c                     t          |t                    sJ |                                D ]3\  }}t          |t                    sJ t          |t                    sJ 4d S rp   )r"   dictrc   r*   )rL   rr   r=   kvs        r/   environzTestFetchAllProcesses.environ  sl    #t$$$$$IIKK 	& 	&DAq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   sL        
/ / /    / / /2) ) )
" " "&    
" " "@ @ @          
* * *" " "" " ""  7 7 7  ( ( (6 6 6	5 	5 	5& & & 3 3 34  . . .0 0 0 $ $ $% % %  , , ,& & &,  , , ,     & & & & &r1   rC   c                   $    e Zd ZdZd Zd Zd ZdS )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           d S rE   r#   rF   rK   s    r/   rM   zTestPidsRange.setUp  s    %     r1   c                 .    t          j        d           d S rO   r   rK   s    r/   rR   zTestPidsRange.tearDown  s    $r1   c                     d }d }t          dd          D ]N}t          r ||          r|                     |          5   ||           d d d            n# 1 swxY w Y   Od S )Nc                 4   	 t          d| z  d          }|5  |D ]R}|                    d          r;t          |                                d                   }|| k    c cd d d            S St	          d          # 1 swxY w Y   d S # t
          $ r Y dS 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7  > > ! / /??844 /#&tzz||A#7#7D $(3;..> > > > > > > >/
 %%<===> > > > > > > > > > %   uus)   B	 AA<,A<<B B 	
BBc                    d}	 t          j        |           }	 |r3t          j        |            t          s| t          j                    v sJ not
          sJt          j        t           j                  5  t          j        |            d d d            n# 1 swxY w Y   t          s| t          j                    vsJ d S # t           j	        t          f$ r |dz  }|dk    r Y nw xY w)N   Tr   r   )r#   
pid_existsr7   r   rV   r	   r   raisesr(   r4   r   )r    r  r   s      r/   checkz$TestPidsRange.test_it.<locals>.check  sH   
 A*3// <s+++& 8#&&+--#7#7#7#7
  ' 4!'v/C!D!D 4 4 &s 3 3 34 4 4 4 4 4 4 4 4 4 4 4 4 4 4& <#&fkmm#;#;#;#; F n5   FAAvv v!s6   AB? 3BB? BB? B!B? ?"C$#C$r   i  )r    )r   r   subTest)rL   r*  r/  r    s       r/   test_itzTestPidsRange.test_it  s    	> 	> 	>	 	 	: D>> 	 	C c**  #&&  c


              	 	s   AA	!A	N)r  r  r  r  rM   rR   r1  r_   r1   r/   r  r    sK          ! ! !     4 4 4 4 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 0 0 0 0 0 ' ' ' ' ' ' & & & & & & 2 2 2 2 2 2 * * * * * *      
 @j.@-@. . .bl& l& l& l& l&N l& l& l&^K K K K KN K K K K Kr1   