U
    !h                     @   s   d 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 ddlmZ erd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)AARCH64)
CI_TESTING)HAS_BATTERY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_subproc)	terminate)getpagesizec                 C   s<   t | }| d }z
t|W S  tk
r6   | Y S X dS )zmExpects a sysctl command with an argument and parse the result
    returning only the value of interest.
       N)r   splitint
ValueError)Zcmdlineoutresult r   ;./venv/lib/python3.8/site-packages/psutil/tests/test_osx.pysysctl   s    
r   c                 C   sH   t d}|dD ]}| |kr q,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   )Z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   
setUpClass8   s    zTestProcess.setUpClassc                 C   s   t | j d S r"   )r   r#   r$   r   r   r   tearDownClass<   s    zTestProcess.tearDownClassc                 C   s   t d| j }|dd }|dd }|dd }t| j }|t	dt
|ksft|t	dt
|kstd S )	Nzps -o lstart -p ZSTARTED  z%H:%M:%Sz%Y)r   r#   replacestripr   psutilZProcessZcreate_timetimestrftime	localtimeAssertionError)selfoutputZstart_psZhhmmssZyearZstart_psutilr   r   r   test_process_create_time@   s     
z$TestProcess.test_process_create_timeN)__name__
__module____qualname__classmethodr&   r'   r5   r   r   r   r   r!   6   s
   

r!   c                   @   s   e Zd Ze dd Zdd Zdd Zejj	e
o2eddd	d
 Zdd Zejj	eoZe
oZedde dd Zejj	eoe
oedd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d  Zd!S )"TestSystemAPIsc                 C   s   dd }t jddD ]j}t |j}||j\}}}}|j|ksDt|j|ksRtt|j| t	k shtt|j
| t	k stqd S )Nc                 S   s   t d|  d }|d}|d |d}| d d \}}}}|dkrVd}t|d }t|d }t|d }||||fS )	Nzdf -k ""r   r      Znoner(   i   )r   r-   r   popr   )pathr   linesr   devtotalusedfreer   r   r   dfU   s    


z%TestSystemAPIs.test_disks.<locals>.dfF)all)r.   Zdisk_partitions
disk_usageZ
mountpointZdevicer2   rA   absrC   r   rB   )r3   rD   partusager@   rA   rB   rC   r   r   r   
test_disksQ   s    zTestSystemAPIs.test_disksc                 C   s    t d}|tjddkstd S )Nzsysctl hw.logicalcpuTZlogicalr   r.   	cpu_countr2   r3   Znumr   r   r   test_cpu_count_logicall   s    z%TestSystemAPIs.test_cpu_count_logicalc                 C   s    t d}|tjddkstd S )Nzsysctl hw.physicalcpuFrK   rL   rN   r   r   r   test_cpu_count_coresp   s    z#TestSystemAPIs.test_cpu_count_coreszskipped due to #1892r   c                 C   sZ   t  }|jd d tdks"t|jd d tdks<t|jd d tdksVtd S )Ni  zsysctl hw.cpufrequencyzsysctl hw.cpufrequency_minzsysctl hw.cpufrequency_max)r.   Zcpu_freqcurrentr   r2   minmax)r3   Zfreqr   r   r   test_cpu_frequ   s    zTestSystemAPIs.test_cpu_freqc                 C   s   t d}|t jkstd S )Nzsysctl hw.memsize)r   r.   virtual_memoryrA   r2   )r3   Zsysctl_hwphymemr   r   r   test_vmem_total~   s    zTestSystemAPIs.test_vmem_totalz%skipped on MACOS + ARM64 + CI_TESTINGc                 C   s*   t d}t j}t|| tk s&td S )NrC   )r   r.   rU   rC   rG   r   r2   r3   Z
vmstat_valZ
psutil_valr   r   r   test_vmem_free   s    
zTestSystemAPIs.test_vmem_freec                 C   s*   t d}t j}t|| tk s&td S )Nactive)r   r.   rU   rY   rG   r   r2   rW   r   r   r   test_vmem_active   s    
zTestSystemAPIs.test_vmem_activec                 C   s*   t d}t j}t|| tk s&td S )Ninactive)r   r.   rU   r[   rG   r   r2   rW   r   r   r   test_vmem_inactive   s    
z!TestSystemAPIs.test_vmem_inactivec                 C   s*   t d}t j}t|| tk s&td S )Nwired)r   r.   rU   r]   rG   r   r2   rW   r   r   r   test_vmem_wired   s    
zTestSystemAPIs.test_vmem_wiredc                 C   s*   t d}t j}t|| tk s&td S )NZPageins)r   r.   swap_memoryZsinrG   r   r2   rW   r   r   r   test_swapmem_sin   s    
zTestSystemAPIs.test_swapmem_sinc                 C   s*   t d}t j}t|| tk s&td S )NZPageout)r   r.   r_   ZsoutrG   r   r2   rW   r   r   r   test_swapmem_sout   s    
z TestSystemAPIs.test_swapmem_soutc              	   C   sv   t   D ]d\}}ztd| }W n tk
r:   Y qX |jd|kksRt||jtt	
d|d kstqd S )Nz	ifconfig ZRUNNINGz	mtu (\d+)r   )r.   Znet_if_statsitemsr   RuntimeErrorZisupr2   Zmtur   r   findall)r3   nameZ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sJt|jt	|ks\td S )Nzpmset -g battz(\d+)%r   zNow drawing from '([^']+)'zAC Power)
r   r   r   r   r.   Zsensors_batterypower_pluggedr2   percentr   )r3   r   rh   Zdrawing_fromrg   Zpsutil_resultr   r   r   test_sensors_battery   s    z#TestSystemAPIs.test_sensors_batteryc                 C   s:   t d}ttd|dd }t }||ks6td S )Nzsysctl kern.boottimezsec\s*=\s*(\d+)r   )r   floatr   r   groupsr.   Z	boot_timer2   )r3   r   abr   r   r   test_boot_time   s    zTestSystemAPIs.test_boot_timeN)r6   r7   r8   r   rJ   rO   rP   r
   markskipifr   r   rT   rV   r   rX   rZ   r\   r^   r`   ra   rf   r   ri   rn   r   r   r   r   r:   L   s>   








r:   )__doc__r   r/   r.   r   r   Zpsutil.testsr   r   r   r   r   r	   r
   r   r   r   r   Zpsutil._psutil_posixr   r   r   ro   rp   r!   r:   r   r   r   r   <module>   s0   