o
    adf                     @   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 dd$lm1Z1 G 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 d/d0 d0e-Z7G d1d2 d2e-Z8e9d3krKdd4l:m;Z; e;e< dS dS )5zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)PY3)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   s  |  t dd t D  |  }|  |jdd t D  t|j}|  |	  | 
|jdd t D  dd t D }| t|dd dtt|d	d 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&   a/var/www/html/software/conda/envs/catlas/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.   c                 S   s   g | ]}|qS r&   r&   r)   r&   r&   r,   r-   K       c                 S      | j S Nr'   r+   r&   r&   r,   <lambda>M       z3TestProcessAPIs.test_process_iter.<locals>.<lambda>)keyc                 S   r0   r1   r'   r2   r&   r&   r,   r3   N   r4   zpsutil.ProcessZside_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr(   ProcesskillwaitassertNotInassertEqualsortedsetr"   patchZNoSuchProcesslistAccessDeniedassertRaises)selfsprocplsr&   r&   r,   test_process_iterA   s4   "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    r6   	cpu_times)rM   Zad_value)r:   r;   rA   rE   infokeysrG   
ValueErrorr"   rD   rF   assertIsNoneassertGreaterEqualcalledobjectZassertIs)rH   rJ   mflagr&   r&   r,   test_prcess_iter_w_attrs[   s8   


"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 r1   )appendr(   )rJ   )pidsr&   r,   callbackx   s   z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S      g | ]}t |jqS r&   r:   r=   r(   r)   r&   r&   r,   r-          z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )r\   g{Gz?ra   r\   g      ?   
returncode   c                    <   t j| d|d\}} t|d  t|d ||fS )NQ?rc   rb      r:   
wait_procsrA   lenprocsr\   gonealiverH   r&   r,   test_1      
z/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   r%   r&   r'   r)   r&   r&   r,   r-      r.   c                    rg   )Nrh   rc   rd   r   rj   rm   rq   r&   r,   test_2   rs   z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r<   rG   rR   r:   rk   	TypeErrortime
assertLessrA   rl   assertFalsehasattrr#   	terminater7   r(   r	   popre   signalSIGTERMrC   
assertTrue)rH   r\   sproc1sproc2sproc3rn   tro   rp   rJ   rr   rt   r&   )r[   rH   r,   test_wait_procst   sH    zTestProcessAPIs.test_wait_procsc                 C   sL   |   }|   }|   }dd |||fD }|D ]}|  qt| d S )Nc                 S   r]   r&   r^   r)   r&   r&   r,   r-      r_   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r<   rz   r:   rk   )rH   r   r   r   rn   rJ   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   )r<   r~   r:   
pid_existsr(   r=   r>   r?   rx   rA   r[   )rH   rI   rJ   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)
r:   r[   r   AssertionErrorrv   sleepr@   rangemaxrx   )rH   r[   r(   r&   r&   r,   test_pid_exists_2   s   
z!TestProcessAPIs.test_pid_exists_2N)__name__
__module____qualname__rL   rY   unittestskipIfr   r   r   r   r   r   r&   r&   r&   r,   r$   @   s    
9
	
r$   c                   @   sB   e Zd Zdd Zeeoe  ddd Z	dd Z
dd	 Zd
S )TestMiscAPIsc                 C   s4   t  }| |t | |d | |t  d S Nr   )r:   Z	boot_timeassertIsInstancefloatassertGreaterrw   rv   )rH   Zbtr&   r&   r,   test_boot_time   s   zTestMiscAPIs.test_boot_timeunreliable on CIc              	   C   s   t  }| |g  |D ]d}| j|dT |jsJ | |jt | |jttd f |j	d ur<| |j	ttd f |j |j	 | 
|jd tj|j tsTtr[| |j nt |j W d    n1 skw   Y  qd S )N)user        )r:   usersassertNotEqualsubTestnamer   strZterminaltypehostr   starteddatetimefromtimestampr   r   rS   r(   r=   )rH   r   r   r&   r&   r,   
test_users   s(   

zTestMiscAPIs.test_usersc                 C   s*   t j}tt _z
t  W |t _d S |t _w r1   )sysstdoutr   r:   test)rH   r   r&   r&   r,   	test_test   s
   
zTestMiscAPIs.test_testc                 C   sj  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 qd S )N)	r	   r   r   r   r   r   r   r   r
   r   posixr	   linuxr   ZbsdTrb   r   r   r   r   sunossolarisr
   darwinr   r   )r   getattrr:   boolr8   r   r	   r   remover   platformlowerr   r   rA   r   r   r   countr
   r   rx   )rH   namesr   r&   r&   r,   test_os_constants   sH   














zTestMiscAPIs.test_os_constantsN)r   r   r   r   r   r   r   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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))r:   Zvirtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)rH   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   )
r:   Zswap_memoryrA   r   r   r   r   r   r   r   )rH   r   r&   r&   r,   test_swap_memoryC  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	e
eo%ed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oQe 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percpurb   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r:   	cpu_countZassertIsNotNonerA   rl   rO   rT   r8   pathexistsopenreadr   ZSkipTest)rH   logicalfdZcpuinfo_datar&   r&   r,   test_cpu_count_logicalV  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 Noneri   )   rb   rb   )r:   r   skipTestr   r   getwindowsversionrS   rT   )rH   r   Zcoresr&   r&   r,   test_cpu_count_coresb  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"   rD   rS   r:   r   rU   )rH   valrW   r&   r&   r,   test_cpu_count_nonem  s"   zTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  }t| |D ]}| |t | |d ||7 }q| |t| t| d S )Nr   r   )r:   rO   sumr   r   rT   assertAlmostEqualr   )rH   r   timescp_timer&   r&   r,   test_cpu_times{  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   r:   rO   rv   r   r   )rH   t1Zstop_att2r&   r&   r,   test_cpu_times_time_increases  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)
r:   rO   r   r   r   rT   r   r   rA   rl   )rH   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   ra   g?)r:   rO   rv   r   r   zipZ_cpu_busy_time)rH   Ztot1Z	giveup_atZtot2r   r   
differencer&   r&   r,   test_per_cpu_times_2  s   
z TestCpuAPIs.test_per_cpu_times_2zunreliable on OPENBSD + CIc              	   C   s   t  }t jdd}|dd t| D }|jD ](}| j|||d | jt||t||dd W d    n1 s<w   Y  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>)fieldbaseper_cpurb   delta)r:   rO   _maker   r   r   r   r   )rH   r   r   Zsummed_valuesr   r&   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   rT   ZassertIsNotassertLessEqualr:   r   r   pprintpformat)rH   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   r`   )r:   cpu_percentr   r   rG   rR   )rH   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   r`   )	r:   r   rA   rl   r   r   r   rG   rR   rH   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   )r:   cpu_times_percentr   r   r   rG   rR   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   )r:   r   rA   rl   r   r   r   r   )rH   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-     r/   zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   r   rl   r   r)   r&   r&   r,   r-     s    zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r:   r   rO   r"   rD   r   )rH   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  )r:   Z	cpu_statsrA   r   r   rT   r   r   )rH   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   )rA   r   r   r   r  r   r   r   r   r   rT   )rK   ntr   r   rq   r&   r,   check_ls:  s   


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   zreturns empty list on FreeBSDF)r:   Zcpu_freqr   r   r   rA   rl   r   )rH   r  rK   r&   rq   r,   test_cpu_freq5  s   

zTestCpuAPIs.test_cpu_freqc                 C   s>   t  }| t|d |D ]}| |t | |d qd S )Nrd   r   )r:   
getloadavgrA   rl   r   r   rT   )rH   Zloadavgloadr&   r&   r,   test_getloadavgN  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   machiner   r  r   r  r&   r&   r&   r,   r   U  s0    
#
	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   )r:   r  r8   getcwdrA   r   r   r   r   r   ry   shutilr   r   Z
get_testfnrG   r   )rH   usageZshutil_usageZ	tolerancefnamer&   r&   r,   test_disk_usageX  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 r1   )rG   UnicodeEncodeErrorr:   r  r   rq   r&   r&   r,   test_disk_usage_unicodew  s   "z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r:   r  rq   r&   r&   r,   test_disk_usage_bytes}  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  rq   r&   r,   check_ntuple  s   
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allr   ZcdromTc                 S   s8   t j| } t j| st j| } t j| r|  S r1   )r8   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>)r:   Zdisk_partitionsr~   r   r"  r	   r8   r   r   r  r   r!  statOSErrorr   r   errnoEIOEPERMEACCES__file__r7   )rH   r$  rK   Zdiskr   r)  mountZmountsr&   rq   r,   test_disk_partitions  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   rb   ri   rd         r         )rA   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   rq   r&   r,   r$    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r:   disk_io_countersrA   rl   rC   rH   r$  retr5   r&   rq   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   Fr9  T)r"   rD   rS   r:   r:  rA   rU   rH   rW   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  r2  r   r8   r   r   r   r:   r:  r=  r@  r&   r&   r&   r,   r  W  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   rb   ri   rd   r3  r4  r   r5  )	rA   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr#  rq   r&   r,   r$    s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFZpernicT)r:   net_io_countersr   r~   r   r   r;  r&   rq   r,   test_net_io_counters  s   
z TestNetAPIs.test_net_io_countersc                 C   r>  )Nz"psutil._psplatform.net_io_countersr   FrB  T)r"   rD   rS   r:   rC  rA   rU   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rmtsm| 	|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&r6| t jtj' d S t(rB| t jd d S d S )Nr   AF_LINKr`   ))r:   net_if_addrsnet_if_statsrC   socketAF_INETAF_INET6rF  itemsr   r   rA   rl   familyr   addressnetmaskr   	broadcastr7   r   r   r!   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr    rS   r   r   r
   ry   r   	AF_PACKETr   )rH   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrP   afsocktypeproto	canonnamesaipr&   r&   r,   test_net_if_addrs  s|   
.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)re  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	   r:   rF  r"   rD   rG  rU   rA   rN  )rH   r<  rW   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   )r:   rH  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrL  r   r   r   r7   rT   )
rH   rZ  Zall_duplexesr   statsrR  ZduplexspeedZmtuflagsr&   r&   r,   test_net_if_statsn  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_mturN   r6   )	r"   rD   r+  r,  ZENODEVr:   rH  rA   rU   )rH   rW   r<  r&   r&   r,   test_net_if_stats_enodev  s   
"z$TestNetAPIs.test_net_if_stats_enodevN)r   r   r   r   r   r   rD  rE  rd  rf  rj  r   r   r   rk  r&   r&   r&   r,   rA    s    


ErA  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   )
r:   sensors_temperaturesrL  r   r   labelr  rT   highcritical)rH   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)rn  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)	r"   rD   r:   rm  rU   rA   r  ro  rp  )rH   drW   rq  r&   r&   r,   #test_sensors_temperatures_fahreneit  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   )r:   Zsensors_batteryrT   r   r   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDr~   Zpower_pluggedr   r   )rH   r<  r&   r&   r,   test_sensors_battery  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   )
r:   Zsensors_fansrL  r   r   rn  r  r   r   rT   )rH   Zfansr   rr  rs  r&   r&   r,   test_sensors_fans  s   z!TestSensorsAPIs.test_sensors_fansN)r   r   r   r   r   r   rt  rv  r   r   rw  r   rx  r&   r&   r&   r,   rl    s    

rl  __main__)run_from_name)=__doc__rS  r   r,  r8   r   r   r  r|   rI  r   rv   r   r:   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._compatr   r   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  rA  rl  r   Zpsutil.tests.runnerrz  r0  r&   r&   r&   r,   <module>   s    Y'    !
6