U
    ‰ª/etm  ã                   @   sz  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
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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/d0„ Z4e.G d1d2„ d2e'ƒƒZ5e6d3krvdd4l7m8Z8 e8e9ƒ dS )5z±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)ÚPY3)Ú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*   ú?/tmp/pip-unpacked-wheel-ct_4tgow/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)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   Ú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_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@   rD   rE   rG   rI   rK   rL   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   s   |   ttjdƒt¡ d S ©NÚuids©r%   r&   r'   rO   r
   r(   r*   r*   r+   Ú	test_uids    s    zTestAvailProcessAPIs.test_uidsc                 C   s   |   ttjdƒt¡ d S rQ   rS   r(   r*   r*   r+   Ú	test_gids£   s    zTestAvailProcessAPIs.test_gidsc                 C   s   |   ttjdƒt¡ d S )NÚterminalrS   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'   rO   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'   rO   r   r   r(   r*   r*   r+   r=   ¬   s    z TestAvailProcessAPIs.test_rlimitc                 C   s"   t tjdƒ}|  |tpt ¡ d S )NÚio_counters)r&   r'   rO   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_fdsrS   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'   rO   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'   rO   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'   rO   r   r   r   r(   r*   r*   r+   Útest_cpu_num¿   s    
ÿz!TestAvailProcessAPIs.test_cpu_numc                 C   s*   t tjdƒ}|  |tp tp tp t ¡ d S )NÚmemory_maps)r&   r'   rO   r%   r   r   r   r   r\   r*   r*   r+   Útest_memory_mapsÃ   s
     ÿz%TestAvailProcessAPIs.test_memory_mapsN)r>   r?   r@   rP   rT   rU   rW   rY   rA   rB   r   r   r=   r]   r_   ra   rc   re   rg   r*   r*   r*   r+   rM   ™   s   
ÿ
rM   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'   rO   Ú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)rt   r'   Ú	cpu_times)r)   rq   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ãˆµøä>)ro   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 )Nrw   g-Cëâ6?)rt   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 ri   )ro   r'   Ú	cpu_countÚintr(   r*   r*   r+   Útest_cpu_countì   s    z!TestSystemAPITypes.test_cpu_countZarm64zskipped due to #1892znot supportedc                 C   s2   t  ¡ d kr|  d¡‚| jt  ¡ tttfd d S )Nzcpu_freq() returns None©rr   )r'   rF   ZskipTestrt   rz   r~   r   r(   r*   r*   r+   rG   ð   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Úitemsro   Ústrrt   r~   r   )r)   ÚkÚvr*   r*   r+   Útest_disk_io_countersø   s    z(TestSystemAPITypes.test_disk_io_countersc                 C   sv   t  ¡ D ]h}|  |jt¡ |  |jt¡ |  |jt¡ |  |jt¡ |  |jt	t
d ƒf¡ |  |jt	t
d ƒf¡ qd S ri   )r'   Zdisk_partitionsro   Zdevicer‚   Z
mountpointZfstypeÚoptsZmaxfiler~   ÚtypeZ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    rn   )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 ri   )r'   Znet_if_addrsr   ro   r‚   r   r   ÚfamilyÚIntEnumr~   ÚaddressÚnetmaskr‡   Ú	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 ri   )r'   Znet_if_statsr   ro   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_countersro   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 ri   )
r'   rJ   r   ro   r‚   ÚlabelÚcurrentrz   r~   r‡   ©r)   ÚnameZunitsÚunitr*   r*   r+   rK   /  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 ri   )r'   rH   r   ro   r‚   r   rž   rz   r~   r‡   ÚhighÚcriticalrŸ   r*   r*   r+   rI   8  s    z,TestSystemAPITypes.test_sensors_temperaturesc                 C   s   |   t ¡ t¡ d S ri   )ro   r'   Z	boot_timerz   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 ri   )
r'   Zusersro   r    r‚   rV   r‡   ÚhostÚpidr~   )r)   Úuserr*   r*   r+   Ú
test_usersG  s
    zTestSystemAPITypes.test_usersN)!r>   r?   r@   Ú__doc__Úclassmethodrl   rz   rt   rv   r{   r|   r   rA   rB   r   ÚplatformÚmachiner   rG   r…   rˆ   r   rŽ   r—   r›   r   rœ   r   rK   r   rI   r¤   r¨   r*   r*   r*   r+   rh   Î   s6   
ÿ






rh   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 ri   )r'   rO   Zspawn_testprocr¦   Ú	terminateÚwaitr%   ÚsignalÚSIGTERMr   ro   r   r~   )r)   ÚpÚcoder*   r*   r+   Útest_negative_signalR  s    z(TestProcessWaitType.test_negative_signalN)r>   r?   r@   rA   rB   r
   r´   r*   r*   r*   r+   r­   P  s   r­   c                    s(  t ƒ ‰‡‡fdd„‰ ‡ ‡‡‡‡fdd„}zt ˆ¡‰W n$ tjk
rZ   ˆ ˆ¡ i  Y S X zˆ ddg¡}W n  tjk
rŽ   ˆ ˆ¡ Y n–X |d |d  ‰‰dˆji}tˆƒ}|j	|j
dd	D ]T\}}z|ƒ ||< W qÄ tjk
r } zˆ |ˆˆˆƒ W Y ¢qÄW 5 d }~X Y qÄX qÄ|ƒ  |S d S )
Nc                    s„   ˆ  | jˆ ¡ ˆ  | j|¡ t| tjƒrZˆ |¡ | jd k	rpˆ | jd¡ ˆ  | j|¡ nt| tj	ƒrpˆ 
|¡ t| ƒ t| ƒ d S rm   )r%   r¦   r    Ú
isinstancer'   ZZombieProcessZassertProcessZombieÚppidrp   ÚNoSuchProcessÚassertProcessGoner‚   Úrepr)Úexcrj   r    r¶   )r¦   Útcaser*   r+   Úcheck_exceptionf  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 rm   )r¯   r'   ÚError)rº   )r¼   r    r¦   r¶   rj   r*   r+   Údo_waits  s
    zproc_info.<locals>.do_waitr¶   r    r¦   F)Úclear_cache)r   r'   rO   r·   ZassertPidGoneZas_dictr¸   r¦   r"   ÚiterZgettersr½   )r¦   r¾   Údrš   ÚnsZfunZfun_namerº   r*   )r¼   r    r¦   r¶   rj   r»   r+   Ú	proc_infoc  s.    


rÃ   c                   @   s<  e Zd 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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!d=d>„ Z"d?d@„ Z#dAdB„ Z$dCdD„ Z%dEdF„ Z&dGdH„ Z'dIdJ„ Z(dKdL„ Z)dMS )NÚ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.
    r   c                 C   s   | j rt ¡ | _d S ri   )Úuse_proc_poolÚmultiprocessingZPoolÚpoolr(   r*   r*   r+   ÚsetUpœ  s    zTestFetchAllProcesses.setUpc                 C   s   | j r| j ¡  | j ¡  d S ri   )rÅ   rÇ   r®   Újoinr(   r*   r*   r+   ÚtearDown¢  s    
zTestFetchAllProcesses.tearDownc                 C   sL   ddl m} | jr$| j |t ¡ ¡S g }t ¡ D ]}| ||ƒ¡ q0|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 np tk
r¨   d}|d||d t|ƒf 7 }|d7 }|dt ¡  7 }d dd„ | ¡ D ƒ¡d }| 	|¡ Y qX |d	d
g d di fkr|st
|ƒ‚qq|râ|  d |¡¡‚d S )NzH
======================================================================
z#FAIL: name=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Ú	Exceptionr¹   Ú	tracebackÚ
format_excrÉ   Ú
splitlinesrË   rn   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 ri   )ro   Úlistr‚   )r)   rŒ   rš   Úpartr*   r*   r+   ÚcmdlineÉ  s    zTestFetchAllProcesses.cmdlinec                 C   s°   |   |ttf¡ |  | ¡ |¡ |r¬tr6| d¡s6d S tj 	|¡sJt
|ƒ‚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 )Nz.exeÚaccessÚX_OK)ro   r‚   r   r%   Ústripr   ÚendswithÚosÚpathÚisabsrn   r
   Úisfiler&   rß   rà   Úexistsr   ©r)   rŒ   rš   r*   r*   r+   ÚexeÎ  s    zTestFetchAllProcesses.exec                 C   s   |   |t¡ |  |d¡ d S rm   ©ro   r~   rp   rè   r*   r*   r+   r¦   á  s    zTestFetchAllProcesses.pidc                 C   s(   |   |ttf¡ |  |d¡ t|ƒ d S rm   )ro   r~   r   rp   rÃ   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|s4t‚d S )NÚstatusÚstopped)ro   r‚   r   r   r   rn   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)
ro   rz   rp   rn   r   r'   Z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 rm   )r    rn   ro   r~   rp   )r)   rŒ   rš   Úuidr*   r*   r+   rR     s    zTestFetchAllProcesses.uidsc                 C   s:   t |ƒst‚|D ]$}|  |t¡ tsts|  |d¡ qd S rm   )r    rn   ro   r~   r   r   rp   )r)   rŒ   rš   Úgidr*   r*   r+   Úgids  s
    zTestFetchAllProcesses.gidsc                 C   s,   |   |t¡ |  | ¡ |¡ | ¡ s(t‚d S ri   )ro   r‚   r%   rá   rn   rè   r*   r*   r+   Úusername  s    zTestFetchAllProcesses.usernamec                 C   s0   |   |t¡ |st‚|  |d¡ |  |t¡ d S )Nú?)ro   r‚   rn   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    rn   ro   r~   r   rp   )r)   rŒ   rš   Úfieldr*   r*   r+   r[     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 rm   )r   ro   Zioclassr~   rØ   rp   r'   r5   r4   r3   r2   rö   )r)   rŒ   rš   Úchoicesr*   r*   r+   rX   #  s    üzTestFetchAllProcesses.ionicec                 C   s4   |   |t¡ tr$|s$|d dkr$d S |  |d¡ d S )Nrë   rì   é   )ro   r~   r   rp   rè   r*   r*   r+   Únum_threads3  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 rm   )
ro   rÜ   r    rn   rp   ÚidZ	user_timeZsystem_timer~   rz   )r)   rŒ   rš   Útrù   r*   r*   r+   Úthreads9  s    zTestFetchAllProcesses.threadsc                 C   s2   t |ƒst‚|D ]}|  |t¡ |  |d¡ qd S rm   )r    rn   ro   rz   rp   )r)   rŒ   rš   rs   r*   r*   r+   ru   C  s    zTestFetchAllProcesses.cpu_timesc                 C   s.   |   |t¡ d|  kr dks*n t|ƒ‚d S )NrÑ   g      Y@©ro   rz   rn   rè   r*   r*   r+   ry   J  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û   )
ro   r~   r   rp   r'   r}   r%   rö   rÜ   r   rè   r*   r*   r+   rd   N  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 rm   )r    rn   ro   r~   r   rp   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_infoW  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   )Úmsg)ZvmsÚdata)r    rn   r'   Zvirtual_memoryÚtotalÚ_fieldsrÓ   ro   r~   r   rp   r   r	   ZassertLessEqualZpssZuss)r)   rŒ   rš   r  r    rØ   r*   r*   r+   Úmemory_full_infob  s    


z&TestFetchAllProcesses.memory_full_infoc              	   C   s  |   |t¡ |D  ]þ}|   |jt¡ |   |jt¡ |  |j ¡ |j¡ trZ|  |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+)ro   rÜ   Úfdr~   rä   r‚   r%   rá   r   r   ÚpositionÚmodeÚflagsrp   rö   ZassertGreaterr   rã   rå   rn   Ústatr   ÚS_ISREGÚst_mode)r)   rŒ   rš   ÚfÚstr*   r*   r+   Ú
open_filesr  s,    

z TestFetchAllProcesses.open_filesc                 C   s   |   |t¡ |  |d¡ d S rm   rê   rè   r*   r*   r+   r^   Œ  s    zTestFetchAllProcesses.num_fdsc              	   C   sL   t ƒ < |  t|ƒtt|ƒƒ¡ |D ]}t|ƒs4t‚t|ƒ q$W 5 Q R X d S ri   )r   r%   rŠ   r‹   r    rn   r   )r)   rŒ   rš   r   r*   r*   r+   Úconnections  s
    z!TestFetchAllProcesses.connectionsc              
   C   s    |   |ttf¡ |  | ¡ |¡ |rœtj |¡s8t|ƒ‚zt 	|¡}W nD t
k
rŠ } z&trl|jtjjkrln|jtjkrz‚ W 5 d }~X Y nX t	 |j¡sœt‚d S ri   )ro   r‚   r   r%   rá   rã   rä   rå   rn   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 ri   )ro   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 ri   )ro   rÜ   rn   r   r'   r}   r~   rö   )r)   rŒ   rš   Zcpusrs   r*   r*   r+   rb   ¯  s    z"TestFetchAllProcesses.cpu_affinityc                 C   sH   |   |ttd ƒf¡ |d k	rDtj |¡s0t|ƒ‚tj |¡sDt|ƒ‚d S ri   )ro   r‚   r‡   rã   rä   rå   rn   rç   rè   r*   r*   r+   rV   ·  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ä   )ú[zanon_inode:r–   Úpermsr   )ro   r–   r‚   r   rä   r  rÓ   Ú
startswithrã   rå   rn   r¹   r   r~   r   rp   )r)   rŒ   rš   rq   ÚfnamerØ   r*   r*   r+   rf   ½  s     


z!TestFetchAllProcesses.memory_mapsc                 C   s   |   |t¡ |  |d¡ d S rm   rê   rè   r*   r*   r+   r`   Ó  s    z!TestFetchAllProcesses.num_handlesc                 C   sr   |   |t¡ tr0d|  kr$dksnn t|ƒ‚n>dd„ ttƒD ƒ}|  ||¡ trb|   |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>)
ro   r~   r
   rn   Údirr'   rö   r   r   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 rm   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û   )ro   Útupler%   rŠ   rp   rè   r*   r*   r+   rZ   ê  s    zTestFetchAllProcesses.rlimitc                 C   s:   |   |t¡ | ¡ D ] \}}|   |t¡ |   |t¡ qd S ri   )ro   Údictr   r‚   )r)   rŒ   rš   rƒ   r„   r*   r*   r+   rN   ð  s    zTestFetchAllProcesses.environN)*r>   r?   r@   r©   rÅ   rÈ   rÊ   rÌ   rÛ   rÞ   ré   r¦   r¶   r    rð   rR   ró   rô   rë   r[   rX   rü   rÿ   ru   ry   rd   r  r  r  r^   r  r  r  r  rb   rV   rf   r`   r'  r(  rZ   rN   r*   r*   r*   r+   rÄ   “  sN   	
	rÄ   Ú__main__)Úrun_from_name):r©   r  rÆ   rã   r«   r°   r  rí   rÕ   rA   r'   r   r   r   r   r   r   r   r	   r
   r   r   Zpsutil._compatr   r   r   r   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   rC   rM   rh   r­   rÃ   rÄ   r>   Zpsutil.tests.runnerr,  Ú__file__r*   r*   r*   r+   Ú<module>   st   
?5 0  e
