o
    a                     @   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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r=dd3l7m8Z8 e8e9 dS dS )4zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)FileNotFoundError)long)ASCII_FS)
CI_TESTING)DEVNULL)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)IS_64BIT)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)retry_on_failure)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   sL  |  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    n1 s^w   Y  tjdtt d- | tj tt  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                 S      g | ]}|j qS  pid.0xr%   r%   :/usr/lib/python3/dist-packages/psutil/tests/test_system.py
<listcomp>@       z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   r$   r%   r&   r(   r%   r%   r+   r,   B   r-   c                 S   r$   r%   r&   r(   r%   r%   r+   r,   F   r-   zpsutil.ProcessZside_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr'   ProcesskillwaitZassertNotInr    patchZNoSuchProcessassertEquallistAccessDeniedassertRaisesselfZsprocpr%   r%   r+   test_process_iter?   s*   "z!TestProcessAPIs.test_process_iterc                 C   sh  t jdgdD ]}| t|j dg q| t tt jdgd W d    n1 s/w   Y  tj	dt 
ddd)}t jddgdD ]}| |jd  | |jd d qH|jsaJ W d    n1 skw   Y  tj	dt 
ddd/}t }t jddg|d	D ]}| |jd | | |jd d q|jsJ W d    d S 1 sw   Y  d S )
Nr'   )attrsZfooz$psutil._psplatform.Process.cpu_timesr    r.   	cpu_times)rA   Zad_value)r2   r3   r9   r:   infokeysr<   
ValueErrorr    r8   r;   assertIsNoneassertGreaterEqualcalledobjectassertIs)r>   r?   mflagr%   r%   r+   test_prcess_iter_w_attrsP   s4   


"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 q`tdfdd}
|  |
||\}}|jdd |D  tr| jtj  n	| jd  |jg |D ]
}	
t|	d qt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      g | ]}t |jqS r%   r2   r5   r'   r(   r%   r%   r+   r,   n       z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rR   g{Gz?rW   rR   g      ?   
returncode   c                    <   t j| d|d\}} t|d  t|d ||fS )NQ?rY   rX      r2   
wait_procsr9   lenprocsrR   gonealiver>   r%   r+   test{      
z-TestProcessAPIs.test_wait_procs.<locals>.testc                 S   r$   r%   r&   r(   r%   r%   r+   r,      r-   c                    r]   )Nr^   rY   rZ   r   r`   rc   rg   r%   r+   rh      ri   )r4   r<   rF   r2   ra   	TypeErrortime
assertLessr9   rb   assertFalsehasattrr!   	terminater/   r'   r	   popr[   signalSIGTERMset
assertTrue)r>   rR   sproc1sproc2sproc3rd   tre   rf   r?   rh   r%   )rQ   r>   r+   test_wait_procsd   sH    zTestProcessAPIs.test_wait_procsc                 C   sP   |   }|   }|   }dd |||fD }|D ]}|  qt|\}}d S )Nc                 S   rS   r%   rT   r(   r%   r%   r+   r,      rU   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r4   ro   r2   ra   )r>   ru   rv   rw   rd   r?   re   rf   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
 v  d S )NrV   r   )r4   rt   r2   
pid_existsr'   r5   r6   r7   rm   r9   rQ   r=   r%   r%   r+   test_pid_exists   s   zTestProcessAPIs.test_pid_existsc              	   C   s   t  }|D ]$}z	t |sJ W q ty*   td |t  v r(| | Y qw tt|d t|d }|D ]}| j	t ||d q:d S )Ng?i  ip  msg)
r2   rQ   r{   AssertionErrorrk   sleepfailrangemaxrm   )r>   rQ   r'   r%   r%   r+   test_pid_exists_2   s   

z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__r@   rN   r"   skipIfr   r   ry   rz   r|   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   )r2   Z	boot_timeassertIsInstancefloatassertGreaterrl   rk   )r>   Zbtr%   r%   r+   test_boot_time   s   zTestMiscAPIs.test_boot_timeunreliable on CIc                 C   s   t  }| |g  |D ]R}|jsJ || |jt | |jttd f |jd ur7| |jttd f |j |j |j	dksFJ |t
j
|j	 tsQtrX| |j qt |j qd S )N        )r2   usersassertNotEqualnamer   strZterminaltypeZhostZstarteddatetimeZfromtimestampr   r   rG   r'   r5   )r>   r   userr%   r%   r+   
test_users   s    
zTestMiscAPIs.test_usersc                 C   s*   t j}tt _z
t  W |t _d S |t _w rO   )sysstdoutr   r2   rh   )r>   r   r%   r%   r+   	test_test   s
   
zTestMiscAPIs.test_testc                 C   sl  g d}|D ]}| j tt|t|d qtjdkrtjsJ tjr#J |d dt	j
 v r:tjs4J |d njdt	j
 v rjtjsFJ | tjtjtjgdd	 |d
 |d |d |d n:dt	j
 v sxdt	j
 v rtjs}J |d n!dt	j
 v rtjsJ |d ntjsJ tjrJ |d |D ]}| jtt|d|d qd S )N)	r	   r   r   r   r   r   r   r   r
   r}   posixr	   Zlinuxr   ZbsdTrX   r   r   r   r   ZsunosZsolarisr
   darwinr   r   F)r   getattrr2   boolr0   r   r	   r   remover   platformlowerr   r   r9   r   r   r   countr
   r   rK   )r>   namesr   r%   r%   r+   test_os_constants   sH   














zTestMiscAPIs.test_os_constantsN)r   r   r   r   r"   r   r   r2   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J ||jdksJ |d|j  kr$dks)J | J ||jdks2J ||jdks;J ||jD ]5}t||}|dkrQ| 	|t
tf |dkrs|dksb| d||f  ||jkrs| d||j||f  q>d S )Nr   d   percenttotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r2   Zvirtual_memoryr   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J ||jdksJ ||jdkr,|jdks+J |n	|jdks5J |d|j  krCdksHJ | J ||jdksQJ ||j	dksZJ |d S )N)r   r   r   r   sinsoutr   r   )
r2   Zswap_memoryr9   r   r   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   s   t  }| | | |tt jdd | |d tj	drBt
d}| }W d    n1 s4w   Y  d|vrDtdd S d S )NTpercpurX   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r2   	cpu_countZassertIsNotNoner9   rb   rC   rH   r0   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   sh   t  }t jdd}|d u r| dtr&t d d dkr&| | d S | |d | || d S )NFr   zcpu_count_cores() is Noner_   )   rX   rX   )r2   r   skipTestr   r   ZgetwindowsversionrG   rH   )r>   r   Zcoresr%   r%   r+   test_cpu_count_cores?  s   
z TestCpuAPIs.test_cpu_count_coresc              	   C   s   dD ]J}t jd|d}| t  |jsJ W d    n1 s"w   Y  t jd|d}| tjdd |js=J W d    n1 sGw   Y  qd S )N)rV   r   Nz$psutil._psplatform.cpu_count_logicalZreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r    r8   rG   r2   r   rI   )r>   valrL   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   )r2   rC   sumr   r   rH   r9   r   )r>   r   timescp_timer%   r%   r+   test_cpu_timesV  s   
zTestCpuAPIs.test_cpu_timesc                 C   sV   t t }t t }t |k r$t t }||krd S t |k s| d d S )Nztime remained the same)r   r2   rC   rk   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 ])}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)	r2   rC   r   r   r   rH   r9   r   rb   )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 ]\}}t |t |}}|| }|dkr= d S q#q)NTr   rW   g?)r2   rC   rk   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 qd S )NTr   c                 S   s   g | ]}t |qS r%   )r   )r)   Znumr%   r%   r+   r,     s    z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rX   Zdelta)r2   rC   _maker   r   assertAlmostEqualr   )r>   baseZper_cpuZsummed_valuesZfieldr%   r%   r+   test_cpu_times_comparison  s   
z%TestCpuAPIs.test_cpu_times_comparisonc              
   C   sv   z|  |t | |d | |d | |dt   W d S  ty: } ztd|t	|t	|f d }~ww )Nr   g       g      Y@z
%s
last=%s
new=%s)
r   r   rH   ZassertIsNotassertLessEqualr2   r   r   pprintZpformat)r>   r   Zlast_retZnew_reterrr%   r%   r+   _test_cpu_percent  s   zTestCpuAPIs._test_cpu_percentc                 C   st   t jdd}tdD ]}t jd d}| ||| |}q
| t t jdd W d    d S 1 s3w   Y  d S NMbP?)intervalr   rV   )r2   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 d    d S 1 sEw   Y  d S )Nr   Tr   r   r   rV   )	r2   r   r9   rb   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   s   t jdd}tdD ]}t jd d}|D ]	}| ||| q| t||| |}q
| t t jdd W d    d S 1 sAw   Y  d S r   )r2   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 ]%}t jd dd}|D ]}|D ]	}| ||| q$| t||| q |}qd S )Nr   Tr   r   )r2   r   r9   rb   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   s   t jdd dd t jddD }tjd|d t jddD ]}|D ]	}| |d d  q#qW d    d S 1 s9w   Y  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   rb   r   r(   r%   r%   r+   r,     s    "zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r2   r   rC   r    r8   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 ]}t||}| |d ts'|dv r'| |d qd S )N)ctx_switches
interruptsZsoft_interruptsZsyscallsr   )r   r   )r2   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                    sh    fdd}t jdd}tr|s d|sJ ||t jddg tr2 t|t   d S d S )Nc                    sj   | D ]0}  |jd |jdkr |j|j |jD ]}t||} |ttt	f  
|d qqd S )N)currentminr   r   r   )r9   r   r   r   r   r   r   r   r   r   rH   )lsntr   r   rg   r%   r+   check_ls  s   


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   zreturns empty list on FreeBSDF)r2   Zcpu_freqr   r   r   r9   rb   r   )r>   r   r   r%   rg   r+   test_cpu_freq  s   

zTestCpuAPIs.test_cpu_freqnot supportedc                 C   s>   t  }| t|d |D ]}| |t | |d qd S )NrZ   r   )r2   
getloadavgr9   rb   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o8e  ddd Zdd ZdS )TestDiskAPIszunreliable on PYPY32 + 32BITc                 C   s2  t t }| |jd |jdksJ ||jdks J ||jdks)J ||j|jks3J ||j|jks=J |d|j	  krHdksNn J |j	t
tdrxtt }d}| |j|j | j|j|j|d | j|j|j|d |  }| t t | W d    d S 1 sw   Y  d S )N)r   r   r   r   r   r   
disk_usagei  P r   )r2   r   r0   getcwdr9   r   r   r   r   r   rn   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 d    d S 1 sw   Y  d S rO   )r<   UnicodeEncodeErrorr2   r   r   rg   r%   r%   r+   test_disk_usage_unicode>  s   "z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r2   r   rg   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 ]1}|| tr#d|jv r#qts1tj|j	s0J |n|j	 tj|j
s?J ||jsFJ |qt jdd} j||d t jddD ]K}|| ts|j
rzt|j
 W n, ty } z trtr|jtjkrW Y d }~qZ|jtjtjfvr W Y d }~qZd }~ww tj|j
sJ |qZd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 ur@t
s@ | jd | j	d urN | j	d d S d S r   )r   devicer   
mountpointfstypeoptsZmaxfiler   r   Zmaxpathr   r   r   rg   r%   r+   check_ntupleH  s   
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allr}   ZcdromTc                 S   s8   t j| } t j| st j| } t j| r|  S rO   )r0   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>)r2   Zdisk_partitionsrt   r   r  r	   r0   r   r   r  r  r  statOSErrorr   r   errnoZEIOEPERMZEACCES__file__r/   )r>   r  r   Zdiskr   r  ZmountZmountsr%   rg   r+   test_disk_partitionsG  sF   

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 usJ d|| t jdd} t|tt| |D ]}|s4J ||||  q,d S )Nc                    s     | d | j   | d | j   | d | j   | d | j tsctsc  | d | j   | d | j t	rX  | d | j
   | d | j   | d	 | j ntrc  | d | j | jD ]}t| |dkssJ | qfd S )
Nr   rX   r_   rZ         r         )r9   Z
read_countZwrite_countZ
read_bytesZwrite_bytesr   r   Z	read_timeZ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r   r   )r   r   rg   r%   r+   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r2   disk_io_countersr9   rb   rs   r>   r  retkeyr%   rg   r+   test_disk_io_counters  s   z"TestDiskAPIs.test_disk_io_countersc                 C   d   t jdi d!}| tjdd | tjddi  |js J W d    d S 1 s+w   Y  d S )Nz#psutil._psplatform.disk_io_countersr   Fr  T)r    r8   rG   r2   r  r9   rI   r>   rL   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   r0   r   r   r   r2   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p-ep-e 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sQJ | | jdksZJ | | jdkscJ | | jdkslJ | | jdksuJ | | jdks~J | | jdksJ | | jdksJ | d S )	Nr   rX   r_   rZ   r  r  r   r  )	r9   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  rg   r%   r+   r    s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFZpernicT)r2   net_io_countersr   rt   r   r   r  r%   rg   r+   test_net_io_counters  s   
z TestNetAPIs.test_net_io_countersc                 C   r  )Nz"psutil._psplatform.net_io_countersr   Fr   T)r    r8   rG   r2   r!  r9   rI   r  r%   r%   r+   test_net_io_counters_no_nics  s   "z(TestNetAPIs.test_net_io_counters_no_nicsc              
   C   s  t  }|s
J |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rptsp| 	|jtj || jr|jtjkrt|j}t| ||jdf W d    n1 sw   Y  n>|jtjkrt|jdtjtjdtjd }|\}	}
}}}t|	|
|}t| || W d    n1 sw   Y  |j|j|j|j fD ]}|d ur|jtjkrt!||j q|jr| "|j  q4|j r| "|j q4qt#st$st%r,t&tdr*| t jtj d S d S t'r9| t jtj( d S t)rE| t jd d S d S )N)rZ   r  r   AF_LINKrV   )*r2   net_if_addrsnet_if_statsrs   socketZAF_INETZAF_INET6r$  itemsr   r   r9   rb   Zfamilyr   addressZnetmaskr   Z	broadcastr/   r   version_infor   r   IntEnumisup
contextlibclosingZbindZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEZptpr   rG   r   r   r
   rn   r   Z	AF_PACKETr   )r>   nicsZ	nic_statsZfamiliesZnicZaddrsaddrsrD   afZsocktypeprotoZ	canonnameZsaZipr%   r%   r+   test_net_if_addrs  sp   


%zTestNetAPIs.test_net_if_addrsc                 C   s   t rdtjdd d d fg}ndg}tjd|d/}t d d }|js%J t r/| |jd n| |jd W d    d S W d    d S 1 sIw   Y  d S )	Nem1z06:3d:29)r5  rV   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)	r	   r2   r$  r    r8   r%  rI   r9   r)  )r>   r  rL   r0  r%   r%   r+    test_net_if_addrs_mac_null_bytes  s   
"z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           	      C   s   t  }|s
J |t jt jt jf}| D ].\}}| |t |\}}}}| |t | 	|| | 	|| | 
|d | 
|d qd S r   )r2   r&  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr(  r   r   r   r/   rH   )	r>   r/  Zall_duplexesr   Zstatsr,  ZduplexZspeedZmtur%   r%   r+   test_net_if_stats$  s   zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc                 C   sZ   t jdttjdd}t }| |i  |jsJ W d    d S 1 s&w   Y  d S )Nzpsutil._psutil_posix.net_if_mturB   r.   )	r    r8   r  r  ZENODEVr2   r&  r9   rI   )r>   rL   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#  r4  r6  r7  r   r   r   r8  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 )TestSensorsAPIsr   c                 C   s   t  }| D ]:\}}| |t |D ]-}| |jt |jd ur)| |jd |jd ur5| |jd |j	d urA| |j	d qqd S r   )
r2   sensors_temperaturesr(  r   r   labelr   rH   highcritical)r>   tempsr   entriesentryr%   r%   r+   test_sensors_temperatures@  s   


z)TestSensorsAPIs.test_sensors_temperaturesc                 C   s   ddgi}t jd|d-}tjddd d }|jsJ | |jd | |jd	 | |jd
 W d    d S 1 s<w   Y  d S )NZcoretemp)r;  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)	r    r8   r2   r:  rI   r9   r   r<  r=  )r>   drL   r>  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vr#| |jd n|jt jkr/| |j	 | 
|j	t d S )Nr   r   )r2   Zsensors_batteryrH   r   r   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrt   Zpower_pluggedr   r   )r>   r  r%   r%   r+   test_sensors_batteryZ  s   z$TestSensorsAPIs.test_sensors_batteryc                 C   sb   t  }| D ]&\}}| |t |D ]}| |jt | |jttf | 	|jd qqd S r   )
r2   Zsensors_fansr(  r   r   r;  r   r   r   rH   )r>   Zfansr   r?  r@  r%   r%   r+   test_sensors_fansh  s   z!TestSensorsAPIs.test_sensors_fansN)r   r   r   r"   r   r   rA  rC  r   r   rD  r   rE  r%   r%   r%   r+   r9  >  s    

r9  __main__)run_from_name):__doc__r-  r   r  r0   r   r   rq   r'  r   rk   r2   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   r  r9  r   Zpsutil.tests.runnerrG  r  r%   r%   r%   r+   <module>   sx    J% q  
5