<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ%                 @   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rejdndZdd Zdd Zdd Zeje dG dd dejZeje dG dd dejZeje dG dd dejZedkr8ee dS )zOSX specific tests.    N)OSX)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 | }|j 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    /usr/lib64/python3.6/test_osx.pysysctl   s    r   c             C   sH   t d}x$|jdD ]}| |krP qW tdttjd|j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 j  s6| dd dkrP|| d 7 }| dd  } qW t|}| j }xD|j D ]\}}||krlP qlW |dkr|d }|j }ntd| |d di}x0t|dd  D ]\}} d|d d > || < qW t|||  S )NZ	customaryBKMGTPEZY r   r   .kzcan't interpret %r
   )	r   r   r    r!   r"   r#   r$   r%   r&   )isdigitfloatstripitemsupperr   	enumerater   )	sZSYMBOLSZinitnumZletternameZssetprefixir   r   r   human2bytes4   s&    &
r6   zOSX 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   
setUpClassQ   s    zTestProcess.setUpClassc             C   s
   t   d S )N)r   )r9   r   r   r   tearDownClassU   s    zTestProcess.tearDownClassc             C   s   t d| j }|jddj }|jdd	 }|jdd
 }tj| jj }| j|t	j
dt	j| | j|t	j
dt	j| d S )Nzps -o lstart -p %sZSTARTEDr'       r   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_timeY   s    z$TestProcess.test_process_create_timeN)__name__
__module____qualname__classmethodr:   r;   rH   r   r   r   r   r7   N   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d  Zd!S )"TestZombieProcessAPIsc             C   s   t  }tj|| _d S )N)r   rA   rB   p)r9   Zzpidr   r   r   r:   j   s    z TestZombieProcessAPIs.setUpClassc             C   s   t dd d S )NT)	recursive)r   )r9   r   r   r   r;   o   s    z#TestZombieProcessAPIs.tearDownClassc             C   sJ   | j | jj tj | jj  | jj  | jj  | jj  | jj	  d S )N)
rD   rN   ZstatusrA   ZSTATUS_ZOMBIEZppidZuidsZgidsZterminalrC   )rF   r   r   r   test_pidtask_infos   s    



z'TestZombieProcessAPIs.test_pidtask_infoc             C   s   | j tj| jj d S )N)assertRaisesrA   ZombieProcessrN   Zexe)rF   r   r   r   test_exe{   s    zTestZombieProcessAPIs.test_exec             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   r   )rF   r   r   r   test_cmdline~   s    z"TestZombieProcessAPIs.test_cmdlinec             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   environ)rF   r   r   r   test_environ   s    z"TestZombieProcessAPIs.test_environc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   cwd)rF   r   r   r   test_cwd   s    zTestZombieProcessAPIs.test_cwdc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Zmemory_full_info)rF   r   r   r   test_memory_full_info   s    z+TestZombieProcessAPIs.test_memory_full_infoc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Z	cpu_times)rF   r   r   r   test_cpu_times   s    z$TestZombieProcessAPIs.test_cpu_timesc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Znum_ctx_switches)rF   r   r   r   test_num_ctx_switches   s    z+TestZombieProcessAPIs.test_num_ctx_switchesc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Znum_threads)rF   r   r   r   test_num_threads   s    z&TestZombieProcessAPIs.test_num_threadsc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Z
open_files)rF   r   r   r   test_open_files   s    z%TestZombieProcessAPIs.test_open_filesc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Zconnections)rF   r   r   r   test_connections   s    z&TestZombieProcessAPIs.test_connectionsc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Znum_fds)rF   r   r   r   test_num_fds   s    z"TestZombieProcessAPIs.test_num_fdsc             C   s   | j tjtjf| jj d S )N)rQ   rA   rR   ZAccessDeniedrN   Zthreads)rF   r   r   r   test_threads   s    z"TestZombieProcessAPIs.test_threadsc             C   s   | j tj| jj d S )N)rQ   rA   rR   rN   Zmemory_maps)rF   r   r   r   test_memory_maps   s    z&TestZombieProcessAPIs.test_memory_mapsN)rI   rJ   rK   rL   r:   r;   rP   rS   rT   rV   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r   r   r   r   rM   g   s    rM   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e dd Zdd Zeje ddd ZdS )TestSystemAPIsc             C   s   dd }xt jddD ]}t j|j}||j\}}}}| j|j| | j|j| t|j| d	krx| j	d|j | t|j
| dkr| j	d|j
 | qW d S )Nc             S   s   t d|  j }|jd}|jd |jd}|j 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)allr*   i   zpsutil=%s, df=%si (  i   i (  i   )rA   Zdisk_partitionsZ
disk_usageZ
mountpointrD   Zdevicerh   absrj   Zfailri   )rF   rk   partZusagerg   rh   ri   rj   r   r   r   
test_disks   s    zTestSystemAPIs.test_disksc             C   s    t d}| j|tjdd d S )Nzsysctl hw.logicalcpuT)logical)r   rD   rA   	cpu_count)rF   r2   r   r   r   test_cpu_count_logical   s    z%TestSystemAPIs.test_cpu_count_logicalc             C   s    t d}| j|tjdd d S )Nzsysctl hw.physicalcpuF)rp   )r   rD   rA   rq   )rF   r2   r   r   r   test_cpu_count_physical   s    z&TestSystemAPIs.test_cpu_count_physicalc             C   sZ   t j }| j|jd d td | j|jd d td | j|jd d td d S )Ni  zsysctl hw.cpufrequencyzsysctl hw.cpufrequency_minzsysctl hw.cpufrequency_max)rA   Zcpu_freqrD   Zcurrentr   minmax)rF   Zfreqr   r   r   test_cpu_freq   s    zTestSystemAPIs.test_cpu_freqc             C   s   t d}| j|tj j d S )Nzsysctl hw.memsize)r   rD   rA   virtual_memoryrh   )rF   Zsysctl_hwphymemr   r   r   test_vmem_total   s    zTestSystemAPIs.test_vmem_totalc             C   s&   t d}tj j}| j||td d S )Nrj   )delta)r   rA   rw   rj   assertAlmostEqualr   )rF   
vmstat_val
psutil_valr   r   r   test_vmem_free   s    
zTestSystemAPIs.test_vmem_freec             C   s.   t dt d }tj j}| j||td d S )Ninactiverj   )ry   )r   rA   rw   Z	availablerz   r   )rF   r{   r|   r   r   r   test_vmem_available   s    
z"TestSystemAPIs.test_vmem_availablec             C   s&   t d}tj j}| j||td d S )Nactive)ry   )r   rA   rw   r   rz   r   )rF   r{   r|   r   r   r   test_vmem_active   s    
zTestSystemAPIs.test_vmem_activec             C   s&   t d}tj j}| j||td d S )Nr~   )ry   )r   rA   rw   r~   rz   r   )rF   r{   r|   r   r   r   test_vmem_inactive   s    
z!TestSystemAPIs.test_vmem_inactivec             C   s&   t d}tj j}| j||td d S )Nwired)ry   )r   rA   rw   r   rz   r   )rF   r{   r|   r   r   r   test_vmem_wired   s    
zTestSystemAPIs.test_vmem_wiredc             C   s"   t d}tj j}| j|| d S )NZPageins)r   rA   swap_memoryZsinrD   )rF   r{   r|   r   r   r   test_swapmem_sin   s    
zTestSystemAPIs.test_swapmem_sinc             C   s"   t d}tj j}| j|| d S )NZPageout)r   rA   r   ZsoutrD   )rF   r{   r|   r   r   r   test_swapmem_sout  s    
z TestSystemAPIs.test_swapmem_soutc             C   sx   xrt j j D ]b\}}ytd| }W n tk
r:   Y qX | j|jd|k|d | j|jtt	j
d|d  qW d S )Nzifconfig %sZRUNNING)msgz	mtu (\d+)r   )rA   Znet_if_statsr.   r
   RuntimeErrorrD   ZisupZmtur   r   findall)rF   r3   Zstatsr   r   r   r   test_net_if_stats  s    z TestSystemAPIs.test_net_if_statsz
no batteryc             C   s`   t d}tjd|jd}tjd|jd}|dk}tj }| j|j| | j|jt	| d S )Nzpmset -g battz(\d+)%r   zNow drawing from '([^']+)'zAC Power)
r
   r   r   r   rA   Zsensors_batteryrD   power_pluggedpercentr   )rF   r   r   Zdrawing_fromr   Zpsutil_resultr   r   r   test_sensors_battery"  s    z#TestSystemAPIs.test_sensors_batteryN)rI   rJ   rK   ro   rr   rs   rv   rx   r   r}   r   r   r   r   r   r   r   r   skipIfr   r   r   r   r   r   rb      s   rb   __main__)__doc__osr   rE   rA   r   Zpsutil.testsr   r   r   r   r   r   r	   r
   r   sysconfr   r   r   r6   r   ZTestCaser7   rM   rb   rI   __file__r   r   r   r   <module>   s6   

<
 	
