B
    çÚ†\×‰  ã               @   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- dd"lm.Z. G d#d$„ d$e.j/ƒZ0e1d%kre)e2ƒ dS )&zTests for system APIS.é    N)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Úlong)ÚAPPVEYOR)ÚASCII_FS)Úcheck_net_address)ÚDEVNULL)Úenum)Úget_test_subprocess)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_NET_IO_COUNTERS)Ú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               @   s€  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 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%e e& dA¡dBdC„ ƒZ'e e& dA¡dDdE„ ƒZ(dFdG„ Z)dHdI„ Z*e e+dJ¡dKdL„ ƒZ,e e-pte.pte/ dM¡dNdO„ ƒZ0e e-oše1j2 3dP¡ dQ¡e e4o²e5 6¡ dRkdS¡dTdU„ ƒƒZ7dVdW„ Z8e e4pâe+oâe5 9¡  dX¡dYdZ„ ƒZ:d[d\„ Z;e e< d]¡d^d_„ ƒZ=d`da„ Z>e e? dA¡dbdc„ ƒZ@e e? dA¡ddde„ ƒZAe eB dA¡e eC df¡dgdh„ ƒƒZDe eE dA¡didj„ ƒZFdRS )kÚTestSystemAPIszTests for system-related APIs.c             C   s   t tƒ d S )N)r   r   )Úself© r$   ú7lib/python3.7/site-packages/psutil/tests/test_system.pyÚsetUp@   s    zTestSystemAPIs.setUpc             C   s
   t ƒ  d S )N)r   )r#   r$   r$   r%   ÚtearDownC   s    zTestSystemAPIs.tearDownc          
   C   sü   |   t ¡ dd„ t ¡ D ƒ¡ tƒ }|   |jdd„ t ¡ D ƒ¡ t |j¡}| ¡  | 	¡  |  
|jdd„ t ¡ D ƒ¡ tjdt t ¡ ¡d |  tt ¡ ƒg ¡ W d Q R X tjdt t ¡ ¡d* |  tj¡ tt ¡ ƒ 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>G   s    z4TestSystemAPIs.test_process_iter.<locals>.<listcomp>c             S   s   g | ]
}|j ‘qS r$   )r(   )r)   r*   r$   r$   r%   r+   I   s    c             S   s   g | ]
}|j ‘qS r$   )r(   )r)   r*   r$   r$   r%   r+   M   s    zpsutil.Process)Úside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterr   r(   ÚProcessÚkillÚwaitZassertNotInr   ÚpatchZNoSuchProcessÚassertEqualÚlistÚAccessDeniedÚassertRaises)r#   ÚsprocÚpr$   r$   r%   Útest_process_iterF   s    z TestSystemAPIs.test_process_iterc          	   C   s8  x.t jdgdD ]}|  t|j ¡ ƒdg¡ qW |  t¡ tt jdgdƒ W d Q R X tj	dt  
dd¡dL}x:t jddgdD ]&}|  |jd ¡ |  |jd d¡ q‚W |js¶t‚W d Q R X tj	dt  
dd¡dX}tƒ }x>t jddg|d	D ](}|  |jd |¡ |  |jd d¡ qòW |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)r0   r1   r6   r7   ÚinfoÚkeysr9   Ú
ValueErrorr   r5   r8   ÚassertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectÚassertIs)r#   r;   ÚmÚflagr$   r$   r%   Útest_prcess_iter_w_paramsW   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 ¡ }tj|d	|d
\}}ˆ t ¡ | d¡ ˆ |g ¡ ˆ t	|ƒd¡ ˆ ˆ g ¡ x|D ]}	ˆ 
t|	dƒ¡ q¼W tdƒ‡fdd„ƒ}
| ¡  |
||ƒ\}}ˆ |jdd„ |D ƒ¡ tr4ˆ | ¡ jtj ¡ nˆ | ¡ jd¡ ˆ ˆ |jg¡ x|D ]}	ˆ 
t|	dƒ¡ q\W tdƒ‡fdd„ƒ}
| ¡  | ¡  |
||ƒ\}}ˆ tˆ ƒt|j|j|jgƒ¡ x|D ]}	ˆ t|	dƒ¡ qÎW d S )Nc                s   ˆ   | j¡ d S )N)Úappendr(   )r;   )Úpidsr$   r%   Úcallbackl   s    z0TestSystemAPIs.test_wait_procs.<locals>.callbackc             S   s   g | ]}t  |j¡‘qS r$   )r0   r2   r(   )r)   r*   r$   r$   r%   r+   s   s    z2TestSystemAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rN   g{®Gáz„?)rP   rN   g      à?é   Ú
returncodeé   c                s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Ng¸…ëQ¸ž?)rP   rN   rQ   é   )r0   Ú
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\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Ng¸…ëQ¸ž?)rP   rN   rR   r   )r0   rV   r6   rW   )rX   rN   rY   rZ   )r#   r$   r%   r[   “   s
    )r   r9   rB   r0   rV   Ú	TypeErrorÚtimeÚ
assertLessr6   rW   ÚassertFalseÚhasattrr   Ú	terminater-   r(   r	   ÚpoprS   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r#   rN   Úsproc1Úsproc2Úsproc3rX   ÚtrY   rZ   r;   r[   r$   )rM   r#   r%   Útest_wait_procsk   sB    

 
zTestSystemAPIs.test_wait_procsc             C   sN   t ƒ }t ƒ }t ƒ }dd„ |||fD ƒ}x|D ]}| ¡  q,W t |¡\}}d S )Nc             S   s   g | ]}t  |j¡‘qS r$   )r0   r2   r(   )r)   r*   r$   r$   r%   r+   ¦   s    z=TestSystemAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r   ra   r0   rV   )r#   rg   rh   ri   rX   r;   rY   rZ   r$   r$   r%   Útest_wait_procs_no_timeout¢   s    
z)TestSystemAPIs.test_wait_procs_no_timeoutc             C   s4   t  ¡ }|  |t¡ |  |d¡ |  |t ¡ ¡ d S )Nr   )r0   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 }|  t d¡| ¡ ¡ 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dkst|ƒ‚|jdks,t|ƒ‚d|j  krBdksLn t|ƒ‚|jdks^t|ƒ‚|jdkspt|ƒ‚xt|jD ]j}t	||ƒ}|dkrž|  
|ttf¡ |dkrx|dksÀ|  d||f ¡ ||jkrx|  d||j||f ¡ qxW d S )Nr   éd   ÚpercentÚtotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r0   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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r€dksŠn t|ƒ‚|j	dksœt|ƒ‚|j
dks®t|ƒ‚d S )N)rw   rx   ry   rv   ÚsinÚsoutr   ru   )r0   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 ƒ }|  t |j¡¡ t |j¡}| ¡  | ¡  |  t |j¡¡ |  t d¡¡ |  	t d¡dt 
¡ k¡ d S )NrO   r   )r   rf   r0   Ú
pid_existsr(   r2   r3   r4   r_   r6   rM   )r#   r:   r;   r$   r$   r%   Útest_pid_existsÛ   s    zTestSystemAPIs.test_pid_existsc          	   C   s¤   t ƒ  t ¡ }xT|D ]L}yt |¡s(t‚W q tk
r^   t d¡ |t ¡ krZ|  |¡ Y qX qW tt	|ƒd t	|ƒd ƒ}x |D ]}| j
t |¡|d q„W d S )Ngš™™™™™¹?iˆ  ip  )Úmsg)r   r0   rM   r…   rF   r]   Zsleepr}   ÚrangeÚmaxr_   )r#   rM   r(   r$   r$   r%   Útest_pid_exists_2å   s    


z TestSystemAPIs.test_pid_exists_2c             C   s>   t  ¡ }dd„ t  ¡ D ƒ}|  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>)r0   rM   r1   r6   Úsortedre   )r#   ZpidslistZ	procslistr$   r$   r%   Ú	test_pidsõ   s    zTestSystemAPIs.test_pidsc             C   s&   t j}tt _zt ¡  W d |t _X d S )N)ÚsysÚstdoutr   r0   r[   )r#   rŽ   r$   r$   r%   Ú	test_testü   s
    zTestSystemAPIs.test_testc          	   C   s²   t  ¡ }|  |tt jddƒ¡ |  |d¡ tj d¡rft	dƒ}| 
¡ }W d Q R X d|krft d¡‚t jdd}tr–t ¡ d d	… d
kr–|  |¡ n|  |d¡ |  ||¡ d S )NT)ÚpercpurQ   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical idF)ÚlogicalrU   )é   rQ   )r0   Ú	cpu_countr6   rW   r?   rD   r.   ÚpathÚexistsÚopenÚreadr!   ZSkipTestr   r   ZgetwindowsversionrC   )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}|  t ¡ ¡ |js2t‚W d Q R X t jd|d"}|  tjdd¡ |jsht‚W d Q R X qW d S )N)rO   r   Nz$psutil._psplatform.cpu_count_logical)Úreturn_valuez%psutil._psplatform.cpu_count_physicalF)r‘   )r   r5   rC   r0   r“   rE   rF   )r#   ÚvalrI   r$   r$   r%   Útest_cpu_count_none  s    


z"TestSystemAPIs.test_cpu_count_nonec             C   s^   d}t  ¡ }t|ƒ x,|D ]$}|  |t¡ |  |d¡ ||7 }qW |  |t|ƒ¡ t|ƒ d S )Nr   g        )r0   r?   Úsumrm   rn   rD   r6   Ústr)r#   rw   ÚtimesÚcp_timer$   r$   r%   Útest_cpu_times"  s    
zTestSystemAPIs.test_cpu_timesc             C   sP   t t ¡ ƒ}t ¡ d }x(t ¡ |k r@t t ¡ ƒ}||krd S qW |  d¡ d S )NrQ   ztime remained the same)r   r0   r?   r]   r}   )r#   Út1Ústop_atÚt2r$   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 ]$}|  |t¡ |  |d¡ ||7 }q$W |  |t|ƒ¡ t|ƒ qW |  tt jddd ƒtt jddƒ¡ d S )NT)r   r   g        F)	r0   r?   r   rm   rn   rD   r6   rž   rW   )r#   rŸ   rw   r    r$   r$   r%   Útest_per_cpu_timesI  s    
z!TestSystemAPIs.test_per_cpu_timesc             C   s‚   t jdd}t ¡ d }xt ¡ |krP qW t jdd}x<t||ƒD ].\}}t|ƒt|ƒ }}|| }|dkrDd S qDW |  ¡  d S )NT)r   gš™™™™™¹?gš™™™™™©?)r0   r?   r]   Úzipr   r}   )r#   Ztot1r£   Ztot2r¢   r¤   Ú
differencer$   r$   r%   Útest_per_cpu_times_2j  s    z#TestSystemAPIs.test_per_cpu_times_2c             C   s\   t  ¡ }t jdd}| 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+     s    z<TestSystemAPIs.test_cpu_times_comparison.<locals>.<listcomp>rQ   )Údelta)r0   r?   Ú_maker§   rz   ÚassertAlmostEqualr{   )r#   ÚbaseZper_cpuZsummed_valuesZfieldr$   r$   r%   Útest_cpu_times_comparisonz  s    z(TestSystemAPIs.test_cpu_times_comparisonc          
   C   s‚   y<|   |t¡ |  |d¡ |  |d¡ |  |dt ¡  ¡ W n@ tk
r| } z"td|t 	|¡t 	|¡f ƒ‚W d d }~X Y nX d S )Ng        g       €g      Y@z
%s
last=%s
new=%s)
rm   rn   rD   ZassertIsNotÚassertLessEqualr0   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}|  |||¡ |}qW |  t¡ t jdd W d Q R X d S )Ngü©ñÒMbP?)Úintervalru   rO   )r0   Ú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}|  t|ƒt  ¡ ¡ x>tdƒD ]2}t jd dd}x|D ]}|  |||¡ qDW |}q,W |  t¡ t jddd W d Q R X d S )Ngü©ñÒMbP?T)r³   r   ru   rO   )	r0   r´   r6   rW   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 ]}|  |||¡ q,W |  t|ƒ||¡ |}qW d S )Ngü©ñÒMbP?)r³   ru   )r0   Ú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}|  t|ƒt  ¡ ¡ x^tdƒD ]R}t jd dd}x:|D ]2}x|D ]}|  |||¡ qNW |  t|ƒ||¡ qDW |}q,W d S )Ngü©ñÒMbP?T)r³   r   ru   )r0   r¹   r6   rW   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 ]}|  |d d ¡ qJW q@W W d Q R X d S )NT)r   c             S   s*   g | ]"}|  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ˆ   rW   rz   )r)   r*   r$   r$   r%   r+   ¹  s   zFTestSystemAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_times)rš   )r0   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   s.  t  t ¡ ¡}|  |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rdksœn t|j
ƒ‚ttdƒrðt t ¡ ¡}d}|  |j|j¡ | j|j	|j	|d | j|j|j|d t ¡ }|  t¡}t  |¡ W d Q R X |  |jjtj¡ d S )N)rw   rx   ry   rv   r   ru   Ú
disk_usagei  P )rª   )r0   r¾   r.   Úgetcwdr6   rz   rw   rF   rx   ry   rv   r`   Úshutilr¬   ÚtempfileZmktempr9   ÚOSErrorZ	exceptionÚerrnoZENOENT)r#   ZusageZshutil_usageZ	toleranceÚfnameÚexcr$   r$   r%   Útest_disk_usageÀ  s(    "
zTestSystemAPIs.test_disk_usagec          	   C   s(   t r$|  t¡ t t¡ W d Q R X d S )N)r   r9   ÚUnicodeEncodeErrorr0   r¾   r   )r#   r$   r$   r%   Útest_disk_usage_unicodeÛ  s    z&TestSystemAPIs.test_disk_usage_unicodec             C   s   t  d¡ d S )Nó   .)r0   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t¡ |  |jt¡ |  |jt¡ |  |jt¡ t	rld|jkrlq t
sˆtj |j¡sŽt|ƒ‚n|j ts–tr®tj |j¡sÄt|ƒ‚ntj |j¡sÄt|ƒ‚|js t|ƒ‚q W t jdd}| j||d x¶t jddD ]¦}t	sˆyt |j¡ W nV tk
rn } z6trHtrH|jtjkrHwþ|jtjtjfkr^‚ W d d }~X Y nX tj |j¡sˆt|ƒ‚|  |jt¡ |  |jt¡ qþW dd„ }|tƒ}dd	„ t jddD ƒ}|  ||¡ t  |¡ d S )
NF)Úall)r‡   ZcdromTc             S   s2   t j | ¡} xt j | ¡s(t j | ¡} qW |  ¡ 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  ¡ ‘qS r$   )Ú
mountpointrÏ   )r)   r*   r$   r$   r%   r+     s    z7TestSystemAPIs.test_disk_partitions.<locals>.<listcomp>)r0   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ä  sH    
z#TestSystemAPIs.test_disk_partitionsznot supportedc                sl   ‡ fdd„}t jdd}||ƒ t jdd}ˆ  |g ¡ x.|D ]&}ˆ  |¡ ˆ  |t¡ ||| ƒ q>W d S )Nc                s(  ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ | jdks¢t	| ƒ‚| jdks´t	| ƒ‚| jdksÆt	| ƒ‚| jdksØt	| ƒ‚| jdksêt	| ƒ‚| jdksüt	| ƒ‚| jdkst	| ƒ‚| jdks$t	| ƒ‚d S )	Nr   rQ   rU   rR   é   é   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)r0   Ú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}|  tjdd¡ |  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   r0   rÝ   r6   rE   rF   )r#   rI   r$   r$   r%   Útest_net_io_counters_no_nics;  s
    
z+TestSystemAPIs.test_net_io_counters_no_nicsc             C   st  t  ¡ }|st|ƒ‚t  ¡ }ttjtjt jgƒ}xà| 	¡ D ]Ò\}}|  
|t¡ |  tt|ƒƒt|ƒ¡ x¢|D ]˜}|  
|jt¡ |  
|jt¡ |  
|jttd ƒf¡ |  
|jttd ƒf¡ |  |j|¡ tjdkrè|  
|jtj¡ || jr |jtjkr6t |j¡}t |¡ | |jdf¡ W d Q R X nj|jtjkr t |jdtjtjdtj¡d }|\}	}
}}}t |	|
|¡}t |¡ | |¡ W d Q R X xB|j|j|j|j fD ]*}|d k	r¶|jtjkr¶t!||jƒ q¶W |jrú|  "|j ¡ qr|j rr|  "|j¡ qrW q<W t#s&t$s&t%rDt&tdƒrp|  t jtj¡ n,t'r\|  t jtj(¡ nt)rp|  t jd¡ d S )N)rR   r×   r   ÚAF_LINKrO   )*r0   Únet_if_addrsrF   Únet_if_statsre   ÚsocketZAF_INETZAF_INET6rã   Úitemsrm   rž   r6   rW   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_addrsE  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 ¡ d d }|jsJt‚t r^|  |j	d¡ n|  |j	d¡ W d Q R X d S )	NÚem1z06:3d:29)rô   rO   z06-3d-29NNNzpsutil._psplatform.net_if_addrs)rš   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r0   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  ¡ }|st|ƒ‚t jt jt jf}xh| ¡ D ]\\}}|  |t¡ |\}}}}|  |t	¡ |  
||¡ |  
||¡ |  |d¡ |  |d¡ q.W d S )Nr   )r0   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LINUX or BSD or MACOS specificc          	   C   sD   t jdttjdƒd$}t ¡ }|  |i ¡ |js6t	‚W d Q R X d S )Nzpsutil._psutil_posix.net_if_mtur>   )r,   )
r   r5   rÂ   rÃ   ZENODEVr0   rå   r6   rE   rF   )r#   rI   rß   r$   r$   r%   Útest_net_if_stats_enodev¢  s
    z'TestSystemAPIs.test_net_if_stats_enodevz/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}ˆ  t|ƒtt|ƒƒ¡ x$|D ]}|sjt|ƒ‚||| ƒ qZW d S )Nc                sð   ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ tsÆtsÆˆ   | d | j¡ ˆ   | d | j¡ t	r°ˆ   | d | j
¡ ˆ   | d | j¡ ˆ   | d	 | j¡ ntrÆˆ   | d | j¡ x$| jD ]}t| |ƒdksÎt| ƒ‚qÎW d S )
Nr   rQ   rU   rR   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?T)r0   Údisk_io_countersrF   r6   rW   re   )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}|  tjdd¡ |  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   r0   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  ¡ }|  |g ¡ x¬|D ]¤}|js,t|ƒ‚|  |jt¡ |  |jttd ƒf¡ |j	d k	rp|  |j	ttd ƒf¡ |j |j	 |j
dksŽt|ƒ‚tj |j
¡ ts¤tr²|  |j¡ qt  |j¡ qW d S )Ng        )r0   ÚusersrÞ   r   rF   rm   rž   Zterminalré   ZhostZstartedÚdatetimeZfromtimestampr   r   rC   r(   r2   )r#   rþ   Úuserr$   r$   r%   Ú
test_usersÖ  s    

zTestSystemAPIs.test_usersc             C   sX   t  ¡ }|  |jd¡ x<|jD ]2}t||ƒ}|  |d¡ ts|dkr|  |d¡ qW d S )N)Úctx_switchesÚ
interruptsZsoft_interruptsZsyscallsr   )r  r  )r0   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                sv   ‡ fdd„}t jdd}tr*|s*ˆ  d¡‚tr<|s<ˆ  d¡‚|sHt|ƒ‚|t jddgƒ trrˆ  t|ƒt  	¡ ¡ d S )Nc                sh   xb| D ]Z}ˆ   |jd¡ ˆ  |j|j¡ x6|jD ],}t||ƒ}ˆ  |ttt	f¡ ˆ  
|d¡ q0W qW d S )N)ÚcurrentÚminr‰   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   zskipped on Traviszreturns empty list on FreeBSDF)
r0   Zcpu_freqr    ZskipTestr   rF   r   r6   rW   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rHtjsPt‚tjrZt‚| 	d¡ dt
j ¡ krˆtjs|t‚| 	d¡ n¾dt
j ¡ krètjs t‚|  tjtjtjg d¡d¡ | 	d¡ | 	d¡ | 	d¡ | 	d¡ n^dt
j ¡ ksdt
j ¡ kr tjst‚| 	d	¡ n&dt
j ¡ krjtjs<t‚| 	d¡ n"tjsTt‚tjr`t‚| 	d¡ x$|D ]}| jtt|ƒd|d
 qpW d S )Nr	   r   r   r   r   r   r   r   r
   )r‡   ÚposixZlinuxZbsdTrQ   ZsunosZsolarisÚdarwinF)rm   r{   r0   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_constantsc             C   s’   t  ¡ }x„| ¡ D ]x\}}|  |t¡ xb|D ]Z}|  |jt¡ |jd k	rV|  |jd¡ |jd k	rn|  |jd¡ |j	d k	r,|  |j	d¡ q,W qW d S )Nr   )
r0   Úsensors_temperaturesrç   rm   rž   Úlabelr  rD   ÚhighÚcritical)r#   Útempsr   ÚentriesÚentryr$   r$   r%   Útest_sensors_temperatures3  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d¡ |  |jd	¡ |  |j	d
¡ W d Q R X d S )NZcoretemp)r  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperatures)rš   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)
r   r5   r0   r  rE   rF   r6   r  r  r  )r#   ÚdrI   r  r$   r$   r%   Ú#test_sensors_temperatures_fahreneitA  s    


z2TestSystemAPIs.test_sensors_temperatures_fahreneitz
no batteryc             C   sp   t  ¡ }|  |jd¡ |  |jd¡ |jt jt jfkrF|  |jd¡ n|jt jkr^|  |j	¡ |  
|j	t¡ d S )Nr   ru   )r0   Zsensors_batteryrD   rv   r¯   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrf   Zpower_pluggedrm   rö   )r#   rß   r$   r$   r%   Útest_sensors_batteryM  s    
z#TestSystemAPIs.test_sensors_batteryc             C   sj   t  ¡ }x\| ¡ D ]P\}}|  |t¡ x:|D ]2}|  |jt¡ |  |jttf¡ |  	|jd¡ q,W qW d S )Nr   )
r0   Zsensors_fansrç   rm   rž   r  r  r|   r   rD   )r#   Zfansr   r  r  r$   r$   r%   Útest_sensors_fans[  s    
z TestSystemAPIs.test_sensors_fans)GÚ__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   r0   rû   rü   rý   rþ   r  r  r   r  r  r   r  r  r   r   r  r   r  r$   r$   r$   r%   r"   =   sl   7	
	
!

		
:
<	
%r"   Ú__main__)3r  rí   rÿ   rÃ   r.   r°   rÀ   rc   ræ   r   rÁ   r]   r0   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    r!   ZTestCaser"   r  rÔ   r$   r$   r$   r%   Ú<module>   sj         /
