
    /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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)
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                   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       P/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_process_all.pycheck_exceptionz"proc_info.<locals>.check_exception2   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'   r+   r   r   r!   r(   s    r*   do_waitzproc_info.<locals>.do_wait@   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gettersr/   r$   )r   r0   dinfonsfunfun_namer'   r+   r   r!   r(   r)   s   `       @@@@@r*   	proc_infor<   /   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.setUpf   s;    %     	/',..DIII	/ 	/r,   c                     t          j        d           t          r4| j                                         | j                                         d S d S NT)r   rA   rB   rE   	terminatejoinrF   s    r*   tearDownzTestFetchAllProcesses.tearDownm   sQ    $ 	I!!!INN	 	r,   c                     ddl m t          r,| j                            t          j                              S fdt          j                    D             }|S )Nr   )r<   c                 &    g | ]} |          S  rP   ).0r   r<   s     r*   
<listcomp>z8TestFetchAllProcesses.iter_proc_info.<locals>.<listcomp>{   s!    :::S))C..:::r,   )psutil.tests.test_process_allr<   rB   rE   imap_unorderedr   pids)rG   lsr<   s     @r*   iter_proc_infoz$TestFetchAllProcesses.iter_proc_infos   sa     	<;;;;; 	9++Iv{}}EEE::::FKMM:::BIr,   c                 t   g }|                                  D ]}|                                D ]\  }}t          | |          }	  |||           |ddg d di fvr|s
J |            9# t          $ r d}|d                    ||d         t          |          |          z  }|dz  }|dt          j                     z  }d                    d	 |	                                D                       dz   }|
                    |           Y w xY w|r(|                     d                    |                    d S )
Nr            zH
======================================================================
z+FAIL: name=test_{}, pid={}, ret={}
info={}
r   zF----------------------------------------------------------------------
c              3       K   | ]	}d |z   V  
dS )z    NrP   )rQ   is     r*   	<genexpr>z1TestFetchAllProcesses.test_all.<locals>.<genexpr>   s&      !H!HA7a-!H!H!H!H!H!Hr,   )rW   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**,D%%%  QRr2$>>>$++e+++! ! ' ' '.AGNN  K KK 	 A MA6i244666A		!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%   )rG   retr8   parts       r*   cmdlinezTestFetchAllProcesses.cmdline   sJ    #t$$$$$ 	) 	)DdC((((((	) 	)r,   c                 h   t          |t                    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%   stripr   endswithospathisabsr   isfilehasattrrt   ru   AssertionErrorexistsr   rG   rp   r8   s      r*   exezTestFetchAllProcesses.exe   sm   #s#####yy{{c!!!! 	" s||F33 7==%%**s***  ",, "2x(( "WR-@-@ ""!ybg6666666) " " "7>>#.. "z "!" " " " " ""	" 	"" " " "" " " "s   !C/ /1D'&D'c                 D    t          |t                    sJ |dk    sJ d S r   r   intr   s      r*   r   zTestFetchAllProcesses.pid   )    #s#####axxxxxxr,   c                 b    t          |t                    sJ |dk    sJ t          |           d S r   )r   r   r<   r   s      r*   r!   zTestFetchAllProcesses.ppid   s4    #s#####axxxx#r,   c                     t          |t                    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   s      r*   r   zTestFetchAllProcesses.name   sr    #s##### 	3 	#<T%[#I#I 	F 	"!!S		!!!	" 	"!!r,   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   )rG   rp   r8   uids       r*   uidszTestFetchAllProcesses.uids   sT    S!!!!! 	 	Cc3'''''!88888	 	r,   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   )rG   rp   r8   gids       r*   gidszTestFetchAllProcesses.gids   sd    S!!!!!  	  	 Cc3'''''    axxxx	  	 r,   c                     t          |t                    sJ |                                |k    sJ |                                sJ d S rn   )r   r%   rv   r   s      r*   usernamezTestFetchAllProcesses.username   sK    #s#####yy{{c!!!!yy{{r,   c                 r    t          |t                    sJ |s
J |            |dk    sJ |t          v sJ d S )N?)r   r%   r   r   s      r*   r   zTestFetchAllProcesses.status   sL    #s#####Cczzzz)))))))r,   c                 |    t          |          sJ |D ]'}t          |t                    sJ |dk    r|dk    sJ (d S )Nr   r   )rG   rp   r8   fields       r*   io_countersz!TestFetchAllProcesses.io_counters   s\    S!!!!! 	" 	"EeS))))){{zzzz	" 	"r,   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   ri   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGH)rG   rp   r8   choicess       r*   ionicezTestFetchAllProcesses.ionice   s     	"ck3/////ci-----;!####9>>>>>> %!$"	G c3'''''!8888'>>>>>>r,   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axxxxxxr,   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   ro   r   id	user_timesystem_timer   r   )rG   rp   r8   tr   s        r*   threadszTestFetchAllProcesses.threads  s    #t$$$$$ 	7 	7A #####419999;!####=A%%%% 7 7!%#u6666667	7 	7r,   c                 p    t          |          sJ |D ]!}t          |t                    sJ |dk    sJ "d S r   )r   r   r   )rG   rp   r8   ns       r*   	cpu_timeszTestFetchAllProcesses.cpu_times  sT    S!!!!! 	 	Aa'''''66666	 	r,   c                 f    t          |t                    sJ d|cxk    rdk    sn J |            d S )NrY   g      Y@r   r   r   s      r*   cpu_percentz!TestFetchAllProcesses.cpu_percent  sK    #u%%%%%c""""U"""""C"""""r,   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_countro   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5r,   c                    t          |          sJ |D ]!}t          |t                    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   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefilerG   rp   r8   ri   s       r*   memory_infoz!TestFetchAllProcesses.memory_info*  s    S!!!!! 	 	EeS)))))A::::: 	5=CH,,,,&#.8888)S->>>>>$4444		5 	5 54r,   c                 F   t          |          sJ t          j                    j        }|j        D ]T}t          ||          }t          |t                    sJ |dk    sJ t          st          r|dv rD||k    s
J |            Ut          r|j
        |j        k    sJ d S d S )Nr   >   vmsdata)r   r   virtual_memorytotal_fieldsr`   r   r   r   r
   pssuss)rG   rp   r8   r   r   ri   s         r*   memory_full_infoz&TestFetchAllProcesses.memory_full_info5  s    S!!!!!%''-K 	( 	(DC&&EeS)))))A::::  !8!8 E>>>4>>>> 	&7cg%%%%	& 	&%%r,   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   >   a+r+arw)r   ro   fdr   ry   r%   rv   r   r   positionmodeflagsr   rx   rz   statS_ISREGst_modeFileNotFoundError)rG   rp   r8   fsts        r*   
open_filesz TestFetchAllProcesses.open_filesE  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_fds_  r   r,   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 rn   )r   lensetr   r   )rG   rp   r8   conns       r*   net_connectionsz%TestFetchAllProcesses.net_connectionsc  s     	. 	.s88s3s88}},,,, . .$T*****'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AA22A69A6c                    t          |t                    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 rn   )r   r%   rv   rx   ry   rz   r   S_ISDIRr   OSErrorr   r   _psplatformis_permission_errerrnoENOENT)rG   rp   r8   r   errs        r*   cwdzTestFetchAllProcesses.cwdj  s   #s#####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_percentz  s=    #u%%%%%C3r,   c                 4    t          |t                    sJ d S rn   )r   boolr   s      r*   
is_runningz TestFetchAllProcesses.is_running~  s    #t$$$$$$$r,   c                     t          |t                    sJ |g k    sJ t          t          t          j                                        }|D ]}t          |t
                    sJ ||v sJ  d S rn   )r   ro   r   r   r   r   )rG   rp   r8   cpusr   s        r*   cpu_affinityz"TestFetchAllProcesses.cpu_affinity  s    #t$$$$$byyyyE&*,,--.. 	 	Aa%%%%%99999	 	r,   c                     t          |t          t          d           f          sJ |Rt          j                            |          s
J |            t          j                            |          sJ |            d S d S rn   )r   r%   typerx   ry   rz   r~   r   s      r*   terminalzTestFetchAllProcesses.terminal  sy    #T$ZZ011111?7==%%**s***7>>#&&+++++ ?++r,   c                 x   |D ]5}t          |j        t                    sJ t          |j        t                    sJ t          |j        t                    sJ |j        D ]}t          ||          }|dk    rX|                    d          r.t          r|dk    r<t          j        
                    |j                  sJ |j                    p|dk    r|sJ t          |                      |dk    r!t          s|sJ t          |                      t          |t                    sJ |dk    sJ א7d S )Nry   )[zanon_inode:pvclockaddrpermsr   )r   r   r%   r   ry   r   r`   
startswithr   rx   rz   r&   r   r   )rG   rp   r8   ntfnameri   s         r*   memory_mapsz!TestFetchAllProcesses.memory_maps  sd    	& 	&Bbgs+++++bh,,,,,bgs+++++ & &E**F??''(<== !  !u	11 7==11::27:::: f__ --$u++----g%%" 2$11d5kk111%eS11111 A:::::%&		& 	&r,   c                 D    t          |t                    sJ |dk    sJ d S 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n J |            d S d t          t                    D             }||v sJ t          |t
          j                  sJ d S )Ni   c                 b    g | ],}|                     d           t          t          |          -S )_PRIORITY_CLASS)rw   r`   r   )rQ   xs     r*   rR   z.TestFetchAllProcesses.nice.<locals>.<listcomp>  sE       ::/00""  r,   )r   r   r   dirr   enumIntEnum)rG   rp   r8   
prioritiess       r*   nicezTestFetchAllProcesses.nice  s    #s##### 		1##########S##### V  J
 *$$$$c4<0000000r,   c                 p    t          |          sJ |D ]!}t          |t                    sJ |dk    sJ "d S r   r   r   s       r*   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  sT    S!!!!! 	 	EeS)))))A:::::	 	r,   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||||||r,   c                     t          |t                    sJ |                                D ]3\  }}t          |t                    sJ t          |t                    sJ 4d S rn   )r   dictr_   r%   )rG   rp   r8   kvs        r*   environzTestFetchAllProcesses.environ  sl    #t$$$$$IIKK 	& 	&DAqa%%%%%a%%%%%%	& 	&r,   N))__name__
__module____qualname____doc__rH   rM   rW   rl   rr   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  rP   r,   r*   r>   r>   `   sL        
/ / /  	 	 	/ / /6) ) )
" " "&    
" " "@ @ @          
* * *" " "" " ""  7 7 7  ( ( (6 6 6	5 	5 	5& & & 3 3 34  . . .0 0 0 $ $ $% % %  , , ,& & &2  1 1 1    & & & & &r,   r>   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 r@   r   rA   rF   s    r*   rH   zTestPidsRange.setUp  s    %     r,   c                 .    t          j        d           d S rJ   r!  rF   s    r*   rM   zTestPidsRange.tearDown  s    $r,   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                 6   	 t          d|  d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/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   >.#...55  > > ! / /??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_existsr2   r   rU   r	   r   raisesr#   r/   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)rG   r+  r0  r   s       r*   test_itzTestPidsRange.test_it  s    	> 	> 	>	 	 	: D>> 	 	C c**  #&&  c


              	 	s   AA	!A	N)r  r  r  r  rH   rM   r2  rP   r,   r*   r  r    sK          ! ! !     4 4 4 4 4r,   r  )"r  r  r   rC   rx   r   r   rc   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  rP   r,   r*   <module>r4     s^          				                                                                    # # # # # # ( ( ( ( ( ( , , , , , , ' ' ' ' ' ' 0 0 0 0 0 0 ' ' ' ' ' ' & & & & & & 2 2 2 2 2 2 * * * * * *      
 @j.@-@. . .bi& i& i& i& i&N i& i& i&XK K K K KN K K K K Kr,   