<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ2^                 @   s  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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$j(Z)G d"d# d#e$j(Z*G d$d% d%e$j(Z+G d&d' d'e$j(Z,e-d(kre e. dS ))zContracts 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)closing)AIX)BSD)FREEBSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)callable)long)bind_unix_socket)check_connection_ntuple)get_kernel_version)HAS_CONNECTIONS_UNIX)
HAS_RLIMIT)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)is_namedtuple)run_test_module_by_name)safe_rmpath)skip_on_access_denied)TESTFN)unittest)unix_socket_path)VALID_PROC_STATUSES)warnc               @   s   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.S )/TestAvailabilityzQMake sure code reflects what doc promises in terms of APIs
    availability.
    c             C   s$   t p
tp
t}| jttjd| d S )Ncpu_affinity)r   r   r   assertEqualhasattrpsutilProcess)selfhasit r'   &/usr/lib64/python3.6/test_contracts.pytest_cpu_affinity<   s    z"TestAvailability.test_cpu_affinityc             C   s(   | j ttdt | j ttdt d S )NZwin_service_iterZwin_service_get)r!   r"   r#   r   )r%   r'   r'   r(   test_win_service@   s    z!TestAvailability.test_win_servicec             C   s   | j ttdtptpt d S )NZPROCFS_PATH)r!   r"   r#   r   r   r   )r%   r'   r'   r(   test_PROCFS_PATHD   s    z!TestAvailability.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_priorityH   s    z"TestAvailability.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_ioprioQ   s
    z"TestAvailability.test_linux_ioprioc             C   sH  | j }tot dk}|ttjd| |ttd| |ttd| |ttd| |ttd| |ttd	| |ttd
| |ttd| |ttd| |ttd| |ttd| |ttd| |ttd| tot dk}|ttd| |ttd| |ttd| |ttd| |ttd| d S )N      $   rlimitZRLIM_INFINITYZ	RLIMIT_ASZRLIMIT_COREZ
RLIMIT_CPUZRLIMIT_DATAZRLIMIT_FSIZEZRLIMIT_LOCKSZRLIMIT_MEMLOCKRLIMIT_NOFILEZRLIMIT_NPROCZ
RLIMIT_RSSZRLIMIT_STACK   r   ZRLIMIT_MSGQUEUEZRLIMIT_NICEZRLIMIT_RTPRIOZRLIMIT_RTTIMEZRLIMIT_SIGPENDING)r/   r0   r1   )r4   r   )r!   r   r   r"   r#   r$   )r%   r,   r&   r'   r'   r(   test_linux_rlimitX   s*    z"TestAvailability.test_linux_rlimitc             C   s:   t otjjdptjjd}| jttd|p2tp2t d S )Nz/sys/devices/system/cpu/cpufreqz$/sys/devices/system/cpu/cpu0/cpufreqZcpu_freq)	r   ospathexistsr!   r"   r#   r	   r   )r%   linuxr'   r'   r(   test_cpu_freqp   s    zTestAvailability.test_cpu_freqc             C   s   | j ttdt d S )Nsensors_temperatures)r!   r"   r#   r   )r%   r'   r'   r(   test_sensors_temperaturesv   s    z*TestAvailability.test_sensors_temperaturesc             C   s   | j ttdt d S )Nsensors_fans)r!   r"   r#   r   )r%   r'   r'   r(   test_sensors_fansy   s    z"TestAvailability.test_sensors_fansc             C   s"   | j 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TestAvailability.test_batteryc             C   s    | j ttjdtptpt d S )Nenviron)r!   r"   r#   r$   r   r	   r   )r%   r'   r'   r(   test_proc_environ   s    z"TestAvailability.test_proc_environc             C   s   | j ttjdt d S )Nuids)r!   r"   r#   r$   r
   )r%   r'   r'   r(   test_proc_uids   s    zTestAvailability.test_proc_uidsc             C   s   | j ttjdt d S )NrB   )r!   r"   r#   r$   r
   )r%   r'   r'   r(   test_proc_gids   s    zTestAvailability.test_proc_gidsc             C   s   | j ttjdt d S )Nterminal)r!   r"   r#   r$   r
   )r%   r'   r'   r(   test_proc_terminal   s    z#TestAvailability.test_proc_terminalc             C   s   | j ttjdtpt d S )Nionice)r!   r"   r#   r$   r   r   )r%   r'   r'   r(   test_proc_ionice   s    z!TestAvailability.test_proc_ionicec             C   s   | j ttjdt d S )Nr2   )r!   r"   r#   r$   r   )r%   r'   r'   r(   test_proc_rlimit   s    z!TestAvailability.test_proc_rlimitc             C   s(   t tjd}| j|tstrdnd d S )Nio_countersFT)r"   r#   r$   r!   r	   r   )r%   r&   r'   r'   r(   test_proc_io_counters   s    z&TestAvailability.test_proc_io_countersc             C   s   | j ttjdt d S )Nnum_fds)r!   r"   r#   r$   r
   )r%   r'   r'   r(   test_proc_num_fds   s    z"TestAvailability.test_proc_num_fdsc             C   s   | j ttjdt d S )Nnum_handles)r!   r"   r#   r$   r   )r%   r'   r'   r(   test_proc_num_handles   s    z&TestAvailability.test_proc_num_handlesc             C   s    | j ttjdtptpt d S )Nr    )r!   r"   r#   r$   r   r   r   )r%   r'   r'   r(   test_proc_cpu_affinity   s    z'TestAvailability.test_proc_cpu_affinityc             C   s    | j ttjdtptpt d S )Ncpu_num)r!   r"   r#   r$   r   r   r   )r%   r'   r'   r(   test_proc_cpu_num   s    z"TestAvailability.test_proc_cpu_numc             C   s,   t tjd}| j|tststr"dnd d S )Nmemory_mapsFT)r"   r#   r$   r!   r   r   r   )r%   r&   r'   r'   r(   test_proc_memory_maps   s    z&TestAvailability.test_proc_memory_mapsN)__name__
__module____qualname____doc__r)   r*   r+   r-   r.   r5   r:   r<   r>   r?   rA   rC   rD   rF   rH   rI   rK   rM   rO   rP   rR   rT   r'   r'   r'   r(   r   7   s.   	r   c               @   s   e Zd Zdd ZdS )TestDeprecationsc             C   sd   t jdd}tj j  W d Q R X |d }| j|j t | jdt	|j
 | jdt	|j
 d S )NT)recordr   zmemory_info_ex() is deprecatedzuse memory_info() instead)warningscatch_warningsr#   r$   memory_info_exassertIsInstancecategoryFutureWarningassertInstrmessage)r%   Zwswr'   r'   r(   test_memory_info_ex   s    z$TestDeprecations.test_memory_info_exN)rU   rV   rW   re   r'   r'   r'   r(   rY      s   rY   c               @   s   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	e
je de
je deeddd Zdd Zdd Zdd Ze
je ddd Ze
je ddd Zdd ZdS )
TestSystemzCheck 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 j | _d S )N)r#   r$   proc)clsr'   r'   r(   
setUpClass   s    zTestSystem.setUpClassc             C   s   t t d S )N)r   r   )r%   r'   r'   r(   tearDown   s    zTestSystem.tearDownc             C   s>   t j }t|stx$|D ]}| j|t | j|d qW d S )Nr   )r#   	cpu_timesr   AssertionErrorr^   floatassertGreaterEqual)r%   retnr'   r'   r(   test_cpu_times   s
    
zTestSystem.test_cpu_timesc             C   s&   x t jddD ]}| j|t qW d S )NT)Zperdisk)r#   Zdisk_io_countersr^   rb   )r%   kr'   r'   r(   test_io_counters   s    zTestSystem.test_io_countersc             C   sN   xHt j D ]<}| j|jt | j|jt | j|jt | j|jt q
W d S )N)r#   Zdisk_partitionsr^   Zdevicerb   Z
mountpointZfstypeZopts)r%   Zdiskr'   r'   r(   test_disk_partitions   s
    zTestSystem.test_disk_partitionsz
POSIX onlyzcan't list UNIX sockets)Zonly_ifc             C   s^   t  N}tt|6 tjdd}|s*tx|D ]}| j|jt q0W W d Q R X W d Q R X d S )NZunix)Zkind)	r   r   r   r#   Znet_connectionsrl   r^   Zladdrrb   )r%   nameZconsconnr'   r'   r(   test_net_connections   s    
zTestSystem.test_net_connectionsc             C   sr   xlt j j D ]\\}}| j|t xF|D ]>}| j|jt | j|jttd f | j|jttd f q(W qW d S )N)	r#   Znet_if_addrsitemsr^   rb   ZaddressZnetmasktypeZ	broadcast)r%   ifnameZaddrsaddrr'   r'   r(   test_net_if_addrs   s    
zTestSystem.test_net_if_addrsc             C   s*   x$t j j D ]\}}| j|t qW d S )N)r#   Znet_if_statsrx   r^   rb   )r%   rz   _r'   r'   r(   test_net_if_stats   s    zTestSystem.test_net_if_statsc             C   s.   x(t jddj D ]\}}| j|t qW d S )NT)Zpernic)r#   Znet_io_countersrx   r^   rb   )r%   rz   r}   r'   r'   r(   test_net_io_counters   s    zTestSystem.test_net_io_countersznot supportedc             C   sF   x@t j j D ]0\}}| j|t x|D ]}| j|jt q(W qW d S )N)r#   r=   rx   r^   rb   label)r%   ru   unitsunitr'   r'   r(   r>      s    
zTestSystem.test_sensors_fansc             C   sF   x@t j j D ]0\}}| j|t x|D ]}| j|jt q(W qW d S )N)r#   r;   rx   r^   rb   r   )r%   ru   r   r   r'   r'   r(   r<     s    
z$TestSystem.test_sensors_temperaturesc             C   sf   x`t j D ]T}| j|jt | j|jttd f | j|jttd f | j|jt	td f q
W d S )N)
r#   usersr^   ru   rb   rE   ry   hostpidint)r%   userr'   r'   r(   
test_users  s
    zTestSystem.test_usersN)rU   rV   rW   rX   classmethodri   rj   rq   rs   rt   r   ZskipIfr
   r   r   r	   rw   r|   r~   r   r   r>   r   r<   r   r'   r'   r'   r(   rf      s   		rf   c               @   s(  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&dHS )ITestFetchAllProcessesz~Test which iterates over all running processes and performs
    some sanity checks against Process API's returned values.
    c             C   sd   t r`dd l}dd l}|j }|j }tdd |D | _tdd |D | _tdd |D | _d S )Nr   c             S   s   g | ]
}|j qS r'   )Zpw_uid).0xr'   r'   r(   
<listcomp>(  s    z/TestFetchAllProcesses.setUp.<locals>.<listcomp>c             S   s   g | ]
}|j qS r'   )Zpw_name)r   r   r'   r'   r(   r   )  s    c             S   s   g | ]
}|j qS r'   )Zgr_gid)r   r   r'   r'   r(   r   *  s    )	r
   pwdgrpZgetpwallZgetgrallsetall_uidsall_usernamesall_gids)r%   r   r   r   groupsr'   r'   r(   setUp"  s    zTestFetchAllProcesses.setUpc             C   s  d}t dddddddd	d
ddg}tr6t r6|jd g }x2ttjD ]$}|jdrVqF||kr`qF|j| qFW t	 }g }x(tj
 D ]}|j  x|D ]}|}ydf }	i }
t||d }|d k	rt|r|dkrtjf}	n|dkrddi}
||	|
}n|}|d7 }W nL tk
r>   d| jjd |  }t| Y q tjtjfk
r } zJ| j|j|j |jr| j|j|j  t|st|jstW Y d d }~X q tk
rX } zddd  d }|d||f 7 }||kr|dt| 7 }|d7 }|dd 7 }|dtj  7 }djdd |j  D }|d7 }|j| P W Y d d }~X qX |ddg d d i fkr~|s~t|t| |}||| qW W d Q R X qW |r| j!d j| |std S )!Nr   Zsend_signalZsuspendZresumeZ	terminatekillwaitZas_dictparentZchildrenr]   oneshotr2   r}   rS   ZgroupedF   z&%r was skipped because not implementedz.test_
=F   zFAIL: test_%s (proc=%sz	, ret=%s)z)
-z
%sc             s   s   | ]}d| V  qdS )    Nz    r'   )r   ir'   r'   r(   	<genexpr>c  s    z7TestFetchAllProcesses.test_fetch_all.<locals>.<genexpr>g         )"r   r   r   adddirr#   r$   
startswithappendobjectZprocess_iterr   getattrr   r3   NotImplementedError	__class__rU   r   ZNoSuchProcessZAccessDeniedr!   r   ru   rb   rl   msg	Exceptionrepr	traceback
format_excjoin
splitlinesZfail)r%   Zvalid_procsZexcluded_namesZattrsru   defaultZfailurespro   argskwargsattrr   errsmethr'   r'   r(   test_fetch_all,  sx    






z$TestFetchAllProcesses.test_fetch_allc             C   s*   | j |t x|D ]}| j |t qW d S )N)r^   listrb   )r%   ro   rg   partr'   r'   r(   cmdlinet  s    
zTestFetchAllProcesses.cmdlinec             C   st   | j |ttd f |s&| j|d nJtjj|s:t|trptjj	|rpt
tdrpt
tdrptj|tjsptd S )Nr   accessX_OK)r^   rb   ry   r!   r6   r7   isabsrl   r
   isfiler"   r   r   )r%   ro   rg   r'   r'   r(   exey  s    zTestFetchAllProcesses.exec             C   s   | j |t | j|d d S )Nr   )r^   r   rn   )r%   ro   rg   r'   r'   r(   r     s    zTestFetchAllProcesses.pidc             C   s    | j |ttf | j|d d S )Nr   )r^   r   r   rn   )r%   ro   rg   r'   r'   r(   ppid  s    zTestFetchAllProcesses.ppidc             C   s   | j |t ts|std S )N)r^   rb   r   rl   )r%   ro   rg   r'   r'   r(   ru     s    zTestFetchAllProcesses.namec             C   s^   | j |t y| j|d W n* tk
rF   tr@|j tjkr@n Y nX tj	dtj
| d S )Nr   z%Y %m %d %H:%M:%S)r^   rm   rn   rl   r   statusr#   ZSTATUS_ZOMBIEtimeZstrftimeZ	localtime)r%   ro   rg   r'   r'   r(   create_time  s    z!TestFetchAllProcesses.create_timec             C   sD   t |stx2|D ]*}| j|t | j|d | j|| j qW d S )Nr   )r   rl   r^   r   rn   ra   r   )r%   ro   rg   Zuidr'   r'   r(   rB     s
    
zTestFetchAllProcesses.uidsc             C   sP   t |stx>|D ]6}| j|t t rt r| j|d | j|| j qW d S )Nr   )	r   rl   r^   r   r	   r   rn   ra   r   )r%   ro   rg   gidr'   r'   r(   gids  s    
zTestFetchAllProcesses.gidsc             C   s*   | j |t |sttr&| j|| j d S )N)r^   rb   rl   r
   ra   r   )r%   ro   rg   r'   r'   r(   username  s    zTestFetchAllProcesses.usernamec             C   s0   | j |t |st| j|d | j|t d S )N?)r^   rb   rl   ZassertNotEqualra   r   )r%   ro   rg   r'   r'   r(   r     s    zTestFetchAllProcesses.statusc             C   sB   t |stx0|D ](}| j|ttf |dkr| j|d qW d S )Nr   r   )r   rl   r^   r   r   rn   )r%   ro   rg   fieldr'   r'   r(   rJ     s
    
z!TestFetchAllProcesses.io_countersc             C   sh   t r*t|stx|D ]}| j|t qW trL| j|jd | j|jd n| j|d | j	|d d S )Nr   r   r/   )r   r   r/   )
r
   r   rl   r^   r   r   rn   Zioclassvaluera   )r%   ro   rg   r   r'   r'   r(   rG     s    
zTestFetchAllProcesses.ionicec             C   s   | j |t | j|d d S )Nr   )r^   r   rn   )r%   ro   rg   r'   r'   r(   num_threads  s    z!TestFetchAllProcesses.num_threadsc             C   sr   | j |t x`|D ]X}t|s"t| j|jd | j|jd | j|jd x|D ]}| j |tt	f qRW qW d S )Nr   )
r^   r   r   rl   rn   idZ	user_timeZsystem_timer   rm   )r%   ro   rg   tr   r'   r'   r(   threads  s    

zTestFetchAllProcesses.threadsc             C   s6   t |stx$|D ]}| j|t | j|d qW d S )Nr   )r   rl   r^   rm   rn   )r%   ro   rg   rp   r'   r'   r(   rk     s    
zTestFetchAllProcesses.cpu_timesc             C   s0   | j |t d|  kodkn  s,t|d S )Ng        g      Y@)r^   rm   rl   )r%   ro   rg   r'   r'   r(   cpu_percent  s    z!TestFetchAllProcesses.cpu_percentc             C   s\   | j |t tr|dkrd S | j|d tj dkr@| j|d | j|tt	tj  d S )Nr   r   r   )
r^   r   r   rn   r#   	cpu_countr!   ra   r   range)r%   ro   rg   r'   r'   r(   rQ     s    zTestFetchAllProcesses.cpu_numc             C   s   t |stx(|D ] }| j|ttf | j|d qW trt r|jdkrxx|j	D ](}|dkrRt
||}| j|j||d qRW nDtr| j|j|j | j|j|j | j|j|j | j|j|j d S )Nr   vms)r   )r   rl   r^   r   r   rn   r
   r   r   _fieldsr   assertGreaterr   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefile)r%   ro   rg   r   ru   r'   r'   r(   memory_info  s    

z!TestFetchAllProcesses.memory_infoc             C   s   t |sttj j}xR|jD ]H}t||}| j|tt	f | j
|d||fd | j|||||fd qW tr~| j
|j|j d S )Nr   )r   )r   rl   r#   Zvirtual_memorytotalr   r   r^   r   r   rn   ZassertLessEqualr   ZpssZuss)r%   ro   rg   r   ru   r   r'   r'   r(   memory_full_info  s    

z&TestFetchAllProcesses.memory_full_infoc             C   s   | j |t x|D ]}| j |jt | j |jt trF| j|jd nhtr| j |j	t | j |j
t | j |jt | j|j	d | j|j
d	 | j|jd ntr|j rqtjj|jst|tjj|jst|qW d S )
Nr   r   rrd   ar+a+r   )r   rd   r   r   r   )r^   r   fdr   r7   rb   r   r!   r   Zpositionmodeflagsrn   ra   r   r   r6   r   rl   r   )r%   ro   rg   fr'   r'   r(   
open_files  s"    
z TestFetchAllProcesses.open_filesc             C   s   | j |t | j|d d S )Nr   )r^   r   rn   )r%   ro   rg   r'   r'   r(   rL   (  s    zTestFetchAllProcesses.num_fdsc             C   s2   | j t|tt| x|D ]}t| qW d S )N)r!   lenr   r   )r%   ro   rg   rv   r'   r'   r(   connections,  s    
z!TestFetchAllProcesses.connectionsc             C   s   |r| j |t tjj|s$t|ytj|}W nD tk
rv } z(trX|j	t
jjkrXn|j	t	jkrf W Y d d }~X nX tj|jstd S )N)r^   rb   r6   r7   r   rl   statOSErrorr   errnor#   Z_psplatformZACCESS_DENIED_SETENOENTS_ISDIRst_mode)r%   ro   rg   str   r'   r'   r(   cwd1  s    
zTestFetchAllProcesses.cwdc             C   s0   | j |t d|  kodkn  s,t|d S )Nr   d   )r^   rm   rl   )r%   ro   rg   r'   r'   r(   memory_percentA  s    z$TestFetchAllProcesses.memory_percentc             C   s   | j |t d S )N)r^   bool)r%   ro   rg   r'   r'   r(   
is_runningE  s    z TestFetchAllProcesses.is_runningc             C   sR   | j |t |g kst|ttj }x$|D ]}| j |t | j|| q.W d S )N)r^   r   rl   r   r#   r   r   ra   )r%   ro   rg   Zcpusrp   r'   r'   r(   r    H  s    
z"TestFetchAllProcesses.cpu_affinityc             C   sH   | j |ttd f |d k	rDtjj|s0t|tjj|sDt|d S )N)r^   rb   ry   r6   r7   r   rl   r8   )r%   ro   rg   r'   r'   r(   rE   P  s    zTestFetchAllProcesses.terminalc             C   s   x|D ]}| j |jt | j |jt | j |jt xr|jD ]h}t||}|dkrv|jdstjj	|jst
|jq<|dkr|st
q<| j |ttf | j|d q<W qW d S )Nr7   [r{   permsr   )r{   r   )r^   r{   rb   r   r7   r   r   r   r6   r   rl   r   r   rn   )r%   ro   rg   ntZfnamer   r'   r'   r(   rS   V  s    



z!TestFetchAllProcesses.memory_mapsc             C   s   | j |t | j|d d S )Nr   )r^   r   rn   )r%   ro   rg   r'   r'   r(   rN   i  s    z!TestFetchAllProcesses.num_handlesc             C   sT   | j |t tr2d|  ko"dkn  sPt|ndd ttD }| j|| d S )N   c             S   s    g | ]}|j d rtt|qS )Z_PRIORITY_CLASS)endswithr   r#   )r   r   r'   r'   r(   r   r  s    z.TestFetchAllProcesses.nice.<locals>.<listcomp>i)r^   r   r
   rl   r   r#   ra   )r%   ro   rg   Z
prioritiesr'   r'   r(   nicem  s
    "zTestFetchAllProcesses.nicec             C   s:   t |stx(|D ] }| j|ttf | j|d qW d S )Nr   )r   rl   r^   r   r   rn   )r%   ro   rg   r   r'   r'   r(   num_ctx_switchesv  s    
z&TestFetchAllProcesses.num_ctx_switchesc             C   s@   | j |t | jt|d | j|d d | j|d d d S )Nr/   r   r   r   r   )r^   tupler!   r   rn   )r%   ro   rg   r'   r'   r(   r2   |  s    zTestFetchAllProcesses.rlimitc             C   s>   | j |t x,|j D ] \}}| j |t | j |t qW d S )N)r^   dictrx   rb   )r%   ro   rg   rr   vr'   r'   r(   r@     s    zTestFetchAllProcesses.environN)'rU   rV   rW   rX   r   r   r   r   r   r   ru   r   rB   r   r   r   rJ   rG   r   r   rk   r   rQ   r   r   r   rL   r   r   r   r   r    rE   rS   rN   r   r   r2   r@   r'   r'   r'   r(   r     sH   
H

		r   __main__)/rX   r   r6   r   r   r   r[   
contextlibr   r#   r   r   r   r   r   r   r	   r
   r   r   Zpsutil._compatr   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZTestCaser   rY   rf   r   rU   __file__r'   r'   r'   r(   <module>	   sX   x^  n
