£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    =_                 @   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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)Z3G d.d/ d/e)Z4G d0d1 d1e)Z5e6d2krvdd3l7m8Z8 e8e9 dS )4zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)FileNotFoundError)long)ASCII_FS)check_net_address)
CI_TESTING)DEVNULL)enum)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)IS_64BIT)mock)PsutilTestCase)PYPY)retry_on_failure)GITHUB_ACTIONS)UNICODE_SUFFIX)unittestc               @   s\   e Zd Zdd Zdd Zeeo"eddd Z	eeo:eddd	 Z
d
d Zdd ZdS )TestProcessAPIsc          
   C   s   |  t dd t D  |  }|  |jdd t D  t|j}|  |	  | 
|jdd t D  tjdtt d | tt g  W d Q R X tjdtt d* | tj tt  W d Q R X W d Q R X d S )Nc             S   s   g | ]
}|j qS  )pid).0xr$   r$   K/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_system.py
<listcomp>@   s    z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c             S   s   g | ]
}|j qS r$   )r%   )r&   r'   r$   r$   r(   r)   B   s    c             S   s   g | ]
}|j qS r$   )r%   )r&   r'   r$   r$   r(   r)   F   s    zpsutil.Process)side_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr%   ProcesskillwaitZassertNotInr   patchNoSuchProcessassertEquallistAccessDeniedassertRaises)selfsprocpr$   r$   r(   test_process_iter?   s    z!TestProcessAPIs.test_process_iterc          	   C   s8  x.t jdgdD ]}| t|j dg qW | t tt jdgd W d Q R X tj	dt 
dddL}x:t jddgdD ]&}| |jd  | |jd d qW |jstW d Q R X tj	dt 
dddX}t }x>t jddg|d	D ](}| |jd | | |jd d qW |js*tW d Q R X d S )
Nr%   )attrsZfooz$psutil._psplatform.Process.cpu_timesr    )r*   	cpu_times)r>   Zad_value)r.   r/   r6   r7   infokeysr9   
ValueErrorr   r4   r8   assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)r:   r<   mflagr$   r$   r(   test_prcess_iter_w_attrsP   s$    z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc                s   fdd}g    }  }  }dd |||fD }jttj|dd jttj|dd t }tj|d	|d
\}}t | d |g  t	|d  g  x|D ]}	
t|	d qW tdfdd}
|  |
||\}}|jdd |D  tr:| jtj  n| jd  |jg x|D ]}	
t|	d qbW tdfdd}
|  |  |
||\}}t t|j|j|jg x|D ]}	t|	d qW d S )Nc                s     | j d S )N)appendr%   )r<   )pidsr$   r(   callbackg   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc             S   s   g | ]}t |jqS r$   )r.   r1   r%   )r&   r'   r$   r$   r(   r)   n   s    z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rO   g{Gz?)rQ   rO   g      ?   
returncode   c                s<   t j| d|d\}} t|d  t|d ||fS )NgQ?)rQ   rO   rR      )r.   
wait_procsr6   len)procsrO   gonealive)r:   r$   r(   test{   s
    z-TestProcessAPIs.test_wait_procs.<locals>.testc             S   s   g | ]
}|j qS r$   )r%   )r&   r'   r$   r$   r(   r)      s    c                s<   t j| d|d\}} t|d  t|d ||fS )NgQ?)rQ   rO   rS   r   )r.   rW   r6   rX   )rY   rO   rZ   r[   )r:   r$   r(   r\      s
    )r0   r9   rC   r.   rW   	TypeErrortime
assertLessr6   rX   assertFalsehasattrr   	terminater+   r%   r	   poprT   signalSIGTERMset
assertTrue)r:   rO   sproc1sproc2sproc3rY   trZ   r[   r<   r\   r$   )rN   r:   r(   test_wait_procsd   sB    

 
zTestProcessAPIs.test_wait_procsc             C   sT   |   }|   }|   }dd |||fD }x|D ]}|  q2W t|\}}d S )Nc             S   s   g | ]}t |jqS r$   )r.   r1   r%   )r&   r'   r$   r$   r(   r)      s    z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r0   rb   r.   rW   )r:   rh   ri   rj   rY   r<   rZ   r[   r$   r$   r(   test_wait_procs_no_timeout   s    
z*TestProcessAPIs.test_wait_procs_no_timeoutc             C   sv   |   }| t|j t|j}|  |  | t|j | td | 	tddt
 k d S )NrP   r   )r0   rg   r.   
pid_existsr%   r1   r2   r3   r`   r6   rN   )r:   r;   r<   r$   r$   r(   test_pid_exists   s    zTestProcessAPIs.test_pid_existsc          	   C   s   t  }xT|D ]L}yt |s"tW q tk
rX   td |t  krT| | Y qX qW tt|d t|d }x |D ]}| j	t ||d q~W d S )Ng?i  ip  )msg)
r.   rN   rn   rG   r^   sleepfailrangemaxr`   )r:   rN   r%   r$   r$   r(   test_pid_exists_2   s    


z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__r=   rL   r"   skipIfr   r   rl   rm   ro   ru   r$   r$   r$   r(   r#   =   s   
8


r#   c               @   sB   e Zd Zdd Zeeo e  ddd Z	dd Z
dd	 Zd
S )TestMiscAPIsc             C   s4   t  }| |t | |d | |t  d S )Nr   )r.   Z	boot_timeassertIsInstancefloatassertGreaterr_   r^   )r:   Zbtr$   r$   r(   test_boot_time   s    zTestMiscAPIs.test_boot_timezunreliable on CIc             C   s   t  }| |g  x|D ]}|js,t|| |jt | |jttd f |j	d k	rp| |j	ttd f |j |j	 |j
dkst|tj|j
 tstr| |j qt |j qW d S )Ng        )r.   usersassertNotEqualnamerG   r{   strterminaltypehoststarteddatetimefromtimestampr   r   rD   r%   r1   )r:   r   userr$   r$   r(   
test_users   s    

zTestMiscAPIs.test_usersc             C   s&   t j}tt _zt  W d |t _X d S )N)sysstdoutr   r.   r\   )r:   r   r$   r$   r(   	test_test   s
    zTestMiscAPIs.test_testc          	   C   s  ddddddddd	g	}x"|D ]}| j tt|t|d
 qW tjdkrHtjsPttjrZt|	d dt
j krtjs|t|	d ndt
j krtjst| tjtjtjgdd |	d |	d |	d |	d n^dt
j ksdt
j kr tjst|	d	 n&dt
j krjtjs<t|	d n"tjsTttjr`t|	d x$|D ]}| jtt|d|d
 qpW d S )Nr	   r   r   r   r   r   r   r   r
   )rp   posixlinuxZbsdTrR   sunossolarisdarwinF)r{   getattrr.   boolr,   r   r	   rG   r   remover   platformlowerr   r   r6   r   r   r   countr
   r   rI   )r:   namesr   r$   r$   r(   test_os_constants   s>    











zTestMiscAPIs.test_os_constantsN)rv   rw   rx   r~   r"   ry   r   r.   r   r   r   r   r$   r$   r$   r(   rz      s   	rz   c               @   s   e Zd Zdd Zdd ZdS )TestMemoryAPIsc             C   s   t  }|jdkst||jdks,t|d|j  krBdksLn t||jdks^t||jdkspt|xt|jD ]j}t	||}|dkr| 
|ttf |dkrx|dks| d||f  ||jkrx| d||j||f  qxW d S )Nr   d   percenttotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r.   Zvirtual_memoryr   rG   Z	availabler   usedfree_fieldsr   r{   intr   rr   )r:   memr   valuer$   r$   r(   test_virtual_memory  s      

z"TestMemoryAPIs.test_virtual_memoryc             C   s   t  }| |jd |jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|j  krdksn t||j	dkst||j
dkst|d S )N)r   r   r   r   sinsoutr   r   )r.   Zswap_memoryr6   r   r   rG   r   r   r   r   r   )r:   r   r$   r$   r(   test_swap_memory   s    

 zTestMemoryAPIs.test_swap_memoryN)rv   rw   rx   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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ee dd d! Zee d"d#d$ Zd%S )&TestCpuAPIsc          	   C   st   t  }| | | |tt jdd | |d tj	drpt
d}| }W d Q R X d|krptdd S )NT)percpurR   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r.   	cpu_countZassertIsNotNoner6   rX   r@   rE   r,   pathexistsopenreadr"   ZSkipTest)r:   logicalfdZcpuinfo_datar$   r$   r(   test_cpu_count_logical3  s    

z"TestCpuAPIs.test_cpu_count_logicalc             C   sf   t  }t jdd}|d kr&| dtrJt d d dkrJ| | n| |d | || d S )NF)r   zphysical cpu_count() is NonerV   )   rR   rR   )r.   r   skipTestr   r   getwindowsversionrD   rE   )r:   r   Zphysicalr$   r$   r(   test_cpu_count_physical?  s    
z#TestCpuAPIs.test_cpu_count_physicalc          
   C   sz   xtdD ]l}t jd|d}| t  |js2tW d Q R X t jd|d"}| tjdd |jshtW d Q R X qW d S )N)rP   r   Nz$psutil._psplatform.cpu_count_logical)return_valuez%psutil._psplatform.cpu_count_physicalF)r   )r   r4   rD   r.   r   rF   rG   )r:   valrJ   r$   r$   r(   test_cpu_count_noneJ  s    


zTestCpuAPIs.test_cpu_count_nonec             C   s^   d}t  }t| x,|D ]$}| |t | |d ||7 }qW | |t| t| d S )Nr   g        )r.   r@   sumr{   r|   rE   r6   r   )r:   r   timescp_timer$   r$   r(   test_cpu_timesV  s    
zTestCpuAPIs.test_cpu_timesc             C   sP   t t }t t }x(t |k r@t t }||krd S qW | d d S )Nztime remained the same)r   r.   r@   r^   r   rr   )r:   t1Zstop_att2r$   r$   r(   test_cpu_times_time_increasess  s    z)TestCpuAPIs.test_cpu_times_time_increasesc             C   s   xft jddD ]V}d}t| x,|D ]$}| |t | |d ||7 }q$W | |t| t| qW | tt jddd tt jdd d S )NT)r   r   g        F)	r.   r@   r   r{   r|   rE   r6   r   rX   )r:   r   r   r   r$   r$   r(   test_per_cpu_times}  s    
zTestCpuAPIs.test_per_cpu_timesc             C   s   t jdd}t t }xht |kr0| dS t jdd}x@t||D ]2\}}t |t | }}|| }|dkrHd S qHW qW d S )NT)r   rQ   g?)r.   r@   r^   r   rr   zipZ_cpu_busy_time)r:   Ztot1Z	giveup_atZtot2r   r   
differencer$   r$   r(   test_per_cpu_times_2  s    
z TestCpuAPIs.test_per_cpu_times_2c             C   s\   t  }t jdd}|dd t| D }x*|jD ] }| jt||t||dd q4W d S )NT)r   c             S   s   g | ]}t |qS r$   )r   )r&   numr$   r$   r(   r)     s    z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rR   )delta)r.   r@   _maker   r   assertAlmostEqualr   )r:   baseZper_cpuZsummed_valuesfieldr$   r$   r(   test_cpu_times_comparison  s    z%TestCpuAPIs.test_cpu_times_comparisonc          
   C   s   y<|  |t | |d | |d | |dt   W n@ tk
r| } z"td|t	|t	|f W d d }~X Y nX d S )Ng        g       g      Y@z
%s
last=%s
new=%s)
r{   r|   rE   ZassertIsNotassertLessEqualr.   r   rG   pprintpformat)r:   r   Zlast_retZnew_reterrr$   r$   r(   _test_cpu_percent  s    zTestCpuAPIs._test_cpu_percentc          	   C   sb   t jdd}x.tdD ]"}t jd d}| ||| |}qW | t t jdd W d Q R X d S )NgMbP?)intervalr   rP   )r.   cpu_percentrs   r   r9   rC   )r:   lastr'   newr$   r$   r(   test_cpu_percent  s    zTestCpuAPIs.test_cpu_percentc          	   C   s   t jddd}| t|t   x>tdD ]2}t jd dd}x|D ]}| ||| qDW |}q,W | t t jddd W d Q R X d S )NgMbP?T)r   r   r   rP   )	r.   r   r6   rX   r   rs   r   r9   rC   )r:   r   r'   r   r   r$   r$   r(   test_per_cpu_percent  s    
z TestCpuAPIs.test_per_cpu_percentc          	   C   s   t jdd}xNtdD ]B}t jd d}x|D ]}| ||| q,W | t||| |}qW | t t jdd W d Q R X d S )NgMbP?)r   r   rP   )r.   cpu_times_percentrs   r   r   r9   rC   )r:   r   r'   r   r   r$   r$   r(   test_cpu_times_percent  s    
z"TestCpuAPIs.test_cpu_times_percentc             C   s   t jddd}| t|t   x^tdD ]R}t jd dd}x:|D ]2}x|D ]}| ||| qNW | t||| qDW |}q,W d S )NgMbP?T)r   r   r   )r.   r   r6   rX   r   rs   r   r   )r:   r   r'   r   cpur   r$   r$   r(   test_per_cpu_times_percent  s    

z&TestCpuAPIs.test_per_cpu_times_percentc          	   C   sr   t jdd dd t jddD }tjd|d8 x0t jddD ] }x|D ]}| |d d  qJW q@W W d Q R X d S )NT)r   c             S   s*   g | ]"}| d d tt|jD qS )c             S   s   g | ]}d qS )r   r$   )r&   r'   r$   r$   r(   r)     s    zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   rs   rX   r   )r&   r'   r$   r$   r(   r)     s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_times)r   )r.   r   r@   r   r4   r   )r:   Z
zero_timesr   r   r$   r$   r(   #test_per_cpu_times_percent_negative  s    
z/TestCpuAPIs.test_per_cpu_times_percent_negativec             C   sX   t  }| |jd x<|jD ]2}t||}| |d ts|dkr| |d qW d S )N)ctx_switches
interruptssoft_interruptssyscallsr   )r   r   )r.   Z	cpu_statsr6   r   r   rE   r   r}   )r:   Zinfosr   r   r$   r$   r(   test_cpu_stats  s    
zTestCpuAPIs.test_cpu_statsznot suportedc                sd    fdd}t jdd}tr*|s* d|s6t||t jddg tr` t|t   d S )Nc                sr   xl| D ]d}  |jd |jdkr2 |j|j x6|jD ],}t||} |ttt	f  
|d q:W qW d S )N)currentminrt   g        r   )r6   r   rt   r   r   r   r{   r   r   r|   rE   )lsntr   r   )r:   r$   r(   check_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsT)r   zreturns empty list on FreeBSDF)	r.   Zcpu_freqr   r   rG   r   r6   rX   r   )r:   r   r   r$   )r:   r(   test_cpu_freq  s    

zTestCpuAPIs.test_cpu_freqznot supportedc             C   sB   t  }| t|d x$|D ]}| |t | |d qW d S )NrS   g        )r.   
getloadavgr6   rX   r{   r|   rE   )r:   Zloadavgloadr$   r$   r(   test_getloadavg  s
    
zTestCpuAPIs.test_getloadavgN)rv   rw   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   ry   r   r   r   r   r$   r$   r$   r(   r   1  s"   
!

	
r   c               @   s   e Zd Zeeoe ddd Zee ddd Z	dd Z
d	d
 Zeeo\ejd deeope  ddd Zdd ZdS )TestDiskAPIszunreliable on PYPY32 + 32BITc          	   C   s  t t }| |jd |jdks.t||jdks@t||j	dksRt||j|jksft||j|j	kszt|d|j
  krdksn t|j
ttdrtt }d}| |j|j | j|j	|j	|d | j|j|j|d |  }| t t | W d Q R X d S )N)r   r   r   r   r   r   
disk_usagei  P )r   )r.   r   r,   getcwdr6   r   r   rG   r   r   r   ra   shutilr   Z
get_testfnr9   r   )r:   usageZshutil_usageZ	tolerancefnamer$   r$   r(   test_disk_usage#  s&    "
zTestDiskAPIs.test_disk_usageznot an ASCII fsc          	   C   s$   |  t tt W d Q R X d S )N)r9   UnicodeEncodeErrorr.   r   r!   )r:   r$   r$   r(   test_disk_usage_unicode>  s    z$TestDiskAPIs.test_disk_usage_unicodec             C   s   t d d S )N   .)r.   r   )r:   r$   r$   r(   test_disk_usage_bytesD  s    z"TestDiskAPIs.test_disk_usage_bytesc                s   fdd}t jdd} j||d xj|D ]b}|| trHd|jkrHq,tsdtj|j	sjt
|n|j	 tj|jst
||js,t
|q,W t jdd} j||d xt jddD ]}|| ts|jryt|j W nV tk
r6 } z6trtr|jtjkrw|jtjtjfkr& W d d }~X Y qX tj|jst
|qW dd	 }|t}d
d t jddD } || d S )Nc                s     | jt   | jt   | jt   | jt   | jttd f   | j	ttd f | jd k	rt
s | jd | j	d k	r | j	d d S )Nr   )r{   devicer   
mountpointfstypeoptsmaxfiler   r   maxpathr    r}   )r   )r:   r$   r(   check_ntupleH  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)all)rp   ZcdromTc             S   s2   t j| } xt j| s(t j| } qW |  S )N)r,   r   abspathismountdirnamer   )r   r$   r$   r(   find_mount_pointy  s    z;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_pointc             S   s   g | ]}|j r|j  qS r$   )r   r   )r&   r'   r$   r$   r(   r)     s    z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r.   Zdisk_partitionsrg   r   r   r	   r,   r   r   r   rG   r   r   statOSErrorr    r   errnoZEIOEPERMEACCES__file__r+   )r:   r   r   Zdiskr   r   ZmountZmountsr$   )r:   r(   test_disk_partitionsG  s<    

z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIc                s~    fdd}t jdd}|d k	s(td|| t jdd} t|tt| x$|D ]}|sjt||||  qZW d S )Nc                s     | d | j   | d | j   | d | j   | d | j tstsƈ  | d | j   | d | j t	r  | d | j
   | d | j   | d	 | j ntrƈ  | d | j x$| jD ]}t| |dkst| qW d S )
Nr   rR   rV   rS         r         )r6   
read_countwrite_count
read_byteswrite_bytesr   r   	read_time
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r   r   rG   )r   r   )r:   r$   r(   r     s    z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF)perdiskzno disks on this system?T)r.   disk_io_countersrG   r6   rX   rf   )r:   r   retkeyr$   )r:   r(   test_disk_io_counters  s    
z"TestDiskAPIs.test_disk_io_countersc          	   C   sN   t jdi d6}| tjdd | tjddi  |js@tW d Q R X d S )Nz#psutil._psplatform.disk_io_counters)r   F)r  T)r   r4   rD   r.   r  r6   rF   rG   )r:   rJ   r$   r$   r(   test_disk_io_counters_no_disks  s
    
z+TestDiskAPIs.test_disk_io_counters_no_disksN)rv   rw   rx   r"   ry   r   r   r   r   r   r   r  r   r,   r   r   r   r.   r  r  r  r$   r$   r$   r(   r   !  s   =r   c               @   sn   e Zd Zee ddd Zee ddd Zdd Zdd	 Z	d
d Z
eepZepZe ddd ZdS )TestNetAPIsznot supportedc                sl    fdd}t jdd}|| t jdd} |g  x.|D ]&} |  |t |||  q>W d S )Nc                s(    | d | j   | d | j   | d | j   | d | j   | d | j   | d | j   | d | j   | d | j | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdks$t	| d S )	Nr   rR   rV   rS   r  r	  r   r
  )
r6   
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrG   )r   )r:   r$   r(   r     s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF)pernicT)r.   net_io_countersr   rg   r{   r   )r:   r   r  r  r$   )r:   r(   test_net_io_counters  s    

z TestNetAPIs.test_net_io_countersc          	   C   sN   t jdi d6}| tjdd | tjddi  |js@tW d Q R X d S )Nz"psutil._psplatform.net_io_counters)r   F)r!  T)r   r4   rD   r.   r"  r6   rF   rG   )r:   rJ   r$   r$   r(   test_net_io_counters_no_nics  s
    
z(TestNetAPIs.test_net_io_counters_no_nicsc             C   sx  t  }|st|t  }ttjtjt jg}x|	 D ]\}}| 
|t | tt|t| x|D ]}| 
|jt | 
|jt | 
|jttd f | 
|jttd f | |j| tjdkrts| 
|jtj || jr|jtjkr:t|j}t| ||jdf W d Q R X nj|jtjkrt|jdtjtjdtj d }|\}	}
}}}t|	|
|}t| || W d Q R X xB|j|j|j|j!fD ]*}|d k	r|jtjkrt"||j qW |jr| #|j! qr|j!rr| #|j qrW q<W t$s*t%s*t&rHt'tdrt| t jtj n,t(r`| t jtj) nt*rt| t jd d S )N)rS   r  r   AF_LINKrP   )+r.   net_if_addrsrG   net_if_statsrf   socketAF_INETAF_INET6r%  itemsr{   r   r6   rX   familyr   addressnetmaskr   	broadcastr+   r   version_infor   r   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr   rD   r   r   r
   ra   r   	AF_PACKETr   )r:   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrA   afsocktypeproto	canonnamesaipr$   r$   r(   test_net_if_addrs  sX    

zTestNetAPIs.test_net_if_addrsc          	   C   sz   t rdtjdd d d fg}ndg}tjd|dB}t d d }|jsJtt r^| |j	d n| |j	d W d Q R X d S )	Nem1z06:3d:29)rF  rP   z06-3d-29NNNzpsutil._psplatform.net_if_addrs)r   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r.   r%  r   r4   r&  rF   rG   r6   r-  )r:   r  rJ   r=  r$   r$   r(    test_net_if_addrs_mac_null_bytes  s    

z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc       	      C   s   t  }|st|t jt jt jf}xh| D ]\\}}| |t |\}}}}| |t	 | 
|| | 
|| | |d | |d q.W d S )Nr   )r.   r'  rG   NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr+  r{   r   r   r+   rE   )	r:   r;  Zall_duplexesr   Zstatsr2  duplexspeedmtur$   r$   r(   test_net_if_stats$  s    zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc          	   C   sD   t jdttjdd$}t }| |i  |js6t	W d Q R X d S )Nzpsutil._psutil_posix.net_if_mtur?   )r*   )
r   r4   r  r  ZENODEVr.   r'  r6   rF   rG   )r:   rJ   r  r$   r$   r(   test_net_if_stats_enodev3  s
    z$TestNetAPIs.test_net_if_stats_enodevN)rv   rw   rx   r"   ry   r   r#  r$  rE  rG  rN  r   r   r   rO  r$   r$   r$   r(   r    s   
<r  c               @   sr   e Zd Zee ddd Zee ddd Zee dee	 ddd Z
ee dd	d
 ZdS )TestSensorsAPIsznot supportedc             C   s   t  }x| D ]x\}}| |t xb|D ]Z}| |jt |jd k	rV| |jd |jd k	rn| |jd |j	d k	r,| |j	d q,W qW d S )Nr   )
r.   sensors_temperaturesr+  r{   r   labelr   rE   highcritical)r:   tempsr   entriesentryr$   r$   r(   test_sensors_temperatures@  s    



z)TestSensorsAPIs.test_sensors_temperaturesc          	   C   sp   ddgi}t jd|dN}tjddd d }|js8t| |jd | |jd	 | |j	d
 W d Q R X d S )NZcoretemp)rR  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperatures)r   T)Z
fahrenheitr   g     ^@g     a@g     c@)
r   r4   r.   rQ  rF   rG   r6   r   rS  rT  )r:   drJ   rU  r$   r$   r(   #test_sensors_temperatures_fahreneitN  s    


z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz
no batteryc             C   sp   t  }| |jd | |jd |jt jt jfkrF| |jd n|jt jkr^| |j	 | 
|j	t d S )Nr   r   )r.   Zsensors_batteryrE   r   r   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDrg   power_pluggedr{   r   )r:   r  r$   r$   r(   test_sensors_batteryZ  s    
z$TestSensorsAPIs.test_sensors_batteryc             C   sj   t  }x\| D ]P\}}| |t x:|D ]2}| |jt | |jttf | 	|jd q,W qW d S )Nr   )
r.   Zsensors_fansr+  r{   r   rR  r   r   r   rE   )r:   Zfansr   rV  rW  r$   r$   r(   test_sensors_fansh  s    
z!TestSensorsAPIs.test_sensors_fansN)rv   rw   rx   r"   ry   r   rX  rZ  r   r   r_  r   r`  r$   r$   r$   r(   rP  >  s
   rP  __main__)run_from_name):__doc__r3  r   r  r,   r   r   rd   r(  r   r^   r.   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._compatr   r   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   rz   r   r   r   r  rP  rv   Zpsutil.tests.runnerrb  r  r$   r$   r$   r(   <module>   st    J% q  5
