
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ë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/python38/lib64/python3.8/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)   Z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+   Ú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_VERYLOWr-   r.   r*   r*   r+   Útest_linux_ioprio_windowsV   s
    z0TestAvailConstantsAPIs.test_linux_ioprio_windowsú%unsupported on GITHUB_ACTIONS + LINUXc                 C   s¸  | j }|ttdƒtptƒ |ttdƒtp*tƒ |ttdƒtp>tƒ |ttdƒt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)r8   r9   é   ZRLIMIT_NICEZRLIMIT_RTPRIO)r8   r9   é   ZRLIMIT_RTTIMEZRLIMIT_SIGPENDINGZRLIMIT_SWAPZRLIMIT_SBSIZEZRLIMIT_NPTS)r%   r&   r'   r   r   r
   r   r.   r*   r*   r+   Útest_rlimit]   s6    z"TestAvailConstantsAPIs.test_rlimitN)Ú__name__Ú
__module__Ú__qualname__r,   r/   r1   r6   r!   ÚskipIfr   r   r=   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_iterr-   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_getr-   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_fansr0   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@   rC   rD   rF   rH   rJ   rK   r*   r*   r*   r+   rB      s   rB   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'   rN   r
   r(   r*   r*   r+   Ú	test_uidsž   s    zTestAvailProcessAPIs.test_uidsc                 C   s   |   ttjdƒt¡ d S rP   rR   r(   r*   r*   r+   Ú	test_gids¡   s    zTestAvailProcessAPIs.test_gidsc                 C   s   |   ttjdƒt¡ d S )NÚterminalrR   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'   rN   r   r   r(   r*   r*   r+   Útest_ionice§   s    z TestAvailProcessAPIs.test_ionicer7   c                 C   s   |   ttjdƒtpt¡ d S )NÚrlimit)r%   r&   r'   rN   r   r   r(   r*   r*   r+   r=   ª   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'   rN   r%   r   r   ©r)   Zhasitr*   r*   r+   Útest_io_counters¯   s    z%TestAvailProcessAPIs.test_io_countersc                 C   s   |   ttjdƒt¡ d S )NÚnum_fdsrR   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'   rN   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'   rN   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'   rN   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'   rN   r%   r   r   r   r   r[   r*   r*   r+   Útest_memory_mapsÁ   s
     ÿz%TestAvailProcessAPIs.test_memory_mapsN)r>   r?   r@   rO   rS   rT   rV   rX   r!   rA   r   r   r=   r\   r^   r`   rb   rd   rf   r*   r*   r*   r+   rL   —   s   
ÿ
rL   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'   rN   Úproc)Úclsr*   r*   r+   Ú
setUpClassÒ   s    zTestSystemAPITypes.setUpClassTc                 C   s6   t |ƒst‚|D ] }|  ||¡ |r|  |d¡ q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   s.   |   t ¡ ¡ tjdd�D ]}|   |¡ qd S )NT)Zpercpu)rs   r'   Ú	cpu_times)r)   rp   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ãˆµøä>)rn   r'   Úcpu_percentÚfloatr(   r*   r*   r+   Útest_cpu_percentâ   s    z#TestSystemAPITypes.test_cpu_percentc                 C   s(   |   tjd d�¡ |   tjdd�¡ d S )Nrv   g-Cëâ6?)rs   r'   Zcpu_times_percentr(   r*   r*   r+   Útest_cpu_times_percentæ   s    z)TestSystemAPITypes.test_cpu_times_percentc                 C   s   |   t ¡ t¡ d S rh   )rn   r'   Ú	cpu_countÚintr(   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©rq   )r'   rE   ZskipTestrs   ry   r}   r   r(   r*   r*   r+   rF   í   s    
z TestSystemAPITypes.test_cpu_freqc                 C   s<   t jdd� ¡ D ]&\}}|  |t¡ | j|ttfd� qd S )NT)Zperdiskr   )r'   Zdisk_io_countersÚitemsrn   Ústrrs   r}   r   )r)   ÚkÚvr*   r*   r+   Útest_disk_io_countersó   s    z(TestSystemAPITypes.test_disk_io_countersc                 C   sf   t  ¡ D ]X}|  |jt¡ |  |jt¡ |  |jt¡ |  |jt¡ |  |jt	¡ |  |j
t	¡ qd S rh   )r'   Zdisk_partitionsrn   Údevicer�   Ú
mountpointÚfstypeÚoptsÚmaxfiler}   Úmaxpath)r)   Zdiskr*   r*   r+   Útest_disk_partitionsù   s    z'TestSystemAPITypes.test_disk_partitionszrequires rootc              	   C   sN   t ƒ �> t d¡}|  t|ƒtt|ƒƒ¡ |D ]}t|ƒs.t‚q.W 5 Q R X d S )NÚall)r   r'   Znet_connectionsr%   ÚlenÚsetr   rm   )r)   ÚretÚconnr*   r*   r+   Útest_net_connections  s
    
z'TestSystemAPITypes.test_net_connectionsc                 C   s–   t  ¡  ¡ D ]„\}}|  |t¡ |D ]j}td k	rFtsF|  |jtj¡ n|  |jt	¡ |  |j
t¡ |  |jttd ƒf¡ |  |jttd ƒf¡ q$qd S rh   )r'   Znet_if_addrsr€   rn   r�   r   r   ÚfamilyÚIntEnumr}   ÚaddressÚnetmaskÚtypeÚ	broadcast)r)   ÚifnameÚaddrsÚaddrr*   r*   r+   Útest_net_if_addrs  s    z$TestSystemAPITypes.test_net_if_addrsc                 C   sx   t  ¡  ¡ D ]f\}}|  |t¡ |  |jt¡ td k	rH|  |jtj	¡ n|  |jt
¡ |  |jt
¡ |  |jt
¡ qd S rh   )r'   Znet_if_statsr€   rn   r�   ÚisupÚboolr   Úduplexr“   r}   ÚspeedÚmtu)r)   r˜   Úinfor*   r*   r+   Útest_net_if_stats  s    z$TestSystemAPITypes.test_net_if_statsc                 C   s*   t jdd� ¡ D ]\}}|  |t¡ qd S )NT)Zpernic)r'   Znet_io_countersr€   rn   r�   )r)   r˜   Ú_r*   r*   r+   Útest_net_io_counters$  s    z'TestSystemAPITypes.test_net_io_countersc              	   C   sV   t  ¡  ¡ D ]D\}}|  |t¡ |D ]*}|  |jt¡ |  |jttt	d ƒf¡ q$qd S rh   )
r'   rI   r€   rn   r�   ÚlabelÚcurrentry   r}   r–   ©r)   ÚnameZunitsZunitr*   r*   r+   rJ   *  s
    z$TestSystemAPITypes.test_sensors_fansc              	   C   s†   t  ¡  ¡ D ]t\}}|  |t¡ |D ]Z}|  |jt¡ |  |jttt	d ƒf¡ |  |j
ttt	d ƒf¡ |  |jttt	d ƒf¡ q$qd S rh   )r'   rG   r€   rn   r�   r¥   r¦   ry   r}   r–   ÚhighÚcriticalr§   r*   r*   r+   rH   3  s    z,TestSystemAPITypes.test_sensors_temperaturesc                 C   s   |   t ¡ t¡ d S rh   )rn   r'   Z	boot_timery   r(   r*   r*   r+   Útest_boot_time>  s    z!TestSystemAPITypes.test_boot_timec                 C   sb   t  ¡ D ]T}|  |jt¡ |  |jttd ƒf¡ |  |jttd ƒf¡ |  |jt	td ƒf¡ qd S rh   )
r'   Zusersrn   r¨   r�   rU   r–   ÚhostÚpidr}   )r)   Úuserr*   r*   r+   Ú
test_usersB  s
    zTestSystemAPITypes.test_usersN)r>   r?   r@   Ú__doc__Úclassmethodrk   ry   rs   ru   rz   r{   r~   r!   rA   r   rF   r„   r‹   r    r‘   r›   r¢   r   r¤   r   rJ   r   rH   r«   r¯   r*   r*   r*   r+   rg   Ì   s0   








rg   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 rh   )r'   rN   Zspawn_testprocr­   Ú	terminateÚwaitr%   ÚsignalÚSIGTERMr   rn   r“   r}   )r)   ÚpÚcoder*   r*   r+   Útest_negative_signalM  s    z(TestProcessWaitType.test_negative_signalN)r>   r?   r@   r!   rA   r
   r¹   r*   r*   r*   r+   r²   K  s   r²   c                    sò   t ƒ ‰‡‡fdd„‰ ‡ ‡‡‡‡fdd„}zt ˆ¡‰ˆ ddg¡}W n tjk
r^   i  Y S X |d |d  ‰‰dˆji}tˆƒ}|j|jdd	�D ]R\}}z|ƒ ||< W q” tj	k
rä } zˆ |ˆˆˆƒ W Y ¢q”W 5 d }~X Y q”X q”|ƒ  |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 rl   )r%   r­   r¨   Ú
isinstancer'   ÚZombieProcessÚppidro   ÚNoSuchProcessZassertProcessGoner�   Úmsgrm   )Úexcri   r¨   r¼   )r­   Útcaser*   r+   Úcheck_exceptiona  s    

z"proc_info.<locals>.check_exceptionc               
      sN   ˆdkrJzˆ  d¡ W n2 tjk
rH }  zˆ | ˆˆˆƒ W 5 d } ~ X Y nX d S rl   )r´   r'   ÚError)r¿   )rÁ   r¨   r­   r¼   ri   r*   r+   Údo_waitm  s
    zproc_info.<locals>.do_waitr¼   r¨   r­   F)Úclear_cache)
r   r'   rN   Zas_dictr½   r­   r   ÚiterZgettersrÂ   )r­   rÃ   Údr¡   ÚnsÚfunZfun_namer¿   r*   )rÁ   r¨   r­   r¼   ri   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 rh   )ÚmultiprocessingZPoolÚpoolr(   r*   r*   r+   ÚsetUp�  s    zTestFetchAllProcesses.setUpc                 C   s   | j  ¡  | j  ¡  d S rh   )rÌ   r³   Újoinr(   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 }|   ¡ D ]Ä}| ¡ D ]¶\}}t| |ƒ}z|||ƒ 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q|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   ç        Ú )rÐ   r€   Úgetattrrm   Ú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¡ |D ]}|   |t¡ qd S rh   )rn   Úlistr�   )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®z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)rn   r�   r–   r%   r   ÚendswithÚosÚpathÚisabsrm   r
   Úisfiler&   rä   rå   Úexistsr   ©r)   r�   r¡   r*   r*   r+   Úexe¸  s    zTestFetchAllProcesses.exec                 C   s   |   |t¡ |  |d¡ d S rl   ©rn   r}   ro   rì   r*   r*   r+   r­   Ì  s    zTestFetchAllProcesses.pidc                 C   s    |   |ttf¡ |  |d¡ d S rl   )rn   r}   r   ro   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)rn   r�   r   r   rm   rì   r*   r*   r+   r¨   Ô  s
    zTestFetchAllProcesses.namec                 C   s^   |   |t¡ z|  |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)
rn   ry   ro   rm   r   r'   ÚSTATUS_ZOMBIEÚtimeÚstrftimeÚ	localtimerì   r*   r*   r+   Úcreate_timeÜ  s    z!TestFetchAllProcesses.create_timec                 C   s2   t |ƒst‚|D ]}|  |t¡ |  |d¡ qd S rl   )r   rm   rn   r}   ro   )r)   r�   r¡   Úuidr*   r*   r+   rQ   ì  s    zTestFetchAllProcesses.uidsc                 C   s:   t |ƒst‚|D ]$}|  |t¡ tsts|  |d¡ qd S rl   )r   rm   rn   r}   r   r   ro   )r)   r�   r¡   Úgidr*   r*   r+   Úgidsò  s
    zTestFetchAllProcesses.gidsc                 C   s   |   |t¡ |st‚d S rh   )rn   r�   rm   rì   r*   r*   r+   Úusernameû  s    zTestFetchAllProcesses.usernamec                 C   s0   |   |t¡ |st‚|  |d¡ |  |t¡ d S )Nú?)rn   r�   rm   ZassertNotEqualÚassertInr"   rì   r*   r*   r+   rï   ÿ  s    zTestFetchAllProcesses.statusc                 C   s>   t |ƒst‚|D ](}|  |ttf¡ |dkr|  |d¡ qd S )Néÿÿÿÿr   ©r   rm   rn   r}   r   ro   )r)   r�   r¡   Úfieldr*   r*   r+   rZ     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 rl   )r   rn   Úioclassr}   rÝ   ro   r'   r5   r4   r3   r2   rû   )r)   r�   r¡   Úchoicesr*   r*   r+   rW     s    üzTestFetchAllProcesses.ionicec                 C   s4   |   |t¡ tr$|s$|d dkr$d S |  |d¡ d S )Nrï   rð   é   )rn   r}   r   ro   rì   r*   r*   r+   Únum_threads  s    z!TestFetchAllProcesses.num_threadsc                 C   sj   |   |t¡ |D ]T}t|ƒs t‚|  |jd¡ |  |jd¡ |  |jd¡ |D ]}|   |tt	f¡ qNqd S rl   )
rn   rá   r   rm   ro   ÚidÚ	user_timeÚsystem_timer}   ry   )r)   r�   r¡   Útrþ   r*   r*   r+   Úthreads"  s    zTestFetchAllProcesses.threadsc                 C   s2   t |ƒst‚|D ]}|  |t¡ |  |d¡ qd S rl   )r   rm   rn   ry   ro   )r)   r�   r¡   rr   r*   r*   r+   rt   ,  s    zTestFetchAllProcesses.cpu_timesc                 C   s.   |   |t¡ d|  kr dks*n t|ƒ‚d S )NrÕ   g      Y@©rn   ry   rm   rì   r*   r*   r+   rx   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  )
rn   r}   r   ro   r'   r|   r%   rû   rá   r   rì   r*   r*   r+   rc   7  s    zTestFetchAllProcesses.cpu_numc                 C   sz   t |ƒst‚|D ] }|  |ttf¡ |  |d¡ qtrv|  |j|j¡ |  |j	|j
¡ |  |j|j¡ |  |j|j¡ d S rl   )r   rm   rn   r}   r   ro   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}|jD ]Z}t||ƒ}|  |tt	f¡ | j
|d||fd� tstr`|dkr`q| j|||||fd� qtrŒ|  
|j|j¡ d S )Nr   )r¾   )ZvmsÚdata)r   rm   r'   Zvirtual_memoryÚtotalÚ_fieldsr×   rn   r}   r   ro   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¡ |D ]ê}|   |jt¡ |   |jt¡ trD|  |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|ƒ‚zt |j¡}W n tk
rä   Y qX t |j¡st|ƒ‚qd S )Nrü   r   )ÚrÚwÚazr+za+)rn   rá   Úfdr}   rè   r�   r   r%   r   ÚpositionÚmodeÚflagsro   rû   ZassertGreaterr   rç   ré   rm   Ú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 rl   rî   rì   r*   r*   r+   r]   t  s    zTestFetchAllProcesses.num_fdsc              	   C   sL   t ƒ �< |  t|ƒtt|ƒƒ¡ |D ]}t|ƒs4t‚t|ƒ q$W 5 Q R X d S rh   )r   r%   r�   rŽ   r   rm   r   )r)   r�   r¡   r�   r*   r*   r+   Úconnectionsx  s
    z!TestFetchAllProcesses.connectionsc              
   C   sŒ   |rˆ|   |t¡ tj |¡s$t|ƒ‚zt |¡}W nD tk
rv } z&trX|j	t
jjkrXn|j	t	jkrf‚ W 5 d }~X Y nX t |j¡sˆt‚d S rh   )rn   r�   rç   rè   ré   rm   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   r  rì   r*   r*   r+   Úmemory_percent�  s    z$TestFetchAllProcesses.memory_percentc                 C   s   |   |t¡ d S rh   )rn   r�   rì   r*   r*   r+   Ú
is_running“  s    z TestFetchAllProcesses.is_runningc                 C   sR   |   |t¡ |g kst|ƒ‚ttt ¡ ƒƒ}|D ]}|   |t¡ |  ||¡ q0d S rh   )rn   rá   rm   r   r'   r|   r}   rû   )r)   r�   r¡   Zcpusrr   r*   r*   r+   ra   –  s    z"TestFetchAllProcesses.cpu_affinityc                 C   sH   |   |ttd ƒf¡ |d k	rDtj |¡s0t|ƒ‚tj |¡sDt|ƒ‚d S rh   )rn   r�   r–   rç   rè   ré   rm   rë   rì   r*   r*   r+   rU   ž  s    zTestFetchAllProcesses.terminalc                 C   sÎ   |D ]Ä}|   |jt¡ |   |jt¡ |   |jt¡ |jD ]Ž}t||ƒ}|dkrr| d¡sÆtj 	|j¡sÆt
|jƒ‚q8|dkrŒ|sÆt
t|ƒƒ‚q8|dkrªtsÆ|sÆt
t|ƒƒ‚q8|   |ttf¡ |  |d¡ q8qd S )Nrè   ú[rš   Úpermsr   )rn   rš   r�   r'  rè   r  r×   Ú
startswithrç   ré   rm   rØ   r   r}   r   ro   )r)   r�   r¡   rp   ÚfnamerÝ   r*   r*   r+   re   ¤  s     


z!TestFetchAllProcesses.memory_mapsc                 C   s   |   |t¡ |  |d¡ d S rl   rî   rì   r*   r*   r+   r_   º  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>)é   é   )rn   r}   r
   rm   Údirr'   rû   ÚsysÚversion_infor   r“   )r)   r�   r¡   Z
prioritiesr*   r*   r+   Únice¾  s     
zTestFetchAllProcesses.nicec                 C   s6   t |ƒst‚|D ] }|  |ttf¡ |  |d¡ qd S rl   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 )Nr8   r   rü   r  )rn   Útupler%   r�   ro   rì   r*   r*   r+   rY   Ñ  s    zTestFetchAllProcesses.rlimitc                 C   s:   |   |t¡ | ¡ D ] \}}|   |t¡ |   |t¡ qd S rh   )rn   Údictr€   r�   )r)   r�   r¡   r‚   rƒ   r*   r*   r+   rM   ×  s    zTestFetchAllProcesses.environN))r>   r?   r@   r°   rÍ   rÏ   rÐ   rà   rã   rí   r­   r¼   r¨   rõ   rQ   rø   rù   rï   rZ   rW   r  r  rt   rx   rc   r
  r  r  r]   r  r"  r$  r%  ra   rU   re   r_   r2  r3  rY   rM   r*   r*   r*   r+   rÊ   ‰  sL   	
	rÊ   Ú__main__)Úrun_from_name)8r°   r  rË   rç   rµ   r  r0  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#   rB   rL   rg   r²   rÉ   rÊ   r>   Zpsutil.tests.runnerr7  Ú__file__r*   r*   r*   r+   Ú<module>   sn   
?5+  V
