U
    (ÛcTŒ  ã                   @   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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/ dd#lm0Z0 G d$d%„ d%e,ƒZ1G d&d'„ d'e,ƒZ2G d(d)„ d)e,ƒZ3G d*d+„ d+e,ƒZ4G d,d-„ d-e,ƒZ5G d.d/„ d/e,ƒZ6G d0d1„ d1e,ƒZ7e8d2kr†dd3l9m:Z: e:e;ƒ dS )4zTests for system APIS.é    N)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚFileNotFoundError)Úlong)ÚASCII_FS)Ú
CI_TESTING)ÚDEVNULL)ÚGITHUB_ACTIONS)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚIS_64BIT)ÚMACOS_12PLUS)ÚPYPY)ÚUNICODE_SUFFIX)ÚPsutilTestCase)Úcheck_net_address)Úenum)Úmock)Úretry_on_failurec                   @   s\   e Zd Zdd„ Zdd„ Ze eo"ed¡dd„ ƒZ	e eo:ed¡dd	„ ƒZ
d
d„ Zdd„ ZdS )ÚTestProcessAPIsc              
   C   sþ   |   t ¡ dd„ t ¡ D ƒ¡ |  ¡ }|   |jdd„ t ¡ D ƒ¡ t |j¡}| ¡  | 	¡  |  
|jdd„ t ¡ D ƒ¡ tjdt t ¡ ¡d |  tt ¡ ƒg ¡ W 5 Q R X tjdt t ¡ ¡d* |  tj¡ tt ¡ ƒ W 5 Q R X W 5 Q R X d S )Nc                 S   s   g | ]
}|j ‘qS © ©Úpid©Ú.0Úxr$   r$   ú</tmp/pip-unpacked-wheel-l83rk7k5/psutil/tests/test_system.pyÚ
<listcomp>B   s     z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   D   s     c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   H   s     zpsutil.Process©Zside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterÚspawn_testprocr&   ÚProcessÚkillÚwaitÚassertNotInr!   ÚpatchZNoSuchProcessÚassertEqualÚlistÚAccessDeniedÚassertRaises©ÚselfZsprocÚpr$   r$   r*   Útest_process_iterA   s     ÿÿz!TestProcessAPIs.test_process_iterc              	   C   s,  t jdgdD ]}|  t|j ¡ ƒdg¡ q|  t¡ tt jdgdƒ W 5 Q R X tj	dt  
dd¡dH}t jddgdD ]&}|  |jd ¡ |  |jd d¡ q||js®t‚W 5 Q R X tj	dt  
dd¡dT}tƒ }t jddg|d	D ](}|  |jd |¡ |  |jd d¡ qè|jst‚W 5 Q R X d S )
Nr&   )ÚattrsZfooz$psutil._psplatform.Process.cpu_timesr   Ú r,   Ú	cpu_times)r@   Zad_value)r0   r1   r8   r9   ÚinfoÚkeysr;   Ú
ValueErrorr!   r7   r:   ÚassertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectÚassertIs)r=   r>   ÚmÚflagr$   r$   r*   Útest_prcess_iter_w_attrsR   s0    
ÿ
ÿ ÿ
z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc                    sæ  ‡ fdd„}g ‰ ˆ  ¡ }ˆ  ¡ }ˆ  ¡ }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 ¡ |D ]}	ˆ 
t|	dƒ¡ qÀtdƒ‡fdd„ƒ}
| ¡  |
||ƒ\}}ˆ |jdd„ |D ƒ¡ tr6ˆ | ¡ jtj ¡ nˆ | ¡ jd¡ ˆ ˆ |jg¡ |D ]}	ˆ 
t|	dƒ¡ q\tdƒ‡fdd„ƒ}
| ¡  | ¡  |
||ƒ\}}ˆ tˆ ƒt|j|j|jgƒ¡ |D ]}	ˆ t|	dƒ¡ qÊd S )Nc                    s   ˆ   | j¡ d S ©N)Úappendr&   )r>   )Úpidsr$   r*   Úcallbacki   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   s   g | ]}t  |j¡‘qS r$   ©r0   r3   r&   r'   r$   r$   r*   r+   p   s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rR   g{®Gáz„?©rU   rR   g      à?é   Ú
returncodeé   c                    s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nç¸…ëQ¸ž?rW   rV   é   ©r0   Ú
wait_procsr8   Úlen©ÚprocsrR   ÚgoneÚalive©r=   r$   r*   Útest}   s    ÿ
z-TestProcessAPIs.test_wait_procs.<locals>.testc                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   ‡   s     c                    s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nr[   rW   rX   r   r]   r`   rd   r$   r*   re      s    ÿ
)r2   r;   rE   r0   r^   Ú	TypeErrorÚtimeÚ
assertLessr8   r_   ÚassertFalseÚhasattrr"   Ú	terminater-   r&   r	   ÚpoprY   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r=   rR   Úsproc1Úsproc2Úsproc3ra   Útrb   rc   r>   re   r$   )rQ   r=   r*   Útest_wait_procsf   sF     zTestProcessAPIs.test_wait_procsc                 C   sP   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}|D ]}| ¡  q0t |¡\}}d S )Nc                 S   s   g | ]}t  |j¡‘qS r$   rS   r'   r$   r$   r*   r+   ¥   s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r2   rk   r0   r^   )r=   rq   rr   rs   ra   r>   rb   rc   r$   r$   r*   Útest_wait_procs_no_timeoutŸ   s    
z*TestProcessAPIs.test_wait_procs_no_timeoutc                 C   sv   |   ¡ }|  t |j¡¡ t |j¡}| ¡  | ¡  |  t |j¡¡ |  t d¡¡ |  	t d¡dt 
¡ k¡ d S )NrT   r   )r2   rp   r0   Ú
pid_existsr&   r3   r4   r5   ri   r8   rQ   r<   r$   r$   r*   Útest_pid_existsª   s    zTestProcessAPIs.test_pid_existsc              	   C   s   t  ¡ }|D ]F}zt  |¡s t‚W q tk
rP   t d¡ |  |t  ¡ ¡ Y qX qtt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d qrd S )Ngš™™™™™¹?iˆ  ip  ©Úmsg)
r0   rQ   rw   rI   rg   Úsleepr6   ÚrangeÚmaxri   )r=   rQ   r&   r$   r$   r*   Útest_pid_exists_2´   s    
z!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__r?   rN   ÚunittestÚskipIfr   r   ru   rv   rx   r~   r$   r$   r$   r*   r#   ?   s   
ÿ
7
ÿ
	
r#   c                   @   sB   e Zd Zdd„ Ze eo e ¡  d¡dd„ ƒZ	dd„ Z
dd	„ Zd
S )ÚTestMiscAPIsc                 C   s4   t  ¡ }|  |t¡ |  |d¡ |  |t ¡ ¡ d S ©Nr   )r0   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterrh   rg   )r=   Zbtr$   r$   r*   Útest_boot_timeÅ   s    zTestMiscAPIs.test_boot_timeúunreliable on CIc                 C   sÂ   t  ¡ }|  |g ¡ |D ]¤}|js*t|ƒ‚|  |jt¡ |  |jttd ƒf¡ |j	d k	rn|  |j	ttd ƒf¡ |j |j	 |j
dksŒt|ƒ‚tj |j
¡ ts¢tr°|  |j¡ qt  |j¡ qd S )Nç        )r0   ÚusersÚassertNotEqualÚnamerI   r†   ÚstrZterminalÚtypeÚhostÚstartedÚdatetimeÚfromtimestampr   r   rF   r&   r3   )r=   rŒ   Úuserr$   r$   r*   Ú
test_usersË   s    
zTestMiscAPIs.test_usersc                 C   s&   t j}tt _zt ¡  W 5 |t _X d S rO   )ÚsysÚstdoutr   r0   re   )r=   r˜   r$   r$   r*   Ú	test_testÞ   s
    zTestMiscAPIs.test_testc              	   C   sŒ  ddddddddd	g	}|D ]}| j tt|ƒt|d
 qtjdkrDtjsLt‚tjrVt‚| 	d¡ dt
j ¡ kr„tjsxt‚| 	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rftjs8t‚| 	d¡ n"tjsPt‚tjr\t‚| 	d¡ |D ]}| jtt|ƒd|d
 qjd S )Nr	   r   r   r   r   r   r   r   r
   ry   ÚposixÚlinuxZbsdTrV   ÚsunosÚsolarisÚdarwinF)r†   Úgetattrr0   Úboolr.   rŽ   r	   rI   r   Úremover—   ÚplatformÚlowerr   r   r8   r   r   r   Úcountr
   r   rK   )r=   ÚnamesrŽ   r$   r$   r*   Útest_os_constantsç   sP      ÿ




ÿÿÿ


ÿ
zTestMiscAPIs.test_os_constantsN)r   r€   r   r‰   r‚   rƒ   r   r0   rŒ   r–   r™   r¦   r$   r$   r$   r*   r„   Ã   s
   
	r„   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestMemoryAPIsc                 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|ƒ‚|jD ]j}t	||ƒ}|dkrœ|  
|ttf¡ |dkrv|dks¾|  d||f ¡‚||jkrv|  d||j||f ¡‚qvd S )Nr   éd   ÚpercentÚtotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r0   Zvirtual_memoryrª   rI   Ú	availabler©   ÚusedÚfreeÚ_fieldsrŸ   r†   Úintr   Úfail)r=   ÚmemrŽ   Úvaluer$   r$   r*   Útest_virtual_memory  s"     


ÿz"TestMemoryAPIs.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)rª   r¬   r­   r©   ÚsinÚsoutr   r¨   )r0   Zswap_memoryr8   r®   rª   rI   r¬   r­   r©   r´   rµ   )r=   r±   r$   r$   r*   Útest_swap_memory!  s     ÿ
 zTestMemoryAPIs.test_swap_memoryN)r   r€   r   r³   r¶   r$   r$   r$   r*   r§     s   r§   c                   @   sÈ   e Z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d„ Ze eo’e ¡ dkd ¡e e d!¡d"d#„ ƒƒZe e d!¡d$d%„ ƒZd&S )'ÚTestCpuAPIsc              	   C   st   t  ¡ }|  |¡ |  |tt jddƒ¡ |  |d¡ tj 	d¡rpt
dƒ}| ¡ }W 5 Q R X d|krpt d¡‚d S )NT©ÚpercpurV   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r0   Ú	cpu_countZassertIsNotNoner8   r_   rB   rG   r.   ÚpathÚexistsÚopenÚreadr‚   ZSkipTest)r=   ÚlogicalÚfdZcpuinfo_datar$   r$   r*   Útest_cpu_count_logical4  s    

z"TestCpuAPIs.test_cpu_count_logicalc                 C   sf   t  ¡ }t jdd}|d kr&|  d¡‚trJt ¡ d d… dkrJ|  |¡ n|  |d¡ |  ||¡ d S )NF©r¿   zcpu_count_cores() is Noner\   )é   rV   rV   )r0   rº   ÚskipTestr   r—   ÚgetwindowsversionrF   rG   )r=   r¿   Zcoresr$   r$   r*   Útest_cpu_count_cores@  s    
z TestCpuAPIs.test_cpu_count_coresc              
   C   sv   dD ]l}t jd|d}|  t ¡ ¡ |js0t‚W 5 Q R X t jd|d"}|  tjdd¡ |jsft‚W 5 Q R X qd S )N)rT   r   Nz$psutil._psplatform.cpu_count_logical©Zreturn_valuez"psutil._psplatform.cpu_count_coresFrÂ   )r!   r7   rF   r0   rº   rH   rI   )r=   ÚvalrL   r$   r$   r*   Útest_cpu_count_noneK  s    ÿÿzTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  ¡ }t|ƒ |D ]$}|  |t¡ |  |d¡ ||7 }q|  |t|ƒ¡ t|ƒ d S )Nr   r‹   )r0   rB   Úsumr†   r‡   rG   r8   r   )r=   rª   ÚtimesÚcp_timer$   r$   r*   Útest_cpu_timesW  s    
zTestCpuAPIs.test_cpu_timesc                 C   sL   t t ¡ ƒ}t ¡ t }t ¡ |k r>t t ¡ ƒ}||krd S q|  d¡‚d S )Nztime remained the same)rÊ   r0   rB   rg   r   r°   )r=   Út1Zstop_atÚt2r$   r$   r*   Útest_cpu_times_time_increasest  s    z)TestCpuAPIs.test_cpu_times_time_increasesc                 C   sŒ   t jddD ]R}d}t|ƒ |D ]$}|  |t¡ |  |d¡ ||7 }q |  |t|ƒ¡ t|ƒ q|  tt jddd ƒtt jddƒ¡ d S )NTr¸   r   r‹   F)	r0   rB   rÊ   r†   r‡   rG   r8   r   r_   )r=   rË   rª   rÌ   r$   r$   r*   Útest_per_cpu_times~  s    

ÿzTestCpuAPIs.test_per_cpu_timesc                 C   s€   t jdd}t ¡ t }t ¡ |kr.|  d¡S t jdd}t||ƒD ]4\}}t  |¡t  |¡ }}|| }|dkrD d S qDqd S )NTr¸   rU   gš™™™™™©?)r0   rB   rg   r   r°   ÚzipZ_cpu_busy_time)r=   Ztot1Z	giveup_atZtot2rÎ   rÏ   Ú
differencer$   r$   r*   Útest_per_cpu_times_2Ÿ  s    
z TestCpuAPIs.test_per_cpu_times_2c                 C   sX   t  ¡ }t jdd}| dd„ t|Ž D ƒ¡}|jD ] }| jt||ƒt||ƒdd q2d S )NTr¸   c                 S   s   g | ]}t |ƒ‘qS r$   )rÊ   )r(   Únumr$   r$   r*   r+   ³  s     z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rV   ©Údelta)r0   rB   Ú_makerÒ   r®   ÚassertAlmostEqualrŸ   )r=   ÚbaseZper_cpuZsummed_valuesÚfieldr$   r$   r*   Útest_cpu_times_comparison®  s    
  ÿz%TestCpuAPIs.test_cpu_times_comparisonc              
   C   s‚   z<|   |t¡ |  |d¡ |  |d¡ |  |dt ¡  ¡ W n@ tk
r| } z"td|t 	|¡t 	|¡f ƒ‚W 5 d }~X Y nX d S )Nr‹   g       €g      Y@z
%s
last=%s
new=%s)
r†   r‡   rG   ZassertIsNotÚassertLessEqualr0   rº   rI   ÚpprintÚpformat)r=   r©   Zlast_retZnew_retÚerrr$   r$   r*   Ú_test_cpu_percent¸  s      ÿzTestCpuAPIs._test_cpu_percentc              	   C   s^   t jdd}tdƒD ]"}t jd d}|  |||¡ |}q|  t¡ t jdd W 5 Q R X d S ©Nçü©ñÒMbP?)Úintervalr¨   rT   )r0   Úcpu_percentr|   rá   r;   rE   )r=   Úlastr)   Únewr$   r$   r*   Útest_cpu_percentÂ  s    zTestCpuAPIs.test_cpu_percentc              	   C   s‚   t jddd}|  t|ƒt  ¡ ¡ tdƒD ].}t jd dd}|D ]}|  |||¡ q@|}q*|  t¡ t jddd W 5 Q R X d S )Nrã   T©rä   r¹   r¨   rT   )	r0   rå   r8   r_   rº   r|   rá   r;   rE   ©r=   ræ   r)   rç   r©   r$   r$   r*   Útest_per_cpu_percentË  s    z TestCpuAPIs.test_per_cpu_percentc              	   C   sz   t jdd}tdƒD ]>}t jd d}|D ]}|  |||¡ q(|  t|ƒ||¡ |}q|  t¡ t jdd W 5 Q R X d S râ   )r0   Úcpu_times_percentr|   rá   rÊ   r;   rE   rê   r$   r$   r*   Útest_cpu_times_percentÖ  s    z"TestCpuAPIs.test_cpu_times_percentc                 C   sz   t jddd}|  t|ƒt  ¡ ¡ tdƒD ]J}t jd dd}|D ].}|D ]}|  |||¡ qH|  t|ƒ||¡ q@|}q*d S )Nrã   Tré   r¨   )r0   rì   r8   r_   rº   r|   rá   rÊ   )r=   ræ   r)   rç   Úcpur©   r$   r$   r*   Útest_per_cpu_times_percentá  s    z&TestCpuAPIs.test_per_cpu_times_percentc              	   C   sj   t jdd dd„ t jddD ƒ}tjd|d0 t jddD ]}|D ]}|  |d d ¡ qFq>W 5 Q R X d S )NTr¸   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+   ï  s     zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)rØ   r|   r_   r®   r'   r$   r$   r*   r+   ï  s   ÿzCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesrÇ   )r0   rì   rB   r!   r7   rá   )r=   Z
zero_timesrî   r©   r$   r$   r*   Ú#test_per_cpu_times_percent_negativeì  s    
ÿz/TestCpuAPIs.test_per_cpu_times_percent_negativec                 C   sT   t  ¡ }|  |jd¡ |jD ]2}t||ƒ}|  |d¡ ts|dkr|  |d¡ qd S )N)Úctx_switchesÚ
interruptsZsoft_interruptsZsyscallsr   )rñ   rò   )r0   Z	cpu_statsr8   r®   rŸ   rG   r   rˆ   )r=   ZinfosrŽ   r²   r$   r$   r*   Útest_cpu_statsö  s    þ

zTestCpuAPIs.test_cpu_statsZarm64zskipped due to #1892únot supportedc                    sd   ‡ fdd„}t jdd}tr*|s*ˆ  d¡‚|s6t|ƒ‚|t jddgƒ tr`ˆ  t|ƒt  ¡ ¡ d S )Nc                    sj   | D ]`}ˆ   |jd¡ |jdkr0ˆ  |j|j¡ |jD ],}t||ƒ}ˆ  |ttt	f¡ ˆ  
|d¡ q6qd S )N)ÚcurrentÚminr}   r‹   r   )r8   r®   r}   rÝ   rõ   rŸ   r†   r¯   r   r‡   rG   )ÚlsÚntrŽ   r²   rd   r$   r*   Úcheck_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr¸   zreturns empty list on FreeBSDF)	r0   Zcpu_freqr   rÄ   rI   r   r8   r_   rº   )r=   rù   r÷   r$   rd   r*   Útest_cpu_freq  s    

zTestCpuAPIs.test_cpu_freqc                 C   s>   t  ¡ }|  t|ƒd¡ |D ]}|  |t¡ |  |d¡ qd S )NrX   r‹   )r0   Ú
getloadavgr8   r_   r†   r‡   rG   )r=   ZloadavgÚloadr$   r$   r*   Útest_getloadavg  s
    zTestCpuAPIs.test_getloadavgN)r   r€   r   rÁ   rÆ   rÉ   rÍ   rÐ   rÑ   rÔ   rÜ   rá   rè   rë   rí   rï   rð   ró   r‚   rƒ   r   r¢   Úmachiner   rú   r   rý   r$   r$   r$   r*   r·   2  s,   
!

	
ÿr·   c                   @   sŒ   e Zd Ze eoe d¡dd„ ƒZe e d¡dd„ ƒZ	dd„ Z
d	d
„ Ze eo\ej d¡ d¡e eope ¡  d¡dd„ ƒƒZdd„ ZdS )ÚTestDiskAPIszunreliable on PYPY32 + 32BITc              	   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 tsô| j|j|j|d |  ¡ }|  t¡ t  |¡ W 5 Q R X d S )N)rª   r¬   r­   r©   r   r¨   Ú
disk_usagei  P rÖ   )r0   r   r.   Úgetcwdr8   r®   rª   rI   r¬   r­   r©   rj   ÚshutilrÙ   r   Z
get_testfnr;   r   )r=   ÚusageZshutil_usageZ	toleranceÚfnamer$   r$   r*   Útest_disk_usage'  s,    "
ÿÿzTestDiskAPIs.test_disk_usageznot an ASCII fsc              	   C   s$   |   t¡ t t¡ W 5 Q R X d S rO   )r;   ÚUnicodeEncodeErrorr0   r   r   rd   r$   r$   r*   Útest_disk_usage_unicodeD  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r0   r   rd   r$   r$   r*   Útest_disk_usage_bytesJ  s    z"TestDiskAPIs.test_disk_usage_bytesc                    s†  ‡ fdd„}t jdd}ˆ j||d |D ]b}||ƒ trFd|jkrFq*tsbtj |j	¡sht
|ƒ‚n|j	 tj |j¡s~t
|ƒ‚|js*t
|ƒ‚q*t jdd}ˆ j||d t jddD ]š}||ƒ ts´|jr´zt |j¡ W n\ tk
r6 } z<trtr|jtjkrW Y ¢q´|jtjtjfkr&‚ W 5 d }~X Y q´X tj |j¡s´t
|ƒ‚q´dd	„ }|tƒ}d
d„ t jddD ƒ}ˆ  ||¡ d S )Nc                    sœ   ˆ   | jt¡ ˆ   | jt¡ ˆ   | jt¡ ˆ   | jt¡ ˆ   | jttd ƒf¡ ˆ   | j	ttd ƒf¡ | jd k	r€t
s€ˆ  | jd¡ | j	d k	r˜ˆ  | j	d¡ d S r…   )r†   Údevicer   Ú
mountpointÚfstypeÚoptsZmaxfiler¯   r   Zmaxpathr   rˆ   ©rø   rd   r$   r*   Úcheck_ntupleN  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úallry   ZcdromTc                 S   s.   t j | ¡} t j | ¡s&t j | ¡} q|  ¡ S rO   )r.   r»   ÚabspathÚismountÚdirnamer£   )r»   r$   r$   r*   Úfind_mount_point  s    z;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_pointc                 S   s   g | ]}|j r|j  ¡ ‘qS r$   )r  r£   r'   r$   r$   r*   r+   †  s    ÿz5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r0   Zdisk_partitionsrp   r   r  r	   r.   r»   r¼   r
  rI   r  r  ÚstatÚOSErrorr   r   ÚerrnoZEIOÚEPERMÚEACCESÚ__file__r-   )r=   r  r÷   Zdiskrà   r  ÚmountZmountsr$   rd   r*   Útest_disk_partitionsM  s>    

ÿz!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionrŠ   c                    sz   ‡ fdd„}t jdd}|d k	s(tdƒ‚||ƒ t jdd}ˆ  t|ƒtt|ƒƒ¡ |D ]}|sht|ƒ‚||| ƒ qXd 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¡ | jD ]}t| |ƒdksÌt| ƒ‚qÌd S )
Nr   rV   r\   rX   é   é   rÃ   é   é   )r8   Z
read_countZwrite_countÚ
read_bytesÚwrite_bytesr   r   Z	read_timeZ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r®   rŸ   rI   )rø   rŽ   rd   r$   r*   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r0   Údisk_io_countersrI   r8   r_   ro   ©r=   r  ÚretÚkeyr$   rd   r*   Útest_disk_io_countersŠ  s    z"TestDiskAPIs.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 5 Q R X d S )Nz#psutil._psplatform.disk_io_countersrÇ   Fr#  T)r!   r7   rF   r0   r$  r8   rH   rI   ©r=   rL   r$   r$   r*   Útest_disk_io_counters_no_disksª  s    ÿz+TestDiskAPIs.test_disk_io_counters_no_disksN)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ÿ   %  s   

=ÿÿrÿ   c                   @   sn   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZdd„ Zdd	„ Z	d
d„ Z
e epZepZe d¡dd„ ƒZdS )ÚTestNetAPIsrô   c                    sh   ‡ fdd„}t jdd}||ƒ t jdd}ˆ  |g ¡ |D ]&}ˆ  |¡ ˆ  |t¡ ||| ƒ q<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   rV   r\   rX   r  r  rÃ   r  )
r8   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrI   r  rd   r$   r*   r  ¸  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r0   Únet_io_countersr   rp   r†   r   r%  r$   rd   r*   Útest_net_io_counters¶  s    
z TestNetAPIs.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 5 Q R X d S )Nz"psutil._psplatform.net_io_countersrÇ   Fr,  T)r!   r7   rF   r0   r-  r8   rH   rI   r)  r$   r$   r*   Útest_net_io_counters_no_nicsÓ  s    ÿz(TestNetAPIs.test_net_io_counters_no_nicsc                 C   sh  t  ¡ }|st|ƒ‚t  ¡ }ttjtjt jgƒ}| 	¡ D ]Ì\}}|  
|t¡ |  tt|ƒƒt|ƒ¡ |D ]˜}|  
|jt¡ |  
|jt¡ |  
|jttd ƒf¡ |  
|jttd ƒf¡ |  |j|¡ tjdkrätsä|  
|jtj¡ || jrœ|jtjkr2t |j¡}t |¡ | |jdf¡ W 5 Q R X nj|jtjkrœt |jdtjtjdtj ¡d }|\}	}
}}}t |	|
|¡}t |¡ | |¡ W 5 Q R X |j|j|j|j!fD ]*}|d k	r°|jtjkr°t"||jƒ q°|jrò|  #|j!¡ qj|j!rj|  #|j¡ qjq8t$st%st&r8t'tdƒrd|  t jtj¡ n,t(rP|  t jtj)¡ nt*rd|  t jd¡ d S )N)rX   r  r   ÚAF_LINKrT   )+r0   Únet_if_addrsrI   Únet_if_statsro   ÚsocketÚAF_INETÚAF_INET6r0  Úitemsr†   r   r8   r_   Úfamilyr¯   ÚaddressÚnetmaskr   Ú	broadcastr-   r—   Úversion_infor   r    ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEZptpr   rF   r   r   r
   rj   r   Ú	AF_PACKETr   )r=   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrC   ÚafÚsocktypeÚprotoÚ	canonnameÚsaÚipr$   r$   r*   Útest_net_if_addrsÝ  sh    
    þþÿ
zTestNetAPIs.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 5 Q R X d S )	NÚem1z06:3d:29)rP  rT   z06-3d-29NNNzpsutil._psplatform.net_if_addrsrÇ   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r0   r0  r!   r7   r1  rH   rI   r8   r8  )r=   r&  rL   rG  r$   r$   r*   Ú test_net_if_addrs_mac_null_bytes  s    ÿ
z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   sœ   t  ¡ }|st|ƒ‚t jt jt jf}| ¡ D ]j\}}|  |t¡ |\}}}}}	|  |t	¡ |  
||¡ |  
||¡ |  |d¡ |  |d¡ |  |	t¡ q,d S r…   )r0   r2  rI   ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr6  r†   r   r    r-   rG   )
r=   rE  Zall_duplexesrŽ   Ústatsr=  ZduplexÚspeedZmtuÚflagsr$   r$   r*   Útest_net_if_stats*  s    þzTestNetAPIs.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 5 Q R X d S )Nzpsutil._psutil_posix.net_if_mturA   r,   )
r!   r7   r  r  ZENODEVr0   r2  r8   rH   rI   )r=   rL   r&  r$   r$   r*   Útest_net_if_stats_enodev:  s    
ÿz$TestNetAPIs.test_net_if_stats_enodevN)r   r€   r   r‚   rƒ   r   r.  r/  rO  rQ  rU  r   r   r   rV  r$   r$   r$   r*   r+  ´  s   

	<ÿr+  c                   @   sr   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡e e	 d¡dd„ ƒƒZ
e e d¡d	d
„ ƒZdS )ÚTestSensorsAPIsrô   c                 C   sŠ   t  ¡ }| ¡ D ]t\}}|  |t¡ |D ]Z}|  |jt¡ |jd k	rR|  |jd¡ |jd k	rj|  |jd¡ |j	d k	r(|  |j	d¡ q(qd S r…   )
r0   Úsensors_temperaturesr6  r†   r   Úlabelrõ   rG   ÚhighÚcritical)r=   ÚtempsrŽ   ÚentriesÚentryr$   r$   r*   Útest_sensors_temperaturesG  s    


z)TestSensorsAPIs.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 5 Q R X d S )NZcoretemp)rY  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperaturesrÇ   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)
r!   r7   r0   rX  rH   rI   r8   rõ   rZ  r[  )r=   ÚdrL   r\  r$   r$   r*   Ú#test_sensors_temperatures_fahreneitU  s     
ÿÿÿÿ
z3TestSensorsAPIs.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   r¨   )r0   Zsensors_batteryrG   r©   rÝ   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrp   Zpower_pluggedr†   r    )r=   r&  r$   r$   r*   Útest_sensors_batterya  s    ÿz$TestSensorsAPIs.test_sensors_batteryc                 C   sb   t  ¡ }| ¡ D ]L\}}|  |t¡ |D ]2}|  |jt¡ |  |jttf¡ |  	|jd¡ q(qd S r…   )
r0   Zsensors_fansr6  r†   r   rY  rõ   r¯   r   rG   )r=   ZfansrŽ   r]  r^  r$   r$   r*   Útest_sensors_fanso  s    z!TestSensorsAPIs.test_sensors_fansN)r   r€   r   r‚   rƒ   r   r_  ra  r   r   rb  r   rc  r$   r$   r$   r*   rW  E  s   

rW  Ú__main__)Úrun_from_name)<Ú__doc__r>  r“   r  r.   r¢   rÞ   r  rm   r3  r—   rg   r‚   r0   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._compatr   r   Zpsutil.testsr   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+  rW  r   Zpsutil.tests.runnerre  r  r$   r$   r$   r*   Ú<module>   sx    J% t  5
