o
    hel                     @   sz  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
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% d%e'Z/G d&d' d'e'Z0G d(d) d)e'Z1G d*d+ d+e'Z2G d,d- d-e'Z3d.d/ Z4e.G d0d1 d1e'Z5e6d2kr;dd3l7m8Z8 e8e9 dS dS )4zContracts 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)unicode)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)	serialrunc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zee	oe
d	d
d ZdS )TestAvailConstantsAPIsc                 C   s   |  ttdtptpt d S )NZPROCFS_PATH)assertEqualhasattrpsutilr   r   r   self r)   r/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHD   s   
z'TestAvailConstantsAPIs.test_PROCFS_PATHc                 C   sj   | 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 )NZABOVE_NORMAL_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASSr$   r%   r&   r   r(   Zaer)   r)   r*   test_win_priorityH   s   z(TestAvailConstantsAPIs.test_win_priorityc                 C   J   | j }|ttdt |ttdt |ttdt |ttdt d S )NZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLEr$   r%   r&   r   r-   r)   r)   r*   test_linux_ioprio_linuxQ   
   z.TestAvailConstantsAPIs.test_linux_ioprio_linuxc                 C   r/   )NIOPRIO_HIGHIOPRIO_NORMAL
IOPRIO_LOWIOPRIO_VERYLOWr,   r-   r)   r)   r*   test_linux_ioprio_windowsX   r2   z0TestAvailConstantsAPIs.test_linux_ioprio_windows%unsupported on GITHUB_ACTIONS + LINUXc                 C   s  | 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p3t |ttdtp=t |ttdtpGt |ttdtpQt |ttd	tp[t |ttd
tpet |ttdtpot |ttdt trt 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 )NZRLIM_INFINITYZ	RLIMIT_ASZRLIMIT_COREZ
RLIMIT_CPUZRLIMIT_DATAZRLIMIT_FSIZEZRLIMIT_MEMLOCKZRLIMIT_NOFILEZRLIMIT_NPROCZ
RLIMIT_RSSZRLIMIT_STACKZRLIMIT_LOCKS)         ZRLIMIT_MSGQUEUE)r9   r:      ZRLIMIT_NICEZRLIMIT_RTPRIO)r9   r:      ZRLIMIT_RTTIMEZRLIMIT_SIGPENDINGZRLIMIT_SWAPZRLIMIT_SBSIZEZRLIMIT_NPTS)r$   r%   r&   r   r   r
   r    r-   r)   r)   r*   test_rlimit_   s6   




z"TestAvailConstantsAPIs.test_rlimitN)__name__
__module____qualname__r+   r.   r1   r7   unittestskipIfr   r   r>   r)   r)   r)   r*   r#   B   s    	
r#   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestAvailSystemAPIsc                 C      |  ttdt d S )NZwin_service_iterr,   r'   r)   r)   r*   test_win_service_iter      z)TestAvailSystemAPIs.test_win_service_iterc                 C   rE   )NZwin_service_getr,   r'   r)   r)   r*   test_win_service_get   rG   z(TestAvailSystemAPIs.test_win_service_getc                 C   s&   |  ttdtptptptpt d S )Ncpu_freq)r$   r%   r&   r   r   r   r   r   r'   r)   r)   r*   test_cpu_freq   s   z!TestAvailSystemAPIs.test_cpu_freqc                 C   s   |  ttdtp	t d S )Nsensors_temperatures)r$   r%   r&   r   r   r'   r)   r)   r*   test_sensors_temperatures   s   z-TestAvailSystemAPIs.test_sensors_temperaturesc                 C   rE   )Nsensors_fansr0   r'   r)   r)   r*   test_sensors_fans   rG   z%TestAvailSystemAPIs.test_sensors_fansc                 C   s"   |  ttdtptptpt d S )NZsensors_battery)r$   r%   r&   r   r   r   r   r'   r)   r)   r*   test_battery   s   z TestAvailSystemAPIs.test_batteryN)	r?   r@   rA   rF   rH   rJ   rL   rN   rO   r)   r)   r)   r*   rD      s    rD   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	e
oeddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestAvailProcessAPIsc                 C   s4   |  ttjdtpt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'   r)   r)   r*   test_environ   s   z!TestAvailProcessAPIs.test_environc                 C      |  ttjdt d S Nuidsr$   r%   r&   rR   r
   r'   r)   r)   r*   	test_uids      zTestAvailProcessAPIs.test_uidsc                 C   rT   rU   rW   r'   r)   r)   r*   	test_gids   rY   zTestAvailProcessAPIs.test_gidsc                 C   rT   )NterminalrW   r'   r)   r)   r*   test_terminal   rY   z"TestAvailProcessAPIs.test_terminalc                 C      |  ttjdtp
t d S )Nionice)r$   r%   r&   rR   r   r   r'   r)   r)   r*   test_ionice   s   z TestAvailProcessAPIs.test_ionicer8   c                 C   r]   )Nrlimit)r$   r%   r&   rR   r   r   r'   r)   r)   r*   r>      s   z TestAvailProcessAPIs.test_rlimitc                 C   s"   t tjd}| |tpt  d S )Nio_counters)r%   r&   rR   r$   r   r   r(   Zhasitr)   r)   r*   test_io_counters   s   z%TestAvailProcessAPIs.test_io_countersc                 C   rT   )Nnum_fdsrW   r'   r)   r)   r*   test_num_fds   rY   z!TestAvailProcessAPIs.test_num_fdsc                 C   rT   )Nnum_handles)r$   r%   r&   rR   r   r'   r)   r)   r*   test_num_handles   rY   z%TestAvailProcessAPIs.test_num_handlesc                 C       |  ttjdtptpt d S )Ncpu_affinity)r$   r%   r&   rR   r   r   r   r'   r)   r)   r*   test_cpu_affinity      
z&TestAvailProcessAPIs.test_cpu_affinityc                 C   rh   )Ncpu_num)r$   r%   r&   rR   r   r   r   r'   r)   r)   r*   test_cpu_num   rk   z!TestAvailProcessAPIs.test_cpu_numc                 C   s6   t tjd}| |tstststrd d S d d S )Nmemory_mapsFT)r%   r&   rR   r$   r   r   r   r   rb   r)   r)   r*   test_memory_maps   s   z%TestAvailProcessAPIs.test_memory_mapsN)r?   r@   rA   rS   rX   rZ   r\   r_   rB   rC   r   r   r>   rc   re   rg   rj   rm   ro   r)   r)   r)   r*   rP      s     

rP   c                   @   s   e Zd ZdZedd ZedfddZdd Zd	d
 Z	dd Z
dd Zeeo,e dkdee ddd Zdd Zdd Zeeddd Zdd Zdd Zee ddd  Zee dd!d" Zee dd#d$ Zd%d& Zd'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                 C   s   t  | _d S N)r&   rR   proc)clsr)   r)   r*   
setUpClass   s   zTestSystemAPITypes.setUpClassTc                 C   s6   t |sJ |D ]}| || |r| |d qd S Nr   )r   assertIsInstanceassertGreaterEqual)r(   nttype_Zgezeronr)   r)   r*   assert_ntuple_of_nums   s   z(TestSystemAPITypes.assert_ntuple_of_numsc                 C   s.   |  t  tjddD ]}|  | qd S )NT)Zpercpu)r{   r&   	cpu_times)r(   rx   r)   r)   r*   test_cpu_times   s   z!TestSystemAPITypes.test_cpu_timesc                 C   s,   |  tjd dt |  tjddt d S )Nintervalgh㈵>)rv   r&   cpu_percentfloatr'   r)   r)   r*   test_cpu_percent   s   z#TestSystemAPITypes.test_cpu_percentc                 C   s(   |  tjd d |  tjdd d S )Nr~   g-C6?)r{   r&   Zcpu_times_percentr'   r)   r)   r*   test_cpu_times_percent   s   z)TestSystemAPITypes.test_cpu_times_percentc                 C      |  t t d S rq   )rv   r&   	cpu_countintr'   r)   r)   r*   test_cpu_count   s   z!TestSystemAPITypes.test_cpu_countarm64zskipped due to #1892znot supportedc                 C   s2   t  d u r| d| jt  tttfd d S )Nzcpu_freq() returns Nonery   )r&   rI   ZskipTestr{   r   r   r   r'   r)   r)   r*   rJ      s   
z TestSystemAPITypes.test_cpu_freqc                 C   s<   t jdd D ]\}}| |t | j|ttfd qd S )NT)Zperdiskr   )r&   Zdisk_io_countersitemsrv   strr{   r   r   )r(   kvr)   r)   r*   test_disk_io_counters   s   z(TestSystemAPITypes.test_disk_io_countersc                 C   sv   t  D ]4}| |jt | |jt | |jt | |jt | |jt	t
d f | |jt	t
d f qd S rq   )r&   Zdisk_partitionsrv   Zdevicer   Z
mountpointZfstypeoptsZmaxfiler   typeZmaxpath)r(   Zdiskr)   r)   r*   test_disk_partitions   s   z'TestSystemAPITypes.test_disk_partitionszrequires rootc                 C   sd   t  % td}| t|tt| |D ]}t|sJ qW d    d S 1 s+w   Y  d S )Nall)r   r&   Znet_connectionsr$   lensetr   )r(   retconnr)   r)   r*   test_net_connections  s   
"z'TestSystemAPITypes.test_net_connectionsc                 C   s   t   D ]B\}}| |t |D ]5}td ur#ts#| |jtj n| |jt	 | |j
t | |jttd f | |jttd f qqd S rq   )r&   Znet_if_addrsr   rv   r   r   r   familyIntEnumr   addressnetmaskr   	broadcast)r(   ifnameaddrsaddrr)   r)   r*   test_net_if_addrs  s   z$TestSystemAPITypes.test_net_if_addrsc                 C   sx   t   D ]3\}}| |t | |jt td ur$| |jtj	 n| |jt
 | |jt
 | |jt
 qd S rq   )r&   Znet_if_statsr   rv   r   Zisupboolr   Zduplexr   r   speedZmtu)r(   r   infor)   r)   r*   test_net_if_stats  s   z$TestSystemAPITypes.test_net_if_statsc                 C   s*   t jdd D ]
\}}| |t qd S )NT)Zpernic)r&   Znet_io_countersr   rv   r   )r(   r   _r)   r)   r*   test_net_io_counters)  s   z'TestSystemAPITypes.test_net_io_countersc              	   C   sV   t   D ]"\}}| |t |D ]}| |jt | |jttt	d f qqd S rq   )
r&   rM   r   rv   r   labelcurrentr   r   r   r(   nameZunitsunitr)   r)   r*   rN   /  s   z$TestSystemAPITypes.test_sensors_fansc              	   C   s   t   D ]:\}}| |t |D ]-}| |jt | |jttt	d f | |j
ttt	d f | |jttt	d f qqd S rq   )r&   rK   r   rv   r   r   r   r   r   r   highcriticalr   r)   r)   r*   rL   8  s   z,TestSystemAPITypes.test_sensors_temperaturesc                 C   r   rq   )rv   r&   Z	boot_timer   r'   r)   r)   r*   test_boot_timeC  s   z!TestSystemAPITypes.test_boot_timec                 C   sb   t  D ]*}| |jt | |jttd f | |jttd f | |jt	td f qd S rq   )
r&   Zusersrv   r   r   r[   r   hostpidr   )r(   userr)   r)   r*   
test_usersG  s   zTestSystemAPITypes.test_usersN)!r?   r@   rA   __doc__classmethodrt   r   r{   r}   r   r   r   rB   rC   r   platformmachiner   rJ   r   r   r   r   r   r   r   r   r   rN   r   rL   r   r   r)   r)   r)   r*   rp      s8    







rp   c                   @   s"   e Zd Zee ddd ZdS )TestProcessWaitTypez	not POSIXc                 C   sZ   t |  j}|  | }| |tj  t	d ur%| 
|t	j d S | 
|t d S rq   )r&   rR   Zspawn_testprocr   	terminatewaitr$   signalSIGTERMr   rv   r   r   )r(   pcoder)   r)   r*   test_negative_signalR  s   z(TestProcessWaitType.test_negative_signalN)r?   r@   rA   rB   rC   r
   r   r)   r)   r)   r*   r   P  s    r   c                    s   t  fdd  fdd}ztddg}W n tjy.   i  Y S w |d |d dji}t}|j|jdd	D ]%\}}z| ||< W qI tj	yn } z | W Y d }~qId }~ww |  |S )
Nc                    sr    | j   | j| t| tjr(| jd ur'| jd  | j| nt| tjr3	| t
|  d S ru   )r$   r   r   
isinstancer&   ZZombieProcessppidrw   NoSuchProcessZassertProcessGoner   )excrr   r   r   )r   tcaser)   r*   check_exceptionf  s   

z"proc_info.<locals>.check_exceptionc               
      sT   dkr(z d W d S  tjy' }  z |  W Y d } ~ d S d } ~ ww d S ru   )r   r&   Error)r   )r   r   r   r   rr   r)   r*   do_waitq  s   zproc_info.<locals>.do_waitr   r   r   F)clear_cache)
r   r&   rR   as_dictr   r   r!   iterZgettersr   )r   r   dr   nsZfunZfun_namer   r)   )r   r   r   r   rr   r   r*   	proc_infoc  s,   

r   c                   @   s8  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLS )M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                 C   s   t s	t | _d S d S rq   )r   multiprocessingZPoolpoolr'   r)   r)   r*   setUp  s   zTestFetchAllProcesses.setUpc                 C   s    t s| j  | j  d S d S rq   )r   r   r   joinr'   r)   r)   r*   tearDown  s   
zTestFetchAllProcesses.tearDownc                 C   sF   ddl m} ts| j|t S g }t D ]	}||| q|S )Nr   )r   )Zpsutil.tests.test_contractsr   r   r   Zimap_unorderedr&   Zpidsappend)r(   r   Zlsr   r)   r)   r*   iter_proc_info  s   z$TestFetchAllProcesses.iter_proc_infoc                 C   s   g }|   D ]_}| D ]X\}}t| |}z||| W n7 tyS   d}|d||d t|f 7 }|d7 }|dt  7 }ddd | D d }|	| Y qw |d	d
g d di fvrd|sdJ |qq|rp| 
d|d S )NzH
======================================================================
zFAIL: test_%s pid=%s, ret=%s
r   zF----------------------------------------------------------------------z
%s
c                 s   s    | ]}d | V  qdS )z    Nr)   ).0ir)   r)   r*   	<genexpr>  s    z1TestFetchAllProcesses.test_all.<locals>.<genexpr>r            )r   r   getattrAssertionErrorrepr	traceback
format_excr   
splitlinesr   Zfail)r(   Zfailuresr   r   valuemethsr)   r)   r*   test_all  s.   
	zTestFetchAllProcesses.test_allc                 C   s&   |  |t |D ]}|  |t qd S rq   )rv   listr   )r(   r   r   partr)   r)   r*   cmdline  s   zTestFetchAllProcesses.cmdlinec                 C   s   |  |ttf | | | |rZtr|dsd S tj	|s%J |t
r\tj|r^ttdr`ttdrbzt|tjsAJ W d S  tyY   tj|rStsV Y d S Y d S w d S d S d S d S d S )Nz.exeaccessX_OK)rv   r   r   r$   stripr   endswithospathisabsr
   isfiler%   r   r   r   existsr   r(   r   r   r)   r)   r*   exe  s$   zTestFetchAllProcesses.exec                 C      |  |t | |d d S ru   rv   r   rw   r   r)   r)   r*   r        zTestFetchAllProcesses.pidc                 C   s    |  |ttf | |d d S ru   )rv   r   r   rw   r   r)   r)   r*   r     s   zTestFetchAllProcesses.ppidc                 C   s<   |  |ttf tr|s|d dkrd S ts|sJ d S d S )Nstatusstopped)rv   r   r   r   r   r   r)   r)   r*   r     s   zTestFetchAllProcesses.namec                 C   s\   |  |t z| |d W n ty"   tr|d tjkrn Y nw tdt	| d S )Nr   r   z%Y %m %d %H:%M:%S)
rv   r   rw   r   r   r&   ZSTATUS_ZOMBIEtimestrftime	localtimer   r)   r)   r*   create_time  s   
z!TestFetchAllProcesses.create_timec                 C   2   t |sJ |D ]}| |t | |d qd S ru   )r   rv   r   rw   )r(   r   r   uidr)   r)   r*   rV     
   zTestFetchAllProcesses.uidsc                 C   s:   t |sJ |D ]}| |t tsts| |d qd S ru   )r   rv   r   r   r   rw   )r(   r   r   gidr)   r)   r*   gids  s   zTestFetchAllProcesses.gidsc                 C   s,   |  |t | | | | sJ d S rq   )rv   r   r$   r   r   r)   r)   r*   username  s   zTestFetchAllProcesses.usernamec                 C   s0   |  |t |s
J | |d | |t d S )N?)rv   r   ZassertNotEqualassertInr   r   r)   r)   r*   r     s   zTestFetchAllProcesses.statusc                 C   s>   t |sJ |D ]}| |ttf |dkr| |d qd S )Nr   r   rv   r   r   rw   )r(   r   r   fieldr)   r)   r*   ra     s   z!TestFetchAllProcesses.io_countersc                 C   s|   t r | |jt | |jt | |jd | |jd d S tjtjtj	tj
g}| |t | |d | || d S ru   )r   rv   Zioclassr   r   rw   r&   r6   r5   r4   r3   r  )r(   r   r   choicesr)   r)   r*   r^     s   zTestFetchAllProcesses.ionicec                 C   s4   |  |t tr|s|d dkrd S | |d d S )Nr   r      )rv   r   r   rw   r   r)   r)   r*   num_threads*  s   z!TestFetchAllProcesses.num_threadsc                 C   sj   |  |t |D ]*}t|sJ | |jd | |jd | |jd |D ]
}|  |ttf q'qd S ru   )	rv   r   r   rw   idZ	user_timeZsystem_timer   r   )r(   r   r   tr  r)   r)   r*   threads0  s   zTestFetchAllProcesses.threadsc                 C   r   ru   )r   rv   r   rw   )r(   r   r   rz   r)   r)   r*   r|   :  r   zTestFetchAllProcesses.cpu_timesc                 C   4   |  |t d|  krdksJ | J |d S )Nr   g      Y@rv   r   r   r)   r)   r*   r   A     (z!TestFetchAllProcesses.cpu_percentc                 C   s\   |  |t tr|dkrd S | |d t dkr | |d | |tt	t  d S )Nr  r   r  )
rv   r   r   rw   r&   r   r$   r  r   r   r   r)   r)   r*   rl   E  s   zTestFetchAllProcesses.cpu_numc                 C   s~   t |sJ |D ]}| |ttf | |d qtr=| |j|j | |j|j	 | |j
|j | |j|j d S d S ru   )r   rv   r   r   rw   r   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefiler(   r   r   r   r)   r)   r*   memory_infoN  s   z!TestFetchAllProcesses.memory_infoc                 C   s   t |sJ t j}|jD ]-}t||}| |ttf | j	|d||fd t
s/tr0|dv r0q| j|||||fd qt
rH| 	|j|j d S d S )Nr   )msg)Zvmsdata)r   r&   Zvirtual_memorytotal_fieldsr   rv   r   r   rw   r   r	   ZassertLessEqualZpssZuss)r(   r   r   r  r   r   r)   r)   r*   memory_full_infoY  s   


z&TestFetchAllProcesses.memory_full_infoc              	   C   s  |  |t |D ]~}|  |jt |  |jt | |j |j tr,| |jd n3t	rY|  |j
t |  |jt |  |jt | |j
d | |jd | |jd ntr_|js_qtj|jsjJ |zt|j}W n	 ty{   Y qw t|jsJ |qd S )Nr  r   )rwazr+za+)rv   r   fdr   r   r   r$   r   r   r   positionmodeflagsrw   r  ZassertGreaterr   r   r   statr   S_ISREGst_mode)r(   r   r   fstr)   r)   r*   
open_filesi  s0   
z TestFetchAllProcesses.open_filesc                 C   r   ru   r   r   r)   r)   r*   rd     r   zTestFetchAllProcesses.num_fdsc                 C   sb   t  $ | t|tt| |D ]}t|sJ t| qW d    d S 1 s*w   Y  d S rq   )r   r$   r   r   r   r   )r(   r   r   r   r)   r)   r*   connections  s   
"z!TestFetchAllProcesses.connectionsc              
   C   s   |  |ttf | | | |rWtj|sJ |zt|}W n+ t	yN } zt
r5|jtjjv r5n|jtjkr< W Y d }~d S W Y d }~d S d }~ww t|jsYJ d S d S rq   )rv   r   r   r$   r   r   r   r   r  OSErrorr   errnor&   Z_psplatformZACCESS_DENIED_SETENOENTS_ISDIRr   )r(   r   r   r"  errr)   r)   r*   cwd  s(   zTestFetchAllProcesses.cwdc                 C   r  )Nr   d   r  r   r)   r)   r*   memory_percent  r  z$TestFetchAllProcesses.memory_percentc                 C   s   |  |t d S rq   )rv   r   r   r)   r)   r*   
is_running  s   z TestFetchAllProcesses.is_runningc                 C   sR   |  |t |g ksJ |ttt }|D ]}|  |t | || qd S rq   )rv   r   r   r&   r   r   r  )r(   r   r   Zcpusrz   r)   r)   r*   ri     s   z"TestFetchAllProcesses.cpu_affinityc                 C   sL   |  |ttd f |d ur"tj|sJ |tj|s$J |d S d S rq   )rv   r   r   r   r   r   r   r   r)   r)   r*   r[     s   zTestFetchAllProcesses.terminalc                 C   s   |D ]b}|  |jt |  |jt |  |jt |jD ]G}t||}|dkr9|ds8tj	|js8J |jq|dkrF|sEJ t
|q|dkrUtsT|sTJ t
|q|  |ttf | |d qqd S )Nr   )[zanon_inode:r   permsr   )rv   r   r   r/  r   r  r   
startswithr   r   r   r   r   r   rw   )r(   r   r   rx   fnamer   r)   r)   r*   rn     s(   


z!TestFetchAllProcesses.memory_mapsc                 C   r   ru   r   r   r)   r)   r*   rf     r   z!TestFetchAllProcesses.num_handlesc                 C   s   |  |t trd|  krdksJ | J |d S dd ttD }| || tjdkr9|  |tj	 d S |  |t d S )Ni   c                 S   s    g | ]}| d rtt|qS )Z_PRIORITY_CLASS)r   r   r&   )r   xr)   r)   r*   
<listcomp>  s    z.TestFetchAllProcesses.nice.<locals>.<listcomp>)      )
rv   r   r
   dirr&   r  sysversion_infor   r   )r(   r   r   Z
prioritiesr)   r)   r*   nice  s   (
zTestFetchAllProcesses.nicec                 C   s6   t |sJ |D ]}| |ttf | |d qd S ru   r  r  r)   r)   r*   num_ctx_switches  s
   z&TestFetchAllProcesses.num_ctx_switchesc                 C   s@   |  |t | t|d | |d d | |d d d S )Nr9   r   r  r  )rv   tupler$   r   rw   r   r)   r)   r*   r`     s   zTestFetchAllProcesses.rlimitc                 C   s:   |  |t | D ]\}}|  |t |  |t q
d S rq   )rv   dictr   r   )r(   r   r   r   r   r)   r)   r*   rQ     s
   zTestFetchAllProcesses.environN))r?   r@   rA   r   r   r   r   r   r   r   r   r   r   r   rV   r   r  r   ra   r^   r	  r  r|   r   rl   r  r  r#  rd   r$  r*  r,  r-  ri   r[   rn   rf   r:  r;  r`   rQ   r)   r)   r)   r*   r     sN    	
	r   __main__)run_from_name):r   r&  r   r   r   r   r  r8  r   r   rB   r&   r   r   r   r   r   r   r   r	   r
   r   r   Zpsutil._compatr   r   r   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   rD   rP   rp   r   r   r   r?   Zpsutil.tests.runnerr?  __file__r)   r)   r)   r*   <module>   sx   
?5 *  
b