
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    =_                     @   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 5 Q R X tjdtt d* | tj tt  W 5 Q R X W 5 Q R X d S )Nc                 S   s   g | ]
}|j qS  pid.0xr$   r$   K/opt/alt/python38/lib64/python3.8/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+   B   s     c                 S   s   g | ]
}|j qS 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selfZsprocpr$   r$   r*   test_process_iter?   s     z!TestProcessAPIs.test_process_iterc              	   C   s,  t jdgdD ]}| t|j dg q| t tt jdgd W 5 Q R X tj	dt 
dddH}t jddgdD ]&}| |jd  | |jd d q||jstW 5 Q R X tj	dt 
dddT}t }t jddg|d	D ](}| |jd | | |jd d q|jstW 5 Q R X d S )
Nr&   )attrsZfooz$psutil._psplatform.Process.cpu_timesr    r,   	cpu_times)rA   Zad_value)r1   r2   r9   r:   infokeysr<   
ValueErrorr   r7   r;   assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)r>   r?   mflagr$   r$   r*   test_prcess_iter_w_attrsP   s0    

 
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  |D ]}	
t|	d qtdfdd}
|  |
||\}}|jdd |D  tr6| jtj  n| jd  |jg |D ]}	
t|	d q\tdfdd}
|  |  |
||\}}t t|j|j|jg |D ]}	t|	d qd 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$   r1   r4   r&   r'   r$   r$   r*   r+   n   s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rS   g{Gz?rV   rS   g      ?   
returncode   c                    s<   t j| d|d\}} t|d  t|d ||fS )NQ?rX   rW      r1   
wait_procsr9   lenprocsrS   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+      s     c                    s<   t j| d|d\}} t|d  t|d ||fS )Nr\   rX   rY   r   r^   ra   re   r$   r*   rf      s    
)r3   r<   rF   r1   r_   	TypeErrortime
assertLessr9   r`   assertFalsehasattrr   	terminater.   r&   r	   poprZ   signalSIGTERMset
assertTrue)r>   rS   sproc1sproc2sproc3rb   trc   rd   r?   rf   r$   )rR   r>   r*   test_wait_procsd   sF     zTestProcessAPIs.test_wait_procsc                 C   sP   |   }|   }|   }dd |||fD }|D ]}|  q0t|\}}d S )Nc                 S   s   g | ]}t |jqS r$   rT   r'   r$   r$   r*   r+      s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r3   rl   r1   r_   )r>   rr   rs   rt   rb   r?   rc   rd   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 )NrU   r   )r3   rq   r1   
pid_existsr&   r4   r5   r6   rj   r9   rR   r=   r$   r$   r*   test_pid_exists   s    zTestProcessAPIs.test_pid_existsc              	   C   s   t  }|D ]L}zt |s tW q tk
rV   td |t  krR| | Y qX qtt|d t|d }|D ]}| j	t ||d qxd S )Ng?i  ip  msg)
r1   rR   rx   rJ   rh   sleepfailrangemaxrj   )r>   rR   r&   r$   r$   r*   test_pid_exists_2   s    
z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__r@   rO   r"   skipIfr   r   rv   rw   ry   r   r$   r$   r$   r*   r#   =   s   

7

	
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   )r1   Z	boot_timeassertIsInstancefloatassertGreaterri   rh   )r>   Zbtr$   r$   r*   test_boot_time   s    zTestMiscAPIs.test_boot_timeunreliable on CIc                 C   s   t  }| |g  |D ]}|js*t|| |jt | |jttd f |j	d k	rn| |j	ttd f |j |j	 |j
dkst|tj|j
 tstr| |j qt |j qd S )N        )r1   usersassertNotEqualnamerJ   r   strterminaltypehoststarteddatetimefromtimestampr   r   rG   r&   r4   )r>   r   userr$   r$   r*   
test_users   s    
zTestMiscAPIs.test_usersc                 C   s&   t j}tt _zt  W 5 |t _X d S rP   )sysstdoutr   r1   rf   )r>   r   r$   r$   r*   	test_test   s
    zTestMiscAPIs.test_testc              	   C   s  ddddddddd	g	}|D ]}| j tt|t|d
 qtjdkrDtjsLttjrVt|	d dt
j krtjsxt|	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rftjs8t|	d n"tjsPttjr\t|	d |D ]}| jtt|d|d
 qjd S )Nr	   r   r   r   r   r   r   r   r
   rz   posixlinuxZbsdTrW   sunossolarisdarwinF)r   getattrr1   boolr/   r   r	   rJ   r   remover   platformlowerr   r   r9   r   r   r   countr
   r   rL   )r>   namesr   r$   r$   r*   test_os_constants   sP      








zTestMiscAPIs.test_os_constantsN)r   r   r   r   r"   r   r   r1   r   r   r   r   r$   r$   r$   r*   r      s
   
	r   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||jD ]j}t	||}|dkr| 
|ttf |dkrv|dks| d||f  ||jkrv| d||j||f  qvd S )Nr   d   percenttotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r1   Zvirtual_memoryr   rJ   Z	availabler   usedfree_fieldsr   r   intr   r}   )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   )r1   Zswap_memoryr9   r   r   rJ   r   r   r   r   r   )r>   r   r$   r$   r*   test_swap_memory   s     
 zTestMemoryAPIs.test_swap_memoryN)r   r   r   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 5 Q R X d|krptdd S )NTpercpurW   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r1   	cpu_countZassertIsNotNoner9   r`   rC   rH   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 Noner]   )   rW   rW   )r1   r   skipTestr   r   getwindowsversionrG   rH   )r>   r   Zphysicalr$   r$   r*   test_cpu_count_physical?  s    
z#TestCpuAPIs.test_cpu_count_physicalc              
   C   sv   dD ]l}t jd|d}| t  |js0tW 5 Q R X t jd|d"}| tjdd |jsftW 5 Q R X qd S )N)rU   r   Nz$psutil._psplatform.cpu_count_logicalZreturn_valuez%psutil._psplatform.cpu_count_physicalFr   )r   r7   rG   r1   r   rI   rJ   )r>   valrM   r$   r$   r*   test_cpu_count_noneJ  s    zTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  }t| |D ]$}| |t | |d ||7 }q| |t| t| d S )Nr   r   )r1   rC   sumr   r   rH   r9   r   )r>   r   timescp_timer$   r$   r*   test_cpu_timesV  s    
zTestCpuAPIs.test_cpu_timesc                 C   sL   t t }t t }t |k r>t t }||krd S q| d d S )Nztime remained the same)r   r1   rC   rh   r   r}   )r>   t1Zstop_att2r$   r$   r*   test_cpu_times_time_increasess  s    z)TestCpuAPIs.test_cpu_times_time_increasesc                 C   s   t jddD ]R}d}t| |D ]$}| |t | |d ||7 }q | |t| t| q| tt jddd tt jdd d S )NTr   r   r   F)	r1   rC   r   r   r   rH   r9   r   r`   )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 }t |kr.| dS t jdd}t||D ]4\}}t |t | }}|| }|dkrD d S qDqd S )NTr   rV   g?)r1   rC   rh   r   r}   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   sX   t  }t jdd}|dd t| D }|jD ] }| jt||t||dd q2d S )NTr   c                 S   s   g | ]}t |qS r$   )r   )r(   numr$   r$   r*   r+     s     z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rW   delta)r1   rC   _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   z<|  |t | |d | |d | |dt   W n@ tk
r| } z"td|t	|t	|f W 5 d }~X Y nX d S )Nr   g       g      Y@z
%s
last=%s
new=%s)
r   r   rH   ZassertIsNotassertLessEqualr1   r   rJ   pprintpformat)r>   r   Zlast_retZnew_reterrr$   r$   r*   _test_cpu_percent  s      zTestCpuAPIs._test_cpu_percentc              	   C   s^   t jdd}tdD ]"}t jd d}| ||| |}q| t t jdd W 5 Q R X d S NMbP?)intervalr   rU   )r1   cpu_percentr~   r   r<   rF   )r>   lastr)   newr$   r$   r*   test_cpu_percent  s    zTestCpuAPIs.test_cpu_percentc              	   C   s   t jddd}| t|t   tdD ].}t jd dd}|D ]}| ||| q@|}q*| t t jddd W 5 Q R X d S )Nr   Tr   r   r   rU   )	r1   r   r9   r`   r   r~   r   r<   rF   r>   r   r)   r   r   r$   r$   r*   test_per_cpu_percent  s    z TestCpuAPIs.test_per_cpu_percentc              	   C   sz   t jdd}tdD ]>}t jd d}|D ]}| ||| q(| t||| |}q| t t jdd W 5 Q R X d S r   )r1   cpu_times_percentr~   r   r   r<   rF   r   r$   r$   r*   test_cpu_times_percent  s    z"TestCpuAPIs.test_cpu_times_percentc                 C   sz   t jddd}| t|t   tdD ]J}t jd dd}|D ].}|D ]}| ||| qH| t||| q@|}q*d S )Nr   Tr   r   )r1   r   r9   r`   r   r~   r   r   )r>   r   r)   r   cpur   r$   r$   r*   test_per_cpu_times_percent  s    z&TestCpuAPIs.test_per_cpu_times_percentc              	   C   sj   t jdd dd t jddD }tjd|d0 t jddD ]}|D ]}| |d d  qFq>W 5 Q R X d S )NTr   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+     s     zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   r~   r`   r   r'   r$   r$   r*   r+     s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r1   r   rC   r   r7   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   sT   t  }| |jd |jD ]2}t||}| |d ts|dkr| |d qd S )N)ctx_switches
interruptssoft_interruptssyscallsr   )r   r   )r1   Z	cpu_statsr9   r   r   rH   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                    sj   | D ]`}  |jd |jdkr0 |j|j |jD ],}t||} |ttt	f  
|d q6qd S )N)currentminr   r   r   )r9   r   r   r   r   r   r   r   r   r   rH   )lsntr   r   re   r$   r*   check_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   zreturns empty list on FreeBSDF)	r1   Zcpu_freqr   r   rJ   r   r9   r`   r   )r>   r   r   r$   re   r*   test_cpu_freq  s    

zTestCpuAPIs.test_cpu_freqnot supportedc                 C   s>   t  }| t|d |D ]}| |t | |d qd S )NrY   r   )r1   
getloadavgr9   r`   r   r   rH   )r>   Zloadavgloadr$   r$   r*   test_getloadavg  s
    zTestCpuAPIs.test_getloadavgN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r   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 5 Q R X d S )N)r   r   r   r   r   r   
disk_usagei  P r   )r1   r  r/   getcwdr9   r   r   rJ   r   r   r   rk   shutilr   Z
get_testfnr<   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 5 Q R X d S rP   )r<   UnicodeEncodeErrorr1   r  r!   re   r$   r$   r*   test_disk_usage_unicode>  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r1   r  re   r$   r$   r*   test_disk_usage_bytesD  s    z"TestDiskAPIs.test_disk_usage_bytesc                    s   fdd}t jdd} j||d |D ]b}|| trFd|jkrFq*tsbtj|j	sht
|n|j	 tj|js~t
||js*t
|q*t jdd} j||d t jddD ]}|| ts|jrzt|j W n\ tk
r6 } z<trtr|jtjkrW Y q|jtjtjfkr& W 5 d }~X Y qX tj|jst
|qd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 r   )r   devicer   
mountpointfstypeoptsmaxfiler   r   maxpathr    r   r   re   r$   r*   check_ntupleH  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allrz   ZcdromTc                 S   s.   t j| } t j| s&t j| } q|  S rP   )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+     s    z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r1   Zdisk_partitionsrq   r   r  r	   r/   r   r   r  rJ   r  r  statOSErrorr    r   errnoZEIOEPERMEACCES__file__r.   )r>   r  r   Zdiskr   r  ZmountZmountsr$   re   r*   test_disk_partitionsG  s>    

z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                    sz    fdd}t jdd}|d k	s(td|| t jdd} t|tt| |D ]}|sht||||  qXd 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 | jD ]}t| |dkst| qd S )
Nr   rW   r]   rY         r         )r9   
read_countwrite_count
read_byteswrite_bytesr   r   	read_time
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r   r   rJ   )r   r   re   r$   r*   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r1   disk_io_countersrJ   r9   r`   rp   r>   r  retkeyr$   re   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 5 Q R X d S )Nz#psutil._psplatform.disk_io_countersr   Fr)  T)r   r7   rG   r1   r*  r9   rI   rJ   r>   rM   r$   r$   r*   test_disk_io_counters_no_disks  s    z+TestDiskAPIs.test_disk_io_counters_no_disksN)r   r   r   r"   r   r   r   r  r   r  r
  r  r   r/   r   r   r   r1   r*  r.  r0  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 )TestNetAPIsr   c                    sh    fdd}t jdd}|| t jdd} |g  |D ]&} |  |t |||  q<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   rW   r]   rY   r  r   r   r!  )
r9   
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrJ   r  re   r$   r*   r    s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFZpernicT)r1   net_io_countersr   rq   r   r   r+  r$   re   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 5 Q R X d S )Nz"psutil._psplatform.net_io_countersr   Fr:  T)r   r7   rG   r1   r;  r9   rI   rJ   r/  r$   r$   r*   test_net_io_counters_no_nics  s    z(TestNetAPIs.test_net_io_counters_no_nicsc                 C   sh  t  }|st|t  }ttjtjt jg}|	 D ]\}}| 
|t | tt|t| |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r2t|j}t| ||jdf W 5 Q R X nj|jtjkrt|jdtjtjdtj d }|\}	}
}}}t|	|
|}t| || W 5 Q R X |j|j|j|j!fD ]*}|d k	r|jtjkrt"||j q|jr| #|j! qj|j!rj| #|j qjq8t$st%st&r8t'tdrd| t jtj n,t(rP| t jtj) nt*rd| t jd d S )N)rY   r  r   AF_LINKrU   )+r1   net_if_addrsrJ   net_if_statsrp   socketAF_INETAF_INET6r>  itemsr   r   r9   r`   familyr   addressnetmaskr   	broadcastr.   r   version_infor   r   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr   rG   r   r   r
   rk   r   	AF_PACKETr   )r>   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrD   afsocktypeproto	canonnamesaipr$   r$   r*   test_net_if_addrs  sh    
    
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 5 Q R X d S )	Nem1z06:3d:29)r_  rU   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r1   r>  r   r7   r?  rI   rJ   r9   rF  )r>   r,  rM   rV  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}| D ]\\}}| |t |\}}}}| |t	 | 
|| | 
|| | |d | |d q,d S r   )r1   r@  rJ   NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNrD  r   r   r   r.   rH   )	r>   rT  Zall_duplexesr   ZstatsrK  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 5 Q R X d S )Nzpsutil._psutil_posix.net_if_mturB   r,   )
r   r7   r  r  ZENODEVr1   r@  r9   rI   rJ   )r>   rM   r,  r$   r$   r*   test_net_if_stats_enodev3  s    
z$TestNetAPIs.test_net_if_stats_enodevN)r   r   r   r"   r   r   r<  r=  r^  r`  rg  r   r   r   rh  r$   r$   r$   r*   r1    s   

	<r1  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 )TestSensorsAPIsr   c                 C   s   t  }| D ]t\}}| |t |D ]Z}| |jt |jd k	rR| |jd |jd k	rj| |jd |j	d k	r(| |j	d q(qd S r   )
r1   sensors_temperaturesrD  r   r   labelr   rH   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 5 Q R X d S )NZcoretemp)rk  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)
r   r7   r1   rj  rI   rJ   r9   r   rl  rm  )r>   drM   rn  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   )r1   Zsensors_batteryrH   r   r   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDrq   power_pluggedr   r   )r>   r,  r$   r$   r*   test_sensors_batteryZ  s    z$TestSensorsAPIs.test_sensors_batteryc                 C   sb   t  }| D ]L\}}| |t |D ]2}| |jt | |jttf | 	|jd q(qd S r   )
r1   Zsensors_fansrD  r   r   rk  r   r   r   rH   )r>   Zfansr   ro  rp  r$   r$   r*   test_sensors_fansh  s    z!TestSensorsAPIs.test_sensors_fansN)r   r   r   r"   r   r   rq  rs  r   r   rx  r   ry  r$   r$   r$   r*   ri  >  s   

ri  __main__)run_from_name):__doc__rL  r   r  r/   r   r  rn   rA  r   rh   r1   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#   r   r   r   r   r1  ri  r   Zpsutil.tests.runnerr{  r  r$   r$   r$   r*   <module>   st    J% q  5
