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r’d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)Ú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   )Ú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 )
NÚ	customary)	ÚBÚKÚMÚGÚTÚPÚEÚZÚYÚ r   r   Ú.Úkzcan't interpret %ré
   )ÚisdigitÚfloatÚstripÚitemsÚupperr   Ú	enumerater   )	ÚsÚSYMBOLSÚinitÚnumÚletterÚnameÚssetÚprefixÚir   r   r   Úhuman2bytes6   s,   ÿ$$þÿ
r<   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 r>   )r   r?   r@   r   r   r   ÚtearDownClassW   rC   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 %sÚSTARTEDr)   ú éþÿÿÿéÿÿÿÿz%H:%M:%Sz%Y)r	   r?   Úreplacer/   r   ÚpsutilÚProcessÚcreate_timeÚassertEqualÚtimeÚstrftimeÚ	localtime)ÚselfÚoutputÚstart_psÚhhmmssÚyearÚstart_psutilr   r   r   Útest_process_create_time[   s   þþz$TestProcess.test_process_create_timeN)Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrB   rD   rW   r   r   r   r   r=   P   s    

r=   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   é   Únoner)   i   )r	   r/   r   Úpopr   )Úpathr   Úlinesr   ÚdevÚtotalÚusedÚfreer   r   r   Údfr   s   


z%TestSystemAPIs.test_disks.<locals>.dfF)Úall©Údelta)rJ   Údisk_partitionsÚ
disk_usageÚ
mountpointrM   Údevicerc   ÚassertAlmostEqualre   r   rd   )rQ   rf   ÚpartÚusagerb   rc   rd   re   r   r   r   Ú
test_disksn   s   
ÿ
ÿùzTestSystemAPIs.test_disksc                 C   ó    t dƒ}|  |tjdd�¡ d S )Nzsysctl hw.logicalcpuT©Úlogical©r   rM   rJ   Ú	cpu_count©rQ   r6   r   r   r   Útest_cpu_count_logical‹   ó   z%TestSystemAPIs.test_cpu_count_logicalc                 C   rr   )Nzsysctl hw.physicalcpuFrs   ru   rw   r   r   r   Útest_cpu_count_cores�   ry   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)rJ   Úcpu_freqrM   Úcurrentr   ÚminÚmax)rQ   Ú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   rM   rJ   Úvirtual_memoryrc   )rQ   Úsysctl_hwphymemr   r   r   Útest_vmem_totalž   s   zTestSystemAPIs.test_vmem_totalc                 C   ó&   t dƒ}t ¡ j}| j||td� d S )Nre   rh   )r   rJ   r�   re   rn   r   ©rQ   Ú
vmstat_valÚ
psutil_valr   r   r   Útest_vmem_free¢   ó   
zTestSystemAPIs.test_vmem_freec                 C   r„   )NÚactiverh   )r   rJ   r�   rŠ   rn   r   r…   r   r   r   Útest_vmem_active¨   r‰   zTestSystemAPIs.test_vmem_activec                 C   r„   )NÚinactiverh   )r   rJ   r�   rŒ   rn   r   r…   r   r   r   Útest_vmem_inactive®   r‰   z!TestSystemAPIs.test_vmem_inactivec                 C   r„   )NÚwiredrh   )r   rJ   r�   rŽ   rn   r   r…   r   r   r   Útest_vmem_wired´   r‰   zTestSystemAPIs.test_vmem_wiredc                 C   ó"   t dƒ}t ¡ j}|  ||¡ d S )NÚPageins)r   rJ   Úswap_memoryÚsinrM   r…   r   r   r   Útest_swapmem_sin¼   ó   
zTestSystemAPIs.test_swapmem_sinc                 C   r�   )NÚPageout)r   rJ   r’   ÚsoutrM   r…   r   r   r   Útest_swapmem_soutÂ   r•   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 %sÚRUNNING)Úmsgz	mtu (\d+)r   )rJ   Únet_if_statsr0   r	   ÚRuntimeErrorrM   ÚisupÚmtur   r   Úfindall)rQ   r8   Ú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   rJ   Úsensors_batteryrM   Úpower_pluggedÚpercentr   )rQ   r   r¤   Údrawing_fromr£   Úpsutil_resultr   r   r   Útest_sensors_batteryá   s   z#TestSystemAPIs.test_sensors_batteryN)rX   rY   rZ   r   rq   rx   rz   r€   rƒ   rˆ   r‹   r�   r�   r”   r˜   r¡   r   ÚskipIfr   r§   r   r   r   r   r\   i   s,    






r\   Ú__main__)Úrun_from_name)Ú__doc__r   rN   rJ   r   r   Úpsutil.testsr   r   r   r   r   r	   r
   r   r   Úpsutil._psutil_posixr   r   r   r<   r¨   r=   r\   rX   Úpsutil.tests.runnerrª   Ú__file__r   r   r   r   Ú<module>   s:    þ