o
    F+ i͊                     @   sT  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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- G d"d# d#e*Z.G d$d% d%e*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 d0d1 d1e*Z5dS )2z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)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 s!J t|j}|  |  |jdd t D vs=J d S )Nc                 S      g | ]}|j qS  pid.0xr#   r#   d/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/psutil/tests/test_system.py
<listcomp><       z5TestProcessIter.test_pid_presence.<locals>.<listcomp>c                 S   r"   r#   r$   r&   r#   r#   r)   r*   >   r+   c                 S   r"   r#   r$   r&   r#   r#   r)   r*   B   r+   )	osgetpidpsutilprocess_iterspawn_subprocr%   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sJ d S )Nc                 S      | j S Nr$   r(   r#   r#   r)   <lambda>F       z4TestProcessIter.test_no_duplicates.<locals>.<lambda>)keyc                 S   r8   r9   r$   r:   r#   r#   r)   r;   G   r<   )listr.   r/   sortedset)r5   lsr#   r#   r)   test_no_duplicatesD   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r$J W d    n1 s.w   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_nspJ   s   z TestProcessIter.test_emulate_nspc              
   C   s   t t  tdD ]B}tjdtt d' t	
tj t tjdgd W d    n1 s3w   Y  W d    n1 sBw   Y  tj  q
d S rC   )r>   r.   r/   rI   r   rJ   AccessDeniedr,   r-   r   raisesrK   rL   r#   r#   r)   test_emulate_access_deniedT   s   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 sEw   Y  tj	dt 
ddd*}t jddgdD ]}|jd d u siJ |jd dksrJ q^|jsxJ W d    n1 sw   Y  tj	dt 
ddd/}t }t jddg|d	D ]}|jd |u sJ |jd dksJ q|jsJ W d    d S 1 sw   Y  d S )
Nr%   rG   Zfooz$psutil._psplatform.Process.cpu_timesr    rE   rF   )rH   Zad_value)r.   r/   r>   infokeysr   rO   
ValueErrorr   rJ   rN   calledobject)r5   r6   mflagr#   r#   r)   
test_attrs_   s<   


"zTestProcessIter.test_attrsc                 C   s.   t t  tjsJ tj  tjrJ d S r9   )r>   r.   r/   Z_pmaprK   r5   r#   r#   r)   test_cache_clear{   s   

z TestProcessIter.test_cache_clearN)	__name__
__module____qualname__r7   rB   rM   rP   rY   r[   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oedddd Z	dd Z
d	d
 ZdS )TestProcessAPIsz,spawn_subproc() unreliable on PYPY + WINDOWSreasonc                    s   fdd}g  |   }|   }|   }dd |||fD }tt tj|dd W d    n1 s5w   Y  tt tj|dd W d    n1 sQw   Y  t }tj|d	|d
\}}t | dk snJ |rrJ t|dkszJ  r~J |D ]	}	t	|	drJ qt
ddd }
|  |
||\}}|jdd |D v sJ tr| 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sJ |D ]
}	t	|	dsJ qd S )Nc                    s     | j d S r9   )appendr%   )r6   pidsr#   r)   callback   s   z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S      g | ]}t |jqS r#   r.   r1   r%   r&   r#   r#   r)   r*          z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>)timeout   )re   g{Gz?rj   re   g      ?   
returncode   c                 S   <   t j| d|d\}}t|dksJ t|dksJ ||fS )NQ?rl   rk   rD   r.   
wait_procslenprocsre   gonealiver#   r#   r)   test_1      
z/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   r"   r#   r$   r&   r#   r#   r)   r*      r+   c                 S   rp   )Nrq   rl   rm   r   rr   ru   r#   r#   r)   test_2   rz   z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r0   r   rO   rT   r.   rs   	TypeErrortimert   hasattrr    	terminater%   r
   poprn   signalSIGTERMr@   )r5   re   sproc1sproc2sproc3rv   trw   rx   r6   ry   r{   r#   rc   r)   test_wait_procs   sP   

zTestProcessAPIs.test_wait_procsc                 C   sL   |   }|   }|   }dd |||fD }|D ]}|  qt| d S )Nc                 S   rf   r#   rg   r&   r#   r#   r)   r*      rh   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r0   r   r.   rs   )r5   r   r   r   rv   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r"J tdr)J tddt v ks6J d S )Nri   r   )r0   r.   
pid_existsr%   r1   r2   r3   rd   r4   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  vs%J Y qw tt|d t|d }|D ]	}t |r@J q7d S )Ng?i:  i>  )r.   rd   r   AssertionErrorr}   sleeprI   max)r5   rd   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J |dksJ |t k sJ d S Nr   )r.   Z	boot_time
isinstancefloatr}   )r5   Zbtr#   r#   r)   test_boot_time   s   zTestMiscAPIs.test_boot_timeunreliable on CIr`   c              	   C   s   t  }|sJ |D ]h}| j|dX |jsJ t|jts J t|jttd fs,J |jd ur=t|jttd fs=J |j |j |j	dksJJ t
j
|j	 tsUtr]|jd u s\J nt |j W d    n1 smw   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   sj  g d}|D ]}t tt|tsJ |qtjdkrtjsJ tjr$J |d dt	j
 v r;tjs5J |d njdt	j
 v rktjsGJ tjtjtjgddksVJ |d	 |d
 |d |d n:dt	j
 v syd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 ]}tt|rJ |qd S )N)	r
   r   r   r   r   r	   r   r   r   posixr
   linuxr   ZbsdTrk   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)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 ]@}t||}|dkrPt	|t
sPJ |dkr~|dkset|d| d  S ||jkr~t|d|j d| d	| d  S q>d S )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r.   Zvirtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)r5   memr   valuer#   r#   r)   test_virtual_memory8  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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_memoryr   r   r   r   r   r   r   )r5   r   r#   r#   r)   test_swap_memoryK  s   	
&zTestMemoryAPIs.test_swap_memoryN)r\   r]   r^   r   r   r#   r#   r#   r)   r   7  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r'ep(e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oVe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sJ tjdrCtd}| }W d    n1 s5w   Y  d|vrEt	
dS d S d S )NTpercpurk   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r.   	cpu_countrt   rF   r,   pathexistsopenreadr   skip)r5   logicalfdZcpuinfo_datar#   r#   r)   test_cpu_count_logicalc  s   


z"TestCpuAPIs.test_cpu_count_logicalc                 C   sj   t  }t jdd}|d u rtdS tr't d d dkr'|d u s%J d S |dks-J ||ks3J d S )NFr   zcpu_count_cores() is NonerD   )   rk   rk   )r.   r   r   r   r   r   getwindowsversion)r5   r   Zcoresr#   r#   r)   test_cpu_count_coreso  s   
z TestCpuAPIs.test_cpu_count_coresc              	   C   s   dD ]L}t jd|d}t d u sJ |jsJ W d    n1 s#w   Y  t jd|d}tjddd u s:J |js?J W d    n1 sIw   Y  qd S )N)ri   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r   rJ   r.   r   rU   )r5   valrW   r#   r#   r)   test_cpu_count_nonez  s"   zTestCpuAPIs.test_cpu_count_nonec                 C   sj   d}t  }t| |D ]}t|tsJ |dksJ ||7 }qtt|t| ddks/J t| d S )Nr   r   r   )r.   rF   sumr   r   roundabsr   )r5   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tdS )Nztime remained the same)r   r.   rF   r}   r   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 ]1}d}t| |D ]}t|tsJ |dksJ ||7 }qtt|t| ddks3J t| qtt jddd tt jddksLJ d S )NTr   r   r   r   F)	r.   rF   r   r   r   r   r   r   rt   )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tdS t jdd}t||D ]\}}t |t |}}|| }|dkr= d S q#q)NTr   rj   g?)r.   rF   r}   r   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`   ro   c              	   C   s   t  }t jdd}|dd t| D }|jD ]*}| j|||d tt||t|| dk s4J 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_cpurD   )r.   rF   _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   sl   zt |tsJ |dksJ |dt  ksJ W d S  ty5 } ztd|t|t|d }~ww )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   st   t jdd}tdD ]}t jd d}| ||| |}q
tt t jdd W d    d S 1 s3w   Y  d S NMbP?)intervalr   ri   )r.   cpu_percentrI   r   r   rO   rT   )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    d S 1 sEw   Y  d S )Nr   Tr   r   r   ri   )	r.   r   rt   r   rI   r   r   rO   rT   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    d S 1 sAw   Y  d S r   )r.   cpu_times_percentrI   r   r   r   rO   rT   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 ]%}t jd dd}|D ]}|D ]	}| ||| q$| t||| q |}qd S )Nr   Tr   r   )r.   r   rt   r   rI   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  q#qW d    d S 1 s9w   Y  d S )NTr   c                 S   s*   g | ]}| d d tt|jD qS )c                 S   s   g | ]}d qS )r   r#   r&   r#   r#   r)   r*   *  s    zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   rI   rt   r   r&   r#   r#   r)   r*   )  s    zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesr   )r.   r   rF   r   rJ   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 ]}t||}|dksJ 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_stats2  s   

zTestCpuAPIs.test_cpu_statszskipped due to #1892not supportedc                 C   sh   dd }t jdd}tstr|stdS |sJ ||t jddg tr0t|t  ks2J d S d S )Nc                 S   sP   | D ]#}|j dksJ |j D ]}t||}t|ttfsJ |dks$J qqd S )N)currentminr   r   )r   r   r   r   r   )rA   ntr   r   r#   r#   r)   check_lsF  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   rt   r   )r5   r  rA   r#   r#   r)   test_cpu_freqC  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 )Nrm   r   )r.   
getloadavgrt   r   r   )r5   Zloadavgloadr#   r#   r)   test_getloadavgZ  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   r   r  r   r  r#   r#   r#   r)   r   b  s2    
!	r   c                   @   s   e Zd Zdd Zejje dddd Zdd Z	d	d
 Z
ejjeo(ejd ddejjeo4e  dddd Zdd ZdS )TestDiskAPIsc                 C   s4  t t }|jdksJ |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}|j|jks_J t
|j|j |k skJ tsyt
|j|j |k syJ |  }tt t | W d    d S 1 sw   Y  d S )N)r   r   r   r   r   r   i  P )r.   
disk_usager,   getcwdr   r   r   r   r   shutilr   r   Z
get_testfnr   rO   FileNotFoundError)r5   usageZshutil_usageZ	tolerancefnamer#   r#   r)   test_disk_usaged  s$   ""zTestDiskAPIs.test_disk_usageznot an ASCII fsr`   c                 C   s:   t t tt W d    d S 1 sw   Y  d S r9   )r   rO   UnicodeEncodeErrorr.   r  r   rZ   r#   r#   r)   test_disk_usage_unicode|  s   "z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t d d S )N   .)r.   r  rZ   r#   r#   r)   test_disk_usage_bytes  s   z"TestDiskAPIs.test_disk_usage_bytesc                 C   sr  dd }t jdd}|sJ |D ]1}|| trd|jv rqts,tj|js+J |n|j tj|j	s:J ||j
sAJ |qt jdd}|sLJ t jddD ]K}|| ts|j	rzt|j	 W n, ty } z tr}tr}|jtjkr}W Y d }~qR|jtjtjhvr W Y d }~qRd }~ww tj|j	sJ |qRdd }|t}d	d
 t jddD }||v sJ d S )Nc                 S   sD   t | jtsJ t | jtsJ t | jtsJ t | jts J d S r9   )r   devicer   
mountpointfstypeoptsr  r#   r#   r)   check_ntuple  s   z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)allZcdromTc                 S   s8   t j| } t j| st j| } t j| r|  S r9   )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  rA   Zdiskr   r"  mountZmountsr#   r#   r)   test_disk_partitions  sF   

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s(J |D ]}|s2J ||||  q*d S )Nc                 S   s   | d | j ks	J | d | jksJ | d | jksJ | d | jks$J tsctsc| d | jks1J | d | jks:J trX| d | j	ksEJ | d | j
ksNJ | d	 | jksWJ ntrc| d | jkscJ | jD ]}t| |dkssJ | qfd S )
Nr   rk   rD   rm         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_countersrt   r@   r5   r  retr=   r#   r#   r)   test_disk_io_counters  s   z"TestDiskAPIs.test_disk_io_countersc                 C   f   t jdi d"}tjddd u sJ tjddi ksJ |js!J W d    d S 1 s,w   Y  d S )Nz#psutil._psplatform.disk_io_countersr   Fr2  T)r   rJ   r.   r3  rU   r5   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+  r   r,   r   r   r   r.   r3  r6  r9  r#   r#   r#   r)   r  c  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p2ep2e dddd ZdS )TestNetAPIsr  r`   c                 C   sd   dd }t jdd}|| t jdd}|g ksJ |D ]}|s"J t|ts)J |||  qd S )Nc                 S   s$  | d | j ks	J | d | jksJ | d | jksJ | d | jks$J | d | jks-J | d | jks6J | d | jks?J | d | jksHJ | 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   rk   rD   rm   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   r4  r#   r#   r)   test_net_io_counters  s   z TestNetAPIs.test_net_io_countersc                 C   r7  )Nz"psutil._psplatform.net_io_countersr   Fr;  T)r   rJ   r.   r<  rU   r8  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	s&J t
t|t
|ks2J |D ]}t|jts>J t|jt	sFJ t|jt	td fsRJ t|jt	td fs^J |j|v seJ t|jtjsnJ || jr|jtjkrt|j}||jdf W d    n1 sw   Y  n9|jtjkrt|jdtjtjdtjd }|\}	}
}}}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d u sJ n|jr|jd u sJ |jr!|jr!|jtjtjhv r!|jt|ks!J q4qts,ts,tr?ttdr;t jtjks=J d S d S t rMt jtj!ksKJ d S t"rXt jdksZJ d S d S )Nr   AF_LINKri   )#r.   net_if_addrsnet_if_statssocketAF_INETAF_INET6r?  itemsr   r   rt   r@   familyr   addressnetmaskr   	broadcastenumIntEnumisupbindgetaddrinfoSOCK_STREAM
AI_PASSIVEZptpr   r   r   r   r   r~   r   	AF_PACKETr   )r5   nicsZ	nic_statsZfamiliesZnicaddrsaddrsrR   afsocktypeprotoZ
_canonnamesaipr#   r#   r)   test_net_if_addrs  s   
3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ks.J n|jdks6J W d    d S W d    d S 1 sIw   Y  d S )	Nem1z06:3d:29)r\  ri   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.   r?  r   rJ   r@  rU   rG  )r5   r5  rW   rT  r#   r#   r)    test_net_if_addrs_mac_null_bytesa  s   
"z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   s   t  }|s
J |t jt jt jf}| D ]8\}}t|ts!J |\}}}}}	t|ts/J ||v s5J ||v s;J |dksAJ |dksGJ t|	tsNJ qd S r   )	r.   rA  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrE  r   r   r   )
r5   rR  Zall_duplexesr   statsrL  ZduplexspeedZmtuflagsr#   r#   r)   test_net_if_statss  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 ksJ |jsJ W d    d S 1 s&w   Y  d S )Nz"psutil._psplatform.cext.net_if_mturQ   rE   )r   rJ   r$  r%  ZENODEVr.   rA  rU   )r5   rW   r5  r#   r#   r)   test_net_if_stats_enodev  s   
"z$TestNetAPIs.test_net_if_stats_enodevN)r\   r]   r^   r   r   r   r   r=  r>  r[  r]  ra  r   r   r   rb  r#   r#   r#   r)   r:    s    


K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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 ]<\}}t|tsJ |D ].}t|jtsJ |jd ur+|jdks+J |jd ur7|jdks7J |jd urC|jdksCJ qqd S r   )	r.   sensors_temperaturesrE  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-}tjddd d }|jsJ |jdks#J |jd	ks*J |jd
ks1J W d    d S 1 s<w   Y  d S )NZcoretemp)re  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)Z
fahrenheitr   g     ^@g     a@g     c@)r   rJ   r.   rd  rU   r  rf  rg  )r5   drW   rh  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r#|jdks"J n|jt jkr.|js.J t|jts6J d S )Nr   r   )	r.   Zsensors_batteryr   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDZpower_pluggedr   r   )r5   r5  r#   r#   r)   test_sensors_battery  s   
z$TestSensorsAPIs.test_sensors_batteryc                 C   sd   t  }| D ]'\}}t|tsJ |D ]}t|jtsJ t|jts'J |jdks.J qqd S r   )r.   Zsensors_fansrE  r   r   re  r  r   )r5   Zfansr   ri  rj  r#   r#   r)   test_sensors_fans  s   z!TestSensorsAPIs.test_sensors_fansN)r\   r]   r^   r   r   r   r   rk  rm  r   r   rn  r   ro  r#   r#   r#   r)   rc    s    

rc  )6__doc__r   rJ  r%  r,   r   r  r   rB  r   r}   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:  rc  r#   r#   r#   r)   <module>   sn   HfO+    '