U
    (cR                     @   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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dd Zee dG dd deZee dG dd deZedkr&ddlmZ ee 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)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-l83rk7k5/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   c           	      C   s   ddi}| }d}| r$| dd   s4| dd dkrN|| d 7 }| dd  } qt|}|  }| D ]\}}||krf qqf|dkr|d }| }ntd| |d di}t|dd  D ]\}} d|d d	 > || < qt|||  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SYMBOLSinitnumletternameZssetprefixir   r   r   human2bytes7   s*     $
r7   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   
setUpClassT   s    zTestProcess.setUpClassc                 C   s   t | j d S r9   )r   r:   r;   r   r   r   tearDownClassX   s    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	   r:   replacer,   r   psutilProcessZcreate_timeassertEqualtimestrftime	localtime)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>   rL   r   r   r   r   r8   Q   s
   

r8   c                   @   s   e Zd Ze dd Zdd Zdd Zee	
 dk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e ddd ZdS )TestSystemAPIsc                 C   s|   dd }t jddD ]b}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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   dfs   s    


z%TestSystemAPIs.test_disks.<locals>.dfF)alldelta)rC   Zdisk_partitions
disk_usageZ
mountpointrE   ZdevicerX   assertAlmostEqualrZ   r   rY   )rI   r[   partusagerW   rX   rY   rZ   r   r   r   
test_diskso   s    

zTestSystemAPIs.test_disksc                 C   s    t d}| |tjdd d S )Nzsysctl hw.logicalcpuTlogicalr   rE   rC   	cpu_countrI   r2   r   r   r   test_cpu_count_logical   s    z%TestSystemAPIs.test_cpu_count_logicalc                 C   s    t d}| |tjdd d S )Nzsysctl hw.physicalcpuFrd   rf   rh   r   r   r   test_cpu_count_cores   s    z#TestSystemAPIs.test_cpu_count_coresZarm64zskipped due to #1892c                 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)rC   Zcpu_freqrE   currentr   minmax)rI   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   rE   rC   virtual_memoryrX   )rI   Zsysctl_hwphymemr   r   r   test_vmem_total   s    zTestSystemAPIs.test_vmem_totalc                 C   s&   t d}t j}| j||td d S )NrZ   r]   )r   rC   rp   rZ   r`   r   rI   Z
vmstat_valZ
psutil_valr   r   r   test_vmem_free   s    
zTestSystemAPIs.test_vmem_freec                 C   s&   t d}t j}| j||td d S )Nactiver]   )r   rC   rp   rt   r`   r   rr   r   r   r   test_vmem_active   s    
zTestSystemAPIs.test_vmem_activec                 C   s&   t d}t j}| j||td d S )Ninactiver]   )r   rC   rp   rv   r`   r   rr   r   r   r   test_vmem_inactive   s    
z!TestSystemAPIs.test_vmem_inactivec                 C   s&   t d}t j}| j||td d S )Nwiredr]   )r   rC   rp   rx   r`   r   rr   r   r   r   test_vmem_wired   s    
zTestSystemAPIs.test_vmem_wiredc                 C   s&   t d}t j}| j||td d S )NZPageinsr]   )r   rC   swap_memorysinr`   r   rr   r   r   r   test_swapmem_sin   s    
zTestSystemAPIs.test_swapmem_sinc                 C   s&   t d}t j}| j||td d S )NZPageoutr]   )r   rC   rz   Zsoutr`   r   rr   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|jd|k|d | |jtt	
d|d  qd S )Nzifconfig %sZRUNNING)msgz	mtu (\d+)r   )rC   Znet_if_statsr-   r	   RuntimeErrorrE   ZisupZmtur   r   findall)rI   r4   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   rC   Zsensors_batteryrE   power_pluggedpercentr   )rI   r   r   Zdrawing_fromr   Zpsutil_resultr   r   r   test_sensors_battery   s    z#TestSystemAPIs.test_sensors_batteryN)rM   rN   rO   r   rc   ri   rj   unittestskipIfplatformmachinero   rq   rs   ru   rw   ry   r|   r}   r   r   r   r   r   r   r   rQ   j   s,   







rQ   __main__)run_from_name)__doc__r   r   rF   r   rC   r   r   Zpsutil.testsr   r   r   r   r   r	   r
   r   Zpsutil._psutil_posixr   r   r   r7   r   r8   rQ   rM   Zpsutil.tests.runnerr   __file__r   r   r   r   <module>   s8    
