o
    ˆ¶¹aÂi  ã                   @   sj  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	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, 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�r3dd3l5m6Z6 e6e7ƒ dS 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)Ú
CI_TESTING)ÚGITHUB_ACTIONS)ÚHAS_CPU_FREQ)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚPYPY)ÚSKIP_SYSCONS)ÚVALID_PROC_STATUSES)ÚPsutilTestCase)Úcheck_connection_ntuple)Úcreate_sockets)Úenum)Úis_namedtuple)Úkernel_version)Úprocess_namespace)Ú	serialrun)Úunittestc                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	oe
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*   ú=/usr/lib/python3/dist-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 )NÚABOVE_NORMAL_PRIORITY_CLASSÚBELOW_NORMAL_PRIORITY_CLASSÚHIGH_PRIORITY_CLASSÚIDLE_PRIORITY_CLASSÚNORMAL_PRIORITY_CLASSÚREALTIME_PRIORITY_CLASS©r%   r&   r'   r   ©r)   Úaer*   r*   r+   Útest_win_priorityF   s   z(TestAvailConstantsAPIs.test_win_priorityc                 C   óJ   | j }|ttdƒtƒ |ttdƒtƒ |ttdƒtƒ |ttdƒtƒ d S )NÚIOPRIO_CLASS_NONEÚIOPRIO_CLASS_RTÚIOPRIO_CLASS_BEÚIOPRIO_CLASS_IDLE©r%   r&   r'   r   r4   r*   r*   r+   Útest_linux_ioprio_linuxO   ó
   z.TestAvailConstantsAPIs.test_linux_ioprio_linuxc                 C   r7   )NÚIOPRIO_HIGHÚIOPRIO_NORMALÚ
IOPRIO_LOWÚIOPRIO_VERYLOWr3   r4   r*   r*   r+   Útest_linux_ioprio_windowsV   r>   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p)tƒ |ttdƒtp3tƒ |ttdƒtp=tƒ |ttdƒtpGtƒ |ttdƒtpQtƒ |ttd	ƒtp[tƒ |ttd
ƒtpetƒ |ttdƒtpotƒ |ttdƒtƒ tr¼tƒ dkrˆ|ttdƒtƒ tƒ dkr•|ttdƒtƒ tƒ dkr¢|ttdƒtƒ tƒ dkr¯|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 )NÚRLIM_INFINITYÚ	RLIMIT_ASÚRLIMIT_COREÚ
RLIMIT_CPUÚRLIMIT_DATAÚRLIMIT_FSIZEÚRLIMIT_MEMLOCKÚRLIMIT_NOFILEÚRLIMIT_NPROCÚ
RLIMIT_RSSÚRLIMIT_STACKÚRLIMIT_LOCKS)é   é   é   ÚRLIMIT_MSGQUEUE)rQ   rR   é   ÚRLIMIT_NICEÚRLIMIT_RTPRIO)rQ   rR   é   ÚRLIMIT_RTTIMEÚRLIMIT_SIGPENDINGÚRLIMIT_SWAPÚRLIMIT_SBSIZEÚRLIMIT_NPTS)r%   r&   r'   r   r   r
   r   r4   r*   r*   r+   Útest_rlimit]   s6   




z"TestAvailConstantsAPIs.test_rlimitN)Ú__name__Ú
__module__Ú__qualname__r,   r6   r=   rC   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   ó   |   ttdƒt¡ d S )NÚwin_service_iterr3   r(   r*   r*   r+   Útest_win_service_iter�   ó   z)TestAvailSystemAPIs.test_win_service_iterc                 C   rd   )NÚwin_service_getr3   r(   r*   r*   r+   Útest_win_service_get„   rg   z(TestAvailSystemAPIs.test_win_service_getc                 C   ó"   |   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‡   ó   ÿ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   rd   )NÚsensors_fansr<   r(   r*   r*   r+   Útest_sensors_fans�   rg   z%TestAvailSystemAPIs.test_sensors_fansc                 C   rj   )NÚsensors_battery)r%   r&   r'   r   r   r   r   r(   r*   r*   r+   Útest_battery’   rm   z TestAvailSystemAPIs.test_batteryN)	r_   r`   ra   rf   ri   rl   ro   rq   rs   r*   r*   r*   r+   rc      s    rc   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   ó   |   ttjdƒt¡ d S ©NÚuids©r%   r&   r'   rv   r
   r(   r*   r*   r+   Ú	test_uidsž   ó   zTestAvailProcessAPIs.test_uidsc                 C   rx   ry   r{   r(   r*   r*   r+   Ú	test_gids¡   r}   zTestAvailProcessAPIs.test_gidsc                 C   rx   )NÚterminalr{   r(   r*   r*   r+   Útest_terminal¤   r}   z"TestAvailProcessAPIs.test_terminalc                 C   ó   |   ttjdƒtp
t¡ d S )NÚionice)r%   r&   r'   rv   r   r   r(   r*   r*   r+   Útest_ionice§   s   z TestAvailProcessAPIs.test_ionicerD   c                 C   r�   )NÚrlimit)r%   r&   r'   rv   r   r   r(   r*   r*   r+   r^   ª   s   z TestAvailProcessAPIs.test_rlimitc                 C   s.   t tjdƒ}|  |tstrd¡ d S d¡ d S )NÚio_countersFT)r&   r'   rv   r%   r   r   ©r)   Úhasitr*   r*   r+   Útest_io_counters¯   s   "z%TestAvailProcessAPIs.test_io_countersc                 C   rx   )NÚnum_fdsr{   r(   r*   r*   r+   Útest_num_fds³   r}   z!TestAvailProcessAPIs.test_num_fdsc                 C   rx   )NÚnum_handles)r%   r&   r'   rv   r   r(   r*   r*   r+   Útest_num_handles¶   r}   z%TestAvailProcessAPIs.test_num_handlesc                 C   ó    |   ttjdƒtptpt¡ d S )NÚcpu_affinity)r%   r&   r'   rv   r   r   r   r(   r*   r*   r+   Útest_cpu_affinity¹   ó   
ÿz&TestAvailProcessAPIs.test_cpu_affinityc                 C   r�   )NÚcpu_num)r%   r&   r'   rv   r   r   r   r(   r*   r*   r+   Útest_cpu_num½   r�   z!TestAvailProcessAPIs.test_cpu_numc                 C   s6   t tjdƒ}|  |tstststrd¡ d S d¡ d S )NÚmemory_mapsFT)r&   r'   rv   r%   r   r   r   r   r†   r*   r*   r+   Útest_memory_mapsÁ   s   ÿÿz%TestAvailProcessAPIs.test_memory_mapsN)r_   r`   ra   rw   r|   r~   r€   rƒ   r"   rb   r   r   r^   rˆ   rŠ   rŒ   r�   r’   r”   r*   r*   r*   r+   rt   —   s     
ÿ
rt   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   ó   t  ¡ | _d S ©N)r'   rv   Úproc)Úclsr*   r*   r+   Ú
setUpClassÒ   s   zTestSystemAPITypes.setUpClassTc                 C   s6   t |ƒsJ ‚|D ]}|  ||¡ |r|  |d¡ qd S ©Nr   )r   ÚassertIsInstanceÚassertGreaterEqual)r)   ÚntÚtype_Ú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)Úpercpu)r¢   r'   Ú	cpu_times)r)   rž   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ãˆµøä>)rœ   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 )Nr¦   g-Cëâ6?)r¢   r'   Úcpu_times_percentr(   r*   r*   r+   Útest_cpu_times_percentæ   s   z)TestSystemAPITypes.test_cpu_times_percentc                 C   ó   |   t ¡ t¡ d S r—   )rœ   r'   Ú	cpu_countÚintr(   r*   r*   r+   Útest_cpu_countê   s   z!TestSystemAPITypes.test_cpu_countznot supportedc                 C   s2   t  ¡ d u r|  d¡‚| jt  ¡ tttfd� d S )Nzcpu_freq() returns None©rŸ   )r'   rk   ÚskipTestr¢   r©   r¯   r   r(   r*   r*   r+   rl   í   s   
z TestSystemAPITypes.test_cpu_freqc                 C   s<   t jdd� ¡ D ]\}}|  |t¡ | j|ttfd� qd S )NT)Úperdiskr±   )r'   Údisk_io_countersÚitemsrœ   Ústrr¢   r¯   r   )r)   ÚkÚvr*   r*   r+   Útest_disk_io_countersó   s   þz(TestSystemAPITypes.test_disk_io_countersc                 C   sf   t  ¡ D ],}|  |jt¡ |  |jt¡ |  |jt¡ |  |jt¡ |  |jt	¡ |  |j
t	¡ qd S r—   )r'   Údisk_partitionsrœ   Údevicer¶   Ú
mountpointÚfstypeÚoptsÚmaxfiler¯   Úmaxpath)r)   Údiskr*   r*   r+   Útest_disk_partitionsù   s   úz'TestSystemAPITypes.test_disk_partitionszrequires rootc                 C   sd   t ƒ �% t d¡}|  t|ƒtt|ƒƒ¡ |D ]}t|ƒsJ ‚qW d   ƒ d S 1 s+w   Y  d S )NÚall)r   r'   Únet_connectionsr%   ÚlenÚsetr   )r)   ÚretÚconnr*   r*   r+   Útest_net_connections  s   
ÿ"ýz'TestSystemAPITypes.test_net_connectionsc                 C   s–   t  ¡  ¡ D ]B\}}|  |t¡ |D ]5}td ur#ts#|  |jtj¡ n|  |jt	¡ |  |j
t¡ |  |jttd ƒf¡ |  |jttd ƒf¡ qqd S r—   )r'   Únet_if_addrsrµ   rœ   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 ]3\}}|  |t¡ |  |jt¡ td ur$|  |jtj	¡ n|  |jt
¡ |  |jt
¡ |  |jt
¡ qd S r—   )r'   Únet_if_statsrµ   rœ   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)Úpernic)r'   Únet_io_countersrµ   rœ   r¶   )r)   rÑ   Ú_r*   r*   r+   Útest_net_io_counters$  s   ÿz'TestSystemAPITypes.test_net_io_countersc              	   C   sV   t  ¡  ¡ D ]"\}}|  |t¡ |D ]}|  |jt¡ |  |jttt	d ƒf¡ qqd S r—   )
r'   rp   rµ   rœ   r¶   ÚlabelÚcurrentr©   r¯   rÏ   ©r)   ÚnameÚunitsÚunitr*   r*   r+   rq   *  s   þþz$TestSystemAPITypes.test_sensors_fansc              	   C   s†   t  ¡  ¡ D ]:\}}|  |t¡ |D ]-}|  |jt¡ |  |jttt	d ƒf¡ |  |j
ttt	d ƒf¡ |  |jttt	d ƒf¡ qqd S r—   )r'   rn   rµ   rœ   r¶   rá   râ   r©   r¯   rÏ   ÚhighÚcriticalrã   r*   r*   r+   ro   3  s   üþz,TestSystemAPITypes.test_sensors_temperaturesc                 C   r­   r—   )rœ   r'   Ú	boot_timer©   r(   r*   r*   r+   Útest_boot_time>  s   z!TestSystemAPITypes.test_boot_timec                 C   sb   t  ¡ D ]*}|  |jt¡ |  |jttd ƒf¡ |  |jttd ƒf¡ |  |jt	td ƒf¡ qd S r—   )
r'   Úusersrœ   rä   r¶   r   rÏ   ÚhostÚpidr¯   )r)   Úuserr*   r*   r+   Ú
test_usersB  s   üzTestSystemAPITypes.test_usersN)r_   r`   ra   Ú__doc__Úclassmethodrš   r©   r¢   r¥   rª   r¬   r°   r"   rb   r   rl   r¹   rÂ   r   rÉ   rÔ   rÜ   r   rà   r   rq   r   ro   rê   rï   r*   r*   r*   r+   r•   Ì   s2    








r•   c                   @   s"   e Zd Ze e d¡dd„ ƒZdS )ÚTestProcessWaitTypez	not POSIXc                 C   sZ   t  |  ¡ j¡}| ¡  | ¡ }|  |tj ¡ t	d ur%|  
|t	j¡ d S |  
|t¡ d S r—   )r'   rv   Úspawn_testprocrí   Ú	terminateÚwaitr%   ÚsignalÚSIGTERMr   rœ   rÌ   r¯   )r)   ÚpÚcoder*   r*   r+   Útest_negative_signalM  s   z(TestProcessWaitType.test_negative_signalN)r_   r`   ra   r"   rb   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y.   i  Y S w |d |d ‰‰dˆji}tˆƒ}|j|jdd	�D ]%\}}z|ƒ ||< W qI tj	yn } zˆ |ˆˆˆƒ W Y d }~qId }~ww |ƒ  |S )
Nc                    sr   ˆ  | jˆ ¡ ˆ  | j|¡ t| tjƒr(| jd ur'ˆ | jd¡ ˆ  | j|¡ nt| tjƒr3ˆ 	|¡ t
| ƒ d S r›   )r%   rí   rä   Ú
isinstancer'   ÚZombieProcessÚppidr�   ÚNoSuchProcessÚassertProcessGoner¶   )Úexcr˜   rä   rý   )rí   Útcaser*   r+   Úcheck_exceptiona  s   
€
z"proc_info.<locals>.check_exceptionc               
      sT   ˆdkr(zˆ  d¡ W d S  tjy' }  zˆ | ˆˆˆƒ W Y d } ~ d S d } ~ ww d S r›   )rõ   r'   ÚError)r   )r  rä   rí   rý   r˜   r*   r+   Údo_waitl  s   €ÿýzproc_info.<locals>.do_waitrý   rä   rí   F)Úclear_cache)
r   r'   rv   Úas_dictrþ   rí   r    ÚiterÚgettersr  )rí   r  ÚdrÛ   ÚnsÚfunÚfun_namer   r*   )r  rä   rí   rý   r˜   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   r–   r—   )ÚmultiprocessingÚPoolÚpoolr(   r*   r*   r+   ÚsetUp�  s   zTestFetchAllProcesses.setUpc                 C   s   | j  ¡  | j  ¡  d S r—   )r  rô   Újoinr(   r*   r*   r+   ÚtearDown’  s   
zTestFetchAllProcesses.tearDownc                 C   s   ddl m} | j |t ¡ ¡S )Nr   )r  )Úpsutil.tests.test_contractsr  r  Úimap_unorderedr'   Úpids)r)   r  r*   r*   r+   Úiter_proc_info–  s   z$TestFetchAllProcesses.iter_proc_infoc                 C   sè   g }|   ¡ D ]a}| ¡ D ]Z\}}t| |ƒ}z|||ƒ W n9 tyU   d}|d||d t|ƒf 7 }|d7 }|dt ¡  7 }d dd„ | ¡ D ƒ¡}|d7 }| 	|¡ Y qw |d	d
g d di fvrf|sfJ |ƒ‚qq|rr|  
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µ   ÚgetattrÚAssertionErrorÚreprÚ	tracebackÚ
format_excr  Ú
splitlinesÚappendÚfail)r)   ÚfailuresrÛ   rä   ÚvalueÚmethÚsr*   r*   r+   Útest_allœ  s0   
ÿø
€ñÿzTestFetchAllProcesses.test_allc                 C   s&   |   |t¡ |D ]}|   |t¡ qd S r—   )rœ   Úlistr¶   )r)   rÇ   rÛ   Úpartr*   r*   r+   Úcmdline²  s   ÿzTestFetchAllProcesses.cmdlinec                 C   sÈ   |   |ttd ƒf¡ |s|  |d¡ d S tr| d¡sd S tj |¡s'J |ƒ‚t	r\tj 
|¡r^ttdƒr`ttdƒrbzt |tj¡sCJ ‚W d S  ty[   tj |¡rUtsX‚ Y d S Y d S w d S d S d S d S )Nr  z.exeÚaccessÚX_OK)rœ   r¶   rÏ   r%   r   ÚendswithÚosÚpathÚisabsr
   Úisfiler&   r/  r0  r   Úexistsr   ©r)   rÇ   rÛ   r*   r*   r+   Úexe·  s"   ÿÿûzTestFetchAllProcesses.exec                 C   ó   |   |t¡ |  |d¡ d S r›   ©rœ   r¯   r�   r7  r*   r*   r+   rí   Ë  ó   zTestFetchAllProcesses.pidc                 C   s    |   |ttf¡ |  |d¡ d S r›   )rœ   r¯   r   r�   r7  r*   r*   r+   rý   Ï  s   zTestFetchAllProcesses.ppidc                 C   s8   |   |t¡ tr|s|d dkrd S ts|sJ ‚d S d S )NÚstatusÚstopped)rœ   r¶   r   r   r7  r*   r*   r+   rä   Ó  s   ÿzTestFetchAllProcesses.namec                 C   s\   |   |t¡ z|  |d¡ W n ty"   tr|d tjkrn‚ Y nw t dt 	|¡¡ d S )Nr   r<  z%Y %m %d %H:%M:%S)
rœ   r©   r�   r   r   r'   ÚSTATUS_ZOMBIEÚtimeÚstrftimeÚ	localtimer7  r*   r*   r+   Úcreate_timeÛ  s   þý
z!TestFetchAllProcesses.create_timec                 C   ó2   t |ƒsJ ‚|D ]}|  |t¡ |  |d¡ qd S r›   )r   rœ   r¯   r�   )r)   rÇ   rÛ   Úuidr*   r*   r+   rz   ë  ó
   þzTestFetchAllProcesses.uidsc                 C   s:   t |ƒsJ ‚|D ]}|  |t¡ tsts|  |d¡ qd S r›   )r   rœ   r¯   r   r   r�   )r)   rÇ   rÛ   Úgidr*   r*   r+   Úgidsñ  s   €ýzTestFetchAllProcesses.gidsc                 C   s   |   |t¡ |s
J ‚d S r—   )rœ   r¶   r7  r*   r*   r+   Úusernameú  s   zTestFetchAllProcesses.usernamec                 C   s0   |   |t¡ |s
J ‚|  |d¡ |  |t¡ d S )Nú?)rœ   r¶   ÚassertNotEqualÚassertInr   r7  r*   r*   r+   r<  þ  s   zTestFetchAllProcesses.statusc                 C   s>   t |ƒsJ ‚|D ]}|  |ttf¡ |dkr|  |d¡ qd S )Néÿÿÿÿr   ©r   rœ   r¯   r   r�   )r)   rÇ   rÛ   Úfieldr*   r*   r+   r…     s   €ýz!TestFetchAllProcesses.io_countersc                 C   s|   t r |  |jt¡ |  |jt¡ |  |jd¡ |  |jd¡ d S tjtjtj	tj
g}|  |t¡ |  |d¡ |  ||¡ d S r›   )r   rœ   Úioclassr¯   r(  r�   r'   rB   rA   r@   r?   rK  )r)   rÇ   rÛ   Úchoicesr*   r*   r+   r‚     s   üzTestFetchAllProcesses.ionicec                 C   s4   |   |t¡ tr|s|d dkrd S |  |d¡ d S )Nr<  r=  é   )rœ   r¯   r   r�   r7  r*   r*   r+   Únum_threads  s   z!TestFetchAllProcesses.num_threadsc                 C   sj   |   |t¡ |D ]*}t|ƒsJ ‚|  |jd¡ |  |jd¡ |  |jd¡ |D ]
}|   |ttf¡ q'qd S r›   )	rœ   r,  r   r�   ÚidÚ	user_timeÚsystem_timer¯   r©   )r)   rÇ   rÛ   ÚtrN  r*   r*   r+   Úthreads!  s   ÿûzTestFetchAllProcesses.threadsc                 C   rC  r›   )r   rœ   r©   r�   )r)   rÇ   rÛ   r¡   r*   r*   r+   r¤   +  rE  zTestFetchAllProcesses.cpu_timesc                 C   ó4   |   |t¡ d|  krdksJ |ƒ‚ J |ƒ‚d S )Nr  g      Y@©rœ   r©   r7  r*   r*   r+   r¨   2  ó   (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 )NrL  r   rQ  )
rœ   r¯   r   r�   r'   r®   r%   rK  r,  r   r7  r*   r*   r+   r‘   6  s   zTestFetchAllProcesses.cpu_numc                 C   s~   t |ƒsJ ‚|D ]}|  |ttf¡ |  |d¡ qtr=|  |j|j¡ |  |j|j	¡ |  |j
|j¡ |  |j|j¡ d S d S r›   )r   rœ   r¯   r   r�   r   Ú	peak_wsetÚwsetÚpeak_paged_poolÚ
paged_poolÚpeak_nonpaged_poolÚnonpaged_poolÚpeak_pagefileÚpagefile©r)   rÇ   rÛ   r(  r*   r*   r+   Úmemory_info?  s   üz!TestFetchAllProcesses.memory_infoc                 C   s”   t |ƒsJ ‚t ¡ j}|jD ]-}t||ƒ}|  |ttf¡ | j	|d||fd� t
s/tr0|dv r0q| j|||||fd� qt
rH|  	|j|j¡ d S d S )Nr   )Úmsg)ÚvmsÚdata)r   r'   Úvirtual_memoryÚtotalÚ_fieldsr  rœ   r¯   r   r�   r   r	   ÚassertLessEqualÚpssÚuss)r)   rÇ   rÛ   ri  rä   r(  r*   r*   r+   Úmemory_full_infoJ  s   


ÿz&TestFetchAllProcesses.memory_full_infoc              	   C   sþ   |   |t¡ |D ]t}|   |jt¡ |   |jt¡ tr"|  |jd¡ n3trO|   |j	t¡ |   |j
t¡ |   |jt¡ |  |j	d¡ |  |j
d¡ |  |jd¡ ntrU|jsUqtj |j¡s`J |ƒ‚zt |j¡}W n	 tyq   Y qw t |j¡s|J |ƒ‚qd S )NrL  r   )ÚrÚwÚazr+za+)rœ   r,  Úfdr¯   r3  r¶   r   r%   r   ÚpositionÚmodeÚflagsr�   rK  ÚassertGreaterr   r2  r4  Ústatr   ÚS_ISREGÚst_mode)r)   rÇ   rÛ   ÚfÚstr*   r*   r+   Ú
open_filesZ  s.   
ÿëz TestFetchAllProcesses.open_filesc                 C   r9  r›   r:  r7  r*   r*   r+   r‰   s  r;  zTestFetchAllProcesses.num_fdsc                 C   sb   t ƒ �$ |  t|ƒtt|ƒƒ¡ |D ]}t|ƒsJ ‚t|ƒ qW d   ƒ d S 1 s*w   Y  d S r—   )r   r%   rÅ   rÆ   r   r   )r)   rÇ   rÛ   rÈ   r*   r*   r+   Úconnectionsw  s   
þ"þz!TestFetchAllProcesses.connectionsc              
   C   s¢   |rM|   |t¡ tj |¡sJ |ƒ‚zt |¡}W n+ tyD } ztr+|jt	j
jv r+n|jtjkr2‚ W Y d }~d S W Y d }~d S d }~ww t |j¡sOJ ‚d S d S r—   )rœ   r¶   r2  r3  r4  rw  ÚOSErrorr   Úerrnor'   Ú_psplatformÚACCESS_DENIED_SETÚENOENTÚS_ISDIRry  )r)   rÇ   rÛ   r{  Úerrr*   r*   r+   Úcwd~  s&   ÿÿþ€ýózTestFetchAllProcesses.cwdc                 C   rX  )Nr   éd   rY  r7  r*   r*   r+   Úmemory_percentŽ  rZ  z$TestFetchAllProcesses.memory_percentc                 C   s   |   |t¡ d S r—   )rœ   r×   r7  r*   r*   r+   Ú
is_running’  s   z TestFetchAllProcesses.is_runningc                 C   sR   |   |t¡ |g ksJ |ƒ‚ttt ¡ ƒƒ}|D ]}|   |t¡ |  ||¡ qd S r—   )rœ   r,  r   r'   r®   r¯   rK  )r)   rÇ   rÛ   Úcpusr¡   r*   r*   r+   rŽ   •  s   þz"TestFetchAllProcesses.cpu_affinityc                 C   sL   |   |ttd ƒf¡ |d ur"tj |¡sJ |ƒ‚tj |¡s$J |ƒ‚d S d S r—   )rœ   r¶   rÏ   r2  r3  r4  r6  r7  r*   r*   r+   r   �  s   þzTestFetchAllProcesses.terminalc                 C   sÎ   |D ]b}|   |jt¡ |   |jt¡ |   |jt¡ |jD ]G}t||ƒ}|dkr9| d¡s8tj 	|j¡s8J |jƒ‚q|dkrF|sEJ t
|ƒƒ‚q|dkrUtsT|sTJ t
|ƒƒ‚q|   |ttf¡ |  |d¡ qqd S )Nr3  ú[rÓ   Úpermsr   )rœ   rÓ   r¶   r‹  r3  rj  r  Ú
startswithr2  r4  r!  r   r¯   r   r�   )r)   rÇ   rÛ   rž   Úfnamer(  r*   r*   r+   r“   £  s(   


€€ñüz!TestFetchAllProcesses.memory_mapsc                 C   r9  r›   r:  r7  r*   r*   r+   r‹   ¹  r;  z!TestFetchAllProcesses.num_handlesc                 C   s‚   |   |t¡ trd|  krdksJ |ƒ‚ J |ƒ‚d S dd„ ttƒD ƒ}|  ||¡ tjdkr9|   |tj	¡ d S |   |t¡ d S )Niìÿÿÿé   c                 S   s    g | ]}|  d ¡rtt|ƒ‘qS )Ú_PRIORITY_CLASS)r1  r  r'   )r  Úxr*   r*   r+   Ú
<listcomp>Â  s    ÿz.TestFetchAllProcesses.nice.<locals>.<listcomp>)é   é   )
rœ   r¯   r
   Údirr'   rK  ÚsysÚversion_infor   rÌ   )r)   rÇ   rÛ   Ú
prioritiesr*   r*   r+   Únice½  s   (
zTestFetchAllProcesses.nicec                 C   s6   t |ƒsJ ‚|D ]}|  |ttf¡ |  |d¡ qd S r›   rM  rc  r*   r*   r+   Únum_ctx_switchesÊ  s
   þz&TestFetchAllProcesses.num_ctx_switchesc                 C   s@   |   |t¡ |  t|ƒd¡ |  |d d¡ |  |d d¡ d S )NrQ   r   rL  rQ  )rœ   Útupler%   rÅ   r�   r7  r*   r*   r+   r„   Ð  s   zTestFetchAllProcesses.rlimitc                 C   s:   |   |t¡ | ¡ D ]\}}|   |t¡ |   |t¡ q
d S r—   )rœ   Údictrµ   r¶   )r)   rÇ   rÛ   r·   r¸   r*   r*   r+   ru   Ö  s
   þzTestFetchAllProcesses.environN))r_   r`   ra   rð   r  r  r  r+  r.  r8  rí   rý   rä   rB  rz   rG  rH  r<  r…   r‚   rR  rW  r¤   r¨   r‘   rd  rn  r|  r‰   r}  r…  r‡  rˆ  rŽ   r   r“   r‹   r˜  r™  r„   ru   r*   r*   r*   r+   r  ˆ  sN    	
	r  Ú__main__)Úrun_from_name)8rð   r  r  r2  rö   rw  r•  r?  r"  r'   r   r   r   r   r   r   r   r	   r
   r   r   Úpsutil._compatr   r   r   Úpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   rc   rt   r•   rò   r  r  r_   Úpsutil.tests.runnerr�  Ú__file__r*   r*   r*   r+   Ú<module>   sr   
?5*  
Vþ