<!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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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 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( 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- G d"d# d#e-j.Z/e0d$kre(e1 dS )%zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)long)APPVEYOR)ASCII_FS)check_net_address)DEVNULL)enum)get_test_subprocess)HAS_BATTERY)HAS_CPU_FREQ)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)mock)reap_children)retry_before_failing)run_test_module_by_name)safe_rmpath)TESTFN)TESTFN_UNICODE)TRAVIS)unittestc               @   sB  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
eje d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/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'dEdF Z(dGdH Z)eje*dIdJdK Z+eje,o\e-j.j/dL dMeje0ote1j2 dNkdOdPdQ Z3dRdS Z4eje0pe*oe1j5  dTdUdV Z6dWdX Z7eje8 dYdZd[ Z9d\d] Z:eje; d^d_d` Z<eje; d^dadb Z=eje> d^eje? dcddde Z@ejeA d^dfdg ZBdNS )hTestSystemAPIszTests for system-related APIs.c             C   s   t t d S )N)r   r   )self r#   #/usr/lib64/python3.6/test_system.pysetUp>   s    zTestSystemAPIs.setUpc             C   s
   t   d S )N)r   )r"   r#   r#   r$   tearDownA   s    zTestSystemAPIs.tearDownc             C   s   | j tj dd tj D  t }| j |jdd tj D  tj|j}|j  |j	  | j
|jdd tj D  tjdtjtj d | jttj g  W d Q R X tjdtjtj d* | jtj ttj  W d Q R X W d Q R X d S )Nc             S   s   g | ]
}|j qS r#   )pid).0xr#   r#   r$   
<listcomp>E   s    z4TestSystemAPIs.test_process_iter.<locals>.<listcomp>c             S   s   g | ]
}|j qS r#   )r'   )r(   r)   r#   r#   r$   r*   G   s    c             S   s   g | ]
}|j qS r#   )r'   )r(   r)   r#   r#   r$   r*   K   s    zpsutil.Process)side_effect)assertInosgetpidpsutilprocess_iterr   r'   ProcesskillwaitassertNotInr   patchZNoSuchProcessassertEquallistAccessDeniedassertRaises)r"   sprocpr#   r#   r$   test_process_iterD   s    z TestSystemAPIs.test_process_iterc             C   s8  x.t jdgdD ]}| jt|jj dg qW | jt tt jdgd W d Q R X tj	dt j
dddL}x:t jddgdD ]&}| j|jd  | j|jd d qW |jstW d Q R X tj	dt j
dddX}t }x>t jddg|d	D ](}| j|jd | | j|jd d qW |js*tW d Q R X d S )
Nr'   )attrsZfooz$psutil._psplatform.Process.cpu_timesr    )r+   	cpu_times)r=   Zad_value)r/   r0   r6   r7   infokeysr9   
ValueErrorr   r5   r8   assertIsNoneassertGreaterEqualcalledAssertionErrorobjectassertIs)r"   r;   mflagr#   r#   r$   test_prcess_iter_w_paramsU   s$    z(TestSystemAPIs.test_prcess_iter_w_paramsc                s   fdd}g  t  }t  }t  }dd |||fD }jttj|dd jttj|dd tj }tj|d|d	\}}jtj | d
 j|g  jt	|d j g  x|D ]}	j
t|	d qW tdfdd}
|j  |
||\}}j|jdd |D  tr4j|j jtj  nj|j jd j |jg x|D ]}	j
t|	d q\W tdfdd}
|j  |j  |
||\}}jt t|j|j|jg x|D ]}	jt|	d qW d S )Nc                s    j | j d S )N)appendr'   )r;   )pidsr#   r$   callbackj   s    z0TestSystemAPIs.test_wait_procs.<locals>.callbackc             S   s   g | ]}t j|jqS r#   )r/   r1   r'   )r(   r)   r#   r#   r$   r*   q   s    z2TestSystemAPIs.test_wait_procs.<locals>.<listcomp>   )timeout)rN   g{Gz?)rP   rN   g      ?   
returncode   c                s<   t j| d|d\}} jt|d  jt|d ||fS )NgQ?)rP   rN   rO      )r/   
wait_procsr6   len)procsrN   gonealive)r"   r#   r$   test~   s
    z,TestSystemAPIs.test_wait_procs.<locals>.testc             S   s   g | ]
}|j qS r#   )r'   )r(   r)   r#   r#   r$   r*      s    c                s<   t j| d|d\}} jt|d  jt|d ||fS )NgQ?)rP   rN   rQ   r   )r/   rU   r6   rV   )rW   rN   rX   rY   )r"   r#   r$   rZ      s
    )r   r9   rB   r/   rU   	TypeErrortime
assertLessr6   rV   assertFalsehasattrr   	terminater,   r'   r	   poprR   signalSIGTERMset
assertTrue)r"   rN   sproc1sproc2sproc3rW   trX   rY   r;   rZ   r#   )rM   r"   r$   test_wait_procsi   sB    

 
zTestSystemAPIs.test_wait_procsc             C   sN   t  }t  }t  }dd |||fD }x|D ]}|j  q,W tj|\}}d S )Nc             S   s   g | ]}t j|jqS r#   )r/   r1   r'   )r(   r)   r#   r#   r$   r*      s    z=TestSystemAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r   ra   r/   rU   )r"   rg   rh   ri   rW   r;   rX   rY   r#   r#   r$   test_wait_procs_no_timeout   s    
z)TestSystemAPIs.test_wait_procs_no_timeoutc             C   s4   t j }| j|t | j|d | j|tj  d S )Nr   )r/   Z	boot_timeassertIsInstancefloatassertGreaterr^   r]   )r"   Zbtr#   r#   r$   test_boot_time   s    zTestSystemAPIs.test_boot_timez
POSIX onlyc             C   s"   dd l }| jtjd|j  d S )Nr   SC_PAGE_SIZE)resourcer6   r-   sysconfZgetpagesize)r"   rr   r#   r#   r$   test_PAGESIZE   s    zTestSystemAPIs.test_PAGESIZEc             C   s   t j }|jdkst||jdks,t|d|j  ko@dkn  sNt||jdks`t||jdksrt|xt|jD ]j}t	||}|dkr| j
|ttf |dkrz|dks| jd||f  ||jkrz| jd||j||f  qzW d S )Nr   d   percenttotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r/   Zvirtual_memoryrw   rF   Z	availablerv   usedfree_fieldsgetattrrm   intr   fail)r"   memnamevaluer#   r#   r$   test_virtual_memory   s     "

z"TestSystemAPIs.test_virtual_memoryc             C   s   t j }| j|jd	 |jdks(t||jdks:t||jdkrX|jdksjt|n|jdksjt|d|j  ko~dkn  st||j	dkst||j
dkst|d S )
Nrw   rx   ry   rv   sinsoutr   ru   )rw   rx   ry   rv   r   r   )r/   Zswap_memoryr6   rz   rw   rF   rx   ry   rv   r   r   )r"   r~   r#   r#   r$   test_swap_memory   s    

"zTestSystemAPIs.test_swap_memoryc             C   st   t  }| jtj|j tj|j}|j  |j  | jtj|j | jtjd | j	tjddtj
 k d S )NrO   r   r[   )r   rf   r/   
pid_existsr'   r1   r2   r3   r_   r6   rM   )r"   r:   r;   r#   r#   r$   test_pid_exists   s    zTestSystemAPIs.test_pid_existsc             C   s   t   tj }xT|D ]L}ytj|s(tW q tk
r^   tjd |tj krZ| j| Y qX qW tt	|d t	|d }x |D ]}| j
tj||d qW d S )Ng?i  ip  )msg)r   r/   rM   r   rF   r]   sleepr}   rangemaxr_   )r"   rM   r'   r#   r#   r$   test_pid_exists_2   s    


z TestSystemAPIs.test_pid_exists_2c             C   sJ   dd t j D }t j }| j|j |j  | jt|tt| d S )Nc             S   s   g | ]
}|j qS r#   )r'   )r(   r)   r#   r#   r$   r*      s    z,TestSystemAPIs.test_pids.<locals>.<listcomp>)r/   r0   rM   r6   sortrV   re   )r"   ZplistZpidlistr#   r#   r$   	test_pids   s    zTestSystemAPIs.test_pidsc             C   s&   t j}tt _ztj  W d |t _X d S )N)sysstdoutr   r/   rZ   )r"   r   r#   r#   r$   	test_test   s
    zTestSystemAPIs.test_testc          
   C   s   t j }| j|tt jdd | j|d tjjdrft	d}|j
 }W d Q R X d|krftjdt jdd}| j|d | j|| d S )	NT)percpurO   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical idF)logical)r/   	cpu_countr6   rV   r?   rD   r-   pathexistsopenreadr    ZSkipTest)r"   r   fdZcpuinfo_dataZphysicalr#   r#   r$   test_cpu_count  s    

zTestSystemAPIs.test_cpu_countc             C   sz   xtd	D ]l}t jd|d}| jtj  |js2tW d Q R X t jd|d"}| jtjdd |jshtW d Q R X qW d S )
NrO   r   z$psutil._psplatform.cpu_count_logical)return_valuez%psutil._psplatform.cpu_count_physicalF)r   r[   )r[   r   N)r   r5   rC   r/   r   rE   rF   )r"   valrI   r#   r#   r$   test_cpu_count_none  s    


z"TestSystemAPIs.test_cpu_count_nonec             C   s^   d}t j }t| x,|D ]$}| j|t | j|d ||7 }qW | j|t| t| d S )Nr   g        )r/   r?   sumrm   rn   rD   r6   str)r"   rw   timescp_timer#   r#   r$   test_cpu_times  s    
zTestSystemAPIs.test_cpu_timesc             C   sD   t tj }tjd t tj }|| }|dks@| jd|  d S )Ng?g?zdifference %s)r   r/   r?   r]   r   r}   )r"   t1t2
differencer#   r#   r$   test_cpu_times_time_increases:  s    
z,TestSystemAPIs.test_cpu_times_time_increasesc             C   s   xft jddD ]V}d}t| x,|D ]$}| j|t | j|d ||7 }q$W | j|t| t| qW | jtt jddd tt jdd d S )NT)r   r   g        F)	r/   r?   r   rm   rn   rD   r6   r   rV   )r"   r   rw   r   r#   r#   r$   test_per_cpu_timesC  s    
z!TestSystemAPIs.test_per_cpu_timesc             C   s   t jdd}tj d }xtj |krP qW t jdd}x<t||D ].\}}t|t| }}|| }|dkrDd S qDW | j  d S )NT)r   g?g?)r/   r?   r]   zipr   r}   )r"   Ztot1Zstop_atZtot2r   r   r   r#   r#   r$   test_per_cpu_times_2d  s    z#TestSystemAPIs.test_per_cpu_times_2c             C   s\   t j }t jdd}|jdd t| D }x*|jD ] }| jt||t||dd q4W d S )NT)r   c             S   s   g | ]}t |qS r#   )r   )r(   Znumr#   r#   r$   r*   y  s    z<TestSystemAPIs.test_cpu_times_comparison.<locals>.<listcomp>rO   )delta)r/   r?   _maker   rz   assertAlmostEqualr{   )r"   baseZper_cpuZsummed_valuesZfieldr#   r#   r$   test_cpu_times_comparisont  s    z(TestSystemAPIs.test_cpu_times_comparisonc             C   s   y<| j |t | j|d | j|d | j|dtj   W n@ tk
r| } z$td|tj	|tj	|f W Y d d }~X nX d S )Ng        g      Y@z
%s
last=%s
new=%sg       )
rm   rn   rD   ZassertIsNotassertLessEqualr/   r   rF   pprintZpformat)r"   rv   Zlast_retZnew_reterrr#   r#   r$   _test_cpu_percent~  s    z TestSystemAPIs._test_cpu_percentc          
   C   sb   t jdd}x.tdD ]"}t jd d}| j||| |}qW | jt t jdd W d Q R X d S )NgMbP?)intervalru   rO   r[   )r/   cpu_percentr   r   r9   rB   )r"   lastr)   newr#   r#   r$   test_cpu_percent  s    zTestSystemAPIs.test_cpu_percentc             C   s   t jddd}| jt|t j  x>tdD ]2}t jd dd}x|D ]}| j||| qDW |}q,W | jt t jddd W d Q R X d S )NgMbP?T)r   r   ru   rO   r[   )	r/   r   r6   rV   r   r   r   r9   rB   )r"   r   r)   r   rv   r#   r#   r$   test_per_cpu_percent  s    
z#TestSystemAPIs.test_per_cpu_percentc             C   s`   t jdd}xNtdD ]B}t jd d}x|D ]}| j||| q,W | jt||| |}qW d S )NgMbP?)r   ru   )r/   cpu_times_percentr   r   r   )r"   r   r)   r   rv   r#   r#   r$   test_cpu_times_percent  s    
z%TestSystemAPIs.test_cpu_times_percentc             C   s   t jddd}| jt|t j  x^tdD ]R}t jd dd}x:|D ]2}x|D ]}| j||| qNW | jt||| qDW |}q,W d S )NgMbP?T)r   r   ru   )r/   r   r6   rV   r   r   r   r   )r"   r   r)   r   cpurv   r#   r#   r$   test_per_cpu_times_percent  s    

z)TestSystemAPIs.test_per_cpu_times_percentc             C   sr   t jdd dd t jddD }tjd|d8 x0t jddD ] }x|D ]}| j|d d  qJW q@W W d Q R X d S )NT)r   c             S   s*   g | ]"}|j d d tt|jD qS )c             S   s   g | ]}d qS )r   r#   )r(   r)   r#   r#   r$   r*     s    zQTestSystemAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)r   r   rV   rz   )r(   r)   r#   r#   r$   r*     s   zFTestSystemAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_times)r   )r/   r   r?   r   r5   r   )r"   Z
zero_timesr   rv   r#   r#   r$   #test_per_cpu_times_percent_negative  s    
z2TestSystemAPIs.test_per_cpu_times_percent_negativec          
   C   s2  t jtj }| j|jd |jdks.t||jdks@t||j	dksRt||j|jksft||j|j	kszt|d|j
  kodkn  st|j
ttd rtjtj }d}| j|j|j | j|j	|j	|d
 | j|j|j|d
 tj }| jt}t j| W d Q R X | j|jjtj d S )Nrw   rx   ry   rv   r   ru   
disk_usage   i   )r   )rw   rx   ry   rv   i   i  P )r/   r   r-   getcwdr6   rz   rw   rF   rx   ry   rv   r`   shutilr   tempfileZmktempr9   OSErrorZ	exceptionerrnoENOENT)r"   ZusageZshutil_usageZ	toleranceZfnameexcr#   r#   r$   test_disk_usage  s(    $zTestSystemAPIs.test_disk_usagec          	   C   s(   t r$| jt tjt W d Q R X d S )N)r   r9   UnicodeEncodeErrorr/   r   r   )r"   r#   r#   r$   test_disk_usage_unicode  s    z&TestSystemAPIs.test_disk_usage_unicodec             C   s   t jd d S )N   .)r/   r   )r"   r#   r#   r$   test_disk_usage_bytes  s    z$TestSystemAPIs.test_disk_usage_bytesc             C   s  t jdd}| j||d x|D ]}| j|jt | j|jt | j|jt | j|jt t	rld|jkrlq t
stjj|jst|n|j tstrtjj|jst|ntjj|jst||js t|q W t jdd}| j||d xt jddD ]}t	sytj|j W nX tk
rp } z:trJtrJ|jtjkrJ w|jtjtjfkr` W Y d d }~X n@X ts~trtjj|jst|ntjj|jst|| j|jt | j|jt  qW dd }|t}dd	 t jddD }| j|| t j| d S )
NF)all)r   ZcdromTc             S   s2   t jj| } xt jj| s(t jj| } qW | j S )N)r-   r   abspathismountdirnamelower)r   r#   r#   r$   find_mount_point  s    z=TestSystemAPIs.test_disk_partitions.<locals>.find_mount_pointc             S   s   g | ]}|j j qS r#   )
mountpointr   )r(   r)   r#   r#   r$   r*     s    z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>)r/   Zdisk_partitionsrf   rm   Zdevicer   r   ZfstypeZoptsr   r	   r-   r   r   rF   r
   r   isdirstatr   r   r   ZEIOZEPERMZEACCES__file__r,   r   )r"   lsZdiskr   r   ZmountZmountsr#   r#   r$   test_disk_partitions  sL    
z#TestSystemAPIs.test_disk_partitionsc                sl    fdd}t jdd}|| t jdd} j|g  x.|D ]&} j|  j|t |||  q>W d S )Nc                s(   j | d | j  j | d | j  j | d | j  j | d | j  j | d | j  j | d | j  j | d | j  j | d | j | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdkst	| | jdks$t	| d S )	Nr   rO   rT   rQ      r         )
r6   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrF   )nt)r"   r#   r$   check_ntuple  s     z9TestSystemAPIs.test_net_io_counters.<locals>.check_ntupleF)pernicT)r/   net_io_countersassertNotEqualrf   rm   r   )r"   r   retkeyr#   )r"   r$   test_net_io_counters  s    

z#TestSystemAPIs.test_net_io_countersc             C   sN   t jdi d6}| jtjdd | jtjddi  |js@tW d Q R X d S )Nz"psutil._psplatform.net_io_counters)r   F)r   T)r   r5   rC   r/   r   r6   rE   rF   )r"   rI   r#   r#   r$   test_net_io_counters_no_nics8  s
    
z+TestSystemAPIs.test_net_io_counters_no_nicsc             C   st  t j }|st|t j }ttjtjt jg}x|j	 D ]\}}| j
|t | jtt|t| x|D ]}| j
|jt | j
|jt | j
|jttd f | j
|jttd f | j|j| tjdkr| j
|jtj || jr|jtjkr6tj|j}tj| |j|jdf W d Q R X nj|jtjkrtj|jdtjtjdtjd }|\}	}
}}}tj|	|
|}tj| |j| W d Q R X xB|j|j|j|j fD ]*}|d k	r|jtjkrt!||j qW |jr| j"|j  qr|j rr| j"|j qrW q<W t#s&t$s&t%rDt&tdrp| jt jtj n,t'r\| jt jtj( nt)rp| jt jd d S )NrQ   r   r   AF_LINKrO   )rQ   r   r[   )*r/   net_if_addrsrF   net_if_statsre   socketZAF_INETZAF_INET6r   itemsrm   r   r6   rV   Zfamilyr|   addressZnetmasktypeZ	broadcastr,   r   version_infor   IntEnumisup
contextlibclosingZbindZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEZptpr   rC   r   r   r
   r`   r   Z	AF_PACKETr   )r"   nicsZ	nic_statsZfamiliesZnicZaddrsaddrsr@   ZafZsocktypeprotoZ	canonnameZsaZipr#   r#   r$   test_net_if_addrsA  sX    


z TestSystemAPIs.test_net_if_addrsc          
   C   sz   t rdtjdd d d fg}ndg}tjd|dB}tj d d }|jsJtt r^| j|j	d n| j|j	d	 W d Q R X d S )Nem1z06:3d:29rO   06-3d-29zpsutil._psplatform.net_if_addrs)r   r   z06:3d:29:00:00:00z06-3d-29-00-00-00r[   )r   r[   r   NNN)
r	   r/   r   r   r5   r   rE   rF   r6   r   )r"   r   rI   r   r#   r#   r$    test_net_if_addrs_mac_null_bytes}  s    

z/TestSystemAPIs.test_net_if_addrs_mac_null_byteszunreliable on TRAVISc       	      C   s   t j }|st|t jt jt jf}xh|j D ]\\}}| j|t |\}}}}| j|t	 | j
|| | j
|| | j|d | j|d q.W d S )Nr   )r/   r   rF   ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr   rm   r   boolr,   rD   )	r"   r   Zall_duplexesr   Zstatsr   ZduplexZspeedZmtur#   r#   r$   test_net_if_stats  s    z TestSystemAPIs.test_net_if_statsz/proc/diskstatsz3/proc/diskstats not available on this linux versionNzunreliable on APPVEYORc                s    fdd}t jdd}|d k	s(td|| t jdd} jt|tt| xb|D ]Z}|sjt||||  trZ|d j rZx|d	 j r|d d
 }qW  j||j	  qZW d S )Nc                s    j | d | j  j | d | j  j | d | j  j | d | j tpNtsƈ j | d | j  j | d | j t	r j | d | j
  j | d | j  j | d	 | j ntrƈ j | d | j x$| jD ]}t| |dkst| qW d S )
Nr   rO   rT   rQ   r   r   r   r      )r6   Z
read_countZwrite_countZ
read_bytesZwrite_bytesr   r   Z	read_timeZ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   rz   r{   rF   )r   r   )r"   r#   r$   r     s    z:TestSystemAPIs.test_disk_io_counters.<locals>.check_ntupleF)perdiskzno disks on this system?TrO   r[   r[   r[   )
r/   disk_io_countersrF   r6   rV   re   r   isdigitr4   rA   )r"   r   r   r   r#   )r"   r$   test_disk_io_counters  s    
z$TestSystemAPIs.test_disk_io_countersc             C   sN   t jdi d6}| jtjdd | jtjddi  |js@tW d Q R X d S )Nz#psutil._psplatform.disk_io_counters)r   F)r   T)r   r5   rC   r/   r   r6   rE   rF   )r"   rI   r#   r#   r$   test_disk_io_counters_no_disks  s
    
z-TestSystemAPIs.test_disk_io_counters_no_disksz unreliable on APPVEYOR or TRAVISc             C   s   t j }| j|g  x|D ]}|js,t|| j|jt | j|jttd f |j	d k	rp| j|j	ttd f |j |j	 |j
dkst|tjj|j
 tstr| j|j qt j|j qW d S )Ng        )r/   usersr   r   rF   rm   r   Zterminalr   hostZstarteddatetimeZfromtimestampr   r   rC   r'   r1   )r"   r   userr#   r#   r$   
test_users  s    

zTestSystemAPIs.test_usersc             C   sZ   t j }| j|jd x>|jD ]4}t||}| j|d t r|dkr| j|d qW d S )Nctx_switches
interruptssoft_interruptssyscallsr   )r  r  r  r  )r  r  )r/   Z	cpu_statsr6   rz   r{   rD   r   ro   )r"   Zinfosr   r   r#   r#   r$   test_cpu_stats  s    
zTestSystemAPIs.test_cpu_statsznot suportedc                s`    fdd}t jdd}tr&| r&d S |s2t||t jddg tr\ jt|t j  d S )Nc                sh   xb| D ]Z} j |jd  j|j|j x6|jD ],}t||} j|ttt	f  j
|d q0W qW d S )Ncurrentminr   r   )r	  r
  r   )r6   rz   r   r	  r   r{   rm   r|   r   rn   rD   )r   r   r   r   )r"   r#   r$   check_ls  s    

z.TestSystemAPIs.test_cpu_freq.<locals>.check_lsT)r   F)r/   Zcpu_freqr   rF   r   r6   rV   r   )r"   r  r   r#   )r"   r$   test_cpu_freq  s    	
zTestSystemAPIs.test_cpu_freqc          	   C   s  ddddddddd	g	}x"|D ]}| j tt|t|d
 qW tjdkrJtjsPttj s\t|j	d dt
jj krtjs~t|j	d ndt
jj krtjst| jtjtjtjgjdd |j	d |j	d |j	d |j	d n^dt
jj ks
dt
jj kr"tjst|j	d	 n&dt
jj krntjs>t|j	d n$tjsVttj sdt|j	d x$|D ]}| jtt|d|d
 qtW d S )Nr	   r   r   r   r   r   r   r   r
   )r   posixlinuxZbsdTrO   sunossolarisdarwinF)rm   r{   r/   r   r-   r   r	   rF   r   remover   platformr   r   r   r6   r   r   r   countr
   r   rH   )r"   namesr   r#   r#   r$   test_os_constants  s>    










z TestSystemAPIs.test_os_constantsznot supportedc             C   s   t j }x|j D ]x\}}| j|t xb|D ]Z}| j|jt |jd k	rV| j|jd |jd k	rn| j|jd |j	d k	r,| j|j	d q,W qW d S )Nr   )
r/   sensors_temperaturesr   rm   r   labelr	  rD   highcritical)r"   tempsr   entriesentryr#   r#   r$   test_sensors_temperatures)  s    



z(TestSystemAPIs.test_sensors_temperaturesc          
   C   sp   ddgi}t jd|dN}tjdd	d d
 }|js8t| j|jd | j|jd | j|j	d W d Q R X d S )NZcoretempr        I@      N@     Q@z'psutil._psplatform.sensors_temperatures)r   T)Z
fahrenheitr   g     ^@g     a@g     c@)r  r  r   r!  )
r   r5   r/   r  rE   rF   r6   r	  r  r  )r"   drI   r  r#   r#   r$   #test_sensors_temperatures_fahreneit7  s    


z2TestSystemAPIs.test_sensors_temperatures_fahreneitz
no batteryc             C   sp   t j }| j|jd | j|jd |jt jt jfkrF| j|jd n|jt jkr^| j|j	 | j
|j	t d S )Nr   ru   )r/   Zsensors_batteryrD   rv   r   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrf   Zpower_pluggedrm   r   )r"   r   r#   r#   r$   test_sensors_batteryC  s    
z#TestSystemAPIs.test_sensors_batteryc             C   sj   t j }x\|j D ]P\}}| j|t x:|D ]2}| j|jt | j|jttf | j	|jd q,W qW d S )Nr   )
r/   Zsensors_fansr   rm   r   r  r	  r|   r   rD   )r"   Zfansr   r  r  r#   r#   r$   test_sensors_fansQ  s    
z TestSystemAPIs.test_sensors_fans)C__name__
__module____qualname____doc__r%   r&   r<   rK   rk   rl   rp   r    ZskipIfr	   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r   r   r   r/   r   r   r   r   r  r  r   r  r  r   r  r#  r   r   r$  r   r%  r#   r#   r#   r$   r!   ;   sh   7	
		!

		
>	<#
%r!   __main__)2r)  r   r  r   r-   r   r   rc   r   r   r   r]   r/   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._compatr   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    ZTestCaser!   r&  r   r#   r#   r#   r$   <module>   sh         '
