o
    h                     @   s  d 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rbddlm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dS )zmacOS specific tests.    N)MACOS)POSIX)
CI_TESTING)HAS_BATTERY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_testproc)	terminate)getpagesizec                 C   s6   t | }| d }zt|W S  ty   | Y S w )zmExpects a sysctl command with an argument and parse the result
    returning only the value of interest.
       )r   splitint
ValueError)cmdlineoutresult r   I/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/tests/test_osx.pysysctl    s   
r   c                 C   sH   t d}|dD ]}| |v r nq	tdttd|dt  S )z)Wrapper around 'vm_stat' cmdline utility.vm_stat
zline not foundz\d+r   )r   r   r   r   researchgroupr   )fieldr   liner   r   r   r   ,   s   r   z
MACOS onlyreasonc                   @   s,   e Zd Zedd Zedd Zdd ZdS )TestProcessc                 C   s   t  j| _d S N)r   pidclsr   r   r   
setUpClass9      zTestProcess.setUpClassc                 C   s   t | j d S r#   )r   r$   r%   r   r   r   tearDownClass=   r(   zTestProcess.tearDownClassc                 C   s   t d| j }|dd }|dd }|dd }t| j }|t	dt
|ks3J |t	dt
|ks@J d S )	Nzps -o lstart -p STARTED  z%H:%M:%Sz%Y)r   r$   replacestripr   psutilProcesscreate_timetimestrftime	localtime)selfoutputstart_pshhmmssyearstart_psutilr   r   r   test_process_create_timeA   s   

z$TestProcess.test_process_create_timeN)__name__
__module____qualname__classmethodr'   r)   r=   r   r   r   r   r"   7   s    

r"   c                   @   s   e Zd Ze dd Zdd Zdd Zejj	e
oe dkdd	d
d Zdd Zejj	eo5e
o5e dkdd	e dd Ze dd Ze dd Ze dd Ze dd Ze dd Zdd Zejj	e dd	dd Zd S )!TestSystemAPIsc                 C   s   dd }t jddD ]5}t |j}||j\}}}}|j|ks"J |j|ks)J t|j| tk s4J t|j	| tk s?J 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+   i   )r   r0   r   popr   )pathr   linesr   devtotalusedfreer   r   r   dfV   s   


z%TestSystemAPIs.test_disks.<locals>.dfF)all)
r1   disk_partitions
disk_usage
mountpointdevicerJ   absrL   r   rK   )r7   rM   partusagerI   rJ   rK   rL   r   r   r   
test_disksR   s   zTestSystemAPIs.test_disksc                 C       t d}|tjddksJ d S )Nzsysctl hw.logicalcpuTlogicalr   r1   	cpu_countr7   numr   r   r   test_cpu_count_logicalm      z%TestSystemAPIs.test_cpu_count_logicalc                 C   rW   )Nzsysctl hw.physicalcpuFrX   rZ   r\   r   r   r   test_cpu_count_coresq   r_   z#TestSystemAPIs.test_cpu_count_coresarm64zskipped due to #1892r    c                 C   sZ   t  }|jd d tdksJ |jd d tdksJ |jd d tdks+J d S )Ni  zsysctl hw.cpufrequencyzsysctl hw.cpufrequency_minzsysctl hw.cpufrequency_max)r1   cpu_freqcurrentr   minmax)r7   freqr   r   r   test_cpu_freqv   s   zTestSystemAPIs.test_cpu_freqc                 C   s   t d}|t jksJ d S )Nzsysctl hw.memsize)r   r1   virtual_memoryrJ   )r7   sysctl_hwphymemr   r   r   test_vmem_total   s   zTestSystemAPIs.test_vmem_totalz%skipped on MACOS + ARM64 + CI_TESTINGc                 C   *   t d}t j}t|| tk sJ d S )NrL   )r   r1   rh   rL   rS   r   r7   
vmstat_val
psutil_valr   r   r   test_vmem_free   s   
zTestSystemAPIs.test_vmem_freec                 C   rk   )Nactive)r   r1   rh   rp   rS   r   rl   r   r   r   test_vmem_active      
zTestSystemAPIs.test_vmem_activec                 C   rk   )Ninactive)r   r1   rh   rs   rS   r   rl   r   r   r   test_vmem_inactive   rr   z!TestSystemAPIs.test_vmem_inactivec                 C   rk   )Nwired)r   r1   rh   ru   rS   r   rl   r   r   r   test_vmem_wired   rr   zTestSystemAPIs.test_vmem_wiredc                 C   rk   )NPageins)r   r1   swap_memorysinrS   r   rl   r   r   r   test_swapmem_sin   rr   zTestSystemAPIs.test_swapmem_sinc                 C   rk   )NPageout)r   r1   rx   soutrS   r   rl   r   r   r   test_swapmem_sout   rr   z TestSystemAPIs.test_swapmem_soutc              	   C   st   t   D ]1\}}z	td| }W n	 ty   Y qw |jd|v ks(J ||jtt	d|d ks7J qd S )Nz	ifconfig RUNNINGz	mtu (\d+)r   )
r1   net_if_statsitemsr   RuntimeErrorisupmtur   r   findall)r7   namestatsr   r   r   r   test_net_if_stats   s    z TestSystemAPIs.test_net_if_statsz
no batteryc                 C   s`   t d}td|d}td|d}|dk}t }|j|ks%J |jt|ks.J d S )Nzpmset -g battz(\d+)%r   zNow drawing from '([^']+)'zAC Power)	r   r   r   r   r1   sensors_batterypower_pluggedpercentr   )r7   r   r   drawing_fromr   psutil_resultr   r   r   test_sensors_battery   s   z#TestSystemAPIs.test_sensors_batteryN)r>   r?   r@   r
   rV   r^   r`   r	   markskipifr   platformmachinerg   rj   r   ro   rq   rt   rv   rz   r}   r   r   r   r   r   r   r   rB   M   s:    






rB   )__doc__r   r   r4   r1   r   r   psutil.testsr   r   r   r   r   r	   r
   r   r   r   psutil._psutil_posixr   r   r   r   r   r"   rB   r   r   r   r   <module>   s2   