<!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   s2   t j }x$|D ]}| j|t | j|d qW d S )Nr   )r#   	cpu_timesr^   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   sV   t  F}tt|. tjdd}x|D ]}| j|jt q(W W d Q R X W d Q R X d S )NZunix)Zkind)r   r   r   r#   Znet_connectionsr^   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_statsrw   r^   rb   )r%   ry   _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_countersrw   r^   rb   )r%   ry   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=   rw   r^   rb   label)r%   rt   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;   rw   r^   rb   r   )r%   rt   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^   rt   rb   rE   rx   hostpidint)r%   userr'   r'   r(   
test_users  s
    zTestSystem.test_usersN)rU   rV   rW   rX   classmethodri   rj   rp   rr   rs   r   ZskipIfr
   r   r   r	   rv   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 n2 tk
r>   d| jjd |  }t| Y q tjtjfk
r } z0| j|j|j |jr| j|j|j  W Y d d }~X q tk
r> } 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rVt| |}||| qW W d Q R X qW |r| jd j| 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   rt   	Exceptionrepr	traceback
format_excjoin
splitlinesZfail)r%   Zvalid_procsZexcluded_namesZattrsrt   defaultZfailuresprn   argskwargsattrmsgerrsmethr'   r'   r(   test_fetch_all,  st    






z$TestFetchAllProcesses.test_fetch_allc             C   s*   | j |t x|D ]}| j |t qW d S )N)r^   listrb   )r%   rn   rg   partr'   r'   r(   cmdlinet  s    
zTestFetchAllProcesses.cmdlinec             C   sN   | j |ttd f |s&| j|d n$trJtjj|rJttdrJttdrJd S )Nr   accessX_OK)	r^   rb   rx   r!   r
   r6   r7   isfiler"   )r%   rn   rg   r'   r'   r(   exey  s    zTestFetchAllProcesses.exec             C   s   | j |t | j|d d S )Nr   )r^   r   rm   )r%   rn   rg   r'   r'   r(   r     s    zTestFetchAllProcesses.pidc             C   s    | j |ttf | j|d d S )Nr   )r^   r   r   rm   )r%   rn   rg   r'   r'   r(   ppid  s    zTestFetchAllProcesses.ppidc             C   s   | j |t tsd S )N)r^   rb   r   )r%   rn   rg   r'   r'   r(   rt     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^   rl   rm   AssertionErrorr   statusr#   ZSTATUS_ZOMBIEtimeZstrftimeZ	localtime)r%   rn   rg   r'   r'   r(   create_time  s    z!TestFetchAllProcesses.create_timec             C   s8   x2|D ]*}| j |t | j|d | j|| j qW d S )Nr   )r^   r   rm   ra   r   )r%   rn   rg   Zuidr'   r'   r(   rB     s    
zTestFetchAllProcesses.uidsc             C   sD   x>|D ]6}| j |t t rt r| j|d | j|| j qW d S )Nr   )r^   r   r	   r   rm   ra   r   )r%   rn   rg   gidr'   r'   r(   gids  s
    
zTestFetchAllProcesses.gidsc             C   s"   | j |t tr| j|| j d S )N)r^   rb   r
   ra   r   )r%   rn   rg   r'   r'   r(   username  s    zTestFetchAllProcesses.usernamec             C   s(   | j |t | j|d | j|t d S )N?)r^   rb   ZassertNotEqualra   r   )r%   rn   rg   r'   r'   r(   r     s    zTestFetchAllProcesses.statusc             C   s6   x0|D ](}| j |ttf |dkr| j|d qW d S )Nr   r   )r^   r   r   rm   )r%   rn   rg   fieldr'   r'   r(   rJ     s    
z!TestFetchAllProcesses.io_countersc             C   s\   t rx|D ]}| j|t q
W tr@| j|jd | j|jd n| j|d | j|d d S )Nr   r   r/   )r   r   r/   )r
   r^   r   r   rm   Zioclassvaluera   )r%   rn   rg   r   r'   r'   r(   rG     s    
zTestFetchAllProcesses.ionicec             C   s   | j |t | j|d d S )Nr   )r^   r   rm   )r%   rn   rg   r'   r'   r(   num_threads  s    z!TestFetchAllProcesses.num_threadsc             C   sf   | j |t xT|D ]L}| j|jd | j|jd | j|jd x|D ]}| j |ttf qFW qW d S )Nr   )r^   r   rm   idZ	user_timeZsystem_timer   rl   )r%   rn   rg   tr   r'   r'   r(   threads  s    

zTestFetchAllProcesses.threadsc             C   s*   x$|D ]}| j |t | j|d qW d S )Nr   )r^   rl   rm   )r%   rn   rg   ro   r'   r'   r(   rk     s    
zTestFetchAllProcesses.cpu_timesc             C   s   | j |t d S )N)r^   rl   )r%   rn   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   rm   r#   	cpu_countr!   ra   r   range)r%   rn   rg   r'   r'   r(   rQ     s    zTestFetchAllProcesses.cpu_numc             C   s   x(|D ] }| j |ttf | j|d qW trtt rt|jdkrtxx|jD ](}|dkrFt||}| j	|j||d qFW nDt
r| j|j|j | j|j|j | j|j|j | j|j|j d S )Nr   vms)r   )r^   r   r   rm   r
   r   r   _fieldsr   assertGreaterr   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefile)r%   rn   rg   r   rt   r'   r'   r(   memory_info  s    

z!TestFetchAllProcesses.memory_infoc             C   sv   t j j}xR|jD ]H}t||}| j|ttf | j|d||fd | j	|||||fd qW t
rr| j|j|j d S )Nr   )r   )r#   Zvirtual_memorytotalr   r   r^   r   r   rm   ZassertLessEqualr   ZpssZuss)r%   rn   rg   r   rt   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 qtr| j |j	t | j |j
t | j |jt | j|j	d | j|j
d	 | j|jd qtr|j rq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flagsrm   ra   r   r   )r%   rn   rg   fr'   r'   r(   
open_files  s     
z TestFetchAllProcesses.open_filesc             C   s   | j |t | j|d d S )Nr   )r^   r   rm   )r%   rn   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%   rn   rg   ru   r'   r'   r(   connections,  s    
z!TestFetchAllProcesses.connectionsc             C   sh   |rd| j |t ytj|}W nD tk
rb } z(trD|jtjj	krDn|jtj
krR W Y d d }~X nX d S )N)r^   rb   r6   statOSErrorr   errnor#   Z_psplatformZACCESS_DENIED_SETENOENT)r%   rn   rg   str   r'   r'   r(   cwd1  s    
zTestFetchAllProcesses.cwdc             C   s   | j |t d S )N)r^   rl   )r%   rn   rg   r'   r'   r(   memory_percentA  s    z$TestFetchAllProcesses.memory_percentc             C   s   | j |t d S )N)r^   bool)r%   rn   rg   r'   r'   r(   
is_runningE  s    z TestFetchAllProcesses.is_runningc             C   sB   | j |t ttj }x$|D ]}| j |t | j|| qW d S )N)r^   r   r   r#   r   r   ra   )r%   rn   rg   Zcpusro   r'   r'   r(   r    H  s
    
z"TestFetchAllProcesses.cpu_affinityc             C   s    | j |ttd f |d k	rd S )N)r^   rb   rx   )r%   rn   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r^|jdsq<|dkrhq<| j |tt	f | j
|d q<W qW d S )Nr7   [rz   permsr   )rz   r   )r^   rz   rb   r   r7   r   r   r   r   r   rm   )r%   rn   rg   ntZfnamer   r'   r'   r(   rS   V  s    


z!TestFetchAllProcesses.memory_mapsc             C   s   | j |t | j|d d S )Nr   )r^   r   rm   )r%   rn   rg   r'   r'   r(   rN   i  s    z!TestFetchAllProcesses.num_handlesc             C   s4   | j |t trndd ttD }| j|| d S )Nc             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>)r^   r   r
   r   r#   ra   )r%   rn   rg   Z
prioritiesr'   r'   r(   nicem  s
    zTestFetchAllProcesses.nicec             C   s.   x(|D ] }| j |ttf | j|d qW d S )Nr   )r^   r   r   rm   )r%   rn   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   rm   )r%   rn   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^   dictrw   rb   )r%   rn   rg   rq   vr'   r'   r(   r@     s    zTestFetchAllProcesses.environN)'rU   rV   rW   rX   r   r   r   r   r   r   rt   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
