o
    a                     @   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 erXddlmZ dd Zdd Zdd Zee dG dd de
Zee dG dd de
ZedkrddlmZ ee dS dS )zmacOS specific tests.    N)MACOS)POSIX)HAS_BATTERY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)retry_on_failure)sh)spawn_testproc)	terminate)unittest)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)Zcmdlineoutresult r   7/usr/lib/python3/dist-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   )Zfieldr   liner   r   r   r   *   s   r   c           	      C   s  ddi}| }d}| r| dd   s| dd dkr8|| d 7 }| dd  } | r0| dd   s| dd dkst|}|  }| D ]
\}}||v rN nqD|dkr\|d }| }ntd| |d di}t|dd  D ]\}} d|d d	 > || < qpt|||  S )
NZ	customary)	BKMGTPEZY r   r   .kzcan't interpret %r
   )isdigitfloatstripitemsupperr   	enumerater   )	sZSYMBOLSZinitnumZletternameZssetprefixir   r   r   human2bytes6   s,   $$
r5   z
MACOS onlyc                   @   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   
setUpClassS      zTestProcess.setUpClassc                 C   s   t | j d S r7   )r   r8   r9   r   r   r   tearDownClassW   r<   zTestProcess.tearDownClassc              	   C   s   t d| j }|dd }|dd }|dd }t| j }| |t	
dt	| | |t	
dt	| d S )	Nzps -o lstart -p %sZSTARTEDr&    z%H:%M:%Sz%Y)r	   r8   replacer,   r   psutilZProcessZcreate_timeassertEqualtimestrftime	localtime)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=   rI   r   r   r   r   r6   P   s    

r6   c                   @   s   e Zd Ze dd Zdd Zdd Z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e ddd ZdS )TestSystemAPIsc                 C   s|   dd }t jddD ]1}t |j}||j\}}}}| |j| | |j| | j|j|t	d | j|j
|t	d q
d S )Nc                 S   s   t d|   }|d}|d |d}| d d \}}}}|dkr)d}t|d }t|d }t|d }||||fS )Nz
df -k "%s"r   r      Znoner&   i   )r	   r,   r   popr   )pathr   linesr   devtotalusedfreer   r   r   dfr   s   


z%TestSystemAPIs.test_disks.<locals>.dfF)allZdelta)rB   Zdisk_partitions
disk_usageZ
mountpointrC   ZdevicerT   assertAlmostEqualrV   r   rU   )rG   rW   partusagerS   rT   rU   rV   r   r   r   
test_disksn   s   

zTestSystemAPIs.test_disksc                 C       t d}| |tjdd d S )Nzsysctl hw.logicalcpuTZlogicalr   rC   rB   	cpu_countrG   r1   r   r   r   test_cpu_count_logical      z%TestSystemAPIs.test_cpu_count_logicalc                 C   r_   )Nzsysctl hw.physicalcpuFr`   ra   rc   r   r   r   test_cpu_count_cores   re   z#TestSystemAPIs.test_cpu_count_coresc                 C   sZ   t  }| |jd d td | |jd d td | |jd d td d S )Ni  zsysctl hw.cpufrequencyzsysctl hw.cpufrequency_minzsysctl hw.cpufrequency_max)rB   Zcpu_freqrC   Zcurrentr   minmax)rG   Zfreqr   r   r   test_cpu_freq   s   zTestSystemAPIs.test_cpu_freqc                 C   s   t d}| |t j d S )Nzsysctl hw.memsize)r   rC   rB   virtual_memoryrT   )rG   Zsysctl_hwphymemr   r   r   test_vmem_total   s   zTestSystemAPIs.test_vmem_totalc                 C   &   t d}t j}| j||td d S )NrV   rY   )r   rB   rj   rV   r[   r   rG   Z
vmstat_valZ
psutil_valr   r   r   test_vmem_free      
zTestSystemAPIs.test_vmem_freec                 C   rl   )NactiverY   )r   rB   rj   rp   r[   r   rm   r   r   r   test_vmem_active   ro   zTestSystemAPIs.test_vmem_activec                 C   rl   )NinactiverY   )r   rB   rj   rr   r[   r   rm   r   r   r   test_vmem_inactive   ro   z!TestSystemAPIs.test_vmem_inactivec                 C   rl   )NwiredrY   )r   rB   rj   rt   r[   r   rm   r   r   r   test_vmem_wired   ro   zTestSystemAPIs.test_vmem_wiredc                 C   "   t d}t j}| || d S )NZPageins)r   rB   swap_memoryZsinrC   rm   r   r   r   test_swapmem_sin      
zTestSystemAPIs.test_swapmem_sinc                 C   rv   )NZPageout)r   rB   rw   ZsoutrC   rm   r   r   r   test_swapmem_sout   ry   z TestSystemAPIs.test_swapmem_soutc              	   C   sr   t   D ]0\}}ztd| }W n	 ty   Y qw | j|jd|v |d | |jtt	
d|d  qd S )Nzifconfig %sZRUNNING)msgz	mtu (\d+)r   )rB   Znet_if_statsr-   r	   RuntimeErrorrC   ZisupZmtur   r   findall)rG   r2   Z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| | |jt	| d S )Nzpmset -g battz(\d+)%r   zNow drawing from '([^']+)'zAC Power)
r	   r   r   r   rB   Zsensors_batteryrC   power_pluggedpercentr   )rG   r   r   Zdrawing_fromr   Zpsutil_resultr   r   r   test_sensors_battery   s   z#TestSystemAPIs.test_sensors_batteryN)rJ   rK   rL   r   r^   rd   rf   ri   rk   rn   rq   rs   ru   rx   rz   r~   r   skipIfr   r   r   r   r   r   rN   i   s,    






rN   __main__)run_from_name)__doc__r   rD   rB   r   r   Zpsutil.testsr   r   r   r   r   r	   r
   r   r   Zpsutil._psutil_posixr   r   r   r5   r   r6   rN   rJ   Zpsutil.tests.runnerr   __file__r   r   r   r   <module>   s:    