£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    L_i                 @   sf  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ dd	l	mZ dd
l	mZ ddl	mZ ddl	mZ ddl	mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ 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	Z	G d$d% d%e'Z-G d&d' d'e'Z.G d(d) d)e'Z/G d*d+ d+e'Z0G d,d- d-e'Z1d.d/ Z2e)G d0d1 d1e'Z3e4d2krbdd3l5m6Z6 e6e7 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)APPVEYOR)check_connection_ntuple)
CI_TESTING)create_sockets)enum)GITHUB_ACTIONS)HAS_CPU_FREQ)HAS_NET_IO_COUNTERS)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)is_namedtuple)kernel_version)process_namespace)PsutilTestCase)PYPY)	serialrun)SKIP_SYSCONS)unittest)VALID_PROC_STATUSESc               @   sD   e Zd Zdd Zdd Zdd Zdd Zee	o2e
d	d
d ZdS )TestAvailConstantsAPIsc             C   s   |  ttdtptpt d S )NPROCFS_PATH)assertEqualhasattrpsutilr   r   r   )self r)   N/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_contracts.pytest_PROCFS_PATHB   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(   aer)   r)   r*   test_win_priorityF   s    z(TestAvailConstantsAPIs.test_win_priorityc             C   sJ   | 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)   r*   test_linux_ioprio_linuxO   s
    z.TestAvailConstantsAPIs.test_linux_ioprio_linuxc             C   sJ   | 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_VERYLOW)r%   r&   r'   r   )r(   r,   r)   r)   r*   test_linux_ioprio_windowsV   s
    z0TestAvailConstantsAPIs.test_linux_ioprio_windowsz%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pRt |ttdtpft |ttdtpzt |ttdtpt |ttdtpt |ttd	tpt |ttd
tpt |ttdtpt |ttdt trt dkr|ttdt t dkr0|ttdt t dkrL|ttdt t dkrh|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)r4   r5      ZRLIMIT_NICEZRLIMIT_RTPRIO)r4   r5      ZRLIMIT_RTTIMEZRLIMIT_SIGPENDINGZRLIMIT_SWAPZRLIMIT_SBSIZEZRLIMIT_NPTS)r%   r&   r'   r   r   r
   r   )r(   r,   r)   r)   r*   test_rlimit]   s6    z"TestAvailConstantsAPIs.test_rlimitN)__name__
__module____qualname__r+   r-   r.   r3   r!   skipIfr   r   r9   r)   r)   r)   r*   r#   @   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   s   |  ttdt d S )NZwin_service_iter)r%   r&   r'   r   )r(   r)   r)   r*   test_win_service_iter   s    z)TestAvailSystemAPIs.test_win_service_iterc             C   s   |  ttdt d S )NZwin_service_get)r%   r&   r'   r   )r(   r)   r)   r*   test_win_service_get   s    z(TestAvailSystemAPIs.test_win_service_getc             C   s"   |  ttdtptptpt d S )Ncpu_freq)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   s   |  ttdt d S )Nsensors_fans)r%   r&   r'   r   )r(   r)   r)   r*   test_sensors_fans   s    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;   r<   r?   r@   rB   rD   rF   rG   r)   r)   r)   r*   r>      s   r>   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   s   |  ttjdt d S )Nuids)r%   r&   r'   rJ   r
   )r(   r)   r)   r*   	test_uids   s    zTestAvailProcessAPIs.test_uidsc             C   s   |  ttjdt d S )NrL   )r%   r&   r'   rJ   r
   )r(   r)   r)   r*   	test_gids   s    zTestAvailProcessAPIs.test_gidsc             C   s   |  ttjdt d S )Nterminal)r%   r&   r'   rJ   r
   )r(   r)   r)   r*   test_terminal   s    z"TestAvailProcessAPIs.test_terminalc             C   s   |  ttjdtpt d S )Nionice)r%   r&   r'   rJ   r   r   )r(   r)   r)   r*   test_ionice   s    z TestAvailProcessAPIs.test_ionicez%unsupported on GITHUB_ACTIONS + LINUXc             C   s   |  ttjdtpt d S )Nrlimit)r%   r&   r'   rJ   r   r   )r(   r)   r)   r*   r9      s    z TestAvailProcessAPIs.test_rlimitc             C   s(   t tjd}| |tstrdnd d S )Nio_countersFT)r&   r'   rJ   r%   r   r   )r(   hasitr)   r)   r*   test_io_counters   s    z%TestAvailProcessAPIs.test_io_countersc             C   s   |  ttjdt d S )Nnum_fds)r%   r&   r'   rJ   r
   )r(   r)   r)   r*   test_num_fds   s    z!TestAvailProcessAPIs.test_num_fdsc             C   s   |  ttjdt d S )Nnum_handles)r%   r&   r'   rJ   r   )r(   r)   r)   r*   test_num_handles   s    z%TestAvailProcessAPIs.test_num_handlesc             C   s    |  ttjdtptpt d S )Ncpu_affinity)r%   r&   r'   rJ   r   r   r   )r(   r)   r)   r*   test_cpu_affinity   s    z&TestAvailProcessAPIs.test_cpu_affinityc             C   s    |  ttjdtptpt d S )Ncpu_num)r%   r&   r'   rJ   r   r   r   )r(   r)   r)   r*   test_cpu_num   s    z!TestAvailProcessAPIs.test_cpu_numc             C   s0   t tjd}| |ts"ts"ts"tr&dnd d S )Nmemory_mapsFT)r&   r'   rJ   r%   r   r   r   r   )r(   rU   r)   r)   r*   test_memory_maps   s    z%TestAvailProcessAPIs.test_memory_mapsN)r:   r;   r<   rK   rM   rN   rP   rR   r!   r=   r   r   r9   rV   rX   rZ   r\   r^   r`   r)   r)   r)   r*   rH      s   
rH   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 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'   rJ   proc)clsr)   r)   r*   
setUpClass   s    zTestSystemAPITypes.setUpClassTc             C   s:   t |stx(|D ] }| || |r| |d qW d S )Nr   )r   AssertionErrorassertIsInstanceassertGreaterEqual)r(   nttype_Zgezeronr)   r)   r*   assert_ntuple_of_nums   s
    
z(TestSystemAPITypes.assert_ntuple_of_numsc             C   s2   |  t  xtjddD ]}|  | qW d S )NT)Zpercpu)rk   r'   	cpu_times)r(   rh   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㈵>)rf   r'   cpu_percentfloat)r(   r)   r)   r*   test_cpu_percent   s    z#TestSystemAPITypes.test_cpu_percentc             C   s(   |  tjd d |  tjdd d S )N)rn   g-C6?)rk   r'   Zcpu_times_percent)r(   r)   r)   r*   test_cpu_times_percent   s    z)TestSystemAPITypes.test_cpu_times_percentc             C   s   |  t t d S )N)rf   r'   	cpu_countint)r(   r)   r)   r*   test_cpu_count   s    z!TestSystemAPITypes.test_cpu_countznot supportedc             C   s2   t  d kr| d| jt  tttfd d S )Nzcpu_freq() returns None)ri   )r'   rA   ZskipTestrk   rp   rt   r   )r(   r)   r)   r*   rB      s    
z TestSystemAPITypes.test_cpu_freqc             C   s@   x:t jdd D ]&\}}| |t | j|ttfd qW d S )NT)Zperdisk)ri   )r'   Zdisk_io_countersitemsrf   strrk   rt   r   )r(   kvr)   r)   r*   test_disk_io_counters   s    z(TestSystemAPITypes.test_disk_io_countersc             C   sj   xdt  D ]X}| |jt | |jt | |jt | |jt | |jt	 | |j
t	 q
W d S )N)r'   Zdisk_partitionsrf   devicerw   
mountpointfstypeoptsmaxfilert   maxpath)r(   Zdiskr)   r)   r*   test_disk_partitions   s    z'TestSystemAPITypes.test_disk_partitionszrequires rootc          	   C   sR   t  B td}| t|tt| x|D ]}t|s0tq0W W d Q R X d S )Nall)r   r'   Znet_connectionsr%   lensetr   re   )r(   retconnr)   r)   r*   test_net_connections  s
    

z'TestSystemAPITypes.test_net_connectionsc             C   s   xt   D ]\}}| |t xr|D ]j}td k	rJtsJ| |jtj n| |jt	 | |j
t | |jttd f | |jttd f q(W qW d S )N)r'   Znet_if_addrsrv   rf   rw   r   r   familyIntEnumrt   addressnetmasktype	broadcast)r(   ifnameaddrsaddrr)   r)   r*   test_net_if_addrs  s    
z$TestSystemAPITypes.test_net_if_addrsc             C   s|   xvt   D ]f\}}| |t | |jt td k	rJ| |jtj	 n| |jt
 | |jt
 | |jt
 qW d S )N)r'   Znet_if_statsrv   rf   rw   isupboolr   duplexr   rt   speedmtu)r(   r   infor)   r)   r*   test_net_if_stats  s    z$TestSystemAPITypes.test_net_if_statsc             C   s.   x(t jdd D ]\}}| |t qW d S )NT)Zpernic)r'   Znet_io_countersrv   rf   rw   )r(   r   _r)   r)   r*   test_net_io_counters$  s    z'TestSystemAPITypes.test_net_io_countersc          	   C   s^   xXt   D ]H\}}| |t x2|D ]*}| |jt | |jttt	d f q(W qW d S )N)
r'   rE   rv   rf   rw   labelcurrentrp   rt   r   )r(   nameunitsunitr)   r)   r*   rF   *  s
    
z$TestSystemAPITypes.test_sensors_fansc          	   C   s   xt   D ]x\}}| |t xb|D ]Z}| |jt | |jttt	d f | |j
ttt	d f | |jttt	d f q(W qW d S )N)r'   rC   rv   rf   rw   r   r   rp   rt   r   highcritical)r(   r   r   r   r)   r)   r*   rD   3  s    
z,TestSystemAPITypes.test_sensors_temperaturesc             C   s   |  t t d S )N)rf   r'   Z	boot_timerp   )r(   r)   r)   r*   test_boot_time>  s    z!TestSystemAPITypes.test_boot_timec             C   sf   x`t  D ]T}| |jt | |jttd f | |jttd f | |jt	td f q
W d S )N)
r'   Zusersrf   r   rw   rO   r   hostpidrt   )r(   userr)   r)   r*   
test_usersB  s
    zTestSystemAPITypes.test_usersN)r:   r;   r<   __doc__classmethodrd   rp   rk   rm   rq   rr   ru   r!   r=   r   rB   rz   r   r    r   r   r   r   r   r   rF   r   rD   r   r   r)   r)   r)   r*   ra      s$   
	ra   c               @   s"   e Zd Zee ddd ZdS )TestProcessWaitTypez	not POSIXc             C   sX   t |  j}|  | }| |tj  t	d k	rH| 
|t	j n| 
|t d S )N)r'   rJ   Zspawn_testprocr   	terminatewaitr%   signalSIGTERMr   rf   r   rt   )r(   pcoder)   r)   r*   test_negative_signalM  s    z(TestProcessWaitType.test_negative_signalN)r:   r;   r<   r!   r=   r
   r   r)   r)   r)   r*   r   K  s   r   c                s   t  fdd  fdd}ytddg}W n tjk
rZ   i S X |d |d  dji}t}x`|j|jdd	D ]L\}}y| ||< W q tj	k
r } z | wW d d }~X Y qX qW |  |S )
Nc                s|    | j   | j| t| tjrP| jd k	rf| jd  | j| nt| tjrf	| t
|  | jsxtd S )Nr   )r%   r   r   
isinstancer'   ZombieProcessppidrg   NoSuchProcessZassertProcessGonerw   msgre   )excrb   r   r   )r   tcaser)   r*   check_exceptiona  s    

z"proc_info.<locals>.check_exceptionc           
      sN   dkrJy d W n2 tjk
rH }  z |  W d d } ~ X Y nX d S )Nr   )r   r'   Error)r   )r   r   r   r   rb   r)   r*   do_waitm  s
    zproc_info.<locals>.do_waitr   r   r   F)clear_cache)
r   r'   rJ   Zas_dictr   r   r   itergettersr   )r   r   dr   nsfunZfun_namer   r)   )r   r   r   r   rb   r   r*   	proc_info^  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  | _d S )N)multiprocessingZPoolpool)r(   r)   r)   r*   setUp  s    zTestFetchAllProcesses.setUpc             C   s   | j   | j   d S )N)r   r   join)r(   r)   r)   r*   tearDown  s    
zTestFetchAllProcesses.tearDownc             C   s   ddl m} | j|t S )Nr   )r   )Zpsutil.tests.test_contractsr   r   Zimap_unorderedr'   Zpids)r(   r   r)   r)   r*   iter_proc_info  s    z$TestFetchAllProcesses.iter_proc_infoc             C   s   g }x|   D ]}x| D ]\}}t| |}y||| W nt tk
r   d}|d||d t|f 7 }|d7 }|dt  7 }ddd | D }|d7 }|	| Y qX |d	d
g d di fkr|st|qW qW |r| 
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   g         )r   rv   getattrre   repr	traceback
format_excr   
splitlinesappendZfail)r(   Zfailuresr   r   valuemethsr)   r)   r*   test_all  s&    
zTestFetchAllProcesses.test_allc             C   s*   |  |t x|D ]}|  |t qW d S )N)rf   listrw   )r(   r   r   partr)   r)   r*   cmdline  s    
zTestFetchAllProcesses.cmdlinec             C   s   |  |ttd f |s&| |d ntr8|ds8d S tj|sLt	|t
rtj|rttdrttdryt|tjst	W n& t	k
r   tj|rts Y nX d S )Nr   z.exeaccessX_OK)rf   rw   r   r%   r   endswithospathisabsre   r
   isfiler&   r   r   existsr   )r(   r   r   r)   r)   r*   exe  s    zTestFetchAllProcesses.exec             C   s   |  |t | |d d S )Nr   )rf   rt   rg   )r(   r   r   r)   r)   r*   r     s    zTestFetchAllProcesses.pidc             C   s    |  |ttf | |d d S )Nr   )rf   rt   r   rg   )r(   r   r   r)   r)   r*   r     s    zTestFetchAllProcesses.ppidc             C   s4   |  |t tr$|s$|d dkr$d S ts0|s0td S )Nstatusstopped)rf   rw   r   r   re   )r(   r   r   r)   r)   r*   r     s
    zTestFetchAllProcesses.namec             C   s^   |  |t y| |d W n* tk
rF   tr@|d tjkr@n Y nX tdt	| d S )Nr   r   z%Y %m %d %H:%M:%S)
rf   rp   rg   re   r   r'   STATUS_ZOMBIEtimestrftime	localtime)r(   r   r   r)   r)   r*   create_time  s    z!TestFetchAllProcesses.create_timec             C   s6   t |stx$|D ]}| |t | |d qW d S )Nr   )r   re   rf   rt   rg   )r(   r   r   uidr)   r)   r*   rL     s    
zTestFetchAllProcesses.uidsc             C   s>   t |stx,|D ]$}| |t tsts| |d qW d S )Nr   )r   re   rf   rt   r   r   rg   )r(   r   r   gidr)   r)   r*   gids  s
    
zTestFetchAllProcesses.gidsc             C   s   |  |t |std S )N)rf   rw   re   )r(   r   r   r)   r)   r*   username  s    zTestFetchAllProcesses.usernamec             C   s0   |  |t |st| |d | |t d S )N?)rf   rw   re   ZassertNotEqualassertInr"   )r(   r   r   r)   r)   r*   r     s    zTestFetchAllProcesses.statusc             C   sB   t |stx0|D ](}| |ttf |dkr| |d qW d S )Nr   )r   re   rf   rt   r   rg   )r(   r   r   fieldr)   r)   r*   rT     s
    
z!TestFetchAllProcesses.io_countersc             C   sz   t r>| |jt | |jt | |jd | |jd n8tjtjtj	tj
g}| |t | |d | || d S )Nr   )r   rf   ioclassrt   r   rg   r'   r2   r1   r0   r/   r   )r(   r   r   choicesr)   r)   r*   rQ     s    zTestFetchAllProcesses.ionicec             C   s4   |  |t tr$|s$|d dkr$d S | |d d S )Nr   r      )rf   rt   r   rg   )r(   r   r   r)   r)   r*   num_threads  s    z!TestFetchAllProcesses.num_threadsc             C   sr   |  |t x`|D ]X}t|s"t| |jd | |jd | |jd x|D ]}|  |tt	f qRW qW d S )Nr   )
rf   r   r   re   rg   id	user_timesystem_timert   rp   )r(   r   r   tr   r)   r)   r*   threads"  s    

zTestFetchAllProcesses.threadsc             C   s6   t |stx$|D ]}| |t | |d qW d S )Nr   )r   re   rf   rp   rg   )r(   r   r   rj   r)   r)   r*   rl   ,  s    
zTestFetchAllProcesses.cpu_timesc             C   s.   |  |t d|  kr dks*n t|d S )Ng        g      Y@)rf   rp   re   )r(   r   r   r)   r)   r*   ro   3  s    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   )
rf   rt   r   rg   r'   rs   r%   r   r   r   )r(   r   r   r)   r)   r*   r]   7  s    zTestFetchAllProcesses.cpu_numc             C   s~   t |stx(|D ] }| |ttf | |d qW trz| |j|j | |j	|j
 | |j|j | |j|j d S )Nr   )r   re   rf   rt   r   rg   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_info@  s    
z!TestFetchAllProcesses.memory_infoc             C   s   t |stt j}xd|jD ]Z}t||}| |tt	f | j
|d||fd tstrb|dkrbq| j|||||fd qW tr| 
|j|j d S )Nr   )r   )Zvmsdata)r   re   r'   Zvirtual_memorytotal_fieldsr   rf   rt   r   rg   r   r	   ZassertLessEqualZpssZuss)r(   r   r   r   r   r   r)   r)   r*   memory_full_infoK  s    

z&TestFetchAllProcesses.memory_full_infoc          	   C   s  |  |t x|D ]}|  |jt |  |jt trF| |jd nftr|  |j	t |  |j
t |  |jt | |j	d | |j
d | |jd ntr|jsqtj|jst|yt|j}W n tk
r   Y qX t|jst|qW d S )Nr   r   )rwazr+za+)rf   r   fdrt   r   rw   r   r%   r   positionmodeflagsrg   r   ZassertGreaterr   r   r   re   statr   S_ISREGst_mode)r(   r   r   fstr)   r)   r*   
open_files[  s*    

z TestFetchAllProcesses.open_filesc             C   s   |  |t | |d d S )Nr   )rf   rt   rg   )r(   r   r   r)   r)   r*   rW   t  s    zTestFetchAllProcesses.num_fdsc          	   C   sP   t  @ | t|tt| x |D ]}t|s6tt| q&W W d Q R X d S )N)r   r%   r   r   r   re   r   )r(   r   r   r   r)   r)   r*   connectionsx  s
    
z!TestFetchAllProcesses.connectionsc          
   C   s   |r|  |t tj|s$t|yt|}W nD tk
rv } z&trX|j	t
jjkrXn|j	t	jkrf W d d }~X Y nX t|jstd S )N)rf   rw   r   r   r   re   r  OSErrorr   errnor'   Z_psplatformZACCESS_DENIED_SETENOENTS_ISDIRr
  )r(   r   r   r  errr)   r)   r*   cwd  s    
zTestFetchAllProcesses.cwdc             C   s.   |  |t d|  kr dks*n t|d S )Nr   d   )rf   rp   re   )r(   r   r   r)   r)   r*   memory_percent  s    z$TestFetchAllProcesses.memory_percentc             C   s   |  |t d S )N)rf   r   )r(   r   r   r)   r)   r*   
is_running  s    z TestFetchAllProcesses.is_runningc             C   sV   |  |t |g kst|ttt }x$|D ]}|  |t | || q2W d S )N)rf   r   re   r   r'   rs   rt   r   )r(   r   r   Zcpusrj   r)   r)   r*   r[     s    
z"TestFetchAllProcesses.cpu_affinityc             C   sH   |  |ttd f |d k	rDtj|s0t|tj|sDt|d S )N)rf   rw   r   r   r   r   re   r   )r(   r   r   r)   r)   r*   rO     s    zTestFetchAllProcesses.terminalc             C   s   x|D ]}|  |jt |  |jt |  |jt x|jD ]}t||}|dkrv|dstj	|jst
|jq<|dkr|st
t|q<|dkrts|st
t|q<|  |ttf | |d q<W qW d S )Nr   [r   permsr   )rf   r   rw   r  r   r   r   
startswithr   r   re   r   r   rt   r   rg   )r(   r   r   rh   fnamer   r)   r)   r*   r_     s     


z!TestFetchAllProcesses.memory_mapsc             C   s   |  |t | |d d S )Nr   )rf   rt   rg   )r(   r   r   r)   r)   r*   rY     s    z!TestFetchAllProcesses.num_handlesc             C   sx   |  |t tr0d|  kr$dkstn t|nDdd ttD }| || tjdkrh|  |t	j
 n|  |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>)      )rf   rt   r
   re   dirr'   r   sysversion_infor   r   )r(   r   r   Z
prioritiesr)   r)   r*   nice  s     
zTestFetchAllProcesses.nicec             C   s:   t |stx(|D ] }| |ttf | |d qW d S )Nr   )r   re   rf   rt   r   rg   )r(   r   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 )Nr4   r   r   r   )rf   tupler%   r   rg   )r(   r   r   r)   r)   r*   rS     s    zTestFetchAllProcesses.rlimitc             C   s>   |  |t x,| D ] \}}|  |t |  |t qW d S )N)rf   dictrv   rw   )r(   r   r   rx   ry   r)   r)   r*   rI     s    zTestFetchAllProcesses.environN))r:   r;   r<   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r   rT   rQ   r   r   rl   ro   r]   r   r   r  rW   r  r  r  r  r[   rO   r_   rY   r$  r%  rS   rI   r)   r)   r)   r*   r     sL   	
	r   __main__)run_from_name)8r   r  r   r   r   r  r"  r   r   r'   r   r   r   r   r   r   r   r	   r
   r   r   Zpsutil._compatr   r   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r>   rH   ra   r   r   r   r:   Zpsutil.tests.runnerr)  __file__r)   r)   r)   r*   <module>
   sn   
?5+  V
