U
    ;g                     @   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 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#   X/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/psutil/tests/test_system.py
<listcomp>?   s     z5TestProcessIter.test_pid_presence.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r#   r$   r&   r#   r#   r)   r*   A   s     c                 S   s   g | ]
}|j qS r#   r$   r&   r#   r#   r)   r*   E   s     )
osgetpidpsutilprocess_iterAssertionError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s4td S )Nc                 S   s   | j S Nr$   r(   r#   r#   r)   <lambda>I       z4TestProcessIter.test_no_duplicates.<locals>.<lambda>)keyc                 S   s   | j S r8   r$   r9   r#   r#   r)   r:   J   r;   )listr-   r.   sortedsetr/   )r5   lsr#   r#   r)   test_no_duplicatesG   s
     z"TestProcessIter.test_no_duplicatesc              
   C   sb   t t  tdD ]H}tjdtt d t tjdgdrHt	W 5 Q R X tj
  qd S N   zpsutil.Process.as_dictZside_effect	cpu_timesattrs)r=   r-   r.   ranger   patchZNoSuchProcessr+   r,   r/   cache_clearr5   r(   r#   r#   r)   test_emulate_nspM   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 rB   )r=   r-   r.   rH   r   rI   AccessDeniedr+   r,   r    raisesrJ   rK   r#   r#   r)   test_emulate_access_deniedW   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%   rF   Zfooz$psutil._psplatform.Process.cpu_timesr    rD   rE   )rG   Zad_value)r-   r.   r=   infokeysr/   r    rN   
ValueErrorr   rI   rM   calledobject)r5   r6   mflagr#   r#   r)   
test_attrsb   s8    

 
zTestProcessIter.test_attrsc                 C   s.   t t  tjsttj  tjr*td S r8   )r=   r-   r.   Z_pmapr/   rJ   r5   r#   r#   r)   test_cache_clear~   s    

z TestProcessIter.test_cache_clearN)	__name__
__module____qualname__r7   rA   rL   rO   rX   rZ   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 5 Q R X tt tj|dd W 5 Q R X t }tj|d	|d
\}}t | dk st|rtt	|dkst rt|D ]}	t
|	drtqtddd }
|  |
||\}}|jdd |D ks,ttrL| jtj ks`tn| jdks`t |jgksrt|D ]}	t
|	drvtqvtddd }|  |  |||\}}t |j|j|jhkst|D ]}	t
|	dstqd 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*      s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )rd   g{Gz?rg   rd   g      ?   
returncode   c                 S   s<   t j| d|d\}}t|dks$tt|dks4t||fS )NQ?ri   rh   rC   r-   
wait_procslenr/   procsrd   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 )Nrm   ri   rj   r   rn   rq   r#   r#   r)   test_2   s      
z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r0   r    rN   rS   r-   ro   	TypeErrortimer/   rp   hasattrr!   	terminater%   r
   poprk   signalSIGTERMr?   )r5   rd   sproc1sproc2sproc3rr   trs   rt   r6   ru   rv   r#   rb   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#   re   r&   r#   r#   r)   r*      s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r0   rz   r-   ro   )r5   r~   r   r   rr   r6   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 )Nrf   r   )	r0   r-   
pid_existsr%   r/   r1   r2   r3   rc   r4   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>  )r-   rc   r   r/   rx   sleeprH   max)r5   rc   r%   r#   r#   r)   test_pid_exists_2   s    
z!TestProcessAPIs.test_pid_exists_2N)r[   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t|dks"t|t k s2td S Nr   )r-   Z	boot_time
isinstancefloatr/   rx   )r5   Zbtr#   r#   r)   test_boot_time   s    zTestMiscAPIs.test_boot_timeunreliable on CIr_   c              
   C   s   t  }|st|D ]}| j|d |js0tt|jts@tt|jttd fsXt|j	d k	rzt|j	ttd fszt|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        )r-   usersr/   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  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bsdTrh   sunossolarisdarwin)r   getattrr-   boolr/   r+   r   r
   r   removesysplatformlowerr   r   r   r	   r   countr   r   )r5   namesr   r#   r#   r)   test_os_constants  sX    








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t||jdks,t|d|j  krBdksLn t||jdks^t||jdkspt||jD ]x}t	||}|dkrt
|tst|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   r/   	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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   )
r-   Zswap_memoryr   r/   r   r   r   r   r   r   )r5   r   r#   r#   r)   test_swap_memoryN  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
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   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percpurh   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r-   	cpu_countr/   rp   rE   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 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 NonerC   )   rh   rh   )r-   r   r    r   r   r   getwindowsversionr/   )r5   r   Zcoresr#   r#   r)   test_cpu_count_coresr  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)rf   r   Nz$psutil._psplatform.cpu_count_logicalZreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r   rI   r-   r   r/   rT   )r5   valrV   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   )	r-   rE   sumr   r   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-   rE   rx   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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)
r-   rE   r   r   r   r/   r   r   r   rp   )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   rg   g?)r-   rE   rx   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_   rl   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_cpurC   )	r-   rE   _maker   r   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   sx   z2t |tst|dkst|dt  ks0tW n@ tk
rr } z"td|t|t|W 5 d }~X Y nX 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   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   rf   )r-   cpu_percentrH   r   r    rN   rS   )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"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   rf   )
r-   r   rp   r   r/   rH   r   r    rN   rS   r5   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   )r-   cpu_times_percentrH   r   r   r    rN   rS   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   )r-   r   rp   r   r/   rH   r   r   )r5   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*   0  s     zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   rH   rp   r   r&   r#   r#   r)   r*   /  s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r-   r   rE   r   rI   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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   )r-   Z	cpu_statsr   r/   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|s6t||t jddg tr`t|t 	 ks`td S )Nc                 S   sj   | D ]`}|j dkst|jdkr0|j|jks0t|j D ],}t||}t|ttfsVt|dks6tq6qd S )N)currentminr   r   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/   r   rp   r   )r5   r  r@   r#   r#   r)   test_cpu_freqI  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 )Nrj   r   )r-   
getloadavgrp   r/   r   r   )r5   Zloadavgloadr#   r#   r)   test_getloadavgd  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   r   r   machiner   r  r   r  r#   r#   r#   r)   r   e  s8   
" 	 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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 )r-   r  r+   getcwdr   r/   r   r   r   r   ry   shutilr   r   Z
get_testfnr    rN   FileNotFoundError)r5   usageZshutil_usageZ	tolerancefnamer#   r#   r)   test_disk_usagen  s$    "
zTestDiskAPIs.test_disk_usageznot an ASCII fsc              	   C   s$   t t tt W 5 Q R X d S r8   )r    rN   UnicodeEncodeErrorr-   r  r   rY   r#   r#   r)   test_disk_usage_unicode  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r-   r  rY   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h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 r8   )r   devicer   r/   
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  r  statOSErrorr   r   errnoZ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 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   rh   rC   rj         r         )Z
read_countr/   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)r-   disk_io_countersr/   rp   r?   r5   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   rI   r-   r-  r/   rT   r5   rV   r#   r#   r)   test_disk_io_counters_no_disks  s     z+TestDiskAPIs.test_disk_io_counters_no_disksN)r[   r\   r]   r    r   r   r   r   r  r   r  r  r%  r   r+   r   r   r   r-   r-  r0  r2  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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   rh   rC   rj   r&  r'  r   r(  )	Z
bytes_sentr/   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)r-   net_io_countersr/   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   Fr4  T)r   rI   r-   r5  r/   rT   r1  r#   r#   r)   test_net_io_counters_no_nics  s     z(TestNetAPIs.test_net_io_counters_no_nicsc                 C   s  t  }|st|t  }tjtjt jh}| D ]\}}t	|t
sLttt|t|ksdt|D ]}t	|jts~tt	|jt
stt	|jt
td fstt	|jt
td fst|j|kstt	|jtjst|| jr|jtjkr"t|j}||jdf W 5 Q R X n`|jtjkrt|jdtjtjdtjd }|\}	}
}}}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stn|jr|jd kst|jrh|jrh|jtjtjhkrh|jt|kshtqhq4ts:ts:trZt tdrt jtjkstn0t!rtt jtj"kstnt#rt jdkstd S )Nr   AF_LINKrf   )$r-   net_if_addrsr/   net_if_statssocketAF_INETAF_INET6r8  itemsr   r   rp   r?   familyr   addressnetmaskr   	broadcastenumIntEnumisupbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr   r   r   r   r   ry   r   	AF_PACKETr   )r5   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrQ   afsocktypeprotoZ
_canonnamesaipr#   r#   r)   test_net_if_addrs%  st    

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)rU  rf   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-   r8  r   rI   r9  rT   r/   r@  )r5   r/  rV   rM  r#   r#   r)    test_net_if_addrs_mac_null_byteso  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   )
r-   r:  r/   ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr>  r   r   r   )
r5   rK  Zall_duplexesr   statsrE  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   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_mturP   rD   )	r   rI   r  r   ZENODEVr-   r:  r/   rT   )r5   rV   r/  r#   r#   r)   test_net_if_stats_enodev  s    
z$TestNetAPIs.test_net_if_stats_enodevN)r[   r\   r]   r    r   r   r   r6  r7  rT  rV  rZ  r   r   r   r[  r#   r#   r#   r)   r3    s   


J r3  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&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   )
r-   sensors_temperaturesr>  r   r   r/   labelr   highcritical)r5   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)r^  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)	r   rI   r-   r]  rT   r/   r   r_  r`  )r5   drV   ra  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hkrF|jdks\tn|jt jkr\|js\tt|jt	sltd S )Nr   r   )
r-   Zsensors_batteryr   r/   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDZpower_pluggedr   r   )r5   r/  r#   r#   r)   test_sensors_battery  s    
z$TestSensorsAPIs.test_sensors_batteryc                 C   sd   t  }| D ]N\}}t|ts&t|D ]2}t|jts>tt|jtsNt|jdks*tq*qd S r   )	r-   Zsensors_fansr>  r   r   r/   r^  r   r   )r5   Zfansr   rb  rc  r#   r#   r)   test_sensors_fans  s    z!TestSensorsAPIs.test_sensors_fansN)r[   r\   r]   r    r   r   r   rd  rf  r   r   rg  r   rh  r#   r#   r#   r)   r\    s   

r\  )8__doc__r   rC  r   r+   r   r   r
  r|   r;  r   rx   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  r3  r\  r#   r#   r#   r)   <module>   sp   HfO+  
  &