o
    `qiN                     @   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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 ervejj Ze dkotedZndZdZdd Zdd Zejje ddG dd deZejje ddG dd deZ ejje ddG dd deZ!ejje
 ddG dd deZ"ejje	 d dG d!d" d"eZ#dS )#z$Tests specific to all BSD platforms.    N)BSD)FREEBSD)NETBSD)OPENBSD)HAS_BATTERY)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_subproc)	terminatemuseFc                 C   sh   t d|  }tr||dd d }ntstr#||dd d }zt|W S  ty3   | Y S w )zmExpects a sysctl command with an argument and parse the result
    returning only the value of interest.
    zsysctl z:    N=   )r   r   findr   r   int
ValueError)cmdlineresult r   \/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/psutil/tests/test_bsd.pysysctl)   s   
r   c                 C   s>   t d}|dD ]	}|| r nq	tdt| d S )z+Thin wrapper around 'muse' cmdline utility.r   
zline not foundr   )r   split
startswithr   r   )fieldoutliner   r   r   r   8   s   
zBSD onlyreasonc                   @   s   e Zd ZdZedd Zedd Zejj	e
dddd	 Zd
d Zejj	ed dddd Zejj	ed ddejj	e
dddd Zejj	ed dddd ZdS )BSDTestCasez)Generic tests common to all BSD variants.c                 C      t  j| _d S Nr   pidclsr   r   r   
setUpClassL      zBSDTestCase.setUpClassc                 C      t | j d S r$   r   r&   r'   r   r   r   tearDownClassP   r*   zBSDTestCase.tearDownClassz -o lstart doesn't work on NETBSDr    c                 C   sR   t d| j }|dd }t| j }tdt	|}||ks'J d S )Nzps -o lstart -p ZSTARTED z%a %b %e %H:%M:%S %Y)
r   r&   replacestrippsutilProcessZcreate_timetimestrftime	localtime)selfoutputZstart_psZstart_psutilr   r   r   test_process_create_timeT   s   
z$BSDTestCase.test_process_create_timec                 C   s   dd }t jddD ]M}t |j}||j\}}}}|j|ks"J |j|ks)J t|j| dkr@t	d|j d|   S t|j
| dkrWt	d|j
 d|   S q
d S )Nc                 S   s   t d|  d }|d}|d |d}| d d \}}}}|dkr+d}t|d }t|d }t|d }||||fS )	Nzdf -k ""r   r      noner.      )r   r0   r   popr   )pathr   linesr   devtotalusedfreer   r   r   dfa   s   


z"BSDTestCase.test_disks.<locals>.dfF)alli   zpsutil=z, df=)r1   Zdisk_partitions
disk_usageZ
mountpointZdevicerA   absrC   r	   ZfailrB   )r6   rD   partusager@   rA   rB   rC   r   r   r   
test_disks^   s   zBSDTestCase.test_disksr   zsysctl cmd not availablec                 C   s    t d}tjdd|ksJ d S )Nzhw.ncpuT)Zlogical)r   r1   	cpu_countr6   Zsystr   r   r   test_cpu_count_logicaly   s   z"BSDTestCase.test_cpu_count_logicalzskipped on NETBSDc                 C   s   t d}|t jksJ d S )Nz
hw.physmem)r   r1   virtual_memoryrA   r6   numr   r   r   test_virtual_memory_total   s   z%BSDTestCase.test_virtual_memory_totalifconfigzifconfig cmd not availablec              	   C   sx   t   D ]3\}}z	td| }W n	 ty   Y qw |jd|v ks&J d|v r9|jtt	d|d ks9J qd S )Nz	ifconfig RUNNINGmtuz	mtu (\d+)r   )
r1   Znet_if_statsitemsr   RuntimeErrorZisuprT   r   refindall)r6   namestatsr   r   r   r   test_net_if_stats   s   zBSDTestCase.test_net_if_statsN)__name__
__module____qualname____doc__classmethodr)   r-   r	   markskipifr   r8   rJ   shutilwhichrM   rQ   r[   r   r   r   r   r"   H   s0    


	
r"   zFREEBSD onlyc                   @   sf   e Zd Zedd Zedd Ze dd Zdd Zd	d
 Z	dd Z
e dd Ze dd ZdS )FreeBSDPsutilTestCasec                 C   r#   r$   r%   r'   r   r   r   r)      r*   z FreeBSDPsutilTestCase.setUpClassc                 C   r+   r$   r,   r'   r   r   r   r-      r*   z#FreeBSDPsutilTestCase.tearDownClassc                 C   s   t d| j }t| jjdd}|ddd  }|r\| }| }|d d \}}}}	}
| }| d| |jks@J t|
|j	ksIJ |j
dsX|d	 |j
ksXJ |sd S d S )
Nzprocstat -v F)groupedr   r      -[
   )r   r&   r1   r2   Zmemory_mapsr   r=   addrr   Zrssr>   r   )r6   r   mapsr?   r   fields_startstopZ_permsresmapr   r   r   test_memory_maps   s   z&FreeBSDPsutilTestCase.test_memory_mapsc                 C   s>   t d| j }t| j |dd  d ksJ d S )Nzprocstat -b r   r   )r   r&   r1   r2   exer   r6   r   r   r   r   test_exe   s   .zFreeBSDPsutilTestCase.test_exec                 C   sN   t d| j }dt| j d|dd  dd  ks%J d S )Nzprocstat -c  r   r   r   )r   r&   joinr1   r2   r   r   rv   r   r   r   test_cmdline   s   z"FreeBSDPsutilTestCase.test_cmdlinec                 C   s   t d| j }|dd  dd \}}}}}}t| j}| }	| }
|	jt|ks2J |	j	t|ks;J |	j
t|ksDJ |
jt|ksMJ |
j	t|ksVJ |
j
t|ks_J d S )Nzprocstat -s r   r   r      )r   r&   r   r1   r2   uidsgidsrealr   Z	effectivesaved)r6   r   ZeuidZruidZsuidZegidZrgidZsgidpr|   r}   r   r   r   test_uids_gids   s   &z$FreeBSDPsutilTestCase.test_uids_gidsc                 C   s   g }t d| j }t| j}|dD ]A}|  }d|v r:t| d }| j	}||ks4J |
d  qd|v rVt| d }| j}||ksQJ |
d  qt|dkratdd S )Nprocstat -r r   z voluntary contextrt   z involuntary contextr   )couldn't find lines match in procstat out)r   r&   r1   r2   r   lowerr0   r   Znum_ctx_switchesZ	voluntaryappendZinvoluntarylenrV   r6   Ztestedr   r   r   Zpstat_valueZpsutil_valuer   r   r   test_ctx_switches   s&   


z'FreeBSDPsutilTestCase.test_ctx_switchesc                 C   s   g }t d| j }t| j}|dD ]O}|  }d|v rAtd| d dd  }| j	}||ks;J |
d  qd|v rdtd| d dd  }| j}||ks_J |
d  qt|dkrotd	d S )
Nr   r   z	user timez0.rt   .zsystem timer   r   )r   r&   r1   r2   r   r   r0   floatZ	cpu_timesuserr   systemr   rV   r   r   r   r   test_cpu_times   s&   


z$FreeBSDPsutilTestCase.test_cpu_timesN)r\   r]   r^   r`   r)   r-   r
   rs   rw   rz   r   r   r   r   r   r   r   re      s    



re   c                   @   s  e Zd Zedd Zdd Ze dd Ze dd Ze d	d
 Z	e dd Z
e dd Ze dd Zejje dddd Zejje dde dd Zejje dde dd Zejje dde dd Zejje dde dd Zejje dde dd Zejje dde dd  Zd!d" Zd#d$ Zd%d& Ze d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zejje  d1dd2d3 Z!ejje  d1dd4d5 Z"ejje d6dd7d8 Z#d9d: Z$d;S )<FreeBSDSystemTestCasec                  C   sT   t d d } td| }|std|  dd |dd D \}}}|||fS )	Nzswapinfo -krt   z\s+zCan't parse swapinfo: c                 s   s    | ]	}t |d  V  qdS )r<   N)r   ).0r   r   r   r   	<genexpr>  s    z7FreeBSDSystemTestCase.parse_swapinfo.<locals>.<genexpr>r   r:   )r   
splitlinesrW   r   r   )r7   partsrA   rB   rC   r   r   r   parse_swapinfo   s   
z$FreeBSDSystemTestCase.parse_swapinfoc                 C   s   d}zt t|}W n ty   td Y S w t j|ks"J d}t|}t | d dd }t | d dd }t j	|ksKJ t j
|ksTJ d S )Nzdev.cpu.0.freqz#frequencies not supported by kernelzdev.cpu.0.freq_levelsr   /rt   )r   r   rV   r	   skipr1   Zcpu_freqcurrentr   maxmin)r6   sensorsysctl_resultZmax_freqZmin_freqr   r   r   !test_cpu_frequency_against_sysctl  s   z7FreeBSDSystemTestCase.test_cpu_frequency_against_sysctlc                 C   *   t dt }tt j| tk sJ d S )Nzvm.stats.vm.v_active_count)r   PAGESIZErG   r1   rN   activer   rL   r   r   r   test_vmem_active     z&FreeBSDSystemTestCase.test_vmem_activec                 C   r   )Nzvm.stats.vm.v_inactive_count)r   r   rG   r1   rN   inactiver   rL   r   r   r   test_vmem_inactive!  r   z(FreeBSDSystemTestCase.test_vmem_inactivec                 C   r   )Nzvm.stats.vm.v_wire_count)r   r   rG   r1   rN   wiredr   rL   r   r   r   test_vmem_wired&  r   z%FreeBSDSystemTestCase.test_vmem_wiredc                 C   r   )Nzvm.stats.vm.v_cache_count)r   r   rG   r1   rN   cachedr   rL   r   r   r   test_vmem_cached+  r   z&FreeBSDSystemTestCase.test_vmem_cachedc                 C   r   )Nzvm.stats.vm.v_free_count)r   r   rG   r1   rN   rC   r   rL   r   r   r   test_vmem_free0  r   z$FreeBSDSystemTestCase.test_vmem_freec                 C   &   t d}tt j| tk sJ d S )Nzvfs.bufspace)r   rG   r1   rN   buffersr   rL   r   r   r   test_vmem_buffers5  s   z'FreeBSDSystemTestCase.test_vmem_bufferszmuse not installedr    c                 C   s   t d}t j|ksJ d S )NZTotal)r   r1   rN   rA   rO   r   r   r   test_muse_vmem_total<  s   z*FreeBSDSystemTestCase.test_muse_vmem_totalc                 C   r   )NZActive)r   rG   r1   rN   r   r   rO   r   r   r   test_muse_vmem_activeA     z+FreeBSDSystemTestCase.test_muse_vmem_activec                 C   r   )NZInactive)r   rG   r1   rN   r   r   rO   r   r   r   test_muse_vmem_inactiveG  r   z-FreeBSDSystemTestCase.test_muse_vmem_inactivec                 C   r   )NZWired)r   rG   r1   rN   r   r   rO   r   r   r   test_muse_vmem_wiredM  r   z*FreeBSDSystemTestCase.test_muse_vmem_wiredc                 C   r   )NCache)r   rG   r1   rN   r   r   rO   r   r   r   test_muse_vmem_cachedS  r   z+FreeBSDSystemTestCase.test_muse_vmem_cachedc                 C   r   )NZFree)r   rG   r1   rN   rC   r   rO   r   r   r   test_muse_vmem_freeY  r   z)FreeBSDSystemTestCase.test_muse_vmem_freec                 C   r   )NZBuffer)r   rG   r1   rN   r   r   rO   r   r   r   test_muse_vmem_buffers_  r   z,FreeBSDSystemTestCase.test_muse_vmem_buffersc                 C   "   t t jtd dk sJ d S )Nzvm.stats.sys.v_swtch  )rG   r1   	cpu_statsctx_switchesr   r6   r   r   r   test_cpu_stats_ctx_switchese     z1FreeBSDSystemTestCase.test_cpu_stats_ctx_switchesc                 C   r   )Nzvm.stats.sys.v_intrr   )rG   r1   r   
interruptsr   r   r   r   r   test_cpu_stats_interruptsn  s   z/FreeBSDSystemTestCase.test_cpu_stats_interruptsc                 C   r   )Nzvm.stats.sys.v_softr   )rG   r1   r   Zsoft_interruptsr   r   r   r   r   test_cpu_stats_soft_interruptst  r   z4FreeBSDSystemTestCase.test_cpu_stats_soft_interruptsc                 C   r   )Nzvm.stats.sys.v_syscalli@ )rG   r1   r   Zsyscallsr   r   r   r   r   test_cpu_stats_syscalls}  s   z-FreeBSDSystemTestCase.test_cpu_stats_syscallsc                 C   s,   |   \}}}tt j| tk sJ d S r$   )r   rG   r1   swap_memoryrC   r   )r6   _total_usedrC   r   r   r   test_swapmem_free     z'FreeBSDSystemTestCase.test_swapmem_freec                 C   s,   |   \}}}tt j| tk sJ d S r$   )r   rG   r1   r   rB   r   )r6   r   rB   _freer   r   r   test_swapmem_used  r   z'FreeBSDSystemTestCase.test_swapmem_usedc                 C   s,   |   \}}}tt j| tk sJ d S r$   )r   rG   r1   r   rA   r   )r6   rA   r   r   r   r   r   test_swapmem_total  r   z(FreeBSDSystemTestCase.test_swapmem_totalc                 C   sL   t d}||dd d  }|d |d }t|}|t ks$J d S )Nzsysctl kern.boottimez sec =    ,)r   r   r   r1   	boot_time)r6   sZbtimer   r   r   test_boot_time  s
   z$FreeBSDSystemTestCase.test_boot_timez
no batteryc                 C   s   dd }t d}dd |dD }t }t|d dd	}|d
 }|j|ks+J |dkr9|jtjks7J d S ||j|ksBJ d S )Nc                 S   s4   t | d\}}t |d\}}t| dt|dS )N<   :Z02)divmodr   )ZsecsmZ_shr   r   r   
secs2hours  s   z>FreeBSDSystemTestCase.test_sensors_battery.<locals>.secs2hourszacpiconf -i 0c                 S   s&   i | ]}| d d | d d qS )	r   rt   )r   )r   xr   r   r   
<dictcomp>  s   & z>FreeBSDSystemTestCase.test_sensors_battery.<locals>.<dictcomp>r   zRemaining capacity:%r.   zRemaining time:unknown)	r   r   r1   sensors_batteryr   r/   percentsecsleftZPOWER_TIME_UNLIMITED)r6   r   r   rm   Zmetricsr   Zremaining_timer   r   r   test_sensors_battery  s   z*FreeBSDSystemTestCase.test_sensors_batteryc                 C   sn   t  jtdksJ t  jtddkksJ t  j}|dk r+tddks)J d S |tdd ks5J d S )Nhw.acpi.battery.lifehw.acpi.acliner   r   hw.acpi.battery.timert   r   )r1   r   r   r   Zpower_pluggedr   )r6   r   r   r   r   #test_sensors_battery_against_sysctl  s   



z9FreeBSDSystemTestCase.test_sensors_battery_against_sysctlzhas batteryc                 C   sV   t t td td td W d    n1 sw   Y  t d u s)J d S )Nr   r   r   )r	   ZraisesrV   r   r1   r   r   r   r   r   test_sensors_battery_no_battery  s   
z5FreeBSDSystemTestCase.test_sensors_battery_no_batteryc              	   C   s   t d}t|D ]W}d| d}zttt|d d }W n ty/   td Y   S w t	t 
 d | j| dk sAJ d| d}ttt|d d }t 
 d | j|ks`J q	d S )	NTzdev.cpu.z.temperaturert   z$temperatures not supported by kernelZcoretemprj   z.coretemp.tjmax)r1   rK   ranger   r   r   rV   r	   r   rG   Zsensors_temperaturesr   high)r6   Znum_cpuscpur   r   r   r   r   (test_sensors_temperatures_against_sysctl  s*   

z>FreeBSDSystemTestCase.test_sensors_temperatures_against_sysctlN)%r\   r]   r^   staticmethodr   r   r
   r   r   r   r   r   r   r	   ra   rb   MUSE_AVAILABLEr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sh    







		
		


r   zOPENBSD onlyc                   @   s   e Zd Zdd ZdS )OpenBSDTestCasec                 C   s6   t d}tj|d}tjt }||ksJ d S )Nzkern.boottimez%a %b %d %H:%M:%S %Y)r   datetimestrptimefromtimestampr1   r   )r6   r   Zsys_btZ	psutil_btr   r   r   r     s   zOpenBSDTestCase.test_boot_timeN)r\   r]   r^   r   r   r   r   r   r     s    r   zNETBSD onlyc                   @   sh   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )NetBSDTestCasec                 C   sp   t d%}|D ]}|| r!t| d d   W  d    S qW d    n1 s,w   Y  td|  )Nz/proc/meminfor   r<   zcan't find )openr   r   r   r   )Zlook_forfr   r   r   r   parse_meminfo  s   

zNetBSDTestCase.parse_meminfoc                 C   s   t  j| dksJ d S )Nz	MemTotal:)r1   rN   rA   r   r   r   r   r   test_vmem_total  s   zNetBSDTestCase.test_vmem_totalc                 C   $   t t j| d tk sJ d S )NzMemFree:)rG   r1   rN   rC   r   r   r   r   r   r   r        zNetBSDTestCase.test_vmem_freec                 C   r   )NzBuffers:)rG   r1   rN   r   r   r   r   r   r   r   r        z NetBSDTestCase.test_vmem_buffersc                 C   r   )Nz
MemShared:)rG   r1   rN   Zsharedr   r   r   r   r   r   test_vmem_shared  r   zNetBSDTestCase.test_vmem_sharedc                 C   r   )NzCached:)rG   r1   rN   r   r   r   r   r   r   r   r     r   zNetBSDTestCase.test_vmem_cachedc                 C   r   )Nz
SwapTotal:)rG   r1   r   rA   r   r   r   r   r   r   r   &  r   z!NetBSDTestCase.test_swapmem_totalc                 C   r   )Nz	SwapFree:)rG   r1   r   rC   r   r   r   r   r   r   r   ,  r   z NetBSDTestCase.test_swapmem_freec                 C   s"   t  }|j|j|j ksJ d S r$   )r1   r   rB   rA   rC   )r6   Zsmemr   r   r   r   2  s   z NetBSDTestCase.test_swapmem_usedc                 C   x   t dd }|D ]}|drt| d } nqtdW d    n1 s(w   Y  tt j| dk s:J d S )N
/proc/statrbs   intrr   couldn't find liner   )	r   r   r   r   r   rG   r1   r   r   )r6   r   r   r   r   r   r   r   8     
z(NetBSDTestCase.test_cpu_stats_interruptsc                 C   r   )Nr   r   s   ctxtr   r   r   )	r   r   r   r   r   rG   r1   r   r   )r6   r   r   r   r   r   r   r   B  r   z*NetBSDTestCase.test_cpu_stats_ctx_switchesN)r\   r]   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
			
r   )$r_   r   osrW   rc   r3   r1   r   r   r   r   Zpsutil.testsr   r   r   r	   r
   r   r   r   Z_psplatformZcextZgetpagesizer   getuidrd   r   r   r   ra   rb   r"   re   r   r   r   r   r   r   r   <module>   sJ   	UX r