B
    çÚ†\^]  ã               @   s  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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%j)ƒZ*G d#d$„ d$e%j)ƒZ+G d%d&„ d&e%j)ƒZ,G d'd(„ d(e%j)ƒZ-e.d)krþe!e/ƒ dS )*z°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)Úclosing)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚOSX)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Úlong)Úbind_unix_socket)Úcheck_connection_ntuple)Úget_kernel_version)ÚHAS_CONNECTIONS_UNIX)ÚHAS_NET_IO_COUNTERS)Ú
HAS_RLIMIT)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)Úis_namedtuple)Úrun_test_module_by_name)Úsafe_rmpath)Úskip_on_access_denied)ÚTESTFN)Úunittest)Úunix_socket_path)ÚVALID_PROC_STATUSES)Úwarnc               @   sÀ   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.S )/ÚTestAvailabilityzQMake sure code reflects what doc promises in terms of APIs
    availability.
    c             C   s$   t p
tp
t}|  ttjdƒ|¡ d S )NÚcpu_affinity)r   r   r   ÚassertEqualÚhasattrÚpsutilÚProcess)ÚselfÚhasit© r(   ú:lib/python3.7/site-packages/psutil/tests/test_contracts.pyÚtest_cpu_affinity>   s    z"TestAvailability.test_cpu_affinityc             C   s(   |   ttdƒt¡ |   ttdƒt¡ d S )NZwin_service_iterZwin_service_get)r"   r#   r$   r   )r&   r(   r(   r)   Útest_win_serviceB   s    z!TestAvailability.test_win_servicec             C   s   |   ttdƒtptpt¡ d S )NZPROCFS_PATH)r"   r#   r$   r   r   r   )r&   r(   r(   r)   Útest_PROCFS_PATHF   s    z!TestAvailability.test_PROCFS_PATHc             C   sj   | j }|ttdƒtƒ |ttdƒtƒ |ttdƒtƒ |ttdƒtƒ |ttdƒtƒ |ttdƒtƒ d S )NZABOVE_NORMAL_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZIDLE_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZREALTIME_PRIORITY_CLASS)r"   r#   r$   r   )r&   Úaer(   r(   r)   Útest_win_priorityJ   s    z"TestAvailability.test_win_priorityc             C   sJ   | j }|ttdƒtƒ |ttdƒtƒ |ttdƒtƒ |ttdƒtƒ d S )NZIOPRIO_CLASS_NONEZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE)r"   r#   r$   r   )r&   r-   r(   r(   r)   Útest_linux_ioprioS   s
    z"TestAvailability.test_linux_ioprioc             C   sH  | j }totƒ dk}|ttjdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttd	ƒ|ƒ |ttd
ƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ toòtƒ dk}|ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ |ttdƒ|ƒ d S )N)é   é   é$   ÚrlimitZRLIM_INFINITYZ	RLIMIT_ASZRLIMIT_COREZ
RLIMIT_CPUZRLIMIT_DATAZRLIMIT_FSIZEZRLIMIT_LOCKSZRLIMIT_MEMLOCKÚRLIMIT_NOFILEZRLIMIT_NPROCZ
RLIMIT_RSSZRLIMIT_STACK)é   r   ZRLIMIT_MSGQUEUEZRLIMIT_NICEZRLIMIT_RTPRIOZRLIMIT_RTTIMEZRLIMIT_SIGPENDING)r"   r   r   r#   r$   r%   )r&   r-   r'   r(   r(   r)   Útest_linux_rlimitZ   s*    z"TestAvailability.test_linux_rlimitc             C   s>   t otj d¡ptj d¡}|  ttdƒ|p6tp6tp6t	¡ d S )Nz/sys/devices/system/cpu/cpufreqz$/sys/devices/system/cpu/cpu0/cpufreqZcpu_freq)
r   ÚosÚpathÚexistsr"   r#   r$   r   r   r   )r&   Zlinuxr(   r(   r)   Útest_cpu_freqr   s
    zTestAvailability.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_temperaturesy   s    z*TestAvailability.test_sensors_temperaturesc             C   s   |   ttdƒt¡ d S )NÚsensors_fans)r"   r#   r$   r   )r&   r(   r(   r)   Útest_sensors_fans}   s    z"TestAvailability.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TestAvailability.test_batteryc             C   s    |   ttjdƒtptpt¡ d S )NÚenviron)r"   r#   r$   r%   r   r   r   )r&   r(   r(   r)   Útest_proc_environ„   s    z"TestAvailability.test_proc_environc             C   s   |   ttjdƒt¡ d S )NÚuids)r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_uidsˆ   s    zTestAvailability.test_proc_uidsc             C   s   |   ttjdƒt¡ d S )NrB   )r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_gids‹   s    zTestAvailability.test_proc_gidsc             C   s   |   ttjdƒt¡ d S )NÚterminal)r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_terminalŽ   s    z#TestAvailability.test_proc_terminalc             C   s   |   ttjdƒtpt¡ d S )NÚionice)r"   r#   r$   r%   r   r   )r&   r(   r(   r)   Útest_proc_ionice‘   s    z!TestAvailability.test_proc_ionicec             C   s   |   ttjdƒt¡ d S )Nr3   )r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_rlimit”   s    z!TestAvailability.test_proc_rlimitc             C   s(   t tjdƒ}|  |tstrdnd¡ d S )NÚio_countersFT)r#   r$   r%   r"   r   r   )r&   r'   r(   r(   r)   Útest_proc_io_counters—   s    z&TestAvailability.test_proc_io_countersc             C   s   |   ttjdƒt¡ d S )NÚnum_fds)r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_num_fds›   s    z"TestAvailability.test_proc_num_fdsc             C   s   |   ttjdƒt¡ d S )NÚnum_handles)r"   r#   r$   r%   r   )r&   r(   r(   r)   Útest_proc_num_handlesž   s    z&TestAvailability.test_proc_num_handlesc             C   s    |   ttjdƒtptpt¡ d S )Nr!   )r"   r#   r$   r%   r   r   r   )r&   r(   r(   r)   Útest_proc_cpu_affinity¡   s    z'TestAvailability.test_proc_cpu_affinityc             C   s    |   ttjdƒtptpt¡ d S )NÚcpu_num)r"   r#   r$   r%   r   r   r   )r&   r(   r(   r)   Útest_proc_cpu_num¥   s    z"TestAvailability.test_proc_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$   r%   r"   r	   r   r   r   )r&   r'   r(   r(   r)   Útest_proc_memory_maps©   s    z&TestAvailability.test_proc_memory_mapsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   r+   r,   r.   r/   r6   r:   r<   r>   r?   rA   rC   rD   rF   rH   rI   rK   rM   rO   rP   rR   rT   r(   r(   r(   r)   r    9   s.   	r    c               @   s   e Zd Zdd„ ZdS )ÚTestDeprecationsc          	   C   sd   t jdd}t ¡  ¡  W d Q R X |d }|  | ¡ t¡ |  dt	|j
ƒ¡ |  dt	|j
ƒ¡ d S )NT)Úrecordr   zmemory_info_ex() is deprecatedzuse memory_info() instead)ÚwarningsÚcatch_warningsr$   r%   Úmemory_info_exÚassertIsInstanceÚcategoryÚDeprecationWarningÚassertInÚstrÚmessage)r&   ZwsÚwr(   r(   r)   Útest_memory_info_ex¶   s    z$TestDeprecations.test_memory_info_exN)rU   rV   rW   re   r(   r(   r(   r)   rY   ´   s   rY   c               @   sÄ   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	e
 e d¡e
 e d¡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S )Ú
TestSystemz¬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$   r%   Úproc)Úclsr(   r(   r)   Ú
setUpClassÊ   s    zTestSystem.setUpClassc             C   s   t tƒ d S )N)r   r   )r&   r(   r(   r)   ÚtearDownÎ   s    zTestSystem.tearDownc             C   s>   t  ¡ }t|ƒst‚x$|D ]}|  |t¡ |  |d¡ qW d S )Nr   )r$   Ú	cpu_timesr   ÚAssertionErrorr^   ÚfloatÚassertGreaterEqual)r&   ÚretÚnr(   r(   r)   Útest_cpu_timesÑ   s
    
zTestSystem.test_cpu_timesc             C   s&   x t jddD ]}|  |t¡ qW d S )NT)Zperdisk)r$   Zdisk_io_countersr^   rb   )r&   Úkr(   r(   r)   Útest_io_countersÙ   s    zTestSystem.test_io_countersc             C   sN   xHt  ¡ D ]<}|  |jt¡ |  |jt¡ |  |jt¡ |  |jt¡ q
W d S )N)r$   Zdisk_partitionsr^   Zdevicerb   Z
mountpointZfstypeZopts)r&   Zdiskr(   r(   r)   Útest_disk_partitionsÞ   s
    zTestSystem.test_disk_partitionsz
POSIX onlyzcan't list UNIX sockets)Zonly_ifc          
   C   s^   t ƒ N}tt|ƒƒ6 tjdd}|s*t‚x|D ]}|  |jt¡ q0W W d Q R X W d Q R X d S )NZunix)Zkind)	r   r   r   r$   Znet_connectionsrl   r^   Zladdrrb   )r&   ÚnameZconsÚconnr(   r(   r)   Útest_net_connectionsæ   s    
zTestSystem.test_net_connectionsc             C   sr   xlt  ¡  ¡ D ]\\}}|  |t¡ xF|D ]>}|  |jt¡ |  |jttd ƒf¡ |  |jttd ƒf¡ q(W qW d S )N)	r$   Znet_if_addrsÚitemsr^   rb   ZaddressZnetmaskÚtypeZ	broadcast)r&   ÚifnameZaddrsÚaddrr(   r(   r)   Útest_net_if_addrsñ   s    
zTestSystem.test_net_if_addrsc             C   s*   x$t  ¡  ¡ D ]\}}|  |t¡ qW d S )N)r$   Znet_if_statsrx   r^   rb   )r&   rz   Ú_r(   r(   r)   Útest_net_if_statsú   s    zTestSystem.test_net_if_statsznot supportedc             C   s.   x(t jdd ¡ D ]\}}|  |t¡ qW d S )NT)Zpernic)r$   Znet_io_countersrx   r^   rb   )r&   rz   r}   r(   r(   r)   Útest_net_io_countersÿ   s    zTestSystem.test_net_io_countersc             C   sF   x@t  ¡  ¡ D ]0\}}|  |t¡ x|D ]}|  |jt¡ q(W qW d S )N)r$   r=   rx   r^   rb   Úlabel)r&   ru   ÚunitsÚunitr(   r(   r)   r>     s    
zTestSystem.test_sensors_fansc             C   sF   x@t  ¡  ¡ D ]0\}}|  |t¡ x|D ]}|  |jt¡ q(W qW d S )N)r$   r;   rx   r^   rb   r€   )r&   ru   r   r‚   r(   r(   r)   r<     s    
z$TestSystem.test_sensors_temperaturesc             C   sf   x`t  ¡ D ]T}|  |jt¡ |  |jttd ƒf¡ |  |jttd ƒf¡ |  |jt	td ƒf¡ q
W d S )N)
r$   Zusersr^   ru   rb   rE   ry   ZhostÚpidÚint)r&   Úuserr(   r(   r)   Ú
test_users  s
    zTestSystem.test_usersN)rU   rV   rW   rX   Úclassmethodri   rj   rq   rs   rt   r   ZskipIfr   r   r   r   rw   r|   r~   r   r   r   r>   r   r<   r†   r(   r(   r(   r)   rf   Ä   s   		rf   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.
    c             C   sn   t ddddddddd	d
ddgƒ}tr2ts2| d¡ g }x2ttjƒD ]$}| d¡rRqB||kr\qB| |¡ qBW |S )NZsend_signalZsuspendZresumeZ	terminateÚkillÚwaitZas_dictÚparentÚparentsZchildrenr]   Úoneshotr3   r}   )	Úsetr   r   ÚaddÚdirr$   r%   Ú
startswithÚappend)r&   Zexcluded_namesÚattrsru   r(   r(   r)   Úget_attr_names(  s    


z$TestFetchAllProcesses.get_attr_namesc          
   c   sJ   |   ¡ }x<t ¡ D ]0}| ¡  x|D ]}||fV  q&W W d Q R X qW d S )N)r”   r$   Zprocess_iterr   )r&   r“   Úpru   r(   r(   r)   Ú
iter_procs9  s
    

z TestFetchAllProcesses.iter_procsc             C   sX   d}i }t ||d ƒ}|d k	rPt|ƒrP|dkr6tjf}n|dkrFddi}|||ŽS |S d S )Nr(   r3   rS   ZgroupedF)ÚgetattrÚcallabler$   r4   )r&   r•   ru   ÚargsÚkwargsÚattrr(   r(   r)   Ú	call_meth@  s    

zTestFetchAllProcesses.call_methc             C   sÈ  d}t ƒ }g }x’|  ¡ D ]„\}}|}y|  ||¡}W n$ tk
rj   d| jjd |  }t|ƒ Y q tjtj	fk
rÐ } zB|  
|j|j¡ |jrª|  
|j| ¡ ¡ t|ƒs¶t‚|jsÀt‚W d d }~X Y q tk
r^   d}	|	d||f 7 }	||kr|	dt|ƒ 7 }	|	d7 }	|	d7 }	|	d	t ¡  7 }	d
 dd„ |	 ¡ D ƒ¡}	|	d
7 }	| |	¡ P Y qX |d7 }|ddg d di fkrŒ|sŒt|ƒ‚t| |ƒ}
|
||ƒ qW |rº|  d |¡¡ |sÄt‚d S )Nr   z&%r was skipped because not implementedz.test_zH
======================================================================
zFAIL: test_%s (proc=%sz	, ret=%s)z)
zF----------------------------------------------------------------------z
%sÚ
c             s   s   | ]}d | V  qdS )z    Nr(   )Ú.0Úir(   r(   r)   ú	<genexpr>i  s    z7TestFetchAllProcesses.test_fetch_all.<locals>.<genexpr>é   g        Ú )Úobjectr–   rœ   ÚNotImplementedErrorÚ	__class__rU   r   r$   ZNoSuchProcessZAccessDeniedr"   rƒ   ru   rb   rl   ÚmsgÚ	ExceptionÚreprÚ	tracebackÚ
format_excÚjoinÚ
splitlinesr’   r—   Zfail)r&   Zvalid_procsÚdefaultZfailuresr•   ru   ro   r¦   ÚerrÚsÚmethr(   r(   r)   Útest_fetch_allM  sJ    


z$TestFetchAllProcesses.test_fetch_allc             C   s*   |   |t¡ x|D ]}|   |t¡ qW d S )N)r^   Úlistrb   )r&   ro   rg   Úpartr(   r(   r)   Úcmdline{  s    
zTestFetchAllProcesses.cmdlinec             C   st   |   |ttd ƒf¡ |s&|  |d¡ nJtj |¡s:t|ƒ‚trptj 	|¡rpt
tdƒrpt
tdƒrpt |tj¡spt‚d S )Nr¢   ÚaccessÚX_OK)r^   rb   ry   r"   r7   r8   Úisabsrl   r   Úisfiler#   rµ   r¶   )r&   ro   rg   r(   r(   r)   Úexe€  s    zTestFetchAllProcesses.exec             C   s   |   |t¡ |  |d¡ d S )Nr   )r^   r„   rn   )r&   ro   rg   r(   r(   r)   rƒ   Ž  s    zTestFetchAllProcesses.pidc             C   s    |   |ttf¡ |  |d¡ d S )Nr   )r^   r„   r   rn   )r&   ro   rg   r(   r(   r)   Úppid’  s    zTestFetchAllProcesses.ppidc             C   s   |   |t¡ ts|st‚d S )N)r^   rb   r   rl   )r&   ro   rg   r(   r(   r)   ru   –  s    zTestFetchAllProcesses.namec             C   s^   |   |t¡ y|  |d¡ W n* tk
rF   tr@| ¡ tjkr@n‚ Y nX t 	dt 
|¡¡ d S )Nr   z%Y %m %d %H:%M:%S)r^   rm   rn   rl   r	   Ústatusr$   ZSTATUS_ZOMBIEÚtimeZstrftimeZ	localtime)r&   ro   rg   r(   r(   r)   Úcreate_timeœ  s    z!TestFetchAllProcesses.create_timec             C   s6   t |ƒst‚x$|D ]}|  |t¡ |  |d¡ qW d S )Nr   )r   rl   r^   r„   rn   )r&   ro   rg   Zuidr(   r(   r)   rB   ¬  s    
zTestFetchAllProcesses.uidsc             C   s>   t |ƒst‚x,|D ]$}|  |t¡ tsts|  |d¡ qW d S )Nr   )r   rl   r^   r„   r   r   rn   )r&   ro   rg   Úgidr(   r(   r)   Úgids²  s
    
zTestFetchAllProcesses.gidsc             C   s   |   |t¡ |st‚d S )N)r^   rb   rl   )r&   ro   rg   r(   r(   r)   Úusername»  s    zTestFetchAllProcesses.usernamec             C   s0   |   |t¡ |st‚|  |d¡ |  |t¡ d S )Nú?)r^   rb   rl   ZassertNotEqualra   r   )r&   ro   rg   r(   r(   r)   r»   ¿  s    zTestFetchAllProcesses.statusc             C   sB   t |ƒst‚x0|D ](}|  |ttf¡ |dkr|  |d¡ qW d S )Néÿÿÿÿr   )r   rl   r^   r„   r   rn   )r&   ro   rg   Úfieldr(   r(   r)   rJ   Å  s
    
z!TestFetchAllProcesses.io_countersc             C   sh   t r*t|ƒst‚x|D ]}|  |t¡ qW trL|  |jd¡ |  |jd¡ n|  |d¡ |  	|d¡ d S )Nr   )r   r¡   r0   )
r   r   rl   r^   r„   r   rn   ZioclassÚvaluera   )r&   ro   rg   rÃ   r(   r(   r)   rG   Ì  s    
zTestFetchAllProcesses.ionicec             C   s   |   |t¡ |  |d¡ d S )Nr¡   )r^   r„   rn   )r&   ro   rg   r(   r(   r)   Únum_threadsØ  s    z!TestFetchAllProcesses.num_threadsc             C   sr   |   |t¡ x`|D ]X}t|ƒs"t‚|  |jd¡ |  |jd¡ |  |jd¡ x|D ]}|   |tt	f¡ qRW qW d S )Nr   )
r^   r²   r   rl   rn   ÚidZ	user_timeZsystem_timer„   rm   )r&   ro   rg   ÚtrÃ   r(   r(   r)   ÚthreadsÜ  s    

zTestFetchAllProcesses.threadsc             C   s6   t |ƒst‚x$|D ]}|  |t¡ |  |d¡ qW d S )Nr   )r   rl   r^   rm   rn   )r&   ro   rg   rp   r(   r(   r)   rk   æ  s    
zTestFetchAllProcesses.cpu_timesc             C   s.   |   |t¡ d|  kr dks*n t|ƒ‚d S )Ng        g      Y@)r^   rm   rl   )r&   ro   rg   r(   r(   r)   Úcpu_percentí  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¡   )
r^   r„   r   rn   r$   Ú	cpu_countr"   ra   r²   Úrange)r&   ro   rg   r(   r(   r)   rQ   ñ  s    zTestFetchAllProcesses.cpu_numc             C   sÆ   t |ƒst‚x(|D ] }|  |ttf¡ |  |d¡ qW tr~ts~|jdkr~xx|j	D ](}|dkrPt
||ƒ}| j|j||d qPW nDtrÂ|  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ d S )Nr   Úvms)r¦   )r   rl   r^   r„   r   rn   r   r   rÌ   Ú_fieldsr—   ÚassertGreaterr   Z	peak_wsetZwsetZpeak_paged_poolZ
paged_poolZpeak_nonpaged_poolZnonpaged_poolZpeak_pagefileZpagefile)r&   ro   rg   rÄ   ru   r(   r(   r)   Úmemory_infoú  s    

z!TestFetchAllProcesses.memory_infoc             C   s”   t |ƒst‚t ¡ j}xd|jD ]Z}t||ƒ}|  |tt	f¡ | j
|d||fd tstrb|dkrbq| j|||||fd qW tr|  
|j|j¡ d S )Nr   )r¦   )rÌ   Údata)r   rl   r$   Zvirtual_memoryÚtotalrÍ   r—   r^   r„   r   rn   r   r
   ZassertLessEqualZpssZuss)r&   ro   rg   rÑ   ru   rÄ   r(   r(   r)   Úmemory_full_info  s    

z&TestFetchAllProcesses.memory_full_infoc             C   sà   |   |t¡ xÎ|D ]Æ}|   |jt¡ |   |jt¡ trF|  |jd¡ nftr |   |j	t¡ |   |j
t¡ |   |jt¡ |  |j	d¡ |  |j
d¡ |  |jd¡ ntr¬|js¬qtj |j¡sÂt|ƒ‚tj |j¡st|ƒ‚qW d S )NrÂ   r   )Úrrd   Úazr+za+)r^   r²   Úfdr„   r8   rb   r   r"   r   ZpositionÚmodeÚflagsrn   ra   rÎ   r   r7   r·   rl   r¸   )r&   ro   rg   Úfr(   r(   r)   Ú
open_files  s"    

z TestFetchAllProcesses.open_filesc             C   s   |   |t¡ |  |d¡ d S )Nr   )r^   r„   rn   )r&   ro   rg   r(   r(   r)   rL   /  s    zTestFetchAllProcesses.num_fdsc             C   s2   |   t|ƒtt|ƒƒ¡ x|D ]}t|ƒ qW d S )N)r"   ÚlenrŽ   r   )r&   ro   rg   rv   r(   r(   r)   Úconnections3  s    
z!TestFetchAllProcesses.connectionsc          
   C   sŒ   |rˆ|   |t¡ tj |¡s$t|ƒ‚yt |¡}W nD tk
rv } z&trX|j	t
jjkrXn|j	t	jkrf‚ W d d }~X Y nX t |j¡sˆt‚d S )N)r^   rb   r7   r8   r·   rl   ÚstatÚOSErrorr   Úerrnor$   Z_psplatformZACCESS_DENIED_SETZENOENTÚS_ISDIRÚst_mode)r&   ro   rg   Ústr®   r(   r(   r)   Úcwd8  s    
zTestFetchAllProcesses.cwdc             C   s.   |   |t¡ d|  kr dks*n t|ƒ‚d S )Nr   éd   )r^   rm   rl   )r&   ro   rg   r(   r(   r)   Úmemory_percentH  s    z$TestFetchAllProcesses.memory_percentc             C   s   |   |t¡ d S )N)r^   Úbool)r&   ro   rg   r(   r(   r)   Ú
is_runningL  s    z TestFetchAllProcesses.is_runningc             C   sR   |   |t¡ |g kst|ƒ‚tt ¡ ƒ}x$|D ]}|   |t¡ |  ||¡ q.W d S )N)r^   r²   rl   rË   r$   rÊ   r„   ra   )r&   ro   rg   Zcpusrp   r(   r(   r)   r!   O  s    
z"TestFetchAllProcesses.cpu_affinityc             C   sH   |   |ttd ƒf¡ |d k	rDtj |¡s0t|ƒ‚tj |¡sDt|ƒ‚d S )N)r^   rb   ry   r7   r8   r·   rl   r9   )r&   ro   rg   r(   r(   r)   rE   W  s    zTestFetchAllProcesses.terminalc             C   s°   xª|D ]¢}|   |jt¡ |   |jt¡ |   |jt¡ xr|jD ]h}t||ƒ}|dkrv| d¡s¤tj 	|j¡s¤t
|jƒ‚q<|dkrˆ|s¤t
‚q<|   |ttf¡ |  |d¡ q<W qW d S )Nr8   ú[)r{   Úpermsr   )r^   r{   rb   rè   r8   rÍ   r—   r‘   r7   r·   rl   r„   r   rn   )r&   ro   rg   ÚntÚfnamerÄ   r(   r(   r)   rS   ]  s    



z!TestFetchAllProcesses.memory_mapsc             C   s   |   |t¡ |  |d¡ d S )Nr   )r^   r„   rn   )r&   ro   rg   r(   r(   r)   rN   p  s    z!TestFetchAllProcesses.num_handlesc             C   sR   |   |t¡ tr0d|  kr$dksNn t|ƒ‚ndd„ ttƒD ƒ}|  ||¡ d S )Niìÿÿÿé   c             S   s    g | ]}|  d ¡rtt|ƒ‘qS )Z_PRIORITY_CLASS)Úendswithr—   r$   )rž   Úxr(   r(   r)   ú
<listcomp>y  s    z.TestFetchAllProcesses.nice.<locals>.<listcomp>)r^   r„   r   rl   r   r$   ra   )r&   ro   rg   Z
prioritiesr(   r(   r)   Únicet  s
     zTestFetchAllProcesses.nicec             C   s:   t |ƒst‚x(|D ] }|  |ttf¡ |  |d¡ qW d S )Nr   )r   rl   r^   r„   r   rn   )r&   ro   rg   rÄ   r(   r(   r)   Únum_ctx_switches}  s    
z&TestFetchAllProcesses.num_ctx_switchesc             C   s@   |   |t¡ |  t|ƒd¡ |  |d d¡ |  |d d¡ d S )Nr0   r   rÂ   r¡   )r^   Útupler"   rÚ   rn   )r&   ro   rg   r(   r(   r)   r3   ƒ  s    zTestFetchAllProcesses.rlimitc             C   s>   |   |t¡ x,| ¡ D ] \}}|   |t¡ |   |t¡ qW d S )N)r^   Údictrx   rb   )r&   ro   rg   rr   Úvr(   r(   r)   r@   ‰  s    zTestFetchAllProcesses.environN))rU   rV   rW   rX   r”   r–   rœ   r±   r´   r¹   rƒ   rº   ru   r½   rB   r¿   rÀ   r»   rJ   rG   rÅ   rÈ   rk   rÉ   rQ   rÏ   rÒ   rÙ   rL   rÛ   râ   rä   ræ   r!   rE   rS   rN   rï   rð   r3   r@   r(   r(   r(   r)   rˆ   #  sL   .	
		rˆ   Ú__main__)0rX   rÞ   r7   rÜ   r¼   r©   r[   Ú
contextlibr   r$   r   r   r   r   r   r   r	   r
   r   r   r   Zpsutil._compatr   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZTestCaser    rY   rf   rˆ   rU   Ú__file__r(   r(   r(   r)   Ú<module>
   sZ   {_  o
