B
    çÚ†\a$  ã               @   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 erªe d¡ndZdd„ Zdd„ Zdd„ Ze e d¡G dd„ dejƒƒZe e d¡G dd„ dejƒƒZe e d¡G dd„ dejƒƒZedkr8eeƒ dS )zMACOS specific tests.é    N)ÚMACOS)Úcreate_zombie_proc)Úget_test_subprocess)ÚHAS_BATTERY)ÚMEMORY_TOLERANCE)Úreap_children)Úretry_before_failing)Úrun_test_module_by_name)Úsh)ÚunittestÚSC_PAGE_SIZEc             C   s6   t | ƒ}| ¡ d }yt|ƒS  tk
r0   |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)ÚcmdlineÚoutÚresult© r   ú4lib/python3.7/site-packages/psutil/tests/test_osx.pyÚsysctl   s    r   c             C   sH   t dƒ}x$| d¡D ]}| |krP qW 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ÚgroupÚPAGESIZE)Zfieldr   Úliner   r   r   r   )   s    r   c       	      C   sö   ddi}| }d}x@| r&| dd…   ¡ s6| dd… dkrP|| d 7 }| dd … } qW t|ƒ}|  ¡ }xD| ¡ D ]\}}||krlP qlW |dkrœ|d }| ¡ }ntd| ƒ‚|d di}x0t|dd … ƒD ]\}} d|d d	 > || < qÆW t|||  ƒ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   Úhuman2bytes5   s&    &
r6   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   Ú
setUpClassR   s    zTestProcess.setUpClassc             C   s
   t ƒ  d S )N)r   )r9   r   r   r   ÚtearDownClassV   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
   r8   Úreplacer-   r   ÚpsutilÚProcessÚcreate_timeÚassertEqualÚtimeZstrftimeZ	localtime)ÚselfÚoutputZstart_psZhhmmssZyearZstart_psutilr   r   r   Útest_process_create_timeZ   s    z$TestProcess.test_process_create_timeN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr:   r;   rG   r   r   r   r   r7   O   s   r7   c               @   sŒ   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestZombieProcessAPIsc             C   s   t ƒ }t |¡| _d S )N)r   r@   rA   Úp)r9   Zzpidr   r   r   r:   k   s    z TestZombieProcessAPIs.setUpClassc             C   s   t dd d S )NT)Ú	recursive)r   )r9   r   r   r   r;   p   s    z#TestZombieProcessAPIs.tearDownClassc             C   sJ   |   | j ¡ tj¡ | j ¡  | j ¡  | j ¡  | j ¡  | j 	¡  d S )N)
rC   rM   Zstatusr@   ZSTATUS_ZOMBIEZppidZuidsZgidsZterminalrB   )rE   r   r   r   Útest_pidtask_infot   s    



z'TestZombieProcessAPIs.test_pidtask_infoc             C   s   |   tj| jj¡ d S )N)ÚassertRaisesr@   ÚZombieProcessrM   Zexe)rE   r   r   r   Útest_exe|   s    zTestZombieProcessAPIs.test_exec             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   r   )rE   r   r   r   Útest_cmdline   s    z"TestZombieProcessAPIs.test_cmdlinec             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Úenviron)rE   r   r   r   Útest_environ‚   s    z"TestZombieProcessAPIs.test_environc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Úcwd)rE   r   r   r   Útest_cwd…   s    zTestZombieProcessAPIs.test_cwdc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Zmemory_full_info)rE   r   r   r   Útest_memory_full_infoˆ   s    z+TestZombieProcessAPIs.test_memory_full_infoc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Z	cpu_times)rE   r   r   r   Útest_cpu_times‹   s    z$TestZombieProcessAPIs.test_cpu_timesc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Znum_ctx_switches)rE   r   r   r   Útest_num_ctx_switchesŽ   s    z+TestZombieProcessAPIs.test_num_ctx_switchesc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Znum_threads)rE   r   r   r   Útest_num_threads‘   s    z&TestZombieProcessAPIs.test_num_threadsc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Z
open_files)rE   r   r   r   Útest_open_files”   s    z%TestZombieProcessAPIs.test_open_filesc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Zconnections)rE   r   r   r   Útest_connections—   s    z&TestZombieProcessAPIs.test_connectionsc             C   s   |   tj| jj¡ d S )N)rP   r@   rQ   rM   Znum_fds)rE   r   r   r   Útest_num_fdsš   s    z"TestZombieProcessAPIs.test_num_fdsc             C   s   |   tjtjf| jj¡ d S )N)rP   r@   rQ   ZAccessDeniedrM   Zthreads)rE   r   r   r   Útest_threads   s    z"TestZombieProcessAPIs.test_threadsN)rH   rI   rJ   rK   r:   r;   rO   rR   rS   rU   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r   r   r   r   rL   h   s   rL   c               @   s¦   e Zd Z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„ }x–t jddD ]†}t  |j¡}||jƒ\}}}}|  |j|¡ |  |j|¡ t|j| ƒdkrx|  	d|j |¡ t|j
| ƒdkr|  	d|j
 |¡ qW 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   é   Znoner'   i   )r
   r-   r   Úpopr   )Úpathr   Úlinesr   ÚdevÚtotalÚusedÚfreer   r   r   Údfª   s    


z%TestSystemAPIs.test_disks.<locals>.dfF)Úalli    zpsutil=%s, df=%s)r@   Zdisk_partitionsZ
disk_usageZ
mountpointrC   Zdevicerf   Úabsrh   Zfailrg   )rE   ri   ÚpartZusagere   rf   rg   rh   r   r   r   Ú
test_disks§   s    zTestSystemAPIs.test_disksc             C   s    t dƒ}|  |tjdd¡ d S )Nzsysctl hw.logicalcpuT)Úlogical)r   rC   r@   Ú	cpu_count)rE   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.physicalcpuF)rn   )r   rC   r@   ro   )rE   r2   r   r   r   Útest_cpu_count_physicalÈ   s    z&TestSystemAPIs.test_cpu_count_physicalc             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)r@   Zcpu_freqrC   Zcurrentr   ÚminÚmax)rE   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   r@   Úvirtual_memoryrf   )rE   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 )Nrh   )Údelta)r   r@   ru   rh   ÚassertAlmostEqualr   )rE   Ú
vmstat_valÚ
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Úactive)rw   )r   r@   ru   r|   rx   r   )rE   ry   rz   r   r   r   Útest_vmem_activeá   s    
zTestSystemAPIs.test_vmem_activec             C   s&   t dƒ}t ¡ j}| j||td d S )NÚinactive)rw   )r   r@   ru   r~   rx   r   )rE   ry   rz   r   r   r   Útest_vmem_inactiveç   s    
z!TestSystemAPIs.test_vmem_inactivec             C   s&   t dƒ}t ¡ j}| j||td d S )NÚwired)rw   )r   r@   ru   r€   rx   r   )rE   ry   rz   r   r   r   Útest_vmem_wiredí   s    
zTestSystemAPIs.test_vmem_wiredc             C   s"   t dƒ}t ¡ j}|  ||¡ d S )NZPageins)r   r@   Úswap_memoryZsinrC   )rE   ry   rz   r   r   r   Útest_swapmem_sinõ   s    
zTestSystemAPIs.test_swapmem_sinc             C   s"   t dƒ}t ¡ j}|  ||¡ d S )NZPageout)r   r@   r‚   ZsoutrC   )rE   ry   rz   r   r   r   Útest_swapmem_soutû   s    
z TestSystemAPIs.test_swapmem_soutc          	   C   sx   xrt  ¡  ¡ D ]b\}}ytd| ƒ}W n tk
r:   Y qX | j|jd|k|d |  |jtt	 
d|¡d ƒ¡ qW d S )Nzifconfig %sZRUNNING)Úmsgz	mtu (\d+)r   )r@   Znet_if_statsr.   r
   ÚRuntimeErrorrC   ZisupZmtur   r   Úfindall)rE   r3   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   r@   Zsensors_batteryrC   Úpower_pluggedÚpercentr   )rE   r   rŠ   Zdrawing_fromr‰   Zpsutil_resultr   r   r   Útest_sensors_battery  s    z#TestSystemAPIs.test_sensors_batteryN)rH   rI   rJ   rm   rp   rq   rt   rv   r   r{   r}   r   r   rƒ   r„   rˆ   r   ÚskipIfr   r‹   r   r   r   r   r`   ¢   s   r`   Ú__main__)Ú__doc__Úosr   rD   r@   r   Zpsutil.testsr   r   r   r   r   r   r	   r
   r   Úsysconfr   r   r   r6   rŒ   ZTestCaser7   rL   r`   rH   Ú__file__r   r   r   r   Ú<module>   s6   

9
 
