o
    ì©ZhôŠ  ã                   @   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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r=dd3l7m8Z8 e8e9ƒ dS 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)ÚPYPY)ÚUNICODE_SUFFIX)ÚPsutilTestCase)Úcheck_net_address)Úenum)Úmock)Úretry_on_failure)Ú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   sL  |   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^w   Y  tjdt t ¡ ¡d- |  tj¡ tt ¡ ƒ W d   ƒ n1 s‡w   Y  W d   ƒ d S W d   ƒ d S 1 sŸw   Y  d S )Nc                 S   ó   g | ]}|j ‘qS © ©Úpid©Ú.0Úxr%   r%   úO/var/www/html/lang_env/lib/python3.10/site-packages/psutil/tests/test_system.pyÚ
<listcomp>@   ó    z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   r$   r%   r&   r(   r%   r%   r+   r,   B   r-   c                 S   r$   r%   r&   r(   r%   r%   r+   r,   F   r-   zpsutil.Process©Zside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterÚspawn_testprocr'   ÚProcessÚkillÚwaitZassertNotInr    ÚpatchZNoSuchProcessÚassertEqualÚlistÚAccessDeniedÚassertRaises©ÚselfZsprocÚpr%   r%   r+   Útest_process_iter?   s*   ÿþÿÿþ"þz!TestProcessAPIs.test_process_iterc                 C   sh  t jdgdD ]}|  t|j ¡ ƒdg¡ q|  t¡ tt jdgdƒ W d   ƒ n1 s/w   Y  tj	dt  
dd¡d)}t jddgdD ]}|  |jd ¡ |  |jd d¡ qH|jsaJ ‚W d   ƒ n1 skw   Y  tj	dt  
dd¡d/}tƒ }t jddg|d	D ]}|  |jd |¡ |  |jd d¡ qˆ|js¢J ‚W d   ƒ d S 1 s­w   Y  d S )
Nr'   )ÚattrsZfooz$psutil._psplatform.Process.cpu_timesr   Ú r.   Ú	cpu_times)rA   Zad_value)r2   r3   r9   r:   ÚinfoÚkeysr<   Ú
ValueErrorr    r8   r;   ÚassertIsNoneÚassertGreaterEqualÚcalledÚobjectÚassertIs)r>   r?   ÚmÚflagr%   r%   r+   Útest_prcess_iter_w_attrsP   s4   ÿ
ÿû
ÿ
ÿ"ù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ršˆ | ¡ 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   ó   g | ]}t  |j¡‘qS r%   ©r2   r5   r'   r(   r%   r%   r+   r,   n   ó    z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rR   g{®Gáz„?©rW   rR   g      à?é   Ú
returncodeé   c                    ó<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nç¸…ëQ¸ž?rY   rX   é   ©r2   Ú
wait_procsr9   Úlen©ÚprocsrR   ÚgoneÚalive©r>   r%   r+   Útest{   ó   
ÿz-TestProcessAPIs.test_wait_procs.<locals>.testc                 S   r$   r%   r&   r(   r%   r%   r+   r,   …   r-   c                    r]   )Nr^   rY   rZ   r   r`   rc   rg   r%   r+   rh   Ž   ri   )r4   r<   rF   r2   ra   Ú	TypeErrorÚtimeÚ
assertLessr9   rb   ÚassertFalseÚhasattrr!   Ú	terminater/   r'   r	   Úpopr[   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r>   rR   Úsproc1Úsproc2Úsproc3rd   Útre   rf   r?   rh   r%   )rQ   r>   r+   Útest_wait_procsd   sH    ÿzTestProcessAPIs.test_wait_procsc                 C   sP   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}|D ]}| ¡  qt |¡\}}d S )Nc                 S   rS   r%   rT   r(   r%   r%   r+   r,   £   rU   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r4   ro   r2   ra   )r>   ru   rv   rw   rd   r?   re   rf   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 )NrV   r   )r4   rt   r2   Ú
pid_existsr'   r5   r6   r7   rm   r9   rQ   r=   r%   r%   r+   Útest_pid_exists¨   s   zTestProcessAPIs.test_pid_existsc              	   C   s’   t  ¡ }|D ]$}z	t  |¡sJ ‚W q ty*   t d¡ |t  ¡ v r(|  |¡ Y qw tt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d q:d S )Ngš™™™™™¹?iˆ  ip  ©Úmsg)
r2   rQ   r{   ÚAssertionErrorrk   ÚsleepÚfailÚrangeÚmaxrm   )r>   rQ   r'   r%   r%   r+   Útest_pid_exists_2²   s   

€ûÿz!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__r@   rN   r"   ÚskipIfr   r   ry   rz   r|   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   )r2   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterrl   rk   )r>   Zbtr%   r%   r+   Útest_boot_timeÄ   s   zTestMiscAPIs.test_boot_timeúunreliable on CIc                 C   sÂ   t  ¡ }|  |g ¡ |D ]R}|jsJ |ƒ‚|  |jt¡ |  |jttd ƒf¡ |jd ur7|  |jttd ƒf¡ |j |j |j	dksFJ |ƒ‚t
j
 |j	¡ tsQtrX|  |j¡ qt  |j¡ qd S )Nç        )r2   ÚusersÚassertNotEqualÚnamer‹   ÚstrZterminalÚtypeÚhostÚstartedÚdatetimeÚfromtimestampr   r   rG   r'   r5   )r>   r‘   Úuserr%   r%   r+   Ú
test_usersÊ   s    
ózTestMiscAPIs.test_usersc                 C   s*   t j}tt _z
t ¡  W |t _d S |t _w rO   )ÚsysÚstdoutr   r2   rh   )r>   r   r%   r%   r+   Ú	test_testÝ   s
   
zTestMiscAPIs.test_testc                 C   sl  g d¢}|D ]}| j tt|ƒt|d qtjdkr•tjsJ ‚tjr#J ‚| d¡ dt	j
 ¡ v r:tjs4J ‚| d¡ njdt	j
 ¡ v rjtjsFJ ‚|  tjtjtjg d¡d	¡ | d
¡ | d¡ | d¡ | d¡ n:dt	j
 ¡ v sxdt	j
 ¡ v rƒtjs}J ‚| d¡ n!dt	j
 ¡ v r”tjsJ ‚| d¡ ntjsšJ ‚tjrŸJ ‚| d¡ |D ]}| jtt|ƒd|d q¦d S )N)	r	   r   r   r   r   r   r   r   r
   r}   Úposixr	   Úlinuxr   ZbsdTrX   r   r   r   r   ÚsunosÚsolarisr
   Údarwinr   r   F)r‹   Úgetattrr2   Úboolr0   r“   r	   r   Úremoverœ   ÚplatformÚlowerr   r   r9   r   r   r   Úcountr
   r   rK   )r>   Únamesr“   r%   r%   r+   Útest_os_constantsæ   sF   





ÿÿ





€


ÿzTestMiscAPIs.test_os_constantsN)r…   r†   r‡   rŽ   r"   rˆ   r   r2   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r$dks)J |ƒ‚ J |ƒ‚|jdks2J |ƒ‚|jdks;J |ƒ‚|jD ]5}t||ƒ}|dkrQ|  	|t
tf¡ |dkrs|dksb|  d||f ¡ ||jkrs|  d||j||f ¡ q>d S )Nr   éd   ÚpercentÚtotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r2   Zvirtual_memoryr¯   Ú	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J |ƒ‚|jdksJ |ƒ‚|jdkr,|jdks+J |ƒ‚n	|jdks5J |ƒ‚d|j  krCdksHJ |ƒ‚ J |ƒ‚|jdksQJ |ƒ‚|j	dksZJ |ƒ‚d S )N)r¯   r±   r²   r®   ÚsinÚsoutr   r­   )
r2   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 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¡rBt
dƒ}| ¡ }W d   ƒ n1 s4w   Y  d|vrDt d¡‚d S d S )NT©ÚpercpurX   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r2   Ú	cpu_countZassertIsNotNoner9   rb   rC   rH   r0   Ú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   sh   t  ¡ }t jdd}|d u r|  d¡‚tr&t ¡ d d… dkr&|  |¡ d S |  |d¡ |  ||¡ d S )NF©rÃ   zcpu_count_cores() is Noner_   )é   rX   rX   )r2   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 ]J}t jd|d}|  t ¡ ¡ |jsJ ‚W d   ƒ n1 s"w   Y  t jd|d}|  tjdd¡ |js=J ‚W d   ƒ n1 sGw   Y  qd S )N)rV   r   Nz$psutil._psplatform.cpu_count_logical©Úreturn_valuez"psutil._psplatform.cpu_count_coresFrÆ   )r    r8   rG   r2   r¾   rI   )r>   ÚvalrL   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   )r2   rC   Úsumr‹   rŒ   rH   r9   r”   )r>   r¯   ÚtimesÚcp_timer%   r%   r+   Útest_cpu_timesV  s   
zTestCpuAPIs.test_cpu_timesc                 C   sV   t t ¡ ƒ}t ¡ t }t ¡ |k r$t t ¡ ƒ}||krd S t ¡ |k s|  d¡ d S )Nztime remained the same)rÏ   r2   rC   rk   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 ])}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)	r2   rC   rÏ   r‹   rŒ   rH   r9   r”   rb   )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 ]\}}t  |¡t  |¡}}|| }|dkr= d S q#q)NTr¼   rW   gš™™™™™©?)r2   rC   rk   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 qd S )NTr¼   c                 S   s   g | ]}t |ƒ‘qS r%   )rÏ   )r)   Únumr%   r%   r+   r,   ²  s    z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rX   ©Údelta)r2   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   sv   z|   |t¡ |  |d¡ |  |d¡ |  |dt ¡  ¡ W d S  ty: } ztd|t 	|¡t 	|¡f ƒ‚d }~ww )Nr   g       €g      Y@z
%s
last=%s
new=%s)
r‹   rŒ   rH   ZassertIsNotÚassertLessEqualr2   r¾   r   ÚpprintZpformat)r>   r®   Zlast_retZnew_retÚerrr%   r%   r+   Ú_test_cpu_percent·  s   ÿ€ÿzTestCpuAPIs._test_cpu_percentc                 C   st   t jdd}tdƒD ]}t jd d}|  |||¡ |}q
|  t¡ t jdd W d   ƒ d S 1 s3w   Y  d S ©Nçü©ñÒMbP?)Úintervalr­   rV   )r2   Ú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 d   ƒ d S 1 sEw   Y  d S )Nrç   T©rè   r½   r­   rV   )	r2   ré   r9   rb   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   ƒ d S 1 sAw   Y  d S ræ   )r2   Ú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 ]%}t jd dd}|D ]}|D ]	}|  |||¡ q$|  t|ƒ||¡ q |}qd S )Nrç   Trí   r­   )r2   rð   r9   rb   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 ¡ q#qW d   ƒ d S 1 s9w   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,   î  s    zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)rÝ   r‚   rb   r³   r(   r%   r%   r+   r,   î  s    "ÿzCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesrË   )r2   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 ]}t||ƒ}|  |d¡ ts'|dv r'|  |d¡ qd S )N)Úctx_switchesÚ
interruptsZsoft_interruptsZsyscallsr   )rõ   rö   )r2   Z	cpu_statsr9   r³   r¤   rH   r   r   )r>   Úinfosr“   r¶   r%   r%   r+   Útest_cpu_statsõ  s   þ

€ûzTestCpuAPIs.test_cpu_statsznot suportedc                    sh   ‡ fdd„}t jdd}tr|sˆ  d¡‚|sJ |ƒ‚|t jddgƒ tr2ˆ  t|ƒt  ¡ ¡ d S d S )Nc                    sj   | D ]0}ˆ   |jd¡ |jdkrˆ  |j|j¡ |jD ]}t||ƒ}ˆ  |ttt	f¡ ˆ  
|d¡ qqd S )N)ÚcurrentÚminrƒ   r   r   )r9   r³   rƒ   râ   rù   r¤   r‹   r´   r   rŒ   rH   )ÚlsÚntr“   r¶   rg   r%   r+   Úcheck_ls  s   


ýüz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTr¼   zreturns empty list on FreeBSDF)r2   Zcpu_freqr   rÈ   r   r9   rb   r¾   )r>   rý   rû   r%   rg   r+   Útest_cpu_freq  s   

ÿzTestCpuAPIs.test_cpu_freqúnot supportedc                 C   s>   t  ¡ }|  t|ƒd¡ |D ]}|  |t¡ |  |d¡ qd S )NrZ   r   )r2   Ú
getloadavgr9   rb   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o8e ¡  d¡dd„ ƒƒZdd„ ZdS )ÚTestDiskAPIszunreliable on PYPY32 + 32BITc                 C   s2  t  t ¡ ¡}|  |jd¡ |jdksJ |ƒ‚|jdks J |ƒ‚|jdks)J |ƒ‚|j|jks3J |ƒ‚|j|jks=J |ƒ‚d|j	  krHdksNn J |j	ƒ‚t
tdƒrxt t ¡ ¡}d}|  |j|j¡ | j|j|j|d | j|j|j|d |  ¡ }|  t¡ t  |¡ W d   ƒ d S 1 s’w   Y  d S )N)r¯   r±   r²   r®   r   r­   Ú
disk_usagei  P rÛ   )r2   r  r0   Úgetcwdr9   r³   r¯   r±   r²   r®   rn   Ú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 d   ƒ d S 1 sw   Y  d S rO   )r<   ÚUnicodeEncodeErrorr2   r  r   rg   r%   r%   r+   Útest_disk_usage_unicode>  s   "ÿz$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r2   r  rg   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 ]1}||ƒ tr#d|jv r#qts1tj |j	¡s0J |ƒ‚n|j	 tj |j
¡s?J |ƒ‚|jsFJ |ƒ‚qt jdd}ˆ j||d t jddD ]K}||ƒ ts¥|j
r¥zt |j
¡ W n, ty™ } z tr…tr…|jtjkr…W Y d }~qZ|jtjtjfvr‚ W Y d }~qZd }~ww tj |j
¡s¥J |ƒ‚qZd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rNˆ  | j	d¡ d S d S rŠ   )r‹   Údevicer”   Ú
mountpointÚfstypeÚoptsZmaxfiler´   r•   Zmaxpathr   r   ©rü   rg   r%   r+   Úcheck_ntupleH  s   
ÿz7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úallr}   ZcdromTc                 S   s8   t j | ¡} t j | ¡st j | ¡} t j | ¡r|  ¡ S rO   )r0   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>)r2   Zdisk_partitionsrt   r   r  r	   r0   r¿   rÀ   r  r  r  ÚstatÚOSErrorr   r   ÚerrnoZEIOÚEPERMÚEACCESÚ__file__r/   )r>   r  rû   Zdiskrä   r  ÚmountZmountsr%   rg   r+   Útest_disk_partitionsG  sF   
ÿ€û€
ÿ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 ]}|s4J |ƒ‚||| ƒ q,d S )Nc                    sì   ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ tsctscˆ   | d | j¡ ˆ   | d | j¡ t	rXˆ   | d | j
¡ ˆ   | d | j¡ ˆ   | d	 | j¡ ntrcˆ   | d | j¡ | jD ]}t| |ƒdkssJ | ƒ‚qfd S )
Nr   rX   r_   rZ   é   é   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“   rg   r%   r+   r  ‰  s    
ÿz8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r2   Údisk_io_countersr9   rb   rs   ©r>   r  ÚretÚkeyr%   rg   r+   Útest_disk_io_counters„  s   þz"TestDiskAPIs.test_disk_io_countersc                 C   ód   t jdi d!}|  tjdd¡ |  tjddi ¡ |js J ‚W d   ƒ d S 1 s+w   Y  d S )Nz#psutil._psplatform.disk_io_countersrË   Fr'  T)r    r8   rG   r2   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   r0   r¿   rÀ   r   r2   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p-ep-e 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sQJ | ƒ‚| jdksZJ | ƒ‚| jdkscJ | ƒ‚| jdkslJ | ƒ‚| jdksuJ | ƒ‚| jdks~J | ƒ‚| jdks‡J | ƒ‚| jdksJ | ƒ‚d S )	Nr   rX   r_   rZ   r!  r"  rÇ   r#  )	r9   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  rg   r%   r+   r  ²  s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r2   Únet_io_countersr’   rt   r‹   r”   r)  r%   rg   r+   Útest_net_io_counters°  s   
ýz TestNetAPIs.test_net_io_countersc                 C   r-  )Nz"psutil._psplatform.net_io_countersrË   Fr1  T)r    r8   rG   r2   r2  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rptsp|  	|jtj¡ || jrÝ|jtjkrŸt |j¡}t |¡ | |jdf¡ W d   ƒ n1 s™w   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Øw   Y  |j|j|j|j fD ]}|d urù|jtjkrùt!||jƒ qç|jr|  "|j ¡ q4|j r|  "|j¡ q4qt#st$st%r,t&tdƒr*|  t jtj¡ d S d S t'r9|  t jtj(¡ d S t)rE|  t jd¡ d S d S )N)rZ   r!  r   ÚAF_LINKrV   )*r2   Únet_if_addrsÚnet_if_statsrs   ÚsocketÚAF_INETÚAF_INET6r5  Úitemsr‹   r”   r9   rb   Úfamilyr´   ÚaddressÚnetmaskr•   Ú	broadcastr/   rœ   Úversion_infor   r   ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEZptpr   rG   r   r   r
   rn   r   Ú	AF_PACKETr   )r>   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrD   ÚafÚsocktypeÚprotoÚ	canonnameÚsaÚipr%   r%   r+   Útest_net_if_addrs×  sp   
ÿ€

þþÿÿ€€Ý%ÿÿ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/}t ¡ d d }|js%J ‚t r/|  |jd¡ n|  |jd¡ W d   ƒ d S W d   ƒ d S 1 sIw   Y  d S )	NÚem1z06:3d:29)rU  rV   z06-3d-29NNNzpsutil._psplatform.net_if_addrsrË   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)	r	   r2   r5  r    r8   r6  rI   r9   r=  )r>   r*  rL   rL  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 ].\}}|  |t¡ |\}}}}|  |t¡ |  	||¡ |  	||¡ |  
|d¡ |  
|d¡ qd S rŠ   )r2   r7  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr;  r‹   r”   r¥   r/   rH   )	r>   rJ  Zall_duplexesr“   ÚstatsrB  ZduplexÚspeedZmtur%   r%   r+   Útest_net_if_stats$  s   þùzTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc                 C   sZ   t jdttjdƒd}t ¡ }|  |i ¡ |jsJ ‚W d   ƒ d S 1 s&w   Y  d S )Nzpsutil._psutil_posix.net_if_mturB   r.   )	r    r8   r  r  ZENODEVr2   r7  r9   rI   )r>   rL   r*  r%   r%   r+   Útest_net_if_stats_enodev3  s   
ÿ"üz$TestNetAPIs.test_net_if_stats_enodevN)r…   r†   r‡   r"   rˆ   r   r3  r4  rT  rV  rY  r   r   r   rZ  r%   r%   r%   r+   r0  ®  s    

	<ÿr0  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¡ |D ]-}|  |jt¡ |jd ur)|  |jd¡ |jd ur5|  |jd¡ |j	d urA|  |j	d¡ qqd S rŠ   )
r2   Úsensors_temperaturesr;  r‹   r”   Úlabelrù   rH   ÚhighÚcritical)r>   Útempsr“   ÚentriesÚentryr%   r%   r+   Útest_sensors_temperatures@  s   


€ùþz)TestSensorsAPIs.test_sensors_temperaturesc                 C   s†   ddgi}t jd|d-}tjddd d }|jsJ ‚|  |jd¡ |  |jd	¡ |  |jd
¡ W d   ƒ d S 1 s<w   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   r2   r\  rI   r9   rù   r^  r_  )r>   ÚdrL   r`  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vr#|  |jd¡ n|jt jkr/|  |j	¡ |  
|j	t¡ d S )Nr   r­   )r2   Zsensors_batteryrH   r®   râ   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrt   Zpower_pluggedr‹   r¥   )r>   r*  r%   r%   r+   Útest_sensors_batteryZ  s   ÿz$TestSensorsAPIs.test_sensors_batteryc                 C   sb   t  ¡ }| ¡ D ]&\}}|  |t¡ |D ]}|  |jt¡ |  |jttf¡ |  	|jd¡ qqd S rŠ   )
r2   Zsensors_fansr;  r‹   r”   r]  rù   r´   r   rH   )r>   Zfansr“   ra  rb  r%   r%   r+   Útest_sensors_fansh  s   ýþz!TestSensorsAPIs.test_sensors_fansN)r…   r†   r‡   r"   rˆ   r   rc  re  r   r   rf  r   rg  r%   r%   r%   r+   r[  >  s    

r[  Ú__main__)Úrun_from_name):Ú__doc__rC  r˜   r  r0   rã   r  rq   r8  rœ   rk   r2   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  r0  r[  r…   Zpsutil.tests.runnerri  r  r%   r%   r%   r+   Ú<module>   sx    J% q  
5þ