o
    –š£hPŒ  ã                   @   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rEdd3l9m:Z: e:e;ƒ 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)Ú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   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/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-packages/psutil/tests/test_system.pyÚ
<listcomp>B   ó    z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   r$   r%   r&   r(   r%   r%   r+   r,   D   r-   c                 S   r$   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*   ÿþÿÿþ"þ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)rB   Zad_value)r2   r3   r:   r;   ÚinfoÚkeysr=   Ú
ValueErrorr!   r9   r<   ÚassertIsNoneÚassertGreaterEqualÚcalledÚobjectÚassertIs)r?   r@   ÚmÚflagr%   r%   r+   Útest_prcess_iter_w_attrsR   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+   Úcallbacki   s   z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   ó   g | ]}t  |j¡‘qS r%   ©r2   r5   r'   r(   r%   r%   r+   r,   p   ó    z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rS   g{®Gáz„?©rX   rS   g      à?é   Ú
returncodeé   c                    ó<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nç¸…ëQ¸ž?rZ   rY   é   ©r2   Ú
wait_procsr:   Úlen©ÚprocsrS   ÚgoneÚalive©r?   r%   r+   Útest_1}   ó   
ÿz/TestProcessAPIs.test_wait_procs.<locals>.test_1c                 S   r$   r%   r&   r(   r%   r%   r+   r,   ‡   r-   c                    r^   )Nr_   rZ   r[   r   ra   rd   rh   r%   r+   Útest_2   rj   z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r4   r=   rG   r2   rb   Ú	TypeErrorÚtimeÚ
assertLessr:   rc   ÚassertFalseÚhasattrr"   Ú	terminater/   r'   r	   Úpopr\   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r?   rS   Úsproc1Úsproc2Úsproc3re   Útrf   rg   r@   ri   rk   r%   )rR   r?   r+   Útest_wait_procsf   sH    ÿzTestProcessAPIs.test_wait_procsc                 C   sL   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}|D ]}| ¡  qt |¡ d S )Nc                 S   rT   r%   rU   r(   r%   r%   r+   r,   ¥   rV   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r4   rq   r2   rb   )r?   rw   rx   ry   re   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 )NrW   r   )r4   rv   r2   Ú
pid_existsr'   r5   r6   r7   ro   r:   rR   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  ¡ ¡ Y qw tt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d q7d S )Ngš™™™™™¹?i˜:  i€>  ©Úmsg)
r2   rR   r}   ÚAssertionErrorrm   Úsleepr8   ÚrangeÚmaxro   )r?   rR   r'   r%   r%   r+   Útest_pid_exists_2´   s   
üÿz!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__rA   rO   ÚunittestÚskipIfr   r   r{   r|   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ÚassertGreaterrn   rm   )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   rH   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 rP   )ÚsysÚstdoutr   r2   Útest)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bsdTrY   r   r   r   r   ÚsunosÚsolarisr
   Údarwinr   r   F)r   Úgetattrr2   Úboolr0   r•   r	   r   Úremoverž   ÚplatformÚlowerr   r   r:   r   r   r   Úcountr
   r   rL   )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   Ú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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_memoryr:   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oIe ¡ 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¡rBt
dƒ}| ¡ }W d   ƒ n1 s4w   Y  d|vrDt d¡‚d S d S )NT©ÚpercpurY   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r2   Ú	cpu_countZassertIsNotNoner:   rc   rD   rI   r0   Ú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   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`   )é   rY   rY   )r2   rÂ   ÚskipTestr   rž   ÚgetwindowsversionrH   rI   )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)rW   r   Nz$psutil._psplatform.cpu_count_logical©Úreturn_valuez"psutil._psplatform.cpu_count_coresFrÊ   )r!   r9   rH   r2   rÂ   rJ   )r?   ÚvalrM   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’   )r2   rD   Úsumr   rŽ   rI   r:   r–   )r?   r²   ÚtimesÚcp_timer%   r%   r+   Útest_cpu_timesW  s   
zTestCpuAPIs.test_cpu_timesc                 C   sR   t t ¡ ƒ}t ¡ t }t ¡ |k r$t t ¡ ƒ}||krd S t ¡ |k s|  d¡‚)Nztime remained the same)rÓ   r2   rD   rm   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 ])}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   rD   rÓ   r   rŽ   rI   r:   r–   rc   )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À   rX   gš™™™™™©?)r2   rD   rm   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>rY   ©Údelta)r2   rD   Ú_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Ž   rI   ZassertIsNotÚassertLessEqualr2   rÂ   r   ÚpprintÚ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°   rW   )r2   Úcpu_percentrƒ   rê   r=   rG   )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   ƒ d S 1 sEw   Y  d S )Nrì   T©rí   rÁ   r°   rW   )	r2   rî   r:   rc   rÂ   rƒ   rê   r=   rG   ©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=   rG   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ö   r:   rc   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ƒ   rc   r¶   r(   r%   r%   r+   r,   ï  s    "ÿzCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesrÏ   )r2   rö   rD   r!   r9   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_statsr:   r¶   r§   rI   r   r   )r?   Úinfosr•   rº   r%   r%   r+   Útest_cpu_statsö  s   þ

€ûzTestCpuAPIs.test_cpu_statsÚarm64zskipped due to #1892únot supportedc                    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   )r:   r¶   r„   ræ   r  r§   r   r·   r   rŽ   rI   )ÚlsÚntr•   rº   rh   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   r:   rc   rÂ   )r?   r  r  r%   rh   r+   Útest_cpu_freq  s   

ÿzTestCpuAPIs.test_cpu_freqc                 C   s>   t  ¡ }|  t|ƒd¡ |D ]}|  |t¡ |  |d¡ qd S )Nr[   r’   )r2   Ú
getloadavgr:   rc   r   rŽ   rI   )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o8e ¡  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s)J |ƒ‚|j|jks3J |ƒ‚|j|jks=J |ƒ‚d|j	  krHdksNn J |j	ƒ‚t
tdƒrzt t ¡ ¡}d}|  |j|j¡ | j|j|j|d tsz| 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   Úgetcwdr:   r¶   r²   r´   rµ   r±   rp   Ú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 d   ƒ d S 1 sw   Y  d S rP   )r=   ÚUnicodeEncodeErrorr2   r  r   rh   r%   r%   r+   Útest_disk_usage_unicodeD  s   "ÿz$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r2   r  rh   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 ]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  rh   r%   r+   Úcheck_ntupleN  s   
ÿz7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úallr   ZcdromTc                 S   s8   t j | ¡} t j | ¡st j | ¡} t j | ¡r|  ¡ S rP   )r0   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>)r2   Zdisk_partitionsrv   r   r  r	   r0   rÃ   rÄ   r  r  r  ÚstatÚOSErrorr   r   ÚerrnoÚEIOZEPERMÚEACCESÚ__file__r/   )r?   r  r  Zdiskré   r   ÚmountZmountsr%   rh   r+   Útest_disk_partitionsM  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   rY   r`   r[   é   é   rË   é   é   )r:   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•   rh   r%   r+   r    s    
ÿz8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r2   Údisk_io_countersr:   rc   ru   ©r?   r  ÚretÚkeyr%   rh   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!   r9   rH   r2   r0  r:   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   r0   rÃ   rÄ   r   r2   r0  r4  r7  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   rY   r`   r[   r)  r*  rË   r+  )	r:   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutr  rh   r%   r+   r  ¸  s    z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r2   Únet_io_countersr”   rv   r   r–   r1  r%   rh   r+   Útest_net_io_counters¶  s   
ýz TestNetAPIs.test_net_io_countersc                 C   r5  )Nz"psutil._psplatform.net_io_countersrÏ   Fr9  T)r!   r9   rH   r2   r:  r:   rJ   r6  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)r[   r)  r   ÚAF_LINKrW   )*r2   Únet_if_addrsÚnet_if_statsru   ÚsocketÚAF_INETÚAF_INET6r=  Úitemsr   r–   r:   rc   Úfamilyr·   ÚaddressÚnetmaskr—   Ú	broadcastr/   rž   Úversion_infor   r    ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEZptpr   rH   r   r   r
   rp   r   Z	AF_PACKETr   )r?   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrE   Ú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)r\  rW   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   r=  r!   r9   r>  rJ   r:   rE  )r?   r2  rM   rS  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 ]5\}}|  |t¡ |\}}}}}	|  |t¡ |  	||¡ |  	||¡ |  
|d¡ |  
|d¡ |  |	t¡ qd S rŒ   )r2   r?  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNrC  r   r–   r¨   r/   rI   )
r?   rQ  Zall_duplexesr•   ÚstatsrJ  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   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_mturC   r.   )	r!   r9   r"  r#  ZENODEVr2   r?  r:   rJ   )r?   rM   r2  r%   r%   r+   Útest_net_if_stats_enodev:  s   
ÿ"üz$TestNetAPIs.test_net_if_stats_enodevN)r†   r‡   rˆ   r‰   rŠ   r   r;  r<  r[  r]  ra  r   r   r   rb  r%   r%   r%   r+   r8  ´  s    

	<ÿr8  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_temperaturesrC  r   r–   Úlabelr  rI   Ú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-}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)re  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperaturesrÏ   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)	r!   r9   r2   rd  rJ   r:   r  rf  rg  )r?   ÚdrM   rh  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r#|  |jd¡ n|jt jkr/|  |j	¡ |  
|j	t¡ d S )Nr   r°   )r2   Zsensors_batteryrI   r±   ræ   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrv   Zpower_pluggedr   r¨   )r?   r2  r%   r%   r+   Útest_sensors_batterya  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_fansrC  r   r–   re  r  r·   r   rI   )r?   Zfansr•   ri  rj  r%   r%   r+   Útest_sensors_fanso  s   ýþz!TestSensorsAPIs.test_sensors_fansN)r†   r‡   rˆ   r‰   rŠ   r   rk  rm  r   r   rn  r   ro  r%   r%   r%   r+   rc  E  s    

rc  Ú__main__)Úrun_from_name)<Ú__doc__rK  rš   r#  r0   rª   rç   r  rs   r@  rž   rm   r‰   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  r8  rc  r†   Zpsutil.tests.runnerrq  r&  r%   r%   r%   r+   Ú<module>   s|    J% t  
5þ