o
    iT                     @   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%   S/var/www/edux/Edux_v2/venv/lib/python3.10/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side_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr'   ProcesskillwaitassertNotInr!   patchNoSuchProcessassertEquallistAccessDeniedassertRaisesself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'   )attrsfooz$psutil._psplatform.Process.cpu_timesr    r.   	cpu_times)rE   ad_value)r3   r4   r<   r=   infokeysr?   
ValueErrorr!   r:   r>   assertIsNoneassertGreaterEqualcalledobjectassertIs)rA   rC   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'   )rC   )pidsr%   r+   callbacki   s   z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S      g | ]}t |jqS r%   r3   r6   r'   r(   r%   r%   r+   r,   p       z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rX   g{Gz?r]   rX   g      ?   
returncode   c                    <   t j| d|d\}} t|d  t|d ||fS )NQ?r_   r^      r3   
wait_procsr<   lenprocsrX   gonealiverA   r%   r+   test}      
z-TestProcessAPIs.test_wait_procs.<locals>.testc                 S   r$   r%   r&   r(   r%   r%   r+   r,      r-   c                    rc   )Nrd   r_   r`   r   rf   ri   rm   r%   r+   rn      ro   )r5   r?   rL   r3   rg   	TypeErrortime
assertLessr<   rh   assertFalsehasattrr"   	terminater0   r'   r	   popra   signalSIGTERMset
assertTrue)rA   rX   sproc1sproc2sproc3rj   trk   rl   rC   rn   r%   )rW   rA   r+   test_wait_procsf   sH    zTestProcessAPIs.test_wait_procsc                 C   sP   |   }|   }|   }dd |||fD }|D ]}|  qt|\}}d S )Nc                 S   rY   r%   rZ   r(   r%   r%   r+   r,      r[   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r5   ru   r3   rg   )rA   r{   r|   r}   rj   rC   rk   rl   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 )Nr\   r   )r5   rz   r3   
pid_existsr'   r6   r7   r8   rs   r<   rW   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  ip  msg)
r3   rW   r   AssertionErrorrq   sleepr9   rangemaxrs   )rA   rW   r'   r%   r%   r+   test_pid_exists_2   s   
z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__rD   rT   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   )r3   	boot_timeassertIsInstancefloatassertGreaterrr   rq   )rA   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        )r3   usersassertNotEqualnamer   strterminaltypehoststarteddatetimefromtimestampr   r   rM   r'   r6   )rA   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 rU   )sysstdoutr   r3   rn   )rA   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   bsdTr^   r   r   r   r   sunossolarisr
   darwinr   r   F)r   getattrr3   boolr1   r   r	   r   remover   platformlowerr   r   r<   r   r   r   countr
   r   rQ   )rA   namesr   r%   r%   r+   test_os_constants   sF   














zTestMiscAPIs.test_os_constantsN)r   r   r   r   r   r   r   r3   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))r3   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)rA   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   )
r3   swap_memoryr<   r   r   r   r   r   r   r   )rA   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percpur^   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r3   	cpu_countassertIsNotNoner<   rh   rH   rN   r1   pathexistsopenreadr   SkipTest)rA   logicalfd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 Nonere   )   r^   r^   )r3   r   skipTestr   r   getwindowsversionrM   rN   )rA   r   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)r\   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r!   r:   rM   r3   r   rO   )rA   valrR   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   )r3   rH   sumr   r   rN   r<   r   )rA   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   r3   rH   rq   r   r   )rA   t1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)	r3   rH   r   r   r   rN   r<   r   rh   )rA   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   r]   g?)r3   rH   rq   r   r   zip_cpu_busy_time)rA   tot1	giveup_at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>r^   delta)r3   rH   _maker   r   assertAlmostEqualr   )rA   baseper_cpu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   rN   assertIsNotassertLessEqualr3   r   r   pprintpformat)rA   r   last_ret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   r\   )r3   cpu_percentr   r  r?   rL   )rA   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   r\   )	r3   r  r<   rh   r   r   r  r?   rL   rA   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  )r3   cpu_times_percentr   r  r   r?   rL   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   )r3   r  r<   rh   r   r   r  r   )rA   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   rh   r   r(   r%   r%   r+   r,     s    "zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r3   r  rH   r!   r:   r  )rA   
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
interruptssoft_interruptssyscallsr   )r  r  )r3   	cpu_statsr<   r   r   rN   r   r   )rA   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   rN   )lsntr   r   rm   r%   r+   check_ls  s   


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   zreturns empty list on FreeBSDF)r3   cpu_freqr   r   r   r<   rh   r   )rA   r  r  r%   rm   r+   test_cpu_freq  s   

zTestCpuAPIs.test_cpu_freqc                 C   s>   t  }| t|d |D ]}| |t | |d qd S )Nr`   r   )r3   
getloadavgr<   rh   r   r   rN   )rA   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   )r3   r(  r1   getcwdr<   r   r   r   r   r   rt   shutilr   r   
get_testfnr?   r   )rA   usageshutil_usage	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 rU   )r?   UnicodeEncodeErrorr3   r(  r   rm   r%   r%   r+   test_disk_usage_unicodeD  s   "z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r3   r(  rm   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optsmaxfiler   r   maxpathr   r   r  rm   r%   r+   check_ntupleN  s   
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allr   cdromTc                 S   s8   t j| } t j| st j| } t j| r|  S rU   )r1   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%   )r6  r   r(   r%   r%   r+   r,     s    z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r3   disk_partitionsrz   r   r8  r	   r1   r   r   r5  r6  r7  statOSErrorr   r   errnoEIOEPERMEACCES__file__r0   )rA   r<  r  diskr   rB  mountmountsr%   rm   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   r^   re   r`         r         )r<   
read_countwrite_count
read_byteswrite_bytesr   r   	read_time
write_timer   read_merged_countwrite_merged_count	busy_timer   r   r   )r  r   rm   r%   r+   r<    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFperdiskzno disks on this system?T)r3   disk_io_countersr<   rh   ry   rA   r<  retkeyr%   rm   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!   r:   rM   r3   r^  r<   rO   rA   rR   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   r0  r   r2  r4  rN  r   r1   r   r   r   r3   r^  rb  re  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   r^   re   r`   rO  rP  r   rQ  )	r<   
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutr;  rm   r%   r+   r<    s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFpernicT)r3   net_io_countersr   rz   r   r   r_  r%   rm   r+   test_net_io_counters  s   
z TestNetAPIs.test_net_io_countersc                 C   rc  )Nz"psutil._psplatform.net_io_countersr   Fro  T)r!   r:   rM   r3   rq  r<   rO   rd  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`   rO  r   AF_LINKr\   )*r3   net_if_addrsnet_if_statsry   socketAF_INETAF_INET6rt  itemsr   r   r<   rh   familyr   addressnetmaskr   	broadcastr0   r   version_infor   r    IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr   rM   r   r   r
   rt   r   	AF_PACKETr   )rA   nics	nic_statsfamiliesnicaddrsaddrsrJ   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)r  r\   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)	r	   r3   rt  r!   r:   ru  rO   r<   r|  )rA   r`  rR   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
J |t jt jt jf}| D ]5\}}| |t |\}}}}}	| |t | 	|| | 	|| | 
|d | 
|d | |	t qd S r   )r3   rv  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNrz  r   r   r   r0   rN   )
rA   r  all_duplexesr   statsr  duplexspeed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_mturG   r.   )	r!   r:   rE  rF  ENODEVr3   rv  r<   rO   )rA   rR   r`  r%   r%   r+   test_net_if_stats_enodev:  s   
"z$TestNetAPIs.test_net_if_stats_enodevN)r   r   r   r   r   r   rr  rs  r  r  r  r   r   r   r  r%   r%   r%   r+   rf    s    

	<rf  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   )
r3   sensors_temperaturesrz  r   r   labelr  rN   highcritical)rA   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 )Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)
fahrenheitr   g     ^@g     a@g     c@)	r!   r:   r3   r  rO   r<   r  r  r  )rA   drR   r  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   )r3   sensors_batteryrN   r   r   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDrz   power_pluggedr   r   )rA   r`  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   )
r3   sensors_fansrz  r   r   r  r  r   r   rN   )rA   fansr   r  r  r%   r%   r+   test_sensors_fanso  s   z!TestSensorsAPIs.test_sensors_fansN)r   r   r   r   r   r   r  r  r   r   r  r   r  r%   r%   r%   r+   r  E  s    

r  __main__)run_from_name)<__doc__r  r   rF  r1   r   r   r*  rw   rw  r   rq   r   r3   r   r   r   r   r   r   r   r	   r
   r   psutil._compatr   r   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'  rf  r  r   psutil.tests.runnerr  rJ  r%   r%   r%   r+   <module>   s|    J% t  
5