o
    ȅ                     @   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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m0Z0 G d$d% d%e,Z1G d&d' d'e,Z2G d(d) d)e,Z3G d*d+ d+e,Z4G d,d- d-e,Z5G d.d/ d/e,Z6G d0d1 d1e,Z7e8d2krEdd3l9m:Z: e:e; 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)MACOS_12PLUS)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)retry_on_failurec                   @   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%   HD:\Projects\ConvertPro\env\Lib\site-packages\psutil/tests/test_system.py
<listcomp>B       z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   r$   r%   r&   r(   r%   r%   r+   r,   D   r-   c                 S   r$   r%   r&   r(   r%   r%   r+   r,   H   r-   zpsutil.ProcessZside_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr'   ProcesskillwaitassertNotInr!   patchZNoSuchProcessassertEquallistAccessDeniedassertRaisesselfZsprocpr%   r%   r+   test_process_iterA   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)rB   Zad_value)r2   r3   r:   r;   infokeysr=   
ValueErrorr!   r9   r<   assertIsNoneassertGreaterEqualcalledobjectassertIs)r?   r@   mflagr%   r%   r+   test_prcess_iter_w_attrsR   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+   callbacki   s   z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S      g | ]}t |jqS r%   r2   r5   r'   r(   r%   r%   r+   r,   p       z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rS   g{Gz?rX   rS   g      ?   
returncode   c                    <   t j| d|d\}} t|d  t|d ||fS )NQ?rZ   rY      r2   
wait_procsr:   lenprocsrS   gonealiver?   r%   r+   test_1}      
z/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   r$   r%   r&   r(   r%   r%   r+   r,      r-   c                    r^   )Nr_   rZ   r[   r   ra   rd   rh   r%   r+   test_2   rj   z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r4   r=   rG   r2   rb   	TypeErrortime
assertLessr:   rc   assertFalsehasattrr"   	terminater/   r'   r	   popr\   signalSIGTERMset
assertTrue)r?   rS   sproc1sproc2sproc3re   trf   rg   r@   ri   rk   r%   )rR   r?   r+   test_wait_procsf   sH    zTestProcessAPIs.test_wait_procsc                 C   sL   |   }|   }|   }dd |||fD }|D ]}|  qt| d S )Nc                 S   rT   r%   rU   r(   r%   r%   r+   r,      rV   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r4   rq   r2   rb   )r?   rw   rx   ry   re   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
 v  d S )NrW   r   )r4   rv   r2   
pid_existsr'   r5   r6   r7   ro   r:   rR   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   Y qw tt|d t|d }|D ]}| j	t ||d q7d S )Ng?i:  i>  msg)
r2   rR   r}   AssertionErrorrm   sleepr8   rangemaxro   )r?   rR   r'   r%   r%   r+   test_pid_exists_2   s   
z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__rA   rO   unittestskipIfr   r   r{   r|   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assertGreaterrn   rm   )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typehoststarteddatetimefromtimestampr   r   rH   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 rP   )sysstdoutr   r2   test)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	   linuxr   ZbsdTrY   r   r   r   r   sunossolarisr
   darwinr   r   F)r   getattrr2   boolr0   r   r	   r   remover   platformlowerr   r   r:   r   r   r   countr
   r   rL   )r?   namesr   r%   r%   r+   test_os_constants   sF   














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   	availabler   usedfree_fieldsr   r   intr   fail)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_memoryr:   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oIe dkd 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percpurY   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r2   	cpu_countZassertIsNotNoner:   rc   rD   rI   r0   pathexistsopenreadr   ZSkipTest)r?   logicalfdZcpuinfo_datar%   r%   r+   test_cpu_count_logical4  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`   )   rY   rY   )r2   r   skipTestr   r   getwindowsversionrH   rI   )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)rW   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r!   r9   rH   r2   r   rJ   )r?   valrM   r%   r%   r+   test_cpu_count_noneK  s"   zTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  }t| |D ]}| |t | |d ||7 }q| |t| t| d S )Nr   r   )r2   rD   sumr   r   rI   r:   r   )r?   r   timescp_timer%   r%   r+   test_cpu_timesW  s   
zTestCpuAPIs.test_cpu_timesc                 C   sR   t t }t t }t |k r$t t }||krd S t |k s| d)Nztime remained the same)r   r2   rD   rm   r   r   )r?   t1Zstop_att2r%   r%   r+   test_cpu_times_time_increasest  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   rD   r   r   r   rI   r:   r   rc   )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   rX   g?)r2   rD   rm   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)   numr%   r%   r+   r,     s    z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rY   delta)r2   rD   _maker   r   assertAlmostEqualr   )r?   baseZper_cpuZsummed_values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   rI   ZassertIsNotassertLessEqualr2   r   r   pprint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   rW   )r2   cpu_percentr   r   r=   rG   )r?   last_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   rW   )	r2   r   r:   rc   r   r   r   r=   rG   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=   rG   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   r:   rc   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   rc   r   r(   r%   r%   r+   r,     s    "zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r2   r   rD   r!   r9   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_statsr:   r   r   rI   r   r   )r?   infosr   r   r%   r%   r+   test_cpu_stats  s   

zTestCpuAPIs.test_cpu_statsarm64zskipped due to #1892not supportedc                    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   )r:   r   r   r   r  r   r   r   r   r   rI   )lsntr   r   rh   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   r:   rc   r   )r?   r  r  r%   rh   r+   test_cpu_freq  s   

zTestCpuAPIs.test_cpu_freqc                 C   s>   t  }| t|d |D ]}| |t | |d qd S )Nr[   r   )r2   Z
getloadavgr:   rc   r   r   rI   )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   machiner   r  r   r  r%   r%   r%   r+   r   2  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   s6  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rztt }d}| |j|j | j|j|j|d tsz| 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   getcwdr:   r   r   r   r   r   rp   shutilr   r   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 rP   )r=   UnicodeEncodeErrorr2   r  r   rh   r%   r%   r+   test_disk_usage_unicodeD  s   "z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r2   r  rh   r%   r%   r+   test_disk_usage_bytesJ  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  rh   r%   r+   check_ntupleN  s   
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allr   ZcdromTc                 S   s8   t j| } t j| st j| } t j| r|  S rP   )r0   r   abspathismountdirnamer   )r   r%   r%   r+   find_mount_point  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_partitionsrv   r   r  r	   r0   r   r   r  r  r  statOSErrorr   r   errnoZEIOZEPERMEACCES__file__r/   )r?   r  r  Zdiskr   r  mountZmountsr%   rh   r+   test_disk_partitionsM  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   rY   r`   r[         r         )r:   Z
read_countZwrite_count
read_byteswrite_bytesr   r   Z	read_timeZ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r   r   )r  r   rh   r%   r+   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r2   disk_io_countersr:   rc   ru   r?   r  retkeyr%   rh   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!   r9   rH   r2   r.  r:   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   r0   r   r   r   r2   r.  r2  r5  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   rY   r`   r[   r'  r(  r   r)  )	r:   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  rh   r%   r+   r    s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFZpernicT)r2   net_io_countersr   rv   r   r   r/  r%   rh   r+   test_net_io_counters  s   
z TestNetAPIs.test_net_io_countersc                 C   r3  )Nz"psutil._psplatform.net_io_countersr   Fr7  T)r!   r9   rH   r2   r8  r:   rJ   r4  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)r[   r'  r   AF_LINKrW   )*r2   net_if_addrsnet_if_statsru   socketAF_INETAF_INET6r;  itemsr   r   r:   rc   familyr   addressnetmaskr   	broadcastr/   r   version_infor   r    IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr   rH   r   r   r
   rp   r   Z	AF_PACKETr   )r?   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrE   afsocktypeproto	canonnamesa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)rZ  rW   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!   r9   r<  rJ   r:   rC  )r?   r0  rM   rQ  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 ]5\}}| |t |\}}}}}	| |t | 	|| | 	|| | 
|d | 
|d | |	t qd S r   )r2   r=  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrA  r   r   r   r/   rI   )
r?   rO  Zall_duplexesr   statsrH  duplexspeedZmtuflagsr%   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_mturC   r.   )	r!   r9   r!  r"  ZENODEVr2   r=  r:   rJ   )r?   rM   r0  r%   r%   r+   test_net_if_stats_enodev:  s   
"z$TestNetAPIs.test_net_if_stats_enodevN)r   r   r   r   r   r   r9  r:  rY  r[  r`  r   r   r   ra  r%   r%   r%   r+   r6    s    

	<r6  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_temperaturesrA  r   r   labelr  rI   highcritical)r?   tempsr   entriesentryr%   r%   r+   test_sensors_temperaturesG  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)rd  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)	r!   r9   r2   rc  rJ   r:   r  re  rf  )r?   drM   rg  r%   r%   r+   #test_sensors_temperatures_fahreneitU  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_batteryrI   r   r   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrv   Zpower_pluggedr   r   )r?   r0  r%   r%   r+   test_sensors_batterya  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_fansrA  r   r   rd  r  r   r   rI   )r?   Zfansr   rh  ri  r%   r%   r+   test_sensors_fanso  s   z!TestSensorsAPIs.test_sensors_fansN)r   r   r   r   r   r   rj  rl  r   r   rm  r   rn  r%   r%   r%   r+   rb  E  s    

rb  __main__)run_from_name)<__doc__rI  r   r"  r0   r   r   r  rs   r>  r   rm   r   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
  r6  rb  r   Zpsutil.tests.runnerrp  r$  r%   r%   r%   r+   <module>   s|    J% t  
5