U
    ;gO                     @   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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/ dd$lm0Z0 dd%lm1Z1 dd&lm2Z2 G 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-Z8G d3d4 d4e-Z9G d5d6 d6e-Z:dS )7z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)	QEMU_USER)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)pytest)retry_on_failurec                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestProcessIterc                 C   s~   t  dd t D kst|  }|jdd t D ksBtt|j}|  |	  |jdd t D ksztd S )Nc                 S   s   g | ]
}|j qS  pid.0xr'   r'   </tmp/pip-unpacked-wheel-u0epr1ex/psutil/tests/test_system.py
<listcomp>C   s     z5TestProcessIter.test_pid_presence.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r'   r(   r*   r'   r'   r-   r.   E   s     c                 S   s   g | ]
}|j qS r'   r(   r*   r'   r'   r-   r.   I   s     )
osgetpidpsutilprocess_iterAssertionErrorspawn_testprocr)   ProcesskillwaitselfZsprocpr'   r'   r-   test_pid_presenceB   s    z!TestProcessIter.test_pid_presencec                 C   s>   dd t  D }t|dd dtt|dd dks:td S )Nc                 S   s   g | ]}|qS r'   r'   r*   r'   r'   r-   r.   L   s     z6TestProcessIter.test_no_duplicates.<locals>.<listcomp>c                 S   s   | j S Nr(   r,   r'   r'   r-   <lambda>M       z4TestProcessIter.test_no_duplicates.<locals>.<lambda>)keyc                 S   s   | j S r<   r(   r=   r'   r'   r-   r>   N   r?   )r1   r2   sortedsetr3   )r9   lsr'   r'   r-   test_no_duplicatesK   s
     z"TestProcessIter.test_no_duplicatesc              
   C   sf   t t  tdD ]L}tjdtt d  t tjdgdg ksLt	W 5 Q R X tj
  qd S N   zpsutil.Process.as_dictZside_effect	cpu_timesattrs)listr1   r2   ranger#   patchZNoSuchProcessr/   r0   r3   cache_clearr9   r,   r'   r'   r-   test_emulate_nspQ   s    $z TestProcessIter.test_emulate_nspc                 C   sv   t t  tdD ]\}tjdtt d0 t	
tj t tjdgd W 5 Q R X W 5 Q R X tj  qd S rE   )rK   r1   r2   rL   r#   rM   AccessDeniedr/   r0   r$   raisesrN   rO   r'   r'   r-   test_emulate_access_denied[   s    &z*TestProcessIter.test_emulate_access_deniedc              	   C   s`  t jdgdD ]}t|j dgkstqt jdgdD ]}t|j dgks:tq:tt tt jdgd W 5 Q R X t	j
dt dddJ}t jddgdD ](}|jd d kst|jd dkstq|jstW 5 Q R X t	j
dt dddZ}t }t jddg|d	D ].}|jd |ks.t|jd dkstq|jsRtW 5 Q R X d S )
Nr)   rI   Zfooz$psutil._psplatform.Process.cpu_timesr    rG   rH   )rJ   Zad_value)r1   r2   rK   infokeysr3   r$   rR   
ValueErrorr#   rM   rQ   calledobject)r9   r:   mflagr'   r'   r-   
test_attrsf   s8    

 
zTestProcessIter.test_attrsc                 C   s.   t t  tjsttj  tjr*td S r<   )rK   r1   r2   Z_pmapr3   rN   r9   r'   r'   r-   test_cache_clear   s    

z TestProcessIter.test_cache_clearN)	__name__
__module____qualname__r;   rD   rP   rS   r\   r^   r'   r'   r'   r-   r&   A   s   	
r&   c                   @   sT   e Zd Zejjeoedddd Zejjeo0edddd Z	dd Z
d	d
 ZdS )TestProcessAPIsz-spawn_testproc() unreliable on PYPY + WINDOWSreasonc              	      s   fdd}g  |   }|   }|   }dd |||fD }tt tj|dd W 5 Q R X tt tj|dd W 5 Q R X t }tj|d	|d
\}}t | dk st|g kstt	|dkst g kst|D ]}	t
|	drtqtddd }
|  |
||\}}|jdd |D ks4ttrT| jtj kshtn| jdksht |jgkszt|D ]}	t
|	dr~tq~tddd }|  |  |||\}}t t|j|j|jgkst|D ]}	t
|	dstqd S )Nc                    s     | j d S r<   )appendr)   )r:   pidsr'   r-   callback   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   s   g | ]}t |jqS r'   r1   r5   r)   r*   r'   r'   r-   r.      s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rh   g{Gz?rk   rh   g      ?   
returncode   c                 S   s<   t j| d|d\}}t|dks$tt|dks4t||fS )NQ?rm   rl   rF   r1   
wait_procslenr3   procsrh   gonealiver'   r'   r-   test_1   s      
z/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   s   g | ]
}|j qS r'   r(   r*   r'   r'   r-   r.      s     c                 S   s<   t j| d|d\}}t|dks$tt|dks4t||fS )Nrq   rm   rn   r   rr   ru   r'   r'   r-   test_2   s      
z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r4   r$   rR   rW   r1   rs   	TypeErrortimer3   rt   hasattrr%   	terminater)   r	   popro   signalSIGTERMrB   )r9   rh   sproc1sproc2sproc3rv   trw   rx   r:   ry   rz   r'   rf   r-   test_wait_procs   sJ    

"zTestProcessAPIs.test_wait_procsc                 C   sL   |   }|   }|   }dd |||fD }|D ]}|  q0t| d S )Nc                 S   s   g | ]}t |jqS r'   ri   r*   r'   r'   r-   r.      s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r4   r~   r1   rs   )r9   r   r   r   rv   r:   r'   r'   r-   test_wait_procs_no_timeout   s    
z*TestProcessAPIs.test_wait_procs_no_timeoutc                 C   sp   |   }t|jstt|j}|  |  t|jrDttdrRttddt kksltd S )Nrj   r   )	r4   r1   
pid_existsr)   r3   r5   r6   r7   rg   r8   r'   r'   r-   test_pid_exists   s    zTestProcessAPIs.test_pid_existsc              	   C   s   t  }|D ]F}zt |s tW q tk
rP   td |t  ksLtY qX qtt|d t|d }|D ]}t |rrtqrd S )Ng?i:  i>  )r1   rg   r   r3   r|   sleeprL   max)r9   rg   r)   r'   r'   r-   test_pid_exists_2   s    
z!TestProcessAPIs.test_pid_exists_2N)r_   r`   ra   r$   markskipifr   r   r   r   r   r   r'   r'   r'   r-   rb      s   
;
	
rb   c                   @   sF   e Zd Zdd Zejjeo"e	  dddd Z
dd Zd	d
 ZdS )TestMiscAPIsc                 C   s6   t  }t|tst|dks"t|t k s2td S Nr   )r1   Z	boot_time
isinstancefloatr3   r|   )r9   Zbtr'   r'   r-   test_boot_time   s    zTestMiscAPIs.test_boot_timeunreliable on CIrc   c              
   C   s   t  }|g kst|D ]}| j|d |js4tt|jtsDtt|jttd fs\t|j	d k	r~t|j	ttd fs~t|j |j	 |j
dksttj|j
 tstr|jd kstnt |j W 5 Q R X qd S )N)user        )r1   usersr3   subTestnamer   strZterminaltypehoststarteddatetimefromtimestampr   r   r)   r5   )r9   r   r   r'   r'   r-   
test_users   s     

zTestMiscAPIs.test_usersc                 C   s&   t j}tt _zt  W 5 |t _X d S r<   )sysstdoutr   r1   test)r9   r   r'   r'   r-   	test_test  s
    zTestMiscAPIs.test_testc              	   C   s  ddddddddd	g	}|D ]}t tt|tst|qtjd
krFtjsNttjrXt|	d dt
j krtjszt|	d ndt
j krtjsttjtjtjgddkst|	d |	d |	d |	d n^dt
j ksdt
j krtjst|	d	 n&dt
j krhtjs:t|	d n"tjsRttjr^t|	d |D ]}tt|rlt|qld S )Nr	   r   r   r   r   r   r   r   r
   posixlinuxZbsdTrl   sunossolarisdarwin)r   getattrr1   boolr3   r/   r   r	   r   remover   platformlowerr   r   r   r   r   countr
   r   )r9   namesr   r'   r'   r-   test_os_constants  sX    








zTestMiscAPIs.test_os_constantsN)r_   r`   ra   r   r$   r   r   r   r1   r   r   r   r   r'   r'   r'   r-   r      s    
	r   c                   @   s   e Zd Zdd Zdd ZdS )TestMemoryAPIsc                 C   s   t  }|jdkst||jdks,t|d|j  krBdksLn t||jdks^t||jdkspt||jD ]l}t	||}|dkrt
|ttfst|dkrv|dks| d||f ||jkrv| d||j||f qvd S )Nr   d   percenttotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r1   Zvirtual_memoryr   r3   	availabler   usedfree_fieldsr   r   intr   fail)r9   memr   valuer'   r'   r-   test_virtual_memoryH  s&     


z"TestMemoryAPIs.test_virtual_memoryc                 C   s   t  }|jdkst|jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|j  krdksn t||jdkst||j	dkst|d S )N)r   r   r   r   sinsoutr   r   )
r1   Zswap_memoryr   r3   r   r   r   r   r   r   )r9   r   r'   r'   r-   test_swap_memory\  s    	
 zTestMemoryAPIs.test_swap_memoryN)r_   r`   ra   r   r   r'   r'   r'   r-   r   G  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
jjeoLed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
jjeoe d!kd"de
jje d#dd$d% Ze
jje d#dd&d' Zd(S ))TestCpuAPIsc              	   C   sv   t  }|d k	st|tt jddks,t|dks8ttjdrrtd}|	 }W 5 Q R X d|krrt
dd S )NTpercpurl   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r1   	cpu_countr3   rt   rH   r/   pathexistsopenreadr$   skip)r9   logicalfdZcpuinfo_datar'   r'   r-   test_cpu_count_logicalt  s    
z"TestCpuAPIs.test_cpu_count_logicalc                 C   sh   t  }t jdd}|d kr&tdtrLt d d dkrL|d ksdtn|dksXt||ksdtd S )NFr   zcpu_count_cores() is NonerF   )   rl   rl   )r1   r   r$   r   r   r   getwindowsversionr3   )r9   r   Zcoresr'   r'   r-   test_cpu_count_cores  s    
z TestCpuAPIs.test_cpu_count_coresc              
   C   sz   dD ]p}t jd|d }t d ks(t|js2tW 5 Q R X t jd|d$}tjddd ks`t|jsjtW 5 Q R X qd S )N)rj   r   Nz$psutil._psplatform.cpu_count_logicalZreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r#   rM   r1   r   r3   rX   )r9   valrZ   r'   r'   r-   test_cpu_count_none  s      zTestCpuAPIs.test_cpu_count_nonec                 C   sj   d}t  }t| |D ]&}t|ts*t|dks6t||7 }qtt|t| ddks^tt| d S )Nr   r   r   )	r1   rH   sumr   r   r3   roundabsr   )r9   r   timescp_timer'   r'   r-   test_cpu_times  s    
zTestCpuAPIs.test_cpu_timesc                 C   sL   t t }t t }t |k r>t t }||krd S q| dd S )Nztime remained the same)r   r1   rH   r|   r   r   )r9   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 ]b}d}t| |D ]&}t|ts2t|dks>t||7 }q tt|t| ddksftt| qt	t jddd t	t jddkstd S )NTr   r   r   r   F)
r1   rH   r   r   r   r3   r   r   r   rt   )r9   r   r   r   r'   r'   r-   test_per_cpu_times  s    


zTestCpuAPIs.test_per_cpu_timesc                 C   s   t jdd}t t }t |kr.| dS t jdd}t||D ]4\}}t |t | }}|| }|dkrD d S qDqd S )NTr   rk   g?)r1   rH   r|   r   r   zipZ_cpu_busy_time)r9   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 + CIrc   c              
   C   sx   t  }t jdd}|dd t| D }|jD ]@}| j|||d& tt||t|| dk shtW 5 Q R X q2d S )NTr   c                 S   s   g | ]}t |qS r'   )r   )r+   numr'   r'   r-   r.     s     z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>)fieldbaseper_cpurl   )	r1   rH   _maker   r   r   r   r   r3   )r9   r   r   Zsummed_valuesr   r'   r'   r-   test_cpu_times_comparison  s    
z%TestCpuAPIs.test_cpu_times_comparisonc              
   C   s   z>t |tst|dkst|dk	s(t|dt  ks<tW n@ tk
r~ } z"td|t|t|f W 5 d }~X Y nX d S )Nr   g       g      Y@z
%s
last=%s
new=%s)r   r   r3   r1   r   pprintpformat)r9   r   Zlast_retZnew_reterrr'   r'   r-   _test_cpu_percent  s    zTestCpuAPIs._test_cpu_percentc              	   C   s^   t jdd}tdD ]"}t jd d}| ||| |}qtt t jdd W 5 Q R X d S NMbP?)intervalr   rj   )r1   cpu_percentrL   r   r$   rR   rW   )r9   last_newr'   r'   r-   test_cpu_percent  s    zTestCpuAPIs.test_cpu_percentc              	   C   s   t jddd}t|t  ks"ttdD ].}t jd dd}|D ]}| ||| q@|}q*tt	 t jddd W 5 Q R X d S )Nr   Tr   r   r   rj   )
r1   r   rt   r   r3   rL   r   r$   rR   rW   r9   r   r   r   r   r'   r'   r-   test_per_cpu_percent  s    z TestCpuAPIs.test_per_cpu_percentc              	   C   sz   t jdd}tdD ]>}t jd d}|D ]}| ||| q(| t||| |}qtt t jdd W 5 Q R X d S r   )r1   cpu_times_percentrL   r   r   r$   rR   rW   r   r'   r'   r-   test_cpu_times_percent"  s    z"TestCpuAPIs.test_cpu_times_percentc                 C   sz   t jddd}t|t  ks"ttdD ]J}t jd dd}|D ].}|D ]}| ||| qH| t||| q@|}q*d S )Nr   Tr   r   )r1   r   rt   r   r3   rL   r   r   )r9   r   r   r   cpur   r'   r'   r-   test_per_cpu_times_percent-  s    z&TestCpuAPIs.test_per_cpu_times_percentc              	   C   sj   t jdd dd t jddD }tjd|d0 t jddD ]}|D ]}| |d d  qFq>W 5 Q R X d S )NTr   c                 S   s*   g | ]"}| d d tt|jD qS )c                 S   s   g | ]}d qS )r   r'   r*   r'   r'   r-   r.   <  s     zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   rL   rt   r   r*   r'   r'   r-   r.   ;  s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r1   r   rH   r#   rM   r   )r9   Z
zero_timesr   r   r'   r'   r-   #test_per_cpu_times_percent_negative8  s    
z/TestCpuAPIs.test_per_cpu_times_percent_negativec                 C   sT   t  }|jdkst|jD ]2}t||}|dks6tts|dkr|dkstqd S )N)ctx_switches
interruptsZsoft_interruptsZsyscallsr   )r   r   )r1   Z	cpu_statsr   r3   r   r   )r9   Zinfosr   r   r'   r'   r-   test_cpu_statsD  s    

zTestCpuAPIs.test_cpu_statsZarm64zskipped due to #1892not supportedc                 C   s`   dd }t jdd}tr&|s&td|s2t||t jddg tr\t|t  ks\td S )Nc                 S   sl   | D ]b}|j dkst|jdkr0|j|jks0t|j D ].}t||}t|tttfsXt|dks6tq6qd S )N)currentminr   r   r   )	r   r3   r   r   r   r   r   r   r   )rC   ntr   r   r'   r'   r-   check_lsZ  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   zreturns empty list on FreeBSDF)	r1   Zcpu_freqr   r$   r   r3   r   rt   r   )r9   r  rC   r'   r'   r-   test_cpu_freqU  s    

zTestCpuAPIs.test_cpu_freqc                 C   s@   t  }t|dkst|D ]}t|ts.t|dkstqd S )Nrn   r   )r1   
getloadavgrt   r3   r   r   )r9   Zloadavgloadr'   r'   r-   test_getloadavgn  s
    zTestCpuAPIs.test_getloadavgN)r_   r`   ra   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   s  s6   
" 
	 r   c                   @   s   e Zd Zejjeoe dddd Zejje	 dddd Z
dd	 Zd
d Zejjeofejd ddejjeo~e  dddd Zdd ZdS )TestDiskAPIszunreliable on PYPY32 + 32BITrc   c              	   C   s(  t t }|jdkst|jdks.t||jdks@t||jdksRt||j|jksft||j|jkszt|d|j	  krdksn t|j	t
tdrtt }d}|j|jkstt|j|j |k sttst|j|j |k st|  }tt t | W 5 Q R X d S )N)r   r   r   r   r   r   
disk_usagei  P )r1   r
  r/   getcwdr   r3   r   r   r   r   r}   shutilr   r   Z
get_testfnr$   rR   r   )r9   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t W 5 Q R X d S r<   )r$   rR   UnicodeEncodeErrorr1   r
  r   r]   r'   r'   r-   test_disk_usage_unicode  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r1   r
  r]   r'   r'   r-   test_disk_usage_bytes  s    z"TestDiskAPIs.test_disk_usage_bytesc                 C   sr  dd }t jdd}|st|D ]b}|| tr<d|jkr<q tsXtj|j	s^t|n|j	 tj|j
stt||js t|q t jdd}|stt jddD ]}|| ts|j
rzt|j
 W nV tk
r  } z6trtr|jtjkrW Y q|jtjtjfkr W 5 d }~X Y qX tj|j
st|qdd }|t}d	d
 t jddD }||ksntd S )Nc                 S   sD   t | jtstt | jts tt | jts0tt | jts@td S r<   )r   devicer   r3   
mountpointfstypeoptsr  r'   r'   r-   check_ntuple  s    z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allZcdromTc                 S   s.   t j| } t j| s&t j| } q|  S r<   )r/   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>)r1   Zdisk_partitionsr3   r   r  r	   r/   r   r   r  r  r  statOSErrorr   r   errnoZEIOEPERMEACCES__file__)r9   r  rC   Zdiskr   r  mountZmountsr'   r'   r-   test_disk_partitions  s>    

z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                 C   sv   dd }t jdd}|d k	s$td|| t jdd}t|tt|ksPt|D ]}|sdt||||  qTd S )Nc                 S   s   | d | j kst| d | jks$t| d | jks6t| d | jksHttsts| d | jksbt| d | jksttt	r| d | j
kst| d | jkst| d	 | jkstntr| d | jkst| jD ]}t| |dkst| qd S )
Nr   rl   rF   rn         r         )Z
read_countr3   Z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   r'   r'   r-   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r1   disk_io_countersr3   rt   rB   r9   r  retr@   r'   r'   r-   test_disk_io_counters  s    z"TestDiskAPIs.test_disk_io_countersc              	   C   sP   t jdi d8}tjddd ks$ttjddi ks8t|jsBtW 5 Q R X d S )Nz#psutil._psplatform.disk_io_countersr   Fr-  T)r#   rM   r1   r.  r3   rX   r9   rZ   r'   r'   r-   test_disk_io_counters_no_disks  s     z+TestDiskAPIs.test_disk_io_counters_no_disksN)r_   r`   ra   r$   r   r   r   r   r  r   r  r  r&  r   r/   r   r   r   r1   r.  r1  r3  r'   r'   r'   r-   r	  w  s&    

: r	  c                   @   s   e Zd Zejje dddd Zejje dddd Zejje	dddd	 Z
d
d Zejje	dddd Zejjepepe dddd ZdS )TestNetAPIsr   rc   c                 C   sd   dd }t jdd}|| t jdd}|g ks4t|D ]&}|sDtt|tsRt|||  q8d S )Nc                 S   s(  | d | j kst| d | jks$t| d | jks6t| d | jksHt| d | jksZt| d | jkslt| d | jks~t| d | jkst| j dkst| | jdkst| | jdkst| | jdkst| | jdkst| | jdkst| | jdkst| | jdks$t| d S )	Nr   rl   rF   rn   r'  r(  r   r)  )	Z
bytes_sentr3   Z
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  r'   r'   r-   r  	  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleFZpernicT)r1   net_io_countersr3   r   r   r/  r'   r'   r-   test_net_io_counters  s    z TestNetAPIs.test_net_io_countersc              	   C   sP   t jdi d8}tjddd ks$ttjddi ks8t|jsBtW 5 Q R X d S )Nz"psutil._psplatform.net_io_countersr   Fr5  T)r#   rM   r1   r6  r3   rX   r2  r'   r'   r-   test_net_io_counters_no_nics$  s     z(TestNetAPIs.test_net_io_counters_no_nicszQEMU user not supportedc                 C   sz  t  }|st|t  }ttjtjt jg}|	 D ]\}}t
|tsPttt|t|ksht|D ]}t
|jtstt
|jtstt
|jttd fstt
|jttd fst|j|ksttrtst
|jtjst|| jr|jtjkr8t|j}t| ||jdf W 5 Q R X nj|jtjkrt|jdtjtjdtjd }|\}	}
}}}t|	|
|}t| || W 5 Q R X |j|j|j|jfD ]*}|d k	r|jtjkrt||j q|jr|jd kstql|jrl|jd ksltqlq8t s&t!s&t"rFt#tdrvt jtjksvtn0t$r`t jtj%ksvtnt&rvt jdksvtd S )Nr   AF_LINKrj   )'r1   net_if_addrsr3   net_if_statsrB   socketAF_INETAF_INET6r9  itemsr   r   rt   familyr   addressnetmaskr   	broadcastr   r   r"   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr!   r   r   r
   r}   r   	AF_PACKETr   )r9   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrU   afsocktypeprotoZ
_canonnamesaipr'   r'   r-   test_net_if_addrs/  sl    

zTestNetAPIs.test_net_if_addrsc              	   C   sz   t rdtjdd d d fg}ndg}tjd|dB}t d d }|jsJtt r^|jdksltn|jdksltW 5 Q R X d S )	Nem1z06:3d:29)rW  rj   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)	r	   r1   r9  r#   rM   r:  rX   r3   rA  )r9   r0  rZ   rO  r'   r'   r-    test_net_if_addrs_mac_null_bytesu  s     
z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   s   t  }|st|t jt jt jf}| D ]p\}}t|tsBt|\}}}}}	t|t	s^t||ksjt||ksvt|dkst|dkstt|	ts,tq,d S r   )
r1   r;  r3   ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr?  r   r   r   )
r9   rM  Zall_duplexesr   statsrE  Zduplexspeedmtuflagsr'   r'   r-   test_net_if_stats  s    zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc              	   C   sD   t jdttjdd$}t }|i ks,t|js6tW 5 Q R X d S )Nzpsutil._psutil_posix.net_if_mturT   rG   )	r#   rM   r   r!  ZENODEVr1   r;  r3   rX   )r9   rZ   r0  r'   r'   r-   test_net_if_stats_enodev  s    
z$TestNetAPIs.test_net_if_stats_enodevN)r_   r`   ra   r$   r   r   r   r7  r8  r   rV  rX  r]  r   r   r   r^  r'   r'   r'   r-   r4    s   



E
 r4  c                   @   s   e Zd Zejje dddd Zejje dddd Zejje	 ddejje
 dddd	 Zejje ddd
d ZdS )TestSensorsAPIsr   rc   c                 C   s   t  }| D ]x\}}t|ts&t|D ]\}t|jts>t|jd k	rV|jdksVt|jd k	rn|jdksnt|j	d k	r*|j	dks*tq*qd S r   )
r1   sensors_temperaturesr?  r   r   r3   labelr   highcritical)r9   tempsr   entriesentryr'   r'   r-   test_sensors_temperatures  s    


z)TestSensorsAPIs.test_sensors_temperaturesc              	   C   sp   ddgi}t jd|dN}tjddd d }|js8t|jdksFt|jd	ksTt|jd
ksbtW 5 Q R X d S )NZcoretemp)ra  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)	r#   rM   r1   r`  rX   r3   r   rb  rc  )r9   drZ   rd  r'   r'   r-   #test_sensors_temperatures_fahreneit  s    
 
z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz
no batteryc                 C   sp   t  }|jdkst|jdks$t|jt jt jfkrF|jdks\tn|jt jkr\|js\tt|jt	sltd S )Nr   r   )
r1   Zsensors_batteryr   r3   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDZpower_pluggedr   r   )r9   r0  r'   r'   r-   test_sensors_battery  s    
z$TestSensorsAPIs.test_sensors_batteryc                 C   sh   t  }| D ]R\}}t|ts&t|D ]6}t|jts>tt|jtt	fsRt|jdks*tq*qd S r   )
r1   Zsensors_fansr?  r   r   r3   ra  r   r   r   )r9   Zfansr   re  rf  r'   r'   r-   test_sensors_fans  s    z!TestSensorsAPIs.test_sensors_fansN)r_   r`   ra   r$   r   r   r   rg  ri  r   r   rj  r   rk  r'   r'   r'   r-   r_    s   

r_  );__doc__rF  r   r!  r/   r   r   r  r   r<  r   r|   r1   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&   rb   r   r   r   r	  r4  r_  r'   r'   r'   r-   <module>   sx   HfX,    #