a
    QIh                     @   sh  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, dd lm-Z- dd!lm.Z. dd"lm/Z/ G d#d$ d$e,Z0G 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/d0 d0e,Z6G d1d2 d2e,Z7dS )3zTests for system APIS.    N)mock)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)broadcast_addr)AARCH64)ASCII_FS)
CI_TESTING)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)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 v sJ |  }|jdd t D v sBJ t|j}|  |  |jdd t D vszJ d S )Nc                 S   s   g | ]
}|j qS  pid.0xr#   r#   R/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_system.py
<listcomp>?       z5TestProcessIter.test_pid_presence.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r#   r$   r&   r#   r#   r)   r*   A   r+   c                 S   s   g | ]
}|j qS r#   r$   r&   r#   r#   r)   r*   E   r+   )	osgetpidpsutilprocess_iterspawn_testprocr%   ProcesskillwaitselfZsprocpr#   r#   r)   test_pid_presence>   s    z!TestProcessIter.test_pid_presencec                 C   s8   t t }t|dd dtt|dd dks4J d S )Nc                 S   s   | j S Nr$   r(   r#   r#   r)   <lambda>I   r+   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>)keyc                 S   s   | j S r8   r$   r9   r#   r#   r)   r:   J   r+   )listr.   r/   sortedset)r5   lsr#   r#   r)   test_no_duplicatesG   s    z"TestProcessIter.test_no_duplicatesc              	   C   sv   t t  tdD ]\}tjdtt d& t tjdgdrHJ W d    n1 s\0    Y  tj	  qd S N   zpsutil.Process.as_dictZside_effect	cpu_timesattrs)
r<   r.   r/   ranger   patchZNoSuchProcessr,   r-   cache_clearr5   r(   r#   r#   r)   test_emulate_nspM   s    4z TestProcessIter.test_emulate_nspc              
   C   s   t t  tdD ]}tjdtt dN t	
tj" t tjdgd W d    n1 sf0    Y  W d    n1 s0    Y  tj  qd S rA   )r<   r.   r/   rG   r   rH   AccessDeniedr,   r-   r    raisesrI   rJ   r#   r#   r)   test_emulate_access_deniedW   s    Nz*TestProcessIter.test_emulate_access_deniedc                 C   s  t jdgdD ]}t|j dgksJ qt jdgdD ]}t|j dgks:J q:tt" tt jdgd W d    n1 s0    Y  tj	dt 
dddT}t jddgdD ](}|jd d u sJ |jd dksJ q|jsJ W d    n1 s0    Y  tj	dt 
dddd}t }t jddg|d	D ].}|jd |u sXJ |jd dks@J q@|js|J W d    n1 s0    Y  d S )
Nr%   rE   Zfooz$psutil._psplatform.Process.cpu_timesr    rC   rD   )rF   Zad_value)r.   r/   r<   infokeysr    rM   
ValueErrorr   rH   rL   calledobject)r5   r6   mflagr#   r#   r)   
test_attrsb   s6    0
*

zTestProcessIter.test_attrsc                 C   s.   t t  tjsJ tj  tjr*J d S r8   )r<   r.   r/   Z_pmaprI   r5   r#   r#   r)   test_cache_clear~   s    

z TestProcessIter.test_cache_clearN)	__name__
__module____qualname__r7   r@   rK   rN   rW   rY   r#   r#   r#   r)   r"   =   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 d    n1 sj0    Y  tt tj|dd W d    n1 s0    Y  t }tj|d	|d
\}}t | dk sJ |rJ t|dksJ  rJ |D ]}	t	|	dr J q t
ddd }
|  |
||\}}|jdd |D v sXJ trx| jtj ksJ n| jdksJ  |jgksJ |D ]}	t	|	drJ qt
ddd }|  |  |||\}}t |j|j|jhksJ |D ]}	t	|	ds
J q
d S )Nc                    s     | j d S r8   )appendr%   )r6   pidsr#   r)   callback   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   s   g | ]}t |jqS r#   r.   r1   r%   r&   r#   r#   r)   r*      r+   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rc   g{Gz?rf   rc   g      ?   
returncode   c                 S   s<   t j| d|d\}}t|dks$J t|dks4J ||fS )NQ?rh   rg   rB   r.   
wait_procslenprocsrc   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*      r+   c                 S   s<   t j| d|d\}}t|dks$J t|dks4J ||fS )Nrl   rh   ri   r   rm   rp   r#   r#   r)   test_2   s    
z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r0   r    rM   rR   r.   rn   	TypeErrortimero   hasattrr!   	terminater%   r
   poprj   signalSIGTERMr>   )r5   rc   sproc1sproc2sproc3rq   trr   rs   r6   rt   ru   r#   ra   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#   rd   r&   r#   r#   r)   r*      r+   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r0   ry   r.   rn   )r5   r}   r~   r   rq   r6   r#   r#   r)   test_wait_procs_no_timeout   s    
z*TestProcessAPIs.test_wait_procs_no_timeoutc                 C   sp   |   }t|jsJ t|j}|  |  t|jrDJ tdrRJ tddt v kslJ d S )Nre   r   )r0   r.   
pid_existsr%   r1   r2   r3   rb   r4   r#   r#   r)   test_pid_exists   s    zTestProcessAPIs.test_pid_existsc              	   C   s   t  }|D ]D}zt |s J W q tyN   td |t  vsJJ Y q0 qtt|d t|d }|D ]}t |rpJ qpd S )Ng?i:  i>  )r.   rb   r   AssertionErrorrw   sleeprG   max)r5   rb   r%   r#   r#   r)   test_pid_exists_2   s    
z!TestProcessAPIs.test_pid_exists_2N)rZ   r[   r\   r    markskipifr   r   r   r   r   r   r#   r#   r#   r)   r]      s   
;
	
r]   c                   @   s>   e Zd Zdd Zejjeo"e	  dddd Z
dd Zd	S )
TestMiscAPIsc                 C   s6   t  }t|tsJ |dks"J |t k s2J d S Nr   )r.   Z	boot_time
isinstancefloatrw   )r5   Zbtr#   r#   r)   test_boot_time   s    zTestMiscAPIs.test_boot_timeunreliable on CIr^   c              	   C   s   t  }|sJ |D ]}| j|d |js0J t|jts@J t|jttd fsXJ |jd urzt|jttd fszJ |j |j |j	dksJ t
j
|j	 tstr|jd u sJ nt |j W d    q1 s0    Y  qd S )N)user        )r.   userssubTestnamer   strZterminaltypehoststarteddatetimefromtimestampr   r	   r%   r1   )r5   r   r   r#   r#   r)   
test_users   s     

zTestMiscAPIs.test_usersc                 C   s|  g d}|D ]}t tt|tsJ |qtjdkr6tjs@J tjrJJ |d dt	j
 v rxtjslJ |d ndt	j
 v rtjsJ tjtjtjgddksJ |d	 |d
 |d |d n\dt	j
 v sdt	j
 v rtjsJ |d n&dt	j
 v rXtjs*J |d n"tjsBJ tjrNJ |d |D ]}tt|r\J |q\d S )N)	r
   r   r   r   r   r	   r   r   r   posixr
   linuxr   ZbsdTrg   r   r   r	   r   sunossolarisr   darwinr   r   )r   getattrr.   boolr,   r   r
   r   removesysplatformlowerr   r   r   r	   r   countr   r   )r5   namesr   r#   r#   r)   test_os_constants  sF    








zTestMiscAPIs.test_os_constantsN)rZ   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rBdksLn J ||jdks^J ||jdkspJ ||jD ]x}t||}|dkrt	|t
sJ |dkrv|dks| |d| d||jkrv| |d|j d| d	| dqvd S )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r.   Zvirtual_memoryr   	availabler   usedfree_fieldsr   r   intfail)r5   memr   valuer#   r#   r)   test_virtual_memory;  s"     


z"TestMemoryAPIs.test_virtual_memoryc                 C   s   t  }|jdksJ |jdks(J ||jdks:J ||jdkrX|jdksjJ |n|jdksjJ |d|j  krdksn J ||jdksJ ||jdksJ |d S )N)r   r   r   r   sinsoutr   r   )	r.   Zswap_memoryr   r   r   r   r   r   r   )r5   r   r#   r#   r)   test_swap_memoryN  s    	
 zTestMemoryAPIs.test_swap_memoryN)rZ   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
jjeoLedd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
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   s   t  }|d usJ |tt jddks,J |dks8J tjdrtd}| }W d    n1 sj0    Y  d|vrt	
dd S )NTpercpurg   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r.   	cpu_countro   rD   r,   pathexistsopenreadr    skip)r5   logicalfdZcpuinfo_datar#   r#   r)   test_cpu_count_logicalf  s    
&z"TestCpuAPIs.test_cpu_count_logicalc                 C   sh   t  }t jdd}|d u r&tdtrLt d d dkrL|d u sdJ n|dksXJ ||ksdJ d S )NFr   zcpu_count_cores() is NonerB   )   rg   rg   )r.   r   r    r   r   r   getwindowsversion)r5   r   Zcoresr#   r#   r)   test_cpu_count_coresr  s    
z TestCpuAPIs.test_cpu_count_coresc              	   C   s   dD ]}t jd|d*}t d u s(J |js2J W d    n1 sF0    Y  t jd|d.}tjddd u stJ |js~J W d    q1 s0    Y  qd S )N)re   r   Nz$psutil._psplatform.cpu_count_logicalZreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r   rH   r.   r   rS   )r5   valrU   r#   r#   r)   test_cpu_count_none}  s    (zTestCpuAPIs.test_cpu_count_nonec                 C   sj   d}t  }t| |D ]&}t|ts*J |dks6J ||7 }qtt|t| ddks^J t| d S )Nr   r   r   )r.   rD   sumr   r   roundabsr   )r5   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   r.   rD   rw   r   r   )r5   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s2J |dks>J ||7 }q tt|t| ddksfJ t| qtt jddd tt jddksJ d S )NTr   r   r   r   F)	r.   rD   r   r   r   r   r   r   ro   )r5   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   rf   g?)r.   rD   rw   r   r   zipZ_cpu_busy_time)r5   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 + CIr^   rk   c              	   C   s   t  }t jdd}|dd t| D }|jD ]T}| j|||d0 tt||t|| dk shJ W d    q21 s|0    Y  q2d S )NTr   c                 S   s   g | ]}t |qS r#   )r   )r'   numr#   r#   r)   r*     r+   z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>)fieldbaseper_cpurB   )r.   rD   _maker   r   r   r   r   )r5   r   r   Zsummed_valuesr   r#   r#   r)   test_cpu_times_comparison  s    
z%TestCpuAPIs.test_cpu_times_comparisonc                 C   sz   z2t |tsJ |dksJ |dt  ks0J W nB tyt } z*td|t|t|W Y d }~n
d }~0 0 d S )Nr   g      Y@z
{}
last={}
new={})r   r   r.   r   r   formatpprintpformat)r5   r   Zlast_retZnew_reterrr#   r#   r)   _test_cpu_percent  s    zTestCpuAPIs._test_cpu_percentc                 C   sr   t jdd}tdD ]"}t jd d}| ||| |}qtt t jdd W d    n1 sd0    Y  d S NMbP?)intervalr   re   )r.   cpu_percentrG   r   r    rM   rR   )r5   last_newr#   r#   r)   test_cpu_percent  s    zTestCpuAPIs.test_cpu_percentc                 C   s   t jddd}t|t  ks"J tdD ].}t jd dd}|D ]}| ||| q@|}q*tt t jddd W d    n1 s0    Y  d S )Nr   Tr   r   r   re   )	r.   r   ro   r   rG   r   r    rM   rR   r5   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 t jdd W d    n1 s0    Y  d S r   )r.   cpu_times_percentrG   r   r   r    rM   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  ks"J tdD ]J}t jd dd}|D ].}|D ]}| ||| qH| t||| q@|}q*d S )Nr   Tr   r   )r.   r   ro   r   rG   r   r   )r5   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  qFq>W d    n1 sp0    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*   0  r+   zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   rG   ro   r   r&   r#   r#   r)   r*   /  s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r.   r   rD   r   rH   r   )r5   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ksJ |jD ]2}t||}|dks6J ts|dv r|dksJ qd S )N)ctx_switches
interruptsZsoft_interruptsZsyscallsr   >   r   r   )r.   Z	cpu_statsr   r   r   )r5   infosr   r   r#   r#   r)   test_cpu_stats8  s    

zTestCpuAPIs.test_cpu_statsarm64zskipped due to #1892not supportedc                 C   sd   dd }t jdd}tstr*|s*td|s6J ||t jddg tr`t|t  ks`J d S )Nc                 S   sj   | D ]`}|j dksJ |jdkr0|j|jks0J |j D ],}t||}t|ttfsVJ |dks6J q6qd S )N)currentminr   r   r   )r   r   r   r   r   r   r   )r?   ntr   r   r#   r#   r)   check_lsN  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr   z/returns empty list on FreeBSD and Linux aarch64F)	r.   Zcpu_freqr   r   r    r   r   ro   r   )r5   r  r?   r#   r#   r)   test_cpu_freqI  s    
zTestCpuAPIs.test_cpu_freqc                 C   s@   t  }t|dksJ |D ]}t|ts.J |dksJ qd S )Nri   r   )r.   
getloadavgro   r   r   )r5   Zloadavgloadr#   r#   r)   test_getloadavgd  s
    zTestCpuAPIs.test_getloadavgN)rZ   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   machiner   r  r   r  r#   r#   r#   r)   r   e  s4   
"	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 + 32BITr^   c                 C   s>  t t }|jdksJ |jdks.J ||jdks@J ||jdksRJ ||j|jksfJ ||j|jkszJ |d|j  krdksn J |jt	t
drt
t }d}|j|jksJ t|j|j |k sJ tst|j|j |k sJ |  }tt t | W d    n1 s00    Y  d S )N)r   r   r   r   r   r   
disk_usagei  P )r.   r  r,   getcwdr   r   r   r   r   rx   shutilr   r   Z
get_testfnr    rM   FileNotFoundError)r5   usageZshutil_usageZ	tolerancefnamer#   r#   r)   test_disk_usagen  s$    "
zTestDiskAPIs.test_disk_usageznot an ASCII fsc                 C   s8   t t tt W d    n1 s*0    Y  d S r8   )r    rM   UnicodeEncodeErrorr.   r  r   rX   r#   r#   r)   test_disk_usage_unicode  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r.   r  rX   r#   r#   r)   test_disk_usage_bytes  s    z"TestDiskAPIs.test_disk_usage_bytesc                 C   s~  dd }t jdd}|sJ |D ]b}|| tr<d|jv r<q tsXtj|js^J |n|j tj|j	stJ ||j
s J |q t jdd}|sJ t jddD ]}|| ts|j	rzt|j	 W nb ty, } zHtrtr|jtjkrW Y d }~q|jtjtjhvr W Y d }~qd }~0 0 tj|j	sJ |qdd }|t}d	d
 t jddD }||v szJ d S )Nc                 S   sD   t | jtsJ t | jts J t | jts0J t | jts@J d S r8   )r   devicer   
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 r8   )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>)r.   Zdisk_partitionsr   r  r
   r,   r   r   r  r  r  statOSErrorr   r   errnoEIOEPERMEACCES__file__)r5   r  r?   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 us$J d|| t jdd}t|tt|ksPJ |D ]}|sdJ ||||  qTd S )Nc                 S   s   | d | j ksJ | d | jks$J | d | jks6J | d | jksHJ tsts| d | jksbJ | d | jkstJ tr| d | j	ksJ | d | j
ksJ | d	 | jksJ ntr| d | jksJ | jD ]}t| |dksJ | qd S )
Nr   rg   rB   ri         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   r#   r#   r)   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleFZperdiskzno disks on this system?T)r.   disk_io_countersro   r>   r5   r  retr;   r#   r#   r)   test_disk_io_counters  s    z"TestDiskAPIs.test_disk_io_countersc                 C   sd   t jdi dB}tjddd u s$J tjddi ks8J |jsBJ W d    n1 sV0    Y  d S )Nz#psutil._psplatform.disk_io_countersr   Fr-  T)r   rH   r.   r.  rS   r5   rU   r#   r#   r)   test_disk_io_counters_no_disks  s    z+TestDiskAPIs.test_disk_io_counters_no_disksN)rZ   r[   r\   r    r   r   r   r   r  r   r  r  r&  r   r,   r   r   r   r.   r.  r1  r3  r#   r#   r#   r)   r  m  s"   


:r  c                   @   sz   e Zd Zejje dddd Zejje dddd Zdd Z	d	d
 Z
dd Zejjepdepde dddd ZdS )TestNetAPIsr   r^   c                 C   sd   dd }t jdd}|| t jdd}|g ks4J |D ]&}|sDJ t|tsRJ |||  q8d S )Nc                 S   s(  | d | j ksJ | d | jks$J | d | jks6J | d | jksHJ | d | jksZJ | d | jkslJ | d | jks~J | d | jksJ | j dksJ | | jdksJ | | jdksJ | | jdksJ | | jdksJ | | jdksJ | | jdksJ | | jdks$J | d S )	Nr   rg   rB   ri   r'  r(  r   r)  )Z
bytes_sentZ
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)r.   net_io_countersr   r   r/  r#   r#   r)   test_net_io_counters  s    z TestNetAPIs.test_net_io_countersc                 C   sd   t jdi dB}tjddd u s$J tjddi ks8J |jsBJ W d    n1 sV0    Y  d S )Nz"psutil._psplatform.net_io_countersr   Fr5  T)r   rH   r.   r6  rS   r2  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jtjt jh}| D ]\}}t|t	sLJ t
t|t
|ksdJ |D ]}t|jts~J t|jt	sJ t|jt	td fsJ t|jt	td fsJ |j|v sJ t|jtjsJ || jr|jtjkr8t|j }||jdf W d    n1 s,0    Y  nv|jtjkrt|jdtjtjdtjd }|\}	}
}}}t|	|
|}|| W d    n1 s0    Y  |j|j|j|jfD ]*}|d ur|jtjkrt||j q|jr|jd u s J n|jr |jd u s J |jrh|jrh|jtjtjhv rh|jt|kshJ qhq4tsftsftrttdrt jtjksJ n0t rt jtj!ksJ nt"rt jdksJ d S )Nr   AF_LINKre   )#r.   net_if_addrsnet_if_statssocketAF_INETAF_INET6r9  itemsr   r   ro   r>   familyr   addressnetmaskr   	broadcastenumIntEnumisupbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr   r   r   r   r   rx   r   	AF_PACKETr   )r5   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrP   afsocktypeprotoZ
_canonnamesaipr#   r#   r)   test_net_if_addrs%  st    
2*
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L}t d d }|jsJJ t r^|jdkslJ n|jdkslJ W d    n1 s0    Y  d S )	Nem1z06:3d:29)rV  re   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.   r9  r   rH   r:  rS   rA  )r5   r0  rU   rN  r#   r#   r)    test_net_if_addrs_mac_null_byteso  s    
z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   s   t  }|sJ |t jt jt jf}| D ]p\}}t|tsBJ |\}}}}}	t|ts^J ||v sjJ ||v svJ |dksJ |dksJ t|	ts,J q,d S r   )	r.   r;  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr?  r   r   r   )
r5   rL  Zall_duplexesr   statsrF  ZduplexspeedZmtuflagsr#   r#   r)   test_net_if_stats  s    zTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc                 C   sX   t jdttjdd.}t }|i ks,J |js6J W d    n1 sJ0    Y  d S )Nzpsutil._psutil_posix.net_if_mturO   rC   )r   rH   r  r   ZENODEVr.   r;  rS   )r5   rU   r0  r#   r#   r)   test_net_if_stats_enodev  s    
z$TestNetAPIs.test_net_if_stats_enodevN)rZ   r[   r\   r    r   r   r   r7  r8  rU  rW  r[  r   r   r   r\  r#   r#   r#   r)   r4    s   


J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   r^   c                 C   s   t  }| D ]x\}}t|ts&J |D ]\}t|jts>J |jd urV|jdksVJ |jd urn|jdksnJ |jd ur*|jdks*J q*qd S r   )	r.   sensors_temperaturesr?  r   r   labelr   highcritical)r5   tempsr   entriesentryr#   r#   r)   test_sensors_temperatures  s    


z)TestSensorsAPIs.test_sensors_temperaturesc                 C   s   ddgi}t jd|dX}tjddd d }|js8J |jdksFJ |jd	ksTJ |jd
ksbJ W d    n1 sv0    Y  d S )NZcoretemp)r_  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)r   rH   r.   r^  rS   r   r`  ra  )r5   drU   rb  r#   r#   r)   #test_sensors_temperatures_fahreneit  s    

z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz
no batteryc                 C   sp   t  }|jdksJ |jdks$J |jt jt jhvrF|jdks\J n|jt jkr\|js\J t|jtslJ d S )Nr   r   )	r.   Zsensors_batteryr   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDZpower_pluggedr   r   )r5   r0  r#   r#   r)   test_sensors_battery  s    
z$TestSensorsAPIs.test_sensors_batteryc                 C   sd   t  }| D ]N\}}t|ts&J |D ]2}t|jts>J t|jtsNJ |jdks*J q*qd S r   )r.   Zsensors_fansr?  r   r   r_  r   r   )r5   Zfansr   rc  rd  r#   r#   r)   test_sensors_fans  s    z!TestSensorsAPIs.test_sensors_fansN)rZ   r[   r\   r    r   r   r   re  rg  r   r   rh  r   ri  r#   r#   r#   r)   r]    s   

r]  )8__doc__r   rD  r   r,   r   r   r
  r{   r<  r   rw   Zunittestr   r.   r   r   r   r   r   r   r	   r
   r   r   Zpsutil._commonr   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  r4  r]  r#   r#   r#   r)   <module>   sp   HfO+  
  &