<!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>
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 )4z°Contracts 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pŽtƒ |ttdƒtp¢tƒ |ttd	ƒtp¶tƒ |ttd
ƒtpÊtƒ |ttdƒtpÞtƒ |ttdƒtƒ tr„tƒ dkr|ttdƒtƒ tƒ dk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 )(ÚTestSystemAPITypesz¬Check 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)Úintervalgñhãˆµøä>)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ž   x˜t  ¡  ¡ 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Ž   xˆt  ¡  ¡ 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ˆ |ˆˆˆƒ w’W d d }~X Y q’X q’W |ƒ  |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ÚTestFetchAllProcessesz·Test 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¡ nˆtr8| d¡s8d S tj |¡sLt	|ƒ‚t
r®tj |¡r®ttdƒr®ttdƒr®yt |tj¡s„t	‚W n& t	k
r¬   tj |¡r¨t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 )Néÿÿÿÿr   )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s¬qtj |j¡sÂt|ƒ‚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¡sˆt‚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¡sÊtj 	|j¡sÊt
|jƒ‚q<|dkr|sÊt
t|ƒƒ‚q<|dkr®tsÊ|sÊt
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
