a
    þdPŒ  ã                   @   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 d   ƒ n1 s¼0    Y  tjdt t ¡ ¡dJ |  tj¡ tt ¡ ƒ W d   ƒ n1 s0    Y  W d   ƒ n1 s00    Y  d S )Nc                 S   s   g | ]
}|j ‘qS © ©Úpid©Ú.0Úxr$   r$   úa/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/psutil/tests/test_system.pyÚ
<listcomp>B   ó    z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   D   r,   c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   H   r,   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     ÿ2ÿz!TestProcessAPIs.test_process_iterc                 C   sl  t jdgdD ]}|  t|j ¡ ƒdg¡ q|  t¡" tt jdgdƒ W d   ƒ n1 s^0    Y  tj	dt  
dd¡dR}t jddgdD ]&}|  |jd ¡ |  |jd d¡ q|jsÂJ ‚W d   ƒ n1 sÖ0    Y  tj	dt  
dd¡d`}tƒ }t jddg|d	D ]*}|  |jd |¡ |  |jd d¡ q|jsHJ ‚W d   ƒ n1 s^0    Y  d S )
Nr&   )ÚattrsZfooz$psutil._psplatform.Process.cpu_timesr   Ú r-   Ú	cpu_times)rA   Zad_value)r1   r2   r9   r:   ÚinfoÚkeysr<   Ú
ValueErrorr!   r8   r;   ÚassertIsNoneÚassertGreaterEqualÚcalledÚobjectÚassertIs)r>   r?   ÚmÚflagr$   r$   r*   Útest_prcess_iter_w_attrsR   s.    0
ÿ(
ÿÿ
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$   ©r1   r4   r&   r'   r$   r$   r*   r+   p   r,   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   é   ©r1   Ú
wait_procsr9   Úlen©ÚprocsrR   ÚgoneÚalive©r>   r$   r*   Útest_1}   s    ÿ
z/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   s   g | ]
}|j ‘qS r$   r%   r'   r$   r$   r*   r+   ‡   r,   c                    s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nr[   rW   rX   r   r]   r`   rd   r$   r*   Útest_2   s    ÿ
z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r3   r<   rF   r1   r^   Ú	TypeErrorÚtimeÚ
assertLessr9   r_   ÚassertFalseÚhasattrr"   Ú	terminater.   r&   r	   ÚpoprY   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r>   rR   Úsproc1Úsproc2Úsproc3ra   Útrb   rc   r?   re   rf   r$   )rQ   r>   r*   Útest_wait_procsf   sF     zTestProcessAPIs.test_wait_procsc                 C   sL   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}|D ]}| ¡  q0t |¡ d S )Nc                 S   s   g | ]}t  |j¡‘qS r$   rS   r'   r$   r$   r*   r+   ¥   r,   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r3   rl   r1   r^   )r>   rr   rs   rt   ra   r?   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 
¡ v ¡ d S )NrT   r   )r3   rq   r1   Ú
pid_existsr&   r4   r5   r6   rj   r9   rQ   r=   r$   r$   r*   Útest_pid_existsª   s    zTestProcessAPIs.test_pid_existsc              	   C   sŽ   t  ¡ }|D ]D}zt  |¡s J ‚W q tyN   t d¡ |  |t  ¡ ¡ Y q0 qtt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d qpd S )Ngš™™™™™¹?i˜:  i€>  ©Úmsg)
r1   rQ   rx   ÚAssertionErrorrh   Úsleepr7   ÚrangeÚmaxrj   )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   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*J |ƒ‚|  |jt¡ |  |jttd ƒf¡ |jd urn|  |jttd ƒf¡ |j |j |j	dksŒJ |ƒ‚t
j
 |j	¡ ts¢tr°|  |j¡ qt  |j¡ qd S )Nç        )r1   ÚusersÚassertNotEqualÚnamerˆ   ÚstrZ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 |t _n|t _0 d S rO   )ÚsysÚstdoutr   r1   Útest)r>   rš   r$   r$   r*   Ú	test_testÞ   s
    
zTestMiscAPIs.test_testc                 C   sz  g d¢}|D ]}| j tt|ƒt|d qtjdkr2tjs>J ‚tjrHJ ‚| d¡ dt	j
 ¡ v rvtjsjJ ‚| d¡ nºdt	j
 ¡ v rÖtjsŽJ ‚|  tjtjtjg d¡d	¡ | d
¡ | d¡ | d¡ | d¡ nZdt	j
 ¡ v sôdt	j
 ¡ v r
tjsþJ ‚| d¡ n&dt	j
 ¡ v rTtjs&J ‚| d¡ n"tjs>J ‚tjrJJ ‚| d¡ |D ]}| jtt|ƒd|d qXd S )N)	r	   r   r   r   r   r   r   r   r
   rz   Úposixr	   Úlinuxr   ZbsdTrV   r   r   r   r   ÚsunosÚsolarisr
   Údarwinr   r   F)rˆ   Úgetattrr1   Úboolr/   r   r	   r   Úremover™   ÚplatformÚlowerr   r   r9   r   r   r   Úcountr
   r   rK   )r>   Únamesr   r$   r$   r*   Útest_os_constantsç   sH    




ÿÿÿ


ÿ

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J |ƒ‚|jdks,J |ƒ‚d|j  krBdksLn J |ƒ‚|jdks^J |ƒ‚|jdkspJ |ƒ‚|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­   Ú	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(J |ƒ‚|jdks:J |ƒ‚|jdkrX|jdksjJ |ƒ‚n|jdksjJ |ƒ‚d|j  kr€dksŠn J |ƒ‚|jdksœJ |ƒ‚|j	dks®J |ƒ‚d S )N)r­   r¯   r°   r¬   ÚsinÚsoutr   r«   )
r1   Zswap_memoryr9   r±   r­   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   sˆ   t  ¡ }|  |¡ |  |tt jddƒ¡ |  |d¡ tj 	d¡r„t
dƒ}| ¡ }W d   ƒ n1 sh0    Y  d|vr„t d¡‚d S )NT©ÚpercpurV   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_logical4  s    

&z"TestCpuAPIs.test_cpu_count_logicalc                 C   sf   t  ¡ }t jdd}|d u r&|  d¡‚trJt ¡ d d… dkrJ|  |¡ n|  |d¡ |  ||¡ d S )NF©rÂ   zcpu_count_cores() is Noner\   )é   rV   rV   )r1   r½   ÚskipTestr   r™   ÚgetwindowsversionrG   rH   )r>   rÂ   Zcoresr$   r$   r*   Útest_cpu_count_cores@  s    
z TestCpuAPIs.test_cpu_count_coresc              	   C   sž   dD ]”}t jd|d(}|  t ¡ ¡ |js0J ‚W d   ƒ n1 sD0    Y  t jd|d,}|  tjdd¡ |jszJ ‚W d   ƒ q1 sŽ0    Y  qd S )N)rT   r   Nz$psutil._psplatform.cpu_count_logical©Zreturn_valuez"psutil._psplatform.cpu_count_coresFrÅ   )r!   r8   rG   r1   r½   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   )r1   rC   Úsumrˆ   r‰   rH   r9   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Í   r1   rC   rh   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)	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»   rU   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+   ³  r,   z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rV   ©Ú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 nB ty~ } z*td|t 	|¡t 	|¡f ƒ‚W Y d }~n
d }~0 0 d S )Nr   g       €g      Y@z
%s
last=%s
new=%s)
rˆ   r‰   rH   ZassertIsNotÚassertLessEqualr1   r½   r|   ÚpprintÚpformat)r>   r¬   Zlast_retZnew_retÚerrr$   r$   r*   Ú_test_cpu_percent¸  s    ÿzTestCpuAPIs._test_cpu_percentc                 C   sr   t jdd}tdƒD ]"}t jd d}|  |||¡ |}q|  t¡ t jdd W d   ƒ n1 sd0    Y  d S ©Nçü©ñÒMbP?)Úintervalr«   rT   )r1   Úcpu_percentr~   rä   r<   rF   )r>   ÚlastÚ_Ú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 d   ƒ n1 sˆ0    Y  d S )Nræ   T©rç   r¼   r«   rT   )	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   sŽ   t jdd}tdƒD ]>}t jd d}|D ]}|  |||¡ q(|  t|ƒ||¡ |}q|  t¡ t jdd W d   ƒ n1 s€0    Y  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   s~   t jdd dd„ t jddD ƒ}tjd|d: t jddD ]}|D ]}|  |d d ¡ qFq>W d   ƒ n1 sp0    Y  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+   ï  r,   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!   r8   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v r|  |d¡ qd S )N)Úctx_switchesÚ
interruptsZsoft_interruptsZsyscallsr   )rõ   rö   )r1   Z	cpu_statsr9   r±   r¢   rH   r   rŠ   )r>   Úinfosr   rµ   r$   r$   r*   Útest_cpu_statsö  s    þ

zTestCpuAPIs.test_cpu_statsÚarm64zskipped due to #1892únot supportedc                    sd   ‡ fdd„}t jdd}tr*|s*ˆ  d¡‚|s6J |ƒ‚|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µ   rd   r$   r*   Úcheck_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr»   zreturns empty list on FreeBSDF)r1   Zcpu_freqr   rÇ   r   r9   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   )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¥   Ú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   s6  t  t ¡ ¡}|  |jd¡ |jdks.J |ƒ‚|jdks@J |ƒ‚|jdksRJ |ƒ‚|j|jksfJ |ƒ‚|j|jkszJ |ƒ‚d|j	  krdksœn J |j	ƒ‚t
tdƒrôt t ¡ ¡}d}|  |j|j¡ | j|j|j|d tsô| j|j|j|d |  ¡ }|  t¡ t  |¡ W d   ƒ n1 s(0    Y  d S )N)r­   r¯   r°   r¬   r   r«   Ú
disk_usagei  P rÙ   )r1   r  r/   Úgetcwdr9   r±   r­   r¯   r°   r¬   rk   Ú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   s8   |   t¡ t t¡ W d   ƒ n1 s*0    Y  d S rO   )r<   ÚUnicodeEncodeErrorr1   r  r   rd   r$   r$   r*   Útest_disk_usage_unicodeD  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r1   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v rFq*tsbtj |j	¡shJ |ƒ‚n|j	 tj |j
¡s~J |ƒ‚|js*J |ƒ‚q*t jdd}ˆ j||d t jddD ] }||ƒ ts´|j
r´zt |j
¡ W nb ty< } zHtrtr|jtjkrW Y d }~q´|jtjtjfvr(‚ W Y d }~q´d }~0 0 tj |j
¡s´J |ƒ‚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 ur€t
s€ˆ  | jd¡ | j	d u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)Úallrz   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>)r1   Zdisk_partitionsrq   r   r  r	   r/   r¾   r¿   r  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 us(J dƒ‚||ƒ t jdd}ˆ  t|ƒtt|ƒƒ¡ |D ]}|shJ |ƒ‚||| ƒ 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ÌJ | ƒ‚qÌd S )
Nr   rV   r\   rX   é   é   rÆ   é   é   )r9   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¢   )rþ   r   rd   r$   r*   r    s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r1   Údisk_io_countersr9   r_   rp   ©r>   r  ÚretÚkeyr$   rd   r*   Útest_disk_io_countersŠ  s    z"TestDiskAPIs.test_disk_io_countersc                 C   sb   t jdi d@}|  tjdd¡ |  tjddi ¡ |js@J ‚W d   ƒ n1 sT0    Y  d S )Nz#psutil._psplatform.disk_io_countersrÊ   Fr)  T)r!   r8   rG   r1   r*  r9   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   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¢J | ƒ‚| jdks´J | ƒ‚| jdksÆJ | ƒ‚| jdksØJ | ƒ‚| jdksêJ | ƒ‚| jdksüJ | ƒ‚| jdksJ | ƒ‚| jdks$J | ƒ‚d S )	Nr   rV   r\   rX   r#  r$  rÆ   r%  )	r9   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  rd   r$   r*   r  ¸  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r1   Únet_io_countersr   rq   rˆ   r‘   r+  r$   rd   r*   Útest_net_io_counters¶  s    
z TestNetAPIs.test_net_io_countersc                 C   sb   t jdi d@}|  tjdd¡ |  tjddi ¡ |js@J ‚W d   ƒ n1 sT0    Y  d S )Nz"psutil._psplatform.net_io_countersrÊ   Fr2  T)r!   r8   rG   r1   r3  r9   rI   r/  r$   r$   r*   Útest_net_io_counters_no_nicsÓ  s    ÿz(TestNetAPIs.test_net_io_counters_no_nicsc              
   C   s”  t  ¡ }|sJ |ƒ‚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rHt |j¡}t |¡  | |jdf¡ W d   ƒ n1 s<0    Y  n€|jtjkrÈt |jdtjtjdtj¡d }|\}	}
}}}t |	|
|¡}t |¡ | |¡ W d   ƒ n1 s¾0    Y  |j|j|j|j fD ]*}|d urÜ|jtjkrÜt!||jƒ qÜ|jr|  "|j ¡ qj|j rj|  "|j¡ qjq8t#sFt$sFt%rdt&tdƒr|  t jtj¡ n,t'r||  t jtj(¡ nt)r|  t jd¡ d S )N)rX   r#  r   ÚAF_LINKrT   )*r1   Únet_if_addrsÚnet_if_statsrp   ÚsocketÚAF_INETÚAF_INET6r6  Úitemsrˆ   r‘   r9   r_   Úfamilyr²   ÚaddressÚnetmaskr’   Ú	broadcastr.   r™   Úversion_infor   r    ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEZ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Ý  s`    
2

þþ*ÿ
zTestNetAPIs.test_net_if_addrsc                 C   sŽ   t rdtjdd d d fg}ndg}tjd|dL}t ¡ d d }|jsJJ ‚t r^|  |jd¡ n|  |jd¡ W d   ƒ n1 s€0    Y  d S )	NÚem1z06:3d:29)rV  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	   r1   r6  r!   r8   r7  rI   r9   r>  )r>   r,  rL   rM  r$   r$   r*   Ú test_net_if_addrs_mac_null_bytes  s    ÿ
z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   sœ   t  ¡ }|sJ |ƒ‚t jt jt jf}| ¡ D ]j\}}|  |t¡ |\}}}}}	|  |t¡ |  	||¡ |  	||¡ |  
|d¡ |  
|d¡ |  |	t¡ q,d S r‡   )r1   r8  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr<  rˆ   r‘   r£   r.   rH   )
r>   rK  Zall_duplexesr   ÚstatsrC  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   sX   t jdttjdƒd.}t ¡ }|  |i ¡ |js6J ‚W d   ƒ n1 sJ0    Y  d S )Nzpsutil._psutil_posix.net_if_mturB   r-   )	r!   r8   r  r  ZENODEVr1   r8  r9   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   r4  r5  rU  rW  r[  r   r   r   r\  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 urR|  |jd¡ |jd urj|  |jd¡ |j	d ur(|  |j	d¡ q(qd S r‡   )
r1   Úsensors_temperaturesr<  rˆ   r‘   Úlabelrû   rH   ÚhighÚcritical)r>   Útempsr   ÚentriesÚentryr$   r$   r*   Útest_sensors_temperaturesG  s    


z)TestSensorsAPIs.test_sensors_temperaturesc                 C   s„   ddgi}t jd|dX}tjddd d }|js8J ‚|  |jd¡ |  |jd	¡ |  |jd
¡ W d   ƒ n1 sv0    Y  d S )NZcoretemp)r_  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperaturesrÊ   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)	r!   r8   r1   r^  rI   r9   rû   r`  ra  )r>   ÚdrL   rb  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vrF|  |jd¡ n|jt jkr^|  |j	¡ |  
|j	t¡ d S )Nr   r«   )r1   Zsensors_batteryrH   r¬   rà   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrq   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‡   )
r1   Zsensors_fansr<  rˆ   r‘   r_  rû   r²   r   rH   )r>   Zfansr   rc  rd  r$   r$   r*   Útest_sensors_fanso  s    z!TestSensorsAPIs.test_sensors_fansN)r   r‚   rƒ   r„   r…   r   re  rg  r   r   rh  r   ri  r$   r$   r$   r*   r]  E  s   

r]  Ú__main__)Úrun_from_name)<Ú__doc__rD  r•   r  r/   r¥   rá   r  rn   r9  r™   rh   r„   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  r]  r   Zpsutil.tests.runnerrk  r   r$   r$   r$   r*   Ú<module>   sx    J% t  5
