U
    ;g                     @   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 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)HAS_BATTERY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)pytest)retry_on_failure)sh)spawn_testproc)	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   9/tmp/pip-unpacked-wheel-u0epr1ex/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   )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sdt|t	dt
|ks~td S )	Nzps -o lstart -p %sZSTARTED  z%H:%M:%Sz%Y)r
   r"   replacestripr   psutilProcessZcreate_timetimestrftime	localtimeAssertionError)selfoutputZstart_psZhhmmssyearZstart_psutilr   r   r   test_process_create_time@   s     
z$TestProcess.test_process_create_timeN)__name__
__module____qualname__classmethodr%   r&   r6   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
o:e dkdd	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dd Zejj	e dd	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krRd}t|d }t|d }t|d }||||fS )Nz
df -k "%s"r   r      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   rB   absrD   r   rC   )r3   rE   partusagerA   rB   rC   rD   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logicalr   r-   	cpu_countr2   r3   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.physicalcpuFrL   rN   rP   r   r   r   test_cpu_count_coresp   s    z#TestSystemAPIs.test_cpu_count_coresZarm64z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   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_memoryrB   r2   )r3   Zsysctl_hwphymemr   r   r   test_vmem_total   s    zTestSystemAPIs.test_vmem_totalc                 C   s*   t d}t j}t|| tk s&td S )NrD   )r   r-   rY   rD   rH   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-   rY   r]   rH   r   r2   r[   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-   rY   r_   rH   r   r2   r[   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-   rY   ra   rH   r   r2   r[   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_memorysinrH   r   r2   r[   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-   rc   ZsoutrH   r   r2   r[   r   r   r   test_swapmem_sout   s    
z TestSystemAPIs.test_swapmem_soutc              	   C   st   t   D ]b\}}ztd| }W n tk
r8   Y qX |jd|kksPt||jtt	
d|d kstqd S )Nzifconfig %sZRUNNINGz	mtu (\d+)r   )r-   Znet_if_statsitemsr
   RuntimeErrorZisupr2   mtur   r   findall)r3   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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   ro   Zdrawing_fromrn   Zpsutil_resultr   r   r   test_sensors_battery   s    z#TestSystemAPIs.test_sensors_batteryN)r7   r8   r9   r	   rK   rR   rS   r   markskipifr   platformmachinerX   rZ   r\   r^   r`   rb   re   rf   rm   r   rp   r   r   r   r   r;   L   s2   
 






r;   )__doc__rs   r   r/   r-   r   r   Zpsutil.testsr   r   r   r   r   r	   r
   r   r   Zpsutil._psutil_posixr   r   r   rq   rr   r    r;   r   r   r   r   <module>   s.   