<!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
JZcE                 @   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 ddl
mZ ddl
mZ ddl
mZ erejdZej dkredZqdZn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je dG d d! d!ejZe d"kree! dS )#z$Tests specific to all BSD platforms.    N)BSD)FREEBSD)NETBSD)OPENBSD)get_test_subprocess)HAS_BATTERY)MEMORY_TOLERANCE)reap_children)retry_before_failing)run_test_module_by_name)sh)unittest)whichSC_PAGE_SIZEmuseFc             C   sh   t d|  }tr(||jdd d }nts0trF||jdd d }yt|S  tk
rb   |S X dS )zmExpects a sysctl command with an argument and parse the result
    returning only the value of interest.
    zsysctl z:    N=   )r   r   findr   r   int
ValueError)cmdlineresult r    /usr/lib64/python3.6/test_bsd.pysysctl+   s    r   c             C   s@   t d}x&|jdD ]}|j| rP qW tdt|j d S )z+Thin wrapper around 'muse' cmdline utility.r   
zline not foundr   )r   split
startswithr   r   )Zfieldoutliner   r   r   r   :   s    
zBSD onlyc               @   s   e Zd ZdZedd Zedd Zeje	ddd Z
d	d
 Zejed ddd Zejed ddd Zdd ZdS )BSDSpecificTestCasez)Generic tests common to all BSD variants.c             C   s   t  j| _d S )N)r   pid)clsr   r   r   
setUpClassN   s    zBSDSpecificTestCase.setUpClassc             C   s
   t   d S )N)r	   )r#   r   r   r   tearDownClassR   s    z!BSDSpecificTestCase.tearDownClassz -o lstart doesn't work on NETBSDc             C   sP   t d| j }|jddj }tj| jj }tjdtj	|}| j
|| d S )Nzps -o lstart -p %sZSTARTED z%a %b %e %H:%M:%S %Y)r   r"   replacestrippsutilProcessZcreate_timetimeZstrftimeZ	localtimeassertEqual)selfoutputZstart_psZstart_psutilr   r   r   test_process_create_timeV   s    z,BSDSpecificTestCase.test_process_create_timec             C   s   dd }xt jddD ]}t j|j}||j\}}}}| j|j| | j|j| t|j| d	krz| j	d|j|f  t|j
| dkr| j	d|j
|f  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   dfb   s    


z*BSDSpecificTestCase.test_disks.<locals>.dfF)all
   i   zpsutil=%s, df=%si (  i   i (  i   )r)   Zdisk_partitionsZ
disk_usageZ
mountpointr,   Zdevicer5   absr7   Zfailr6   )r-   r8   partZusager4   r5   r6   r7   r   r   r   
test_disks_   s    zBSDSpecificTestCase.test_disksr   zsysctl cmd not availablec             C   s    t d}| jtjdd| d S )Nzhw.ncpuT)Zlogical)r   r,   r)   	cpu_count)r-   systr   r   r   test_cpu_count_logicalz   s    z*BSDSpecificTestCase.test_cpu_count_logicalc             C   s   t d}| j|tj j d S )Nz
hw.physmem)r   r,   r)   virtual_memoryr5   )r-   numr   r   r   test_virtual_memory_total   s    z-BSDSpecificTestCase.test_virtual_memory_totalc             C   s   xzt j j D ]j\}}ytd| }W n tk
r:   Y qX | j|jd|k|d d|kr| j|jtt	j
d|d  qW d S )Nzifconfig %sZRUNNING)msgmtuz	mtu (\d+)r   )r)   Znet_if_statsitemsr   RuntimeErrorr,   ZisuprE   r   refindall)r-   nameZstatsr   r   r   r   test_net_if_stats   s    z%BSDSpecificTestCase.test_net_if_statsN)__name__
__module____qualname____doc__classmethodr$   r%   r   skipIfr   r/   r=   r   r@   rC   rK   r   r   r   r   r!   J   s   	r!   zFREEBSD onlyc               @   s  e Zd Zedd Zedd Ze 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e dd Zeje ddd Zeje de d d! Zeje de d"d# Zeje de d$d% Zeje de d&d' Zeje de d(d) Zeje de d*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!eje" d6d7d8 Z#eje" d6d9d: Z$eje"d;d<d= Z%d>S )?FreeBSDSpecificTestCasec             C   s   t  j| _d S )N)r   r"   )r#   r   r   r   r$      s    z"FreeBSDSpecificTestCase.setUpClassc             C   s
   t   d S )N)r	   )r#   r   r   r   r%      s    z%FreeBSDSpecificTestCase.tearDownClassc             C   s   t d| j }tj| jjdd}|jddd  }x||r|j }|j }|d d \}}}}	}
|j }| jd||f |j | jt	|
|j
 |jjds6| j|d	 |j q6W d S )
Nzprocstat -v %sF)Zgroupedr   r      z%s-%s[r:   )r   r"   r)   r*   Zmemory_mapsr   r1   r,   Zaddrr   Zrssr2   r   )r-   r   mapsr3   r    fields_startstopZpermsresmapr   r   r   test_proc_memory_maps   s    z-FreeBSDSpecificTestCase.test_proc_memory_mapsc             C   s<   t d| j }| jtj| jj |jdd j d  d S )Nzprocstat -b %sr   r   )r   r"   r,   r)   r*   Zexer   )r-   r   r   r   r   test_proc_exe   s    z%FreeBSDSpecificTestCase.test_proc_exec             C   sL   t d| j }| jdjtj| jj dj|jdd j dd   d S )Nzprocstat -c %s r   r   r   )r   r"   r,   joinr)   r*   r   r   )r-   r   r   r   r   test_proc_cmdline   s    z)FreeBSDSpecificTestCase.test_proc_cmdlinec             C   s   t d| j }|jdd j dd \}}}}}}tj| j}|j }	|j }
| j|	jt	| | j|	j
t	| | j|	jt	| | j|
jt	| | j|
j
t	| | j|
jt	| d S )Nzprocstat -s %sr   r   r      )r   r"   r   r)   r*   uidsgidsr,   realr   Z	effectiveZsaved)r-   r   ZeuidZruidZsuidZegidZrgidZsgidprc   rd   r   r   r   test_proc_uids_gids   s    &z+FreeBSDSpecificTestCase.test_proc_uids_gidsc             C   s   g }t d| j }tj| j}x|jdD ]}|j j }d|krtt|j d }|j j	}| j
|| |jd  q*d|kr*t|j d	 }|j j}| j
|| |jd  q*W t|dkrtdd S )
Nzprocstat -r %sr   z voluntary contextr   z involuntary contextr   z)couldn't find lines match in procstat outr]   r]   )r   r"   r)   r*   r   lowerr(   r   Znum_ctx_switchesZ	voluntaryr,   appendZinvoluntarylenrG   )r-   testedr   rf   r    pstat_valuepsutil_valuer   r   r   test_proc_ctx_switches   s"    

z.FreeBSDSpecificTestCase.test_proc_ctx_switchesc             C   s   g }t d| j }tj| j}x|jdD ]}|j j }d|krtd|j d
 jdd  }|j j	}| j
|| |jd  q*d|kr*td|j d jdd  }|j j}| j
|| |jd  q*W t|dkrtd	d S )Nzprocstat -r %sr   z	user timez0.r   .zsystem timer   z)couldn't find lines match in procstat outr]   r]   r]   r]   )r   r"   r)   r*   r   rh   r(   floatZ	cpu_timesuserr,   ri   systemrj   rG   )r-   rk   r   rf   r    rl   rm   r   r   r   test_proc_cpu_times   s"    

z+FreeBSDSpecificTestCase.test_proc_cpu_timesc             C   s&   t dt }| jtj j|td d S )Nzvm.stats.vm.v_active_count)delta)r   PAGESIZEassertAlmostEqualr)   rA   activer   )r-   r?   r   r   r   test_vmem_active   s    z(FreeBSDSpecificTestCase.test_vmem_activec             C   s&   t dt }| jtj j|td d S )Nzvm.stats.vm.v_inactive_count)rt   )r   ru   rv   r)   rA   inactiver   )r-   r?   r   r   r   test_vmem_inactive   s    z*FreeBSDSpecificTestCase.test_vmem_inactivec             C   s&   t dt }| jtj j|td d S )Nzvm.stats.vm.v_wire_count)rt   )r   ru   rv   r)   rA   wiredr   )r-   r?   r   r   r   test_vmem_wired   s    z'FreeBSDSpecificTestCase.test_vmem_wiredc             C   s&   t dt }| jtj j|td d S )Nzvm.stats.vm.v_cache_count)rt   )r   ru   rv   r)   rA   cachedr   )r-   r?   r   r   r   test_vmem_cached  s    z(FreeBSDSpecificTestCase.test_vmem_cachedc             C   s&   t dt }| jtj j|td d S )Nzvm.stats.vm.v_free_count)rt   )r   ru   rv   r)   rA   r7   r   )r-   r?   r   r   r   test_vmem_free	  s    z&FreeBSDSpecificTestCase.test_vmem_freec             C   s"   t d}| jtj j|td d S )Nzvfs.bufspace)rt   )r   rv   r)   rA   buffersr   )r-   r?   r   r   r   test_vmem_buffers  s    z)FreeBSDSpecificTestCase.test_vmem_bufferszmuse not installedc             C   s   t d}| jtj j| d S )NZTotal)r   r,   r)   rA   r5   )r-   rB   r   r   r   test_muse_vmem_total  s    z,FreeBSDSpecificTestCase.test_muse_vmem_totalc             C   s"   t d}| jtj j|td d S )NZActive)rt   )r   rv   r)   rA   rw   r   )r-   rB   r   r   r   test_muse_vmem_active  s    z-FreeBSDSpecificTestCase.test_muse_vmem_activec             C   s"   t d}| jtj j|td d S )NZInactive)rt   )r   rv   r)   rA   ry   r   )r-   rB   r   r   r   test_muse_vmem_inactive#  s    z/FreeBSDSpecificTestCase.test_muse_vmem_inactivec             C   s"   t d}| jtj j|td d S )NZWired)rt   )r   rv   r)   rA   r{   r   )r-   rB   r   r   r   test_muse_vmem_wired*  s    z,FreeBSDSpecificTestCase.test_muse_vmem_wiredc             C   s"   t d}| jtj j|td d S )NZCache)rt   )r   rv   r)   rA   r}   r   )r-   rB   r   r   r   test_muse_vmem_cached1  s    z-FreeBSDSpecificTestCase.test_muse_vmem_cachedc             C   s"   t d}| jtj j|td d S )NZFree)rt   )r   rv   r)   rA   r7   r   )r-   rB   r   r   r   test_muse_vmem_free8  s    z+FreeBSDSpecificTestCase.test_muse_vmem_freec             C   s"   t d}| jtj j|td d S )NZBuffer)rt   )r   rv   r)   rA   r   r   )r-   rB   r   r   r   test_muse_vmem_buffers?  s    z.FreeBSDSpecificTestCase.test_muse_vmem_buffersc             C   s   | j tj jtddd d S )Nzvm.stats.sys.v_swtchi  )rt   )rv   r)   	cpu_statsctx_switchesr   )r-   r   r   r   test_cpu_stats_ctx_switchesF  s    z3FreeBSDSpecificTestCase.test_cpu_stats_ctx_switchesc             C   s   | j tj jtddd d S )Nzvm.stats.sys.v_intri  )rt   )rv   r)   r   
interruptsr   )r-   r   r   r   test_cpu_stats_interruptsJ  s    z1FreeBSDSpecificTestCase.test_cpu_stats_interruptsc             C   s   | j tj jtddd d S )Nzvm.stats.sys.v_softi  )rt   )rv   r)   r   Zsoft_interruptsr   )r-   r   r   r   test_cpu_stats_soft_interruptsN  s    z6FreeBSDSpecificTestCase.test_cpu_stats_soft_interruptsc             C   s   | j tj jtddd d S )Nzvm.stats.sys.v_syscalli  )rt   )rv   r)   r   Zsyscallsr   )r-   r   r   r   test_cpu_stats_syscallsR  s    z/FreeBSDSpecificTestCase.test_cpu_stats_syscallsc             C   sL   t d}||jdd d  }|d |jd }t|}| j|tj  d S )Nzsysctl kern.boottimez sec =    ,)r   r   r   r,   r)   	boot_time)r-   sZbtimer   r   r   test_boot_time\  s
    z&FreeBSDSpecificTestCase.test_boot_timez
no batteryc             C   s   dd }t d}tdd |jdD }tj }t|d jdd	}|d
 }| j|j| |dkrt| j|j	tj
 n| j||j	| d S )Nc             S   s(   t | d\}}t |d\}}d||f S )N<   z%d:%02d)divmod)Zsecsmr   hr   r   r   
secs2hoursg  s    z@FreeBSDSpecificTestCase.test_sensors_battery.<locals>.secs2hourszacpiconf -i 0c             S   s(   g | ] }|j d d |j d d fqS )	r   r   r]   )r   ).0xr   r   r   
<listcomp>m  s   z@FreeBSDSpecificTestCase.test_sensors_battery.<locals>.<listcomp>r   zRemaining capacity:%r&   zRemaining time:unknown)r   dictr   r)   sensors_batteryr   r'   r,   percentsecsleftZPOWER_TIME_UNLIMITED)r-   r   r   rV   Zmetricsr   Zremaining_timer   r   r   test_sensors_batterye  s    z,FreeBSDSpecificTestCase.test_sensors_batteryc             C   sl   | j tj jtd | j tj jtddk tj j}|dk rT| j tdd n| j |tdd  d S )Nzhw.acpi.battery.lifezhw.acpi.acliner   r   zhw.acpi.battery.timer   r]   )r,   r)   r   r   r   Zpower_pluggedr   )r-   r   r   r   r   #test_sensors_battery_against_sysctlx  s    

z;FreeBSDSpecificTestCase.test_sensors_battery_against_sysctlzhas batteryc          	   C   s@   | j t td td td W d Q R X | jtj  d S )Nzhw.acpi.battery.lifezhw.acpi.battery.timezhw.acpi.acline)ZassertRaisesrG   r   ZassertIsNoner)   r   )r-   r   r   r   test_sensors_battery_no_battery  s
    z7FreeBSDSpecificTestCase.test_sensors_battery_no_batteryN)&rL   rM   rN   rP   r$   r%   r
   r\   r^   ra   rg   rn   rs   rx   rz   r|   r~   r   r   r   rQ   MUSE_AVAILABLEr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR      sF   
	rR   zOPENBSD onlyc               @   s   e Zd Zdd ZdS )OpenBSDSpecificTestCasec             C   s6   t d}tjj|d}tjjtj }| j|| d S )Nzkern.boottimez%a %b %d %H:%M:%S %Y)r   datetimeZstrptimeZfromtimestampr)   r   r,   )r-   r   Zsys_btZ	psutil_btr   r   r   r     s    z&OpenBSDSpecificTestCase.test_boot_timeN)rL   rM   rN   r   r   r   r   r   r     s   r   zNETBSD onlyc               @   s`   e Z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S )NetBSDSpecificTestCasec             C   sR   t dd2}x*|D ]"}|j| rt|j d d S qW W d Q R X td|  d S )Nz/proc/meminforbr   i   zcan't find %s)openr   r   r   r   )Zlook_forfr    r   r   r   parse_meminfo  s
    

"z$NetBSDSpecificTestCase.parse_meminfoc             C   s   | j tj j| jd d S )Nz	MemTotal:)r,   r)   rA   r5   r   )r-   r   r   r   test_vmem_total  s    z&NetBSDSpecificTestCase.test_vmem_totalc             C   s    | j tj j| jdtd d S )NzMemFree:)rt   )rv   r)   rA   r7   r   r   )r-   r   r   r   r     s    z%NetBSDSpecificTestCase.test_vmem_freec             C   s    | j tj j| jdtd d S )NzBuffers:)rt   )rv   r)   rA   r   r   r   )r-   r   r   r   r     s    z(NetBSDSpecificTestCase.test_vmem_buffersc             C   s    | j tj j| jdtd d S )Nz
MemShared:)rt   )rv   r)   rA   Zsharedr   r   )r-   r   r   r   test_vmem_shared  s    z'NetBSDSpecificTestCase.test_vmem_sharedc             C   s    | j tj j| jdtd d S )Nz
SwapTotal:)rt   )rv   r)   swap_memoryr5   r   r   )r-   r   r   r   test_swapmem_total  s    z)NetBSDSpecificTestCase.test_swapmem_totalc             C   s    | j tj j| jdtd d S )Nz	SwapFree:)rt   )rv   r)   r   r7   r   r   )r-   r   r   r   test_swapmem_free  s    z(NetBSDSpecificTestCase.test_swapmem_freec             C   s"   t j }| j|j|j|j  d S )N)r)   r   r,   r6   r5   r7   )r-   Zsmemr   r   r   test_swapmem_used  s    z(NetBSDSpecificTestCase.test_swapmem_usedc             C   sb   t dd8}x0|D ] }|jdrt|j d }P qW tdW d Q R X | jtj j|dd d S )Nz
/proc/statr   s   intrr   zcouldn't find linei  )rt   )	r   r   r   r   r   rv   r)   r   r   )r-   r   r    r   r   r   r   r     s    

z0NetBSDSpecificTestCase.test_cpu_stats_interruptsc             C   sb   t dd8}x0|D ] }|jdrt|j d }P qW tdW d Q R X | jtj j|dd d S )Nz
/proc/statr   s   ctxtr   zcouldn't find linei  )rt   )	r   r   r   r   r   rv   r)   r   r   )r-   r   r    r   r   r   r   r     s    

z2NetBSDSpecificTestCase.test_cpu_stats_ctx_switchesN)rL   rM   rN   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   __main__)"rO   r   osrH   r+   r)   r   r   r   r   Zpsutil.testsr   r   r   r	   r
   r   r   r   r   sysconfru   getuidr   r   r   rQ   ZTestCaser!   rR   r   r   rL   __file__r   r   r   r   <module>	   sL   


K
   

B
