
    ɧdi                        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	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$ 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,  G d$ d%e$          Z- G d& d'e$          Z. G d( d)e$          Z/ G d* d+e$          Z0 G d, d-e$          Z1d. Z2e+ G d/ d0e$                      Z3e4d1k    rdd2l5m6Z6  e6e7           dS dS )3zContracts tests. These tests mainly check API sanity in terms of
returned types and APIs availability.
Some of these are duplicates of tests test_system.py and test_process.py
    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)FileNotFoundError)long)range)APPVEYOR)
CI_TESTING)GITHUB_ACTIONS)HAS_CPU_FREQ)HAS_NET_IO_COUNTERS)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)PYPY)SKIP_SYSCONS)VALID_PROC_STATUSES)PsutilTestCase)check_connection_ntuple)create_sockets)enum)is_namedtuple)kernel_version)process_namespace)	serialrun)unittestc                   ^    e Zd Zd Zd Zd Zd Z ej        e	oe
d          d             ZdS )TestAvailConstantsAPIsc                 ~    |                      t          t          d          t          pt          pt
                     d S )NPROCFS_PATH)assertEqualhasattrpsutilr   r   r   selfs    ;lib/python3.11/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHz'TestAvailConstantsAPIs.test_PROCFS_PATHB   s=    77.%.3	0 	0 	0 	0 	0    c                    | j         } |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                     d S )NABOVE_NORMAL_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSIDLE_PRIORITY_CLASSNORMAL_PRIORITY_CLASSREALTIME_PRIORITY_CLASSr(   r)   r*   r   r,   aes     r-   test_win_priorityz(TestAvailConstantsAPIs.test_win_priorityF   s    
768997CCC
768997CCC
760117;;;
760117;;;
76233W===
76455w?????r/   c                 4   | j         } |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                     d S )NIOPRIO_CLASS_NONEIOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLEr(   r)   r*   r   r8   s     r-   test_linux_ioprio_linuxz.TestAvailConstantsAPIs.test_linux_ioprio_linuxO   s    
76.//777
76,--u555
76,--u555
76.//77777r/   c                 4   | j         } |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                     d S )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr7   r8   s     r-   test_linux_ioprio_windowsz0TestAvailConstantsAPIs.test_linux_ioprio_windowsV   s    
76=))7333
76?++W555
76<(('222
76+,,g66666r/   %unsupported on GITHUB_ACTIONS + LINUXc                    | j         } |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d          t          pt                      |t          t          d	          t          pt                      |t          t          d
          t          pt                      |t          t          d          t          pt                      |t          t          d          t                     t
          rt                      dk    r$ |t          t          d          t                     t                      dk    r$ |t          t          d          t                     t                      dk    r$ |t          t          d          t                     t                      dk    r$ |t          t          d          t                     t                      dk    r$ |t          t          d          t                      |t          t          d          t                      |t          t          d          t                      |t          t          d          t                     d S )NRLIM_INFINITY	RLIMIT_ASRLIMIT_CORE
RLIMIT_CPURLIMIT_DATARLIMIT_FSIZERLIMIT_MEMLOCKRLIMIT_NOFILERLIMIT_NPROC
RLIMIT_RSSRLIMIT_STACKRLIMIT_LOCKS)         RLIMIT_MSGQUEUE)rV   rW      RLIMIT_NICERLIMIT_RTPRIO)rV   rW      RLIMIT_RTTIMERLIMIT_SIGPENDINGRLIMIT_SWAPRLIMIT_SBSIZERLIMIT_NPTS)r(   r)   r*   r   r   r   r    r8   s     r-   test_rlimitz"TestAvailConstantsAPIs.test_rlimit]   s    
76?++U-=g>>>
76;'')9':::
76=))5+;G<<<
76<((%*:7;;;
76=))5+;G<<<
76>**E,<W===
76+,,e.>w???
76?++U-=g>>>
76>**E,<W===
76<((%*:7;;;
76>**E,<W===
76>**E222 
	@9, >76#455u===:- :76=115999:- <76?33U;;;:- <76?33U;;;9, @76#677???
76=))7333
76?++W555
76=))733333r/   N)__name__
__module____qualname__r.   r:   rA   rG   r#   skipIfr   r   rc    r/   r-   r%   r%   @   s        0 0 0@ @ @8 8 87 7 7 X_^-<> >4 4> >4 4 4r/   r%   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestAvailSystemAPIsc                 b    |                      t          t          d          t                     d S )Nwin_service_iterr7   r+   s    r-   test_win_service_iterz)TestAvailSystemAPIs.test_win_service_iter   s)    );<<gFFFFFr/   c                 b    |                      t          t          d          t                     d S )Nwin_service_getr7   r+   s    r-   test_win_service_getz(TestAvailSystemAPIs.test_win_service_get   s)    ):;;WEEEEEr/   c                     |                      t          t          d          t          pt          pt
          pt                     d S )Ncpu_freq)r(   r)   r*   r   r   r   r   r+   s    r-   test_cpu_freqz!TestAvailSystemAPIs.test_cpu_freq   sB    44=%=7=g	? 	? 	? 	? 	?r/   c                 p    |                      t          t          d          t          pt                     d S )Nsensors_temperatures)r(   r)   r*   r   r   r+   s    r-   test_sensors_temperaturesz-TestAvailSystemAPIs.test_sensors_temperatures   s>    F233U5Eg	G 	G 	G 	G 	Gr/   c                 b    |                      t          t          d          t                     d S )Nsensors_fansr@   r+   s    r-   test_sensors_fansz%TestAvailSystemAPIs.test_sensors_fans   s(    88%@@@@@r/   c                     |                      t          t          d          t          pt          pt
          pt                     d S )Nsensors_battery)r(   r)   r*   r   r   r   r   r+   s    r-   test_batteryz TestAvailSystemAPIs.test_battery   sC    ):;;='=W=	? 	? 	? 	? 	?r/   N)	rd   re   rf   rm   rp   rs   rv   ry   r|   rh   r/   r-   rj   rj      sz        G G GF F F? ? ?G G GA A A? ? ? ? ?r/   rj   c                       e Zd Zd Zd Zd Zd Zd Z ej	        e
oed          d             Zd Zd	 Zd
 Zd Zd Zd ZdS )TestAvailProcessAPIsc                     |                      t          t          j        d          t          p0t
          p)t          p"t          pt          pt          pt          pt                     d S )Nenviron)r(   r)   r*   Processr   r   r   r   r   r   r	   r   r+   s    r-   test_environz!TestAvailProcessAPIs.test_environ   si    ;; 6% 67 6c 6U 6 6$+6/5	7 	7 	7 	7 	7r/   c                 l    |                      t          t          j        d          t                     d S Nuidsr(   r)   r*   r   r   r+   s    r-   	test_uidszTestAvailProcessAPIs.test_uids   *    88%@@@@@r/   c                 l    |                      t          t          j        d          t                     d S r   r   r+   s    r-   	test_gidszTestAvailProcessAPIs.test_gids   r   r/   c                 l    |                      t          t          j        d          t                     d S )Nterminalr   r+   s    r-   test_terminalz"TestAvailProcessAPIs.test_terminal   s*    <<eDDDDDr/   c                 z    |                      t          t          j        d          t          pt
                     d S )Nionice)r(   r)   r*   r   r   r   r+   s    r-   test_ionicez TestAvailProcessAPIs.test_ionice   s/    ::E<LWMMMMMr/   rH   c                 z    |                      t          t          j        d          t          pt
                     d S )Nrlimit)r(   r)   r*   r   r   r   r+   s    r-   rc   z TestAvailProcessAPIs.test_rlimit   s1     	::E<LWMMMMMr/   c                     t          t          j        d          }|                     |t          st
          rdnd           d S )Nio_countersFT)r)   r*   r   r(   r   r   r,   hasits     r-   test_io_countersz%TestAvailProcessAPIs.test_io_counters   s=    66 A% ATBBBBBr/   c                 l    |                      t          t          j        d          t                     d S )Nnum_fdsr   r+   s    r-   test_num_fdsz!TestAvailProcessAPIs.test_num_fds   s*    ;;UCCCCCr/   c                 l    |                      t          t          j        d          t                     d S )Nnum_handles)r(   r)   r*   r   r   r+   s    r-   test_num_handlesz%TestAvailProcessAPIs.test_num_handles   s*    ??IIIIIr/   c                     |                      t          t          j        d          t          pt
          pt                     d S )Ncpu_affinity)r(   r)   r*   r   r   r   r   r+   s    r-   test_cpu_affinityz&TestAvailProcessAPIs.test_cpu_affinity   s?    @@4'4W	6 	6 	6 	6 	6r/   c                     |                      t          t          j        d          t          pt
          pt                     d S )Ncpu_num)r(   r)   r*   r   r   r   r   r+   s    r-   test_cpu_numz!TestAvailProcessAPIs.test_cpu_num   s?    ;;2'2U	4 	4 	4 	4 	4r/   c                     t          t          j        d          }|                     |t          st
          st          st          rdnd           d S )Nmemory_mapsFT)r)   r*   r   r(   r	   r   r   r   r   s     r-   test_memory_mapsz%TestAvailProcessAPIs.test_memory_maps   sW    66GGvGGG554	I 	I 	I 	I 	Ir/   N)rd   re   rf   r   r   r   r   r   r#   rg   r   r   rc   r   r   r   r   r   r   rh   r/   r-   r~   r~      s       7 7 7
A A AA A AE E EN N N X_^-<> >N N> >NC C CD D DJ J J6 6 64 4 4I I I I Ir/   r~   c                   |   e Zd ZdZed             ZedfdZd Zd Z	d Z
d Z ej        e d	          d
             Zd Zd Z ej        ed          d             Zd Zd Z ej        e d	          d             Z ej        e d	          d             Z ej        e d	          d             Zd Zd ZdS )TestSystemAPITypeszCheck the return types of system related APIs.
    Mainly we want to test we never return unicode on Python 2, see:
    https://github.com/giampaolo/psutil/issues/1039
    c                 6    t          j                    | _        d S N)r*   r   proc)clss    r-   
setUpClasszTestSystemAPITypes.setUpClass   s    >##r/   Tc                     t          |          sJ |D ]0}|                     ||           |r|                     |d           1d S Nr   )r   assertIsInstanceassertGreaterEqual)r,   nttype_gezerons        r-   assert_ntuple_of_numsz(TestSystemAPITypes.assert_ntuple_of_nums   sd    R      	. 	.A!!!U+++ .''1---	. 	.r/   c                     |                      t          j                               t          j        d          D ]}|                      |           d S )NT)percpu)r   r*   	cpu_times)r,   r   s     r-   test_cpu_timesz!TestSystemAPITypes.test_cpu_times   s]    ""6#3#5#5666"$/// 	+ 	+B&&r****	+ 	+r/   c                     |                      t          j        d           t                     |                      t          j        d          t                     d S )Nintervalgh㈵>)r   r*   cpu_percentfloatr+   s    r-   test_cpu_percentz#TestSystemAPITypes.test_cpu_percent   sP    f0$???GGGf0'BBBEJJJJJr/   c                     |                      t          j        d                      |                      t          j        d                     d S )Nr   g-C6?)r   r*   cpu_times_percentr+   s    r-   test_cpu_times_percentz)TestSystemAPITypes.test_cpu_times_percent   sL    ""6#;T#J#J#JKKK""6#;V#L#L#LMMMMMr/   c                 ^    |                      t          j                    t                     d S r   )r   r*   	cpu_countintr+   s    r-   test_cpu_countz!TestSystemAPITypes.test_cpu_count   s'    f.00#66666r/   znot supportedc                     t          j                    |                     d          |                     t          j                    t          t
          t          f           d S )Nzcpu_freq() returns Noner   )r*   rr   skipTestr   r   r   r   r+   s    r-   rs   z TestSystemAPITypes.test_cpu_freq   sS    ? 	;-- 9:::""6?#4#4UC<N"OOOOOr/   c                     t          j        d                                          D ]C\  }}|                     |t                     |                     |t          t          f           Dd S )NT)perdiskr   )r*   disk_io_countersitemsr   strr   r   r   )r,   kvs      r-   test_disk_io_countersz(TestSystemAPITypes.test_disk_io_counters   so    +D999??AA 	= 	=DAq!!!S)))&&qd&<<<<	= 	=r/   c                    t          j                    D ]}|                     |j        t                     |                     |j        t                     |                     |j        t                     |                     |j        t                     |                     |j        t                     |                     |j
        t                     d S r   )r*   disk_partitionsr   devicer   
mountpointfstypeoptsmaxfiler   maxpath)r,   disks     r-   test_disk_partitionsz'TestSystemAPITypes.test_disk_partitions   s    *,, 	5 	5D!!$+s333!!$/3777!!$+s333!!$)S111!!$,444!!$,4444	5 	5r/   zrequires rootc           	      $   t                      5  t          j        d          }|                     t	          |          t	          t          |                               |D ]}t          |          sJ 	 d d d            d S # 1 swxY w Y   d S )Nall)r   r*   net_connectionsr(   lensetr   )r,   retconns      r-   test_net_connectionsz'TestSystemAPITypes.test_net_connections  s     	+ 	+(//CSXXs3s88}}555 + +$T******+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A(BB	B	c           	      @   t          j                                                    D ]\  }}|                     |t                     |D ]}t
          -t          s&|                     |j        t
          j                   n |                     |j        t                     |                     |j
        t                     |                     |j        t          t          d           f           |                     |j        t          t          d           f           Ռd S r   )r*   net_if_addrsr   r   r   r   r   familyIntEnumr   addressnetmasktype	broadcast)r,   ifnameaddrsaddrs       r-   test_net_if_addrsz$TestSystemAPITypes.test_net_if_addrs  s
   #02288:: 		I 		IMFE!!&#... I I <D <))$+t|DDDD))$+s;;;%%dlC888%%dlS$t**4EFFF%%dnsDJJ6GHHHHI		I 		Ir/   c                    t          j                                                    D ]\  }}|                     |t                     |                     |j        t                     t          &|                     |j        t          j	                   n |                     |j        t                     |                     |j        t                     |                     |j        t                     d S r   )r*   net_if_statsr   r   r   isupboolr   duplexr   r   speedmtu)r,   r   infos      r-   test_net_if_statsz$TestSystemAPITypes.test_net_if_stats  s    "/117799 	1 	1LFD!!&#...!!$)T222 8%%dk4<@@@@%%dk3777!!$*c222!!$(C0000	1 	1r/   c                     t          j        d                                          D ] \  }}|                     |t                     !d S )NT)pernic)r*   net_io_countersr   r   r   )r,   r   _s      r-   test_net_io_countersz'TestSystemAPITypes.test_net_io_counters$  sT      /t<<<BBDD 	/ 	/IFA!!&#....	/ 	/r/   c           
      F   t          j                                                    D ]z\  }}|                     |t                     |D ]W}|                     |j        t                     |                     |j        t          t          t          d           f           X{d S r   )
r*   rx   r   r   r   labelcurrentr   r   r   r,   nameunitsunits       r-   ry   z$TestSystemAPITypes.test_sensors_fans*  s     ".006688 	N 	NKD%!!$,,, N N%%dj#666%%dlUCd4LMMMMN	N 	Nr/   c           
         t          j                                                    D ]\  }}|                     |t                     |D ]}|                     |j        t                     |                     |j        t          t          t          d           f           |                     |j
        t          t          t          d           f           |                     |j        t          t          t          d           f           d S r   )r*   ru   r   r   r   r   r  r   r   r   highcriticalr  s       r-   rv   z,TestSystemAPITypes.test_sensors_temperatures3  s     "688>>@@ 	O 	OKD%!!$,,, O O%%dj#666%%dlUCd4LMMM%%di%d4jj1IJJJ%%dmeS$t**5MNNNN	O	O 	Or/   c                 ^    |                      t          j                    t                     d S r   )r   r*   	boot_timer   r+   s    r-   test_boot_timez!TestSystemAPITypes.test_boot_time>  s'    f.00%88888r/   c                    t          j                    D ]}|                     |j        t                     |                     |j        t          t          d           f           |                     |j        t          t          d           f           |                     |j        t          t          d           f           d S r   )
r*   usersr   r  r   r   r   hostpidr   )r,   users     r-   
test_userszTestSystemAPITypes.test_usersB  s    LNN 	? 	?D!!$)S111!!$-#tDzz1BCCC!!$)c4::->???!!$(S$t**,=>>>>		? 	?r/   N)rd   re   rf   __doc__classmethodr   r   r   r   r   r   r   r#   rg   r   rs   r   r   r   r   r   r   r   r   r   ry   r   rv   r  r  rh   r/   r-   r   r      s        
 $ $ [$ /4D . . . .+ + +
K K KN N N7 7 7 X_%77P P 87P
= = =5 5 5 X_\?33+ + 43+I I I
1 
1 
1 X_,,o>>/ / ?>/
 X_))?;;N N <;N X_11?CCO O DCO9 9 9? ? ? ? ?r/   r   c                   D    e Zd Z ej        e d          d             ZdS )TestProcessWaitTypez	not POSIXc                 v   t          j        |                                 j                  }|                                 |                                }|                     |t          j                    t          "| 
                    |t          j                   d S | 
                    |t                     d S r   )r*   r   spawn_testprocr  	terminatewaitr(   signalSIGTERMr   r   r   r   )r,   pcodes      r-   test_negative_signalz(TestProcessWaitType.test_negative_signalM  s    N4..00455	vvxx/// 	-!!$55555!!$,,,,,r/   N)rd   re   rf   r#   rg   r   r  rh   r/   r-   r  r  K  s>        X_Y,,- - -,- - -r/   r  c                    	
 t                       fd	 
fd}	 t          j                                       ddg          }n# t          j        $ r i cY S w xY w|d         |d         c	
dj        i}t                    }|                    |j        d          D ]=\  }}	  |            ||<   # t          j	        $ r} |	
           Y d }~6d }~ww xY w |             |S )Nc                                         | j                                        | j        |           t          | t          j                  r>| j        6                    | j        d                                | j        |           n/t          | t          j                  r	                    |           t          |            d S r   )r(   r  r  
isinstancer*   ZombieProcessppidr   NoSuchProcessassertProcessGoner   )excr   r  r#  r  tcases       r-   check_exceptionz"proc_info.<locals>.check_exceptiona  s    #'3'''#(D)))c6/00 	*x 2((1555!!#(D111V122 	*##D)))Cr/   c                      dk    rC	                      d           d S # t          j        $ r}  |            Y d } ~ d S d } ~ ww xY wd S r   )r  r*   Error)r&  r(  r  r  r#  r   s    r-   do_waitzproc_info.<locals>.do_waitl  sz    !8 	77		!< 7 7 7T46666666667	7 	7s     AAAr#  r  r  F)clear_cache)
r   r*   r   as_dictr$  r  r!   itergettersr*  )r  r+  dr   nsfunfun_namer&  r(  r  r#  r   r'  s   `       @@@@@r-   	proc_infor4  ^  sp   E	 	 	 	 	 	7 7 7 7 7 7 7 7 7~c""LL&&)**   			 6AfIJD$48D	4	 	 B ??  X	 SUUDNN| 	 	 	OCtT222HHHH	 GIIIKs)   +A A%$A%3CC(C##C(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                 6    t          j                    | _        d S r   )multiprocessingPoolpoolr+   s    r-   setUpzTestFetchAllProcesses.setUp  s    #(**			r/   c                 j    | j                                          | j                                          d S r   )r:  r  joinr+   s    r-   tearDownzTestFetchAllProcesses.tearDown  s.    		r/   c                 f    ddl m} | j                            |t	          j                              S )Nr   )r4  )psutil.tests.test_contractsr4  r:  imap_unorderedr*   pids)r,   r4  s     r-   iter_proc_infoz$TestFetchAllProcesses.iter_proc_info  s4     	:99999y''	6;==AAAr/   c                 `   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	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: test_z pid=r  z, ret=
zF----------------------------------------------------------------------z
%sc              3       K   | ]	}d |z   V  
dS )z    Nrh   ).0is     r-   	<genexpr>z1TestFetchAllProcesses.test_all.<locals>.<genexpr>  s&      !H!HA7a-!H!H!H!H!H!Hr/   )rC  r   getattrAssertionErrorrepr	traceback
format_excr=  
splitlinesappendfail)r,   failuresr   r  valuemethss          r-   test_allzTestFetchAllProcesses.test_all  s   '')) 	, 	,D#zz|| , ,etT**,D%%% QRr2$>> ,$++e+++ & ' ' '.AAd5kkk4;;;;8 8AMA)"6"8"888A		!H!H!H!H!HHHAIAOOA&&&&&'	,   	/))BGGH--...	/ 	/s   A&&BD ?D c                 |    |                      |t                     |D ]}|                      |t                     d S r   )r   listr   )r,   r   r   parts       r-   cmdlinezTestFetchAllProcesses.cmdline  sJ    c4((( 	- 	-D!!$,,,,	- 	-r/   c                    |                      |t          t          d           f           |s|                     |d           d S t          r|                    d          sd S t          j                            |          s
J |            t          rt          j        
                    |          rt          t          d          rxt          t          d          re	 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 )NrF  z.exeaccessX_OK)r   r   r   r(   r   endswithospathisabsr   isfiler)   r^  r_  rM  existsr   r,   r   r   s      r-   exezTestFetchAllProcesses.exe  sq   cCd#4555 	"S"%%%%% s||F33 7==%%**s***  ",, "2x(( "WR-@-@ ""!ybg6666666) " " "7>>#.. "z "!" " " " " """ " " "" " " "s   !D   1D87D8c                 h    |                      |t                     |                     |d           d S r   r   r   r   rf  s      r-   r  zTestFetchAllProcesses.pid  4    c3'''Q'''''r/   c                 v    |                      |t          t          f           |                     |d           d S r   )r   r   r   r   rf  s      r-   r#  zTestFetchAllProcesses.ppid  s8    cC;///Q'''''r/   c                     |                      |t                     t          r|s|d         dk    rd S t          s|sJ d S d S )Nstatusstopped)r   r   r   r   rf  s      r-   r  zTestFetchAllProcesses.name  s\    c3''' 	C 	DNi$? 	F 	JJJ	 	Jr/   c                    |                      |t                     	 |                     |d           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   rm  z%Y %m %d %H:%M:%S)
r   r   r   rM  r	   r*   STATUS_ZOMBIEtimestrftime	localtimerf  s      r-   create_timez!TestFetchAllProcesses.create_time  s    c5)))	##C++++ 	 	 	 4>V-AA  	 	)4>#+>+>?????s   4 )A A c                     t          |          sJ |D ]3}|                     |t                     |                     |d           4d S r   )r   r   r   r   )r,   r   r   uids       r-   r   zTestFetchAllProcesses.uids  s^    S!!!!! 	, 	,C!!#s+++##C++++	, 	,r/   c                     t          |          sJ |D ]A}|                     |t                     t          st          s|                     |d           Bd S r   )r   r   r   r   r   r   )r,   r   r   gids       r-   gidszTestFetchAllProcesses.gids  sm    S!!!!!  	0 	0C!!#s+++ 0 0''Q///	0 	0r/   c                 D    |                      |t                     |sJ d S r   )r   r   rf  s      r-   usernamezTestFetchAllProcesses.username  s%    c3'''




r/   c                     |                      |t                     |sJ |                     |d           |                     |t                     d S )N?)r   r   assertNotEqualassertInr   rf  s      r-   rm  zTestFetchAllProcesses.status  sR    c3'''


C%%%c./////r/   c                     t          |          sJ |D ]@}|                     |t          t          f           |dk    r|                     |d           Ad S )Nr   r   r   r   r   r   )r,   r   r   fields       r-   r   z!TestFetchAllProcesses.io_counters  sl    S!!!!! 	2 	2E!!%#t555{ 2''q111	2 	2r/   c                    t           rx|                     |j        t                     |                     |j        t                     |                     |j        d           |                     |j        d           d S t          j        t          j        t          j	        t          j
        g}|                     |t                     |                     |d           |                     ||           d S r   )r   r   ioclassr   rU  r   r*   rF   rE   rD   rC   r  )r,   r   r   choicess       r-   r   zTestFetchAllProcesses.ionice  s     	(!!#+s333!!#)S111##CK333##CIq11111 %!$"	$G
 !!#s+++##C+++MM#w'''''r/   c                     |                      |t                     t          r|s|d         dk    rd S |                     |d           d S )Nrm  rn     )r   r   r   r   rf  s      r-   num_threadsz!TestFetchAllProcesses.num_threads  sX    c3''' 	C 	DNi$? 	FQ'''''r/   c                 X   |                      |t                     |D ]}t          |          sJ |                     |j        d           |                     |j        d           |                     |j        d           |D ]$}|                      |t          t          f           %d S r   )	r   rZ  r   r   id	user_timesystem_timer   r   )r,   r   r   tr  s        r-   threadszTestFetchAllProcesses.threads!  s    c4((( 	; 	;A #######AD!,,,##AK333##AM1555 ; ;%%ec5\::::;	; 	;r/   c                     t          |          sJ |D ]3}|                     |t                     |                     |d           4d S r   )r   r   r   r   )r,   r   r   r   s       r-   r   zTestFetchAllProcesses.cpu_times+  s^    S!!!!! 	* 	*A!!!U+++##Aq))))	* 	*r/   c                 n    |                      |t                     d|cxk    rdk    sn J |            d S )NrE  g      Y@r   r   rf  s      r-   r   z!TestFetchAllProcesses.cpu_percent2  sK    c5)))c''''U'''''C'''''r/   c           	      b   |                      |t                     t          r|dk    rd S |                     |d           t	          j                    dk    r|                     |d           |                     |t          t          t	          j                                                   d S )Nr  r   r  )
r   r   r   r   r*   r   r(   r  rZ  r   rf  s      r-   r   zTestFetchAllProcesses.cpu_num6  s    c3''' 	sby 	FQ'''" 	%S!$$$c4f&6&8&8 9 9::;;;;;r/   c                    t          |          sJ |D ]:}|                     |t          t          f           |                     |d           ;t
          r|                     |j        |j                   |                     |j        |j	                   |                     |j
        |j                   |                     |j        |j                   d S d S r   )r   r   r   r   r   r   	peak_wsetwsetpeak_paged_pool
paged_poolpeak_nonpaged_poolnonpaged_poolpeak_pagefilepagefiler,   r   r   rU  s       r-   memory_infoz!TestFetchAllProcesses.memory_info?  s    S!!!!! 	. 	.E!!%#t555##E1---- 	E##CM38<<<##C$7HHH##C$:C<MNNN##C$5s|DDDDD		E 	Er/   c                    t          |          sJ t          j                    j        }|j        D ]|}t          ||          }|                     |t          t          f           | 	                    |d||f           t          st          r|dv ra|                     |||||f           }t          r"| 	                    |j        |j                   d S d S )Nr   )msg)vmsdata)r   r*   virtual_memorytotal_fieldsrL  r   r   r   r   r   r
   assertLessEqualpssuss)r,   r   r   r  r  rU  s         r-   memory_full_infoz&TestFetchAllProcesses.memory_full_infoJ  s    S!!!!!%''-K 	I 	IDC&&E!!%#t555##E14-#@@@   7    D%3G HHHH 	6##CGSW55555	6 	6r/   c                    |                      |t                     |D ]}|                      |j        t                     |                      |j        t
                     t          r|                     |j        d           nt          r|                      |j	        t                     |                      |j
        t
                     |                      |j        t                     |                     |j	        d           |                     |j
        d           |                     |j        d           nt          r	|j        s/t           j                            |j                  s
J |            	 t!          j        |j                  }t%          j        |j                  s
J |            # t*          $ r Y w xY wd S )Nr  r   )rwazr+za+)r   rZ  fdr   rb  r   r   r(   r   positionmodeflagsr   r  assertGreaterr   ra  rc  statS_ISREGst_moder   )r,   r   r   fsts        r-   
open_filesz TestFetchAllProcesses.open_filesZ  s   c4((( 	3 	3A!!!$,,,!!!&#...   r**** 	%%aj#666%%afc222%%ags333''
A666af&ABBB""17A.... QV 7==((++!+++3WQV__ |BJ//222222 %   %	3 	3s   <F::
GGc                 h    |                      |t                     |                     |d           d S r   ri  rf  s      r-   r   zTestFetchAllProcesses.num_fdss  rj  r/   c           	         t                      5  |                     t          |          t          t          |                               |D ]"}t	          |          sJ t          |           #	 d d d            d S # 1 swxY w Y   d S r   )r   r(   r   r   r   r   )r,   r   r   r   s       r-   connectionsz!TestFetchAllProcesses.connectionsw  s     	. 	.SXXs3s88}}555 . .$T*****'----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   A#B  BBc                    |r|                      |t                     t          j                            |          s
J |            	 t          j        |          }t          j        |j                  sJ d S # t          $ rG}t          r|j
        t          j        j        v rn|j
        t          j        k    r Y d }~d S Y d }~d S d }~ww xY wd S r   )r   r   ra  rb  rc  r  S_ISDIRr  OSErrorr   errnor*   _psplatformACCESS_DENIED_SETENOENT)r,   r   r   r  errs        r-   cwdzTestFetchAllProcesses.cwd~  s    	0!!#s+++7==%%**s***
0WS\\ |BJ///////     sy*< = Y%,.       DDDDD	0 	0s   A9 9
C
6CC
c                 n    |                      |t                     d|cxk    rdk    sn J |            d S )Nr   d   r  rf  s      r-   memory_percentz$TestFetchAllProcesses.memory_percent  sK    c5)))C####3##########r/   c                 <    |                      |t                     d S r   )r   r   rf  s      r-   
is_runningz TestFetchAllProcesses.is_running  s    c4(((((r/   c                 "   |                      |t                     |g k    s
J |            t          t          t          j                                        }|D ]3}|                      |t
                     |                     ||           4d S r   )r   rZ  r   r*   r   r   r  )r,   r   r   cpusr   s        r-   r   z"TestFetchAllProcesses.cpu_affinity  s    c4(((by#E&*,,--.. 	# 	#A!!!S)))MM!T""""	# 	#r/   c                    |                      |t          t          d           f           |Rt          j                            |          s
J |            t          j                            |          sJ |            d S d S r   )r   r   r   ra  rb  rc  re  rf  s      r-   r   zTestFetchAllProcesses.terminal  s    cCd#4555 	,7==%%**s***7>>#&&+++++	, 	,++r/   c                    |D ]K}|                      |j        t                     |                      |j        t                     |                      |j        t                     |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          f           |                     |d           Md S )Nrb  [r   permsr   )r   r   r   r  rb  r  rL  
startswithra  rc  rN  r   r   r   r   )r,   r   r   r   fnamerU  s         r-   r   z!TestFetchAllProcesses.memory_maps  s_    	6 	6B!!"'3///!!"(C000!!"'3/// 6 6E**F? 6 ++C00 ?!w}}RW55>>rw>>> f_ 6 --$u++----g% 6" 2$11d5kk111))%#t===++E155556		6 	6r/   c                 h    |                      |t                     |                     |d           d S r   ri  rf  s      r-   r   z!TestFetchAllProcesses.num_handles  rj  r/   c                    |                      |t                     t          rd|cxk    rdk    sn J |            d S d t          t                    D             }|                     ||           t          j        dk    r"|                      |t          j	                   d S |                      |t                     d S )Ni   c                 b    g | ],}|                     d           t          t          |          -S )_PRIORITY_CLASS)r`  rL  r*   )rI  xs     r-   
<listcomp>z.TestFetchAllProcesses.nice.<locals>.<listcomp>  sC     < < <ZZ(9::<'&!,, < < <r/   )      )
r   r   r   dirr*   r  sysversion_infor   r   )r,   r   r   
prioritiess       r-   nicezTestFetchAllProcesses.nice  s    c3''' 		0#(((((((((S(((((< <c&kk < < <JMM#z***&( 0%%c4<88888%%c3/////r/   c                     t          |          sJ |D ]:}|                     |t          t          f           |                     |d           ;d S r   r  r  s       r-   num_ctx_switchesz&TestFetchAllProcesses.num_ctx_switches  sb    S!!!!! 	. 	.E!!%#t555##E1----	. 	.r/   c                     |                      |t                     |                     t          |          d           |                     |d         d           |                     |d         d           d S )NrV   r   r  r  )r   tupler(   r   r   rf  s      r-   r   zTestFetchAllProcesses.rlimit  sn    c5)))S1%%%A+++A+++++r/   c                     |                      |t                     |                                D ];\  }}|                      |t                     |                      |t                     <d S r   )r   dictr   r   )r,   r   r   r   r   s        r-   r   zTestFetchAllProcesses.environ  sl    c4(((IIKK 	* 	*DAq!!!S)))!!!S))))	* 	*r/   N))rd   re   rf   r  r;  r>  rC  rX  r\  rg  r  r#  r  rt  r   ry  r{  rm  r   r   r  r  r   r   r   r  r  r  r   r  r  r  r  r   r   r   r   r  r  r   r   rh   r/   r-   r6  r6    sR        
+ + +  B B B/ / /,- - -
" " "(( ( (( ( (  @ @ @ , , ,0 0 0  0 0 02 2 2( ( ( ( ( (; ; ;* * *( ( (< < <	E 	E 	E6 6 6 3 3 32( ( (. . .0 0 0 $ $ $) ) )# # #, , ,6 6 6,( ( (0 0 0. . ., , ,* * * * *r/   r6  __main__)run_from_name)8r  r  r8  ra  r  r  r  rq  rO  r*   r   r   r   r   r   r   r	   r
   r   r   r   psutil._compatr   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r%   rj   r~   r   r  r4  r6  rd   psutil.tests.runnerr  __file__rh   r/   r-   <module>r     s/   
      				   



                                                                         , , , , , ,                   ! ! ! ! ! ! # # # # # # ' ' ' ' ' ' % % % % % % , , , , , , ) ) ) ) ) ) 1 1 1 1 1 1       % % % % % % , , , , , , ' ' ' ' ' ' 0 0 0 0 0 0 ' ' ' ' ' '       & & & & & & ' ' ' ' ' ' * * * * * * " " " " " " ! ! ! ! ! !<4 <4 <4 <4 <4^ <4 <4 <4~? ? ? ? ?. ? ? ?0-I -I -I -I -I> -I -I -Ij|? |? |? |? |? |? |? |?~- - - - -. - - -&' ' 'T Q* Q* Q* Q* Q*N Q* Q* Q*h
 z 111111M( r/   