U
    (cP                     @   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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rddlmZ e Ze dkredrdndZndZ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e dG dd deZee
 dG dd  d eZee	 d!G d"d# d#eZ e!d$krdd%l"m#Z# e#e$ dS )&z$Tests specific to all BSD platforms.    N)BSD)FREEBSD)NETBSD)OPENBSD)HAS_BATTERY)TOLERANCE_SYS_MEM)PsutilTestCase)retry_on_failure)sh)spawn_testproc)	terminate)which)getpagesizemuseTFc                 C   sn   t d|  }tr(||dd d }nts0trF||dd d }z
t|W S  tk
rh   | Y 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   9/tmp/pip-unpacked-wheel-l83rk7k5/psutil/tests/test_bsd.pysysctl-   s    
r   c                 C   s>   t d}|dD ]}|| r q.qtdt| d S )z+Thin wrapper around 'muse' cmdline utility.r   
zline not foundr   )r
   split
startswithr   r   )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e	ddd Z
d	d
 Zeed ddd Zeed ddd Zdd ZdS )BSDTestCasez)Generic tests common to all BSD variants.c                 C   s   t  j| _d S Nr   pidclsr   r   r   
setUpClassP   s    zBSDTestCase.setUpClassc                 C   s   t | j d S r"   r   r$   r%   r   r   r   tearDownClassT   s    zBSDTestCase.tearDownClassz -o lstart doesn't work on NETBSDc                 C   sP   t d| j }|dd }t| j }tdt	|}| 
|| 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timestrftime	localtimeassertEqual)selfoutputZstart_psZstart_psutilr   r   r   test_process_create_timeX   s    z$BSDTestCase.test_process_create_timec                 C   s   dd }t jddD ]}t |j}||j\}}}}| |j| | |j| t|j| dkrx| 	d|j|f t|j
| dkr| 	d|j
|f 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*      )r
   r,   r   popr   )pathr   linesr    devtotalusedfreer   r   r   dfd   s    


z"BSDTestCase.test_disks.<locals>.dfF)alli   zpsutil=%s, df=%s)r-   Zdisk_partitions
disk_usageZ
mountpointr2   Zdevicer=   absr?   Zfailr>   )r3   r@   partusager<   r=   r>   r?   r   r   r   
test_disksa   s    zBSDTestCase.test_disksr   zsysctl cmd not availablec                 C   s    t d}| tjdd| d S )Nzhw.ncpuT)logical)r   r2   r-   	cpu_countr3   Zsystr   r   r   test_cpu_count_logical|   s    z"BSDTestCase.test_cpu_count_logicalc                 C   s   t d}| |t j d S )Nz
hw.physmem)r   r2   r-   virtual_memoryr=   r3   numr   r   r   test_virtual_memory_total   s    z%BSDTestCase.test_virtual_memory_totalc              	   C   s|   t   D ]j\}}ztd| }W n tk
r8   Y qX | j|jd|k|d d|kr| |jtt	
d|d  qd S )Nzifconfig %sZRUNNING)msgmtuz	mtu (\d+)r   )r-   Znet_if_statsitemsr
   RuntimeErrorr2   ZisuprP   r   refindall)r3   namestatsr   r   r   r   test_net_if_stats   s    zBSDTestCase.test_net_if_statsN)__name__
__module____qualname____doc__classmethodr'   r)   unittestskipIfr   r5   rF   r   rJ   rN   rW   r   r   r   r   r!   L   s   





r!   zFREEBSD onlyc                   @   sf   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dS )FreeBSDPsutilTestCasec                 C   s   t  j| _d S r"   r#   r%   r   r   r   r'      s    z FreeBSDPsutilTestCase.setUpClassc                 C   s   t | j d S r"   r(   r%   r   r   r   r)      s    z#FreeBSDPsutilTestCase.tearDownClassc                 C   s   t d| j }t| jjdd}|ddd  }|r| }| }|d d \}}}}	}
| }| d||f |j | t	|
|j
 |jds4| |d	 |j q4d S )
Nzprocstat -v %sF)Zgroupedr   r      z%s-%s[
   )r
   r$   r-   r.   Zmemory_mapsr   r9   r2   addrr   Zrssr:   r   )r3   r   mapsr;   r    fields_startstopZpermsresmapr   r   r   test_memory_maps   s    z&FreeBSDPsutilTestCase.test_memory_mapsc                 C   s<   t d| j }| t| j |dd  d  d S )Nzprocstat -b %sr   r   )r
   r$   r2   r-   r.   Zexer   r3   r   r   r   r   test_exe   s    zFreeBSDPsutilTestCase.test_exec                 C   sL   t d| j }| dt| j d|dd  dd   d S )Nzprocstat -c %s r   r   r   )r
   r$   r2   joinr-   r.   r   r   rm   r   r   r   test_cmdline   s    z"FreeBSDPsutilTestCase.test_cmdlinec                 C   s   t d| j }|dd  dd \}}}}}}t| j}| }	| }
| |	jt	| | |	j
t	| | |	jt	| | |
jt	| | |
j
t	| | |
jt	| d S )Nzprocstat -s %sr   r   r      )r
   r$   r   r-   r.   uidsgidsr2   realr   Z	effectiveZsaved)r3   r   ZeuidZruidZsuidZegidZrgidZsgidprs   rt   r   r   r   test_uids_gids   s    &z$FreeBSDPsutilTestCase.test_uids_gidsc                 C   s   g }t d| j }t| j}|dD ]}|  }d|krrt| d }| j	}| 
|| |d  q(d|kr(t| d }| j}| 
|| |d  q(t|dkrtdd S )Nprocstat -r %sr   z voluntary contextrl   z involuntary contextr   )couldn't find lines match in procstat out)r
   r$   r-   r.   r   lowerr,   r   Znum_ctx_switchesZ	voluntaryr2   appendZinvoluntarylenrR   r3   Ztestedr   rv   r    Zpstat_valueZpsutil_valuer   r   r   test_ctx_switches   s"    

z'FreeBSDPsutilTestCase.test_ctx_switchesc                 C   s   g }t d| j }t| j}|dD ]}|  }d|krtd| d dd  }| j	}| 
|| |d  q(d|kr(td| d dd  }| j}| 
|| |d  q(t|dkrtd	d S )
Nrx   r   z	user timez0.rl   .zsystem timer   ry   )r
   r$   r-   r.   r   rz   r,   floatZ	cpu_timesuserr2   r{   systemr|   rR   r}   r   r   r   test_cpu_times   s"    

z$FreeBSDPsutilTestCase.test_cpu_timesN)rX   rY   rZ   r\   r'   r)   r	   rk   rn   rq   rw   r~   r   r   r   r   r   r_      s   



r_   c                   @   s  e Zd Ze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e ddd Zee de dd Zee de dd Zee de dd Zee de dd Zee de dd Zee de dd Zd d! Zd"d# Zd$d% Ze d&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zee d0d1d2 Z ee d0d3d4 Z!eed5d6d7 Z"d8d9 Z#d:S );FreeBSDSystemTestCasec                  C   sR   t d d } td| }|s,td|  dd |dd D \}}}|||fS )	Nzswapinfo -krl   z\s+zCan't parse swapinfo: %sc                 s   s   | ]}t |d  V  qdS )r8   N)r   ).0rv   r   r   r   	<genexpr>   s     z7FreeBSDSystemTestCase.parse_swapinfo.<locals>.<genexpr>r   r6   )r
   
splitlinesrS   r   r   )r4   partsr=   r>   r?   r   r   r   parse_swapinfo   s    z$FreeBSDSystemTestCase.parse_swapinfoc                 C   s   d}zt t|}W n tk
r2   | d Y nX | t j| d}t|}t | d dd }t | d dd }| t j	| | t j
| d S )Nzdev.cpu.0.freqz#frequencies not supported by kernelzdev.cpu.0.freq_levelsr   /rl   )r   r   rR   skipTestr2   r-   Zcpu_freqcurrentr   maxmin)r3   sensorsysctl_resultZmax_freqZmin_freqr   r   r   !test_cpu_frequency_against_sysctl  s    z7FreeBSDSystemTestCase.test_cpu_frequency_against_sysctlc                 C   s&   t dt }| jt j|td d S )Nzvm.stats.vm.v_active_countdelta)r   PAGESIZEassertAlmostEqualr-   rK   activer   rI   r   r   r   test_vmem_active  s    z&FreeBSDSystemTestCase.test_vmem_activec                 C   s&   t dt }| jt j|td d S )Nzvm.stats.vm.v_inactive_countr   )r   r   r   r-   rK   inactiver   rI   r   r   r   test_vmem_inactive  s    z(FreeBSDSystemTestCase.test_vmem_inactivec                 C   s&   t dt }| jt j|td d S )Nzvm.stats.vm.v_wire_countr   )r   r   r   r-   rK   wiredr   rI   r   r   r   test_vmem_wired$  s    z%FreeBSDSystemTestCase.test_vmem_wiredc                 C   s&   t dt }| jt j|td d S )Nzvm.stats.vm.v_cache_countr   )r   r   r   r-   rK   cachedr   rI   r   r   r   test_vmem_cached*  s    z&FreeBSDSystemTestCase.test_vmem_cachedc                 C   s&   t dt }| jt j|td d S )Nzvm.stats.vm.v_free_countr   )r   r   r   r-   rK   r?   r   rI   r   r   r   test_vmem_free0  s    z$FreeBSDSystemTestCase.test_vmem_freec                 C   s"   t d}| jt j|td d S )Nzvfs.bufspacer   )r   r   r-   rK   buffersr   rI   r   r   r   test_vmem_buffers6  s    z'FreeBSDSystemTestCase.test_vmem_bufferszmuse not installedc                 C   s   t d}| t j| d S )NZTotal)r   r2   r-   rK   r=   rL   r   r   r   test_muse_vmem_total>  s    z*FreeBSDSystemTestCase.test_muse_vmem_totalc                 C   s"   t d}| jt j|td d S )NZActiver   )r   r   r-   rK   r   r   rL   r   r   r   test_muse_vmem_activeC  s    z+FreeBSDSystemTestCase.test_muse_vmem_activec                 C   s"   t d}| jt j|td d S )NZInactiver   )r   r   r-   rK   r   r   rL   r   r   r   test_muse_vmem_inactiveJ  s    z-FreeBSDSystemTestCase.test_muse_vmem_inactivec                 C   s"   t d}| jt j|td d S )NZWiredr   )r   r   r-   rK   r   r   rL   r   r   r   test_muse_vmem_wiredQ  s    z*FreeBSDSystemTestCase.test_muse_vmem_wiredc                 C   s"   t d}| jt j|td d S )NCacher   )r   r   r-   rK   r   r   rL   r   r   r   test_muse_vmem_cachedX  s    z+FreeBSDSystemTestCase.test_muse_vmem_cachedc                 C   s"   t d}| jt j|td d S )NZFreer   )r   r   r-   rK   r?   r   rL   r   r   r   test_muse_vmem_free_  s    z)FreeBSDSystemTestCase.test_muse_vmem_freec                 C   s"   t d}| jt j|td d S )NZBufferr   )r   r   r-   rK   r   r   rL   r   r   r   test_muse_vmem_buffersf  s    z,FreeBSDSystemTestCase.test_muse_vmem_buffersc                 C   s   | j t jtddd d S )Nzvm.stats.sys.v_swtch  r   )r   r-   	cpu_statsctx_switchesr   r3   r   r   r   test_cpu_stats_ctx_switchesm  s     z1FreeBSDSystemTestCase.test_cpu_stats_ctx_switchesc                 C   s   | j t jtddd d S )Nzvm.stats.sys.v_intrr   r   )r   r-   r   
interruptsr   r   r   r   r   test_cpu_stats_interruptsq  s     z/FreeBSDSystemTestCase.test_cpu_stats_interruptsc                 C   s   | j t jtddd d S )Nzvm.stats.sys.v_softr   r   )r   r-   r   Zsoft_interruptsr   r   r   r   r   test_cpu_stats_soft_interruptsu  s     z4FreeBSDSystemTestCase.test_cpu_stats_soft_interruptsc                 C   s   | j t jtddd d S )Nzvm.stats.sys.v_syscalli@ r   )r   r-   r   Zsyscallsr   r   r   r   r   test_cpu_stats_syscallsy  s     z-FreeBSDSystemTestCase.test_cpu_stats_syscallsc                 C   s(   |   \}}}| jt j|td d S Nr   )r   r   r-   swap_memoryr?   r   r3   r=   r>   r?   r   r   r   test_swapmem_free  s      z'FreeBSDSystemTestCase.test_swapmem_freec                 C   s(   |   \}}}| jt j|td d S r   )r   r   r-   r   r>   r   r   r   r   r   test_swapmem_used  s      z'FreeBSDSystemTestCase.test_swapmem_usedc                 C   s(   |   \}}}| jt j|td d S r   )r   r   r-   r   r=   r   r   r   r   r   test_swapmem_total  s      z(FreeBSDSystemTestCase.test_swapmem_totalc                 C   sL   t d}||dd d  }|d |d }t|}| |t  d S )Nzsysctl kern.boottimez sec =    ,)r   r   r   r2   r-   	boot_time)r3   sZbtimer   r   r   test_boot_time  s
    z$FreeBSDSystemTestCase.test_boot_timez
no batteryc                 C   s   dd }t d}tdd |dD }t }t|d dd	}|d
 }| |j| |dkrt| |j	tj
 n| ||j	| d S )Nc                 S   s(   t | d\}}t |d\}}d||f S )N<   z%d:%02d)divmod)Zsecsmr   hr   r   r   
secs2hours  s    z>FreeBSDSystemTestCase.test_sensors_battery.<locals>.secs2hourszacpiconf -i 0c                 S   s(   g | ] }| d d | d d fqS )	r   rl   )r   )r   xr   r   r   
<listcomp>  s   z>FreeBSDSystemTestCase.test_sensors_battery.<locals>.<listcomp>r   zRemaining capacity:%r*   zRemaining time:unknown)r
   dictr   r-   sensors_batteryr   r+   r2   percentsecsleftZPOWER_TIME_UNLIMITED)r3   r   r   re   Zmetricsr   Zremaining_timer   r   r   test_sensors_battery  s    z*FreeBSDSystemTestCase.test_sensors_batteryc                 C   sl   |  t jtd |  t jtddk t j}|dk rT|  tdd n|  |tdd  d S )Nhw.acpi.battery.lifehw.acpi.acliner   r   hw.acpi.battery.timerl   r   )r2   r-   r   r   r   Zpower_pluggedr   )r3   r   r   r   r   #test_sensors_battery_against_sysctl  s    

z9FreeBSDSystemTestCase.test_sensors_battery_against_sysctlzhas batteryc              	   C   s@   |  t td td td W 5 Q R X | t  d S )Nr   r   r   )assertRaisesrR   r   ZassertIsNoner-   r   r   r   r   r   test_sensors_battery_no_battery  s
    z5FreeBSDSystemTestCase.test_sensors_battery_no_batteryc              	   C   s   t d}t|D ]}d| }zttt|d d }W n tk
rX   | d Y nX | jt 	 d | j
|dd d| }ttt|d d }| t 	 d | j| qd S )	NTzdev.cpu.%s.temperaturerl   z$temperatures not supported by kernelZcoretemprb   r   zdev.cpu.%s.coretemp.tjmax)r-   rH   ranger   r   r   rR   r   r   Zsensors_temperaturesr   r2   high)r3   Znum_cpuscpur   r   r   r   r   (test_sensors_temperatures_against_sysctl  s$    
 z>FreeBSDSystemTestCase.test_sensors_temperatures_against_sysctlN)$rX   rY   rZ   staticmethodr   r   r	   r   r   r   r   r   r   r]   r^   MUSE_AVAILABLEr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sf   








	



r   zOPENBSD onlyc                   @   s   e Zd Zdd ZdS )OpenBSDTestCasec                 C   s6   t d}tj|d}tjt }| || d S )Nzkern.boottimez%a %b %d %H:%M:%S %Y)r   datetimestrptimefromtimestampr-   r   r2   )r3   r   Zsys_btZ	psutil_btr   r   r   r     s    zOpenBSDTestCase.test_boot_timeN)rX   rY   rZ   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 )NetBSDTestCasec              
   C   s^   t dd>}|D ]2}|| rt| d d   W  5 Q R  S qW 5 Q R X td|  d S )Nz/proc/meminfortr   r8   zcan't find %s)openr   r   r   r   )Zlook_forfr    r   r   r   parse_meminfo  s
    
0zNetBSDTestCase.parse_meminfoc                 C   s   |  t j| d d S )Nz	MemTotal:)r2   r-   rK   r=   r   r   r   r   r   test_vmem_total  s     zNetBSDTestCase.test_vmem_totalc                 C   s    | j t j| dtd d S )NzMemFree:r   )r   r-   rK   r?   r   r   r   r   r   r   r     s
     zNetBSDTestCase.test_vmem_freec                 C   s    | j t j| dtd d S )NzBuffers:r   )r   r-   rK   r   r   r   r   r   r   r   r     s
     z NetBSDTestCase.test_vmem_buffersc                 C   s    | j t j| dtd d S )Nz
MemShared:r   )r   r-   rK   Zsharedr   r   r   r   r   r   test_vmem_shared  s
     zNetBSDTestCase.test_vmem_sharedc                 C   s    | j t j| dtd d S )Nz
SwapTotal:r   )r   r-   r   r=   r   r   r   r   r   r   r     s
     z!NetBSDTestCase.test_swapmem_totalc                 C   s    | j t j| dtd d S )Nz	SwapFree:r   )r   r-   r   r?   r   r   r   r   r   r   r     s
     z NetBSDTestCase.test_swapmem_freec                 C   s"   t  }| |j|j|j  d S r"   )r-   r   r2   r>   r=   r?   )r3   Zsmemr   r   r   r     s    z NetBSDTestCase.test_swapmem_usedc              	   C   s`   t dd6}|D ]"}|drt| d } q<qtdW 5 Q R X | jt j|dd d S )N
/proc/statrbs   intrr   couldn't find liner   r   )	r   r   r   r   r   r   r-   r   r   )r3   r   r    r   r   r   r   r     s    
  z(NetBSDTestCase.test_cpu_stats_interruptsc              	   C   s`   t dd6}|D ]"}|drt| d } q<qtdW 5 Q R X | jt j|dd d S )Nr   r   s   ctxtr   r   r   r   )	r   r   r   r   r   r   r-   r   r   )r3   r   r    r   r   r   r   r   *  s    
  z*NetBSDTestCase.test_cpu_stats_ctx_switchesN)rX   rY   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   
r   __main__)run_from_name)%r[   r   osrS   r/   r]   r-   r   r   r   r   Zpsutil.testsr   r   r   r	   r
   r   r   r   Zpsutil._psutil_posixr   r   getuidr   r   r   r^   r!   r_   r   r   r   rX   Zpsutil.tests.runnerr   __file__r   r   r   r   <module>
   sP   KY rB
