
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Œ=Ý_‹  ã                   @   sz  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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m.Z. G d$d%„ d%e)ƒZ/G d&d'„ d'e)ƒZ0G d(d)„ d)e)ƒZ1G d*d+„ d+e)ƒZ2G d,d-„ d-e)ƒZ3G d.d/„ d/e)ƒZ4G d0d1„ d1e)ƒZ5e6d2k�rvdd3l7m8Z8 e8e9ƒ dS )4zTests for system APIS.é    N)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚFileNotFoundError)Úlong)ÚASCII_FS)Úcheck_net_address)Ú
CI_TESTING)ÚDEVNULL)Úenum)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚIS_64BIT)Úmock)ÚPsutilTestCase)ÚPYPY)Úretry_on_failure)ÚGITHUB_ACTIONS)ÚUNICODE_SUFFIX)Úunittestc                   @   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$   úK/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_system.pyÚ
<listcomp>@   s     z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   B   s     c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   F   s     zpsutil.Process©Úside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterÚspawn_testprocr&   ÚProcessÚkillÚwaitZassertNotInr   ÚpatchÚNoSuchProcessÚassertEqualÚlistÚAccessDeniedÚassertRaises©ÚselfZsprocÚpr$   r$   r*   Útest_process_iter?   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)rA   Zad_value)r1   r2   r9   r:   ÚinfoÚkeysr<   Ú
ValueErrorr   r7   r;   ÚassertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectÚassertIs)r>   r?   ÚmÚflagr$   r$   r*   Útest_prcess_iter_w_attrsP   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*   Úcallbackg   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   s   g | ]}t  |j¡‘qS r$   ©r1   r4   r&   r'   r$   r$   r*   r+   n   s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rS   g{®Gáz„?©rV   rS   g      à?é   Ú
returncodeé   c                    s<   t j| d|d�\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nç¸…ëQ¸ž?rX   rW   é   ©r1   Ú
wait_procsr9   Úlen©ÚprocsrS   Ú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\   rX   rY   r   r^   ra   re   r$   r*   rf   Ž   s    ÿ
)r3   r<   rF   r1   r_   Ú	TypeErrorÚtimeÚ
assertLessr9   r`   ÚassertFalseÚhasattrr   Ú	terminater.   r&   r	   ÚpoprZ   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r>   rS   Úsproc1Úsproc2Úsproc3rb   Útrc   rd   r?   rf   r$   )rR   r>   r*   Útest_wait_procsd   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$   rT   r'   r$   r$   r*   r+   £   s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r3   rl   r1   r_   )r>   rr   rs   rt   rb   r?   rc   rd   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 )NrU   r   )r3   rq   r1   Ú
pid_existsr&   r4   r5   r6   rj   r9   rR   r=   r$   r$   r*   Útest_pid_exists¨   s    zTestProcessAPIs.test_pid_existsc              	   C   s–   t  ¡ }|D ]L}zt  |¡s t‚W q tk
rV   t d¡ |t  ¡ krR|  |¡ Y qX qtt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d� qxd S )Ngš™™™™™¹?iˆ  ip  ©Úmsg)
r1   rR   rx   rJ   rh   ÚsleepÚfailÚrangeÚmaxrj   )r>   rR   r&   r$   r$   r*   Útest_pid_exists_2²   s    
z!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__r@   rO   r"   ÚskipIfr   r   rv   rw   ry   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   )r1   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterri   rh   )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ç        )r1   ÚusersÚassertNotEqualÚnamerJ   r‡   ÚstrÚterminalÚtypeÚhostÚstartedÚdatetimeÚfromtimestampr   r   rG   r&   r4   )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 rP   )ÚsysÚstdoutr   r1   rf   )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
   rz   ÚposixÚlinuxZbsdTrW   ÚsunosÚsolarisÚdarwinF)r‡   Úgetattrr1   Úboolr/   r�   r	   rJ   r   Úremover™   ÚplatformÚlowerr   r   r9   r   r   r   Úcountr
   r   rL   )r>   Únamesr�   r$   r$   r*   Útest_os_constantsæ   sP      ÿ




ÿÿÿ


ÿ
zTestMiscAPIs.test_os_constantsN)r�   r‚   rƒ   rŠ   r"   r„   r   r1   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))r1   Zvirtual_memoryr¬   rJ   Z	availabler«   ÚusedÚfreeÚ_fieldsr¡   r‡   Úintr   r}   )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ª   )r1   Zswap_memoryr9   r¯   r¬   rJ   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 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©ÚpercpurW   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r1   Ú	cpu_countZassertIsNotNoner9   r`   rC   rH   r/   ÚpathÚexistsÚopenÚreadr"   ZSkipTest)r>   ÚlogicalÚfdZcpuinfo_datar$   r$   r*   Útest_cpu_count_logical3  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physical cpu_count() is Noner]   )é   rW   rW   )r1   rº   ÚskipTestr   r™   ÚgetwindowsversionrG   rH   )r>   r¿   Zphysicalr$   r$   r*   Útest_cpu_count_physical?  s    
z#TestCpuAPIs.test_cpu_count_physicalc              
   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)rU   r   Nz$psutil._psplatform.cpu_count_logical©Zreturn_valuez%psutil._psplatform.cpu_count_physicalFrÂ   )r   r7   rG   r1   rº   rI   rJ   )r>   ÚvalrM   r$   r$   r*   Útest_cpu_count_noneJ  s    ÿÿzTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  ¡ }t|ƒ |D ]$}|  |t¡ |  |d¡ ||7 }q|  |t|ƒ¡ t|ƒ d S )Nr   rŒ   )r1   rC   Úsumr‡   rˆ   rH   r9   r�   )r>   r¬   ÚtimesÚcp_timer$   r$   r*   Útest_cpu_timesV  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Ê   r1   rC   rh   r   r}   )r>   Út1Zstop_atÚt2r$   r$   r*   Útest_cpu_times_time_increasess  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)	r1   rC   rÊ   r‡   rˆ   rH   r9   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¸   rV   gš™™™™™©?)r1   rC   rh   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>rW   ©Údelta)r1   rC   Ú_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ˆ   rH   ZassertIsNotÚassertLessEqualr1   rº   rJ   Ú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ª   rU   )r1   Úcpu_percentr~   rá   r<   rF   )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ª   rU   )	r1   rå   r9   r`   rº   r~   rá   r<   rF   ©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â   )r1   Úcpu_times_percentr~   rá   rÊ   r<   rF   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ª   )r1   rì   r9   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Ç   )r1   rì   rC   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Ú
interruptsÚsoft_interruptsÚsyscallsr   )rñ   rò   )r1   Z	cpu_statsr9   r¯   r¡   rH   r   r‰   )r>   Zinfosr�   r²   r$   r$   r*   Útest_cpu_statsõ  s    þ

zTestCpuAPIs.test_cpu_statsznot suportedc                    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   )r9   r¯   r   rÝ   rö   r¡   r‡   r°   r   rˆ   rH   )ÚlsÚntr�   r²   re   r$   r*   Úcheck_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr¸   zreturns empty list on FreeBSDF)	r1   Zcpu_freqr   rÄ   rJ   r   r9   r`   rº   )r>   rú   rø   r$   re   r*   Útest_cpu_freq  s    

zTestCpuAPIs.test_cpu_freqúnot supportedc                 C   s>   t  ¡ }|  t|ƒd¡ |D ]}|  |t¡ |  |d¡ qd S )NrY   rŒ   )r1   Ú
getloadavgr9   r`   r‡   rˆ   rH   )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û   r   rÿ   r$   r$   r$   r*   r·   1  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r�dksœn t|j
ƒ‚ttdƒrðt t ¡ ¡}d}|  |j|j¡ | j|j	|j	|d� | j|j|j|d� |  ¡ }|  t¡� t  |¡ W 5 Q R X d S )N)r¬   r­   r®   r«   r   rª   Ú
disk_usagei  P rÖ   )r1   r  r/   Úgetcwdr9   r¯   r¬   rJ   r­   r®   r«   rk   ÚshutilrÙ   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 rP   )r<   ÚUnicodeEncodeErrorr1   r  r!   re   r$   r$   r*   Útest_disk_usage_unicode>  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r1   r  re   r$   r$   r*   Útest_disk_usage_bytesD  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ÚoptsÚmaxfiler°   r’   Úmaxpathr    r‰   ©rù   re   r$   r*   Úcheck_ntupleH  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úallrz   ZcdromTc                 S   s.   t j | ¡} t j | ¡s&t j | ¡} q|  ¡ S rP   )r/   r»   ÚabspathÚismountÚdirnamer¥   )r»   r$   r$   r*   Úfind_mount_pointy  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>)r1   Zdisk_partitionsrq   r   r  r	   r/   r»   r¼   r  rJ   r  r  ÚstatÚOSErrorr    r   ÚerrnoZEIOÚEPERMÚEACCESÚ__file__r.   )r>   r  rø   Zdiskrà   r  ZmountZmountsr$   re   r*   Útest_disk_partitionsG  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   rW   r]   rY   é   é   rÃ   é   é   )r9   Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesr   r   Ú	read_timeÚ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r¯   r¡   rJ   )rù   r�   re   r$   r*   r  ‰  s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r1   Údisk_io_countersrJ   r9   r`   rp   ©r>   r  ÚretÚkeyr$   re   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   rG   r1   r*  r9   rI   rJ   ©r>   rM   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   r1   r*  r.  r0  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   rW   r]   rY   r  r   rÃ   r!  )
r9   Ú
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚerrinÚerroutÚdropinÚdropoutrJ   r  re   r$   r*   r  ²  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r1   Únet_io_countersrŽ   rq   r‡   r�   r+  r$   re   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   rG   r1   r;  r9   rI   rJ   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)rY   r  r   ÚAF_LINKrU   )+r1   Únet_if_addrsrJ   Únet_if_statsrp   ÚsocketÚAF_INETÚAF_INET6r>  Úitemsr‡   r�   r9   r`   Úfamilyr°   ÚaddressÚnetmaskr’   Ú	broadcastr.   r™   Úversion_infor   r   ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEÚptpr   rG   r   r   r
   rk   r   Ú	AF_PACKETr   )r>   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrD   Ú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)r_  rU   z06-3d-29NNNzpsutil._psplatform.net_if_addrsrÇ   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r1   r>  r   r7   r?  rI   rJ   r9   rF  )r>   r,  rM   rV  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 ]\\}}|  |t¡ |\}}}}|  |t	¡ |  
||¡ |  
||¡ |  |d¡ |  |d¡ q,d S r†   )r1   r@  rJ   ÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNrD  r‡   r�   r¢   r.   rH   )	r>   rT  Zall_duplexesr�   ZstatsrK  ÚduplexÚspeedÚmtur$   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_mturB   r,   )
r   r7   r  r  ZENODEVr1   r@  r9   rI   rJ   )r>   rM   r,  r$   r$   r*   Útest_net_if_stats_enodev3  s    
ÿz$TestNetAPIs.test_net_if_stats_enodevN)r�   r‚   rƒ   r"   r„   r   r<  r=  r^  r`  rg  r   r   r   rh  r$   r$   r$   r*   r1  ®  s   

	<ÿr1  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†   )
r1   Úsensors_temperaturesrD  r‡   r�   Úlabelrö   rH   ÚhighÚcritical)r>   Útempsr�   ÚentriesÚentryr$   r$   r*   Útest_sensors_temperatures@  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)rk  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperaturesrÇ   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)
r   r7   r1   rj  rI   rJ   r9   rö   rl  rm  )r>   ÚdrM   rn  r$   r$   r*   Ú#test_sensors_temperatures_fahreneitN  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ª   )r1   Zsensors_batteryrH   r«   rÝ   ÚsecsleftÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrq   Úpower_pluggedr‡   r¢   )r>   r,  r$   r$   r*   Útest_sensors_batteryZ  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†   )
r1   Zsensors_fansrD  r‡   r�   rk  rö   r°   r   rH   )r>   Zfansr�   ro  rp  r$   r$   r*   Útest_sensors_fansh  s    z!TestSensorsAPIs.test_sensors_fansN)r�   r‚   rƒ   r"   r„   r   rq  rs  r   r   rx  r   ry  r$   r$   r$   r*   ri  >  s   

ri  Ú__main__)Úrun_from_name):Ú__doc__rL  r•   r  r/   rÞ   r  rn   rA  r™   rh   r1   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   r1  ri  r�   Zpsutil.tests.runnerr{  r  r$   r$   r$   r*   Ú<module>   st    J% q  5
