a
    áªlcl  ã                   @   sv  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
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'ƒZ0G d(d)„ d)e'ƒZ1G d*d+„ d+e'ƒZ2G d,d-„ d-e'ƒZ3d.d/„ Z4e.G d0d1„ d1e'ƒƒZ5e6d2krrdd3l7m8Z8 e8e9ƒ 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)Úunicode)Ú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)Ú	serialrunc                   @   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 )NZPROCFS_PATH)ÚassertEqualÚhasattrÚpsutilr   r   r   ©Úself© r)   úW/var/www/html/django/DPS/env/lib/python3.9/site-packages/psutil/tests/test_contracts.pyÚtest_PROCFS_PATHD   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_priorityH   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_linuxQ   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_windowsX   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)r7   r8   é   ZRLIMIT_NICEZRLIMIT_RTPRIO)r7   r8   é   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.   r0   r5   ÚunittestÚskipIfr   r   r<   r)   r)   r)   r*   r#   B   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pt¡ d S )NÚcpu_freq)r$   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_fansr/   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_ionicer6   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oXe ¡ dkd¡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J ‚|D ] }|  ||¡ |r|  |d¡ qd S ©Nr   )r   Ú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)rr   r&   Ú	cpu_times)r(   ro   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ãˆµøä>)rm   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 )Nru   g-Cëâ6?)rr   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   )rm   r&   Ú	cpu_countÚintr'   r)   r)   r*   Útest_cpu_countì   s    z!TestSystemAPITypes.test_cpu_countÚarm64zskipped due to #1892znot supportedc                 C   s2   t  ¡ d u r|  d¡‚| jt  ¡ tttfd d S )Nzcpu_freq() returns None©rp   )r&   rE   ZskipTestrr   rx   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Úitemsrm   Ústrrr   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_partitionsrm   Zdevicer   Z
mountpointZfstypeÚoptsZmaxfiler|   Zmaxpath)r(   Zdiskr)   r)   r*   Útest_disk_partitionsþ   s    z'TestSystemAPITypes.test_disk_partitionszrequires rootc                 C   sb   t ƒ H t d¡}|  t|ƒtt|ƒƒ¡ |D ]}t|ƒs.J ‚q.W d   ƒ n1 sT0    Y  d S )NÚall)r   r&   Znet_connectionsr$   ÚlenÚsetr   )r(   ÚretÚconnr)   r)   r*   Útest_net_connections  s
    
z'TestSystemAPITypes.test_net_connectionsc                 C   s–   t  ¡  ¡ D ]„\}}|  |t¡ |D ]j}td u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€   rm   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 urH|  |jtj	¡ n|  |jt
¡ |  |jt
¡ |  |jt
¡ qd S rh   )r&   Znet_if_statsr€   rm   r   ZisupÚboolr   ZduplexrŽ   r|   ÚspeedZ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€   rm   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€   rm   r   ÚlabelÚcurrentrx   r|   r‘   ©r(   ÚnameZunitsÚ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€   rm   r   r   rž   rx   r|   r‘   ÚhighÚcriticalrŸ   r)   r)   r*   rH   8  s    z,TestSystemAPITypes.test_sensors_temperaturesc                 C   s   |   t ¡ t¡ d S rh   )rm   r&   Z	boot_timerx   r'   r)   r)   r*   Útest_boot_timeC  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usersrm   r    r   rU   r‘   ÚhostÚpidr|   )r(   Úuserr)   r)   r*   Ú
test_usersG  s
    zTestSystemAPITypes.test_usersN)!r=   r>   r?   Ú__doc__Úclassmethodrk   rx   rr   rt   ry   rz   r}   r@   rA   r   ÚplatformÚmachiner   rF   r„   r†   r   rŒ   r–   rš   r   rœ   r   rJ   r   rH   r¤   r¨   r)   r)   r)   r*   rg   Î   s6   
ÿ






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 urH|  
|t	j¡ n|  
|t¡ d S rh   )r&   rN   Zspawn_testprocr¦   Ú	terminateÚwaitr$   ÚsignalÚSIGTERMr   rm   rŽ   r|   )r(   ÚpÚcoder)   r)   r*   Útest_negative_signalR  s    z(TestProcessWaitType.test_negative_signalN)r=   r>   r?   r@   rA   r
   r´   r)   r)   r)   r*   r­   P  s   r­   c                    sö   t ƒ ‰‡‡fdd„‰ ‡ ‡‡‡‡fdd„}zt ˆ¡‰ˆ ddg¡}W n tjy\   i  Y S 0 |d |d  ‰‰dˆji}tˆƒ}|j|jdd	D ]X\}}z|ƒ ||< W q’ tj	yè } z&ˆ |ˆˆˆƒ W Y d }~q’W Y d }~q’d }~0 0 q’|ƒ  |S )
Nc                    sr   ˆ  | jˆ ¡ ˆ  | j|¡ t| tjƒrP| jd urfˆ | jd¡ ˆ  | j|¡ nt| tjƒrfˆ 	|¡ t
| ƒ d S rl   )r$   r¦   r    Ú
isinstancer&   ZZombieProcessÚppidrn   ÚNoSuchProcessZassertProcessGoner   )Úexcri   r    r¶   )r¦   Útcaser)   r*   Úcheck_exceptionf  s    

z"proc_info.<locals>.check_exceptionc               
      sP   ˆdkrLzˆ  d¡ W n4 tjyJ }  zˆ | ˆˆˆƒ W Y d } ~ n
d } ~ 0 0 d S rl   )r¯   r&   ÚError)r¸   )rº   r    r¦   r¶   ri   r)   r*   Údo_waitq  s
    zproc_info.<locals>.do_waitr¶   r    r¦   F)Úclear_cache)
r   r&   rN   Úas_dictr·   r¦   r!   ÚiterZgettersr»   )r¦   r¼   Údr™   ÚnsZfunZfun_namer¸   r)   )rº   r    r¦   r¶   ri   r¹   r*   Ú	proc_infoc  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 st ¡ | _d S rh   )r   ÚmultiprocessingZPoolÚpoolr'   r)   r)   r*   ÚsetUp”  s    zTestFetchAllProcesses.setUpc                 C   s   t s| j ¡  | j ¡  d S rh   )r   rÅ   r®   Újoinr'   r)   r)   r*   ÚtearDownš  s    
zTestFetchAllProcesses.tearDownc                 C   sJ   ddl m} ts"| j |t ¡ ¡S g }t ¡ D ]}| ||ƒ¡ q.|S d S )Nr   )rÂ   )Zpsutil.tests.test_contractsrÂ   r   rÅ   Zimap_unorderedr&   ZpidsÚappend)r(   rÂ   Zlsr¦   r)   r)   r*   Úiter_proc_infoŸ  s    z$TestFetchAllProcesses.iter_proc_infoc                 C   sè   g }|   ¡ D ]Â}| ¡ D ]´\}}t| |ƒ}z|||ƒ W nr tyª   d}|d||d t|ƒf 7 }|d7 }|dt ¡  7 }d dd„ | ¡ D ƒ¡}|d7 }| 	|¡ Y q0 |d	d
g d di fvr|sJ |ƒ‚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>¹  ó    z1TestFetchAllProcesses.test_all.<locals>.<genexpr>r   ç        Ú )rÊ   r€   ÚgetattrÚAssertionErrorÚreprÚ	tracebackÚ
format_excrÇ   Ú
splitlinesrÉ   Z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   )rm   Úlistr   )r(   rŠ   r™   Úpartr)   r)   r*   ÚcmdlineÂ  s    zTestFetchAllProcesses.cmdlinec                 C   s²   |   |tttd ƒf¡ |s(|  |d¡ n†tr:| d¡s:d S tj 	|¡sNJ |ƒ‚t
r®tj |¡r®ttdƒr®ttdƒr®zt |tj¡s†J ‚W n$ ty¬   tj |¡r¨ts¨‚ Y n0 d S )NrÑ   z.exeÚaccessÚX_OK)rm   r   r   r‘   r$   r   ÚendswithÚosÚpathÚisabsr
   Úisfiler%   rß   rà   rÓ   Úexistsr   ©r(   rŠ   r™   r)   r)   r*   ÚexeÇ  s    zTestFetchAllProcesses.exec                 C   s   |   |t¡ |  |d¡ d S rl   ©rm   r|   rn   rç   r)   r)   r*   r¦   Û  s    zTestFetchAllProcesses.pidc                 C   s    |   |ttf¡ |  |d¡ d S rl   )rm   r|   r   rn   rç   r)   r)   r*   r¶   ß  s    zTestFetchAllProcesses.ppidc                 C   s8   |   |ttf¡ tr(|s(|d dkr(d S ts4|s4J ‚d S )NÚstatusÚstopped)rm   r   r   r   r   rç   r)   r)   r*   r    ã  s
    zTestFetchAllProcesses.namec                 C   s\   |   |t¡ z|  |d¡ W n( tyD   tr>|d tjkr>n‚ Y n0 t dt 	|¡¡ d S )Nr   rê   z%Y %m %d %H:%M:%S)
rm   rx   rn   rÓ   r   r&   ZSTATUS_ZOMBIEÚtimeÚstrftimeÚ	localtimerç   r)   r)   r*   Úcreate_timeë  s    z!TestFetchAllProcesses.create_timec                 C   s2   t |ƒsJ ‚|D ]}|  |t¡ |  |d¡ qd S rl   )r   rm   r|   rn   )r(   rŠ   r™   Úuidr)   r)   r*   rQ   û  s    zTestFetchAllProcesses.uidsc                 C   s:   t |ƒsJ ‚|D ]$}|  |t¡ tsts|  |d¡ qd S rl   )r   rm   r|   r   r   rn   )r(   rŠ   r™   Úgidr)   r)   r*   Úgids  s
    zTestFetchAllProcesses.gidsc                 C   s   |   |t¡ |sJ ‚d S rh   )rm   r   rç   r)   r)   r*   Úusername
  s    zTestFetchAllProcesses.usernamec                 C   s0   |   |t¡ |sJ ‚|  |d¡ |  |t¡ d S )Nú?)rm   r   ZassertNotEqualÚassertInr   rç   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   rm   r|   r   rn   )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   rm   Zioclassr|   rØ   rn   r&   r4   r3   r2   r1   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ë   é   )rm   r|   r   rn   rç   r)   r)   r*   Únum_threads+  s    z!TestFetchAllProcesses.num_threadsc                 C   sj   |   |t¡ |D ]T}t|ƒs J ‚|  |jd¡ |  |jd¡ |  |jd¡ |D ]}|   |ttf¡ qNqd S rl   )	rm   rÜ   r   rn   ÚidZ	user_timeZsystem_timer|   rx   )r(   rŠ   r™   Útrø   r)   r)   r*   Úthreads1  s    zTestFetchAllProcesses.threadsc                 C   s2   t |ƒsJ ‚|D ]}|  |t¡ |  |d¡ qd S rl   )r   rm   rx   rn   )r(   rŠ   r™   rq   r)   r)   r*   rs   ;  s    zTestFetchAllProcesses.cpu_timesc                 C   s.   |   |t¡ d|  kr dks*n J |ƒ‚d S )NrÐ   g      Y@©rm   rx   rç   r)   r)   r*   rw   B  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ú   )
rm   r|   r   rn   r&   r{   r$   rõ   rÜ   r   rç   r)   r)   r*   rc   F  s    zTestFetchAllProcesses.cpu_numc                 C   sz   t |ƒsJ ‚|D ] }|  |ttf¡ |  |d¡ qtrv|  |j|j¡ |  |j|j	¡ |  |j
|j¡ |  |j|j¡ d S rl   )r   rm   r|   r   rn   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_infoO  s    z!TestFetchAllProcesses.memory_infoc                 C   s   t |ƒsJ ‚t ¡ j}|jD ]Z}t||ƒ}|  |ttf¡ | j	|d||fd t
str`|dv r`q| j|||||fd qt
rŒ|  	|j|j¡ d S )Nr   )Úmsg)ZvmsÚdata)r   r&   Zvirtual_memoryÚtotalÚ_fieldsrÒ   rm   r|   r   rn   r   r	   ZassertLessEqualZpssZuss)r(   rŠ   r™   r  r    rØ   r)   r)   r*   Úmemory_full_infoZ  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ÀJ |ƒ‚zt |j¡}W n tyâ   Y q0 t |j¡sJ |ƒ‚qd S )Nrö   r   )ÚrÚwÚazr+za+)rm   rÜ   Úfdr|   rã   r   r   r$   r   ÚpositionÚmodeÚflagsrn   rõ   ZassertGreaterr   râ   rä   Ústatr   ÚS_ISREGÚst_mode)r(   rŠ   r™   ÚfÚstr)   r)   r*   Ú
open_filesj  s*    
z TestFetchAllProcesses.open_filesc                 C   s   |   |t¡ |  |d¡ d S rl   ré   rç   r)   r)   r*   r]   ƒ  s    zTestFetchAllProcesses.num_fdsc                 C   s`   t ƒ F |  t|ƒtt|ƒƒ¡ |D ]}t|ƒs4J ‚t|ƒ q$W d   ƒ n1 sR0    Y  d S rh   )r   r$   rˆ   r‰   r   r   )r(   rŠ   r™   r‹   r)   r)   r*   Úconnections‡  s
    z!TestFetchAllProcesses.connectionsc              
   C   sŽ   |rŠ|   |t¡ tj |¡s$J |ƒ‚zt |¡}W nF tyx } z.trV|jt	j
jv rVn|jtjkrd‚ W Y d }~nd }~0 0 t |j¡sŠJ ‚d S rh   )rm   r   râ   rã   rä   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 J |ƒ‚d S )Nr   éd   rÿ   rç   r)   r)   r*   Úmemory_percentž  s    z$TestFetchAllProcesses.memory_percentc                 C   s   |   |t¡ d S rh   )rm   r—   rç   r)   r)   r*   Ú
is_running¢  s    z TestFetchAllProcesses.is_runningc                 C   sR   |   |t¡ |g ksJ |ƒ‚ttt ¡ ƒƒ}|D ]}|   |t¡ |  ||¡ q0d S rh   )rm   rÜ   r   r&   r{   r|   rõ   )r(   rŠ   r™   Zcpusrq   r)   r)   r*   ra   ¥  s    z"TestFetchAllProcesses.cpu_affinityc                 C   sH   |   |ttd ƒf¡ |d urDtj |¡s0J |ƒ‚tj |¡sDJ |ƒ‚d S rh   )rm   r   r‘   râ   rã   rä   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ÆJ |jƒ‚q8|dkrŒ|sÆJ t
|ƒƒ‚q8|dkrªtsÆ|sÆJ t
|ƒƒ‚q8|   |ttf¡ |  |d¡ q8qd S )Nrã   )ú[zanon_inode:r•   Úpermsr   )rm   r•   r   r  rã   r  rÒ   Ú
startswithrâ   rä   rÔ   r   r|   r   rn   )r(   rŠ   r™   ro   Ú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 J |ƒ‚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>)é   é   )
rm   r|   r
   Údirr&   rõ   ÚsysÚversion_infor   rŽ   )r(   rŠ   r™   Z
prioritiesr)   r)   r*   ÚniceÍ  s     
zTestFetchAllProcesses.nicec                 C   s6   t |ƒsJ ‚|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 )Nr7   r   rö   rú   )rm   Útupler$   rˆ   rn   rç   r)   r)   r*   rY   à  s    zTestFetchAllProcesses.rlimitc                 C   s:   |   |t¡ | ¡ D ] \}}|   |t¡ |   |t¡ qd S rh   )rm   Ú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þ   rs   rw   rc   r  r  r  r]   r  r  r  r  ra   rU   re   r_   r*  r+  rY   rM   r)   r)   r)   r*   rÃ     sL   	
	rÃ   Ú__main__)Úrun_from_name):r©   r  rÄ   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   r   Zpsutil.testsr   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.runnerr/  Ú__file__r)   r)   r)   r*   Ú<module>   st   
?5 *  a
