a
    áªlcTŒ  ã                   @   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$   úT/var/www/html/django/DPS/env/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}   s    ÿ
z-TestProcessAPIs.test_wait_procs.<locals>.testc                 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*   re      s    ÿ
)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   r$   )rQ   r>   r*   Útest_wait_procsf   sF     zTestProcessAPIs.test_wait_procsc                 C   sP   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}|D ]}| ¡  q0t |¡\}}d S )Nc                 S   s   g | ]}t  |j¡‘qS r$   rS   r'   r$   r$   r*   r+   ¥   r,   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r3   rk   r1   r^   )r>   rq   rr   rs   ra   r?   rb   rc   r$   r$   r*   Útest_wait_procs_no_timeoutŸ   s    
z*TestProcessAPIs.test_wait_procs_no_timeoutc                 C   sv   |   ¡ }|  t |j¡¡ t |j¡}| ¡  | ¡  |  t |j¡¡ |  t d¡¡ |  	t d¡dt 
¡ v ¡ d S )NrT   r   )r3   rp   r1   Ú
pid_existsr&   r4   r5   r6   ri   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ˆ  ip  ©Úmsg)
r1   rQ   rw   ÚAssertionErrorrg   Úsleepr7   ÚrangeÚmaxri   )r>   rQ   r&   r$   r$   r*   Útest_pid_exists_2´   s    
z!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__r@   rN   ÚunittestÚskipIfr   r   ru   rv   rx   r   r$   r$   r$   r*   r#   ?   s   
ÿ
7
ÿ
	
r#   c                   @   sB   e Zd Zdd„ Ze eo e ¡  d¡dd„ ƒZ	dd„ Z
dd	„ Zd
S )ÚTestMiscAPIsc                 C   s4   t  ¡ }|  |t¡ |  |d¡ |  |t ¡ ¡ d S ©Nr   )r1   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterrh   rg   )r>   Zbtr$   r$   r*   Útest_boot_timeÅ   s    zTestMiscAPIs.test_boot_timeúunreliable on CIc                 C   sÂ   t  ¡ }|  |g ¡ |D ]¤}|js*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   re   )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
   ry   Ú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   rg   r   r±   )r>   Út1Zstop_atÚt2r$   r$   r*   Útest_cpu_times_time_increasest  s    z)TestCpuAPIs.test_cpu_times_time_increasesc                 C   sŒ   t jddD ]R}d}t|ƒ |D ]$}|  |t¡ |  |d¡ ||7 }q |  |t|ƒ¡ t|ƒ q|  tt jddd ƒtt jddƒ¡ d S )NTr¹   r   rŒ   F)	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   rg   r   r±   ÚzipZ_cpu_busy_time)r>   Ztot1Z	giveup_atZtot2rÏ   rÐ   Ú
differencer$   r$   r*   Útest_per_cpu_times_2Ÿ  s    
z TestCpuAPIs.test_per_cpu_times_2c                 C   sX   t  ¡ }t jdd}| dd„ t|Ž D ƒ¡}|jD ] }| jt||ƒt||ƒdd q2d S )NTr¹   c                 S   s   g | ]}t |ƒ‘qS r$   )rË   )r(   Únumr$   r$   r*   r+   ³  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>   Ú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   ƒ 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ª   rj   ÚshutilrÚ   r   Z
get_testfnr<   r   )r>   ÚusageZshutil_usageZ	toleranceÚfnamer$   r$   r*   Útest_disk_usage'  s,    "
ÿÿzTestDiskAPIs.test_disk_usageznot an ASCII fsc                 C   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)Úallry   ZcdromTc                 S   s.   t j | ¡} t j | ¡s&t j | ¡} q|  ¡ S rO   )r/   r¼   ÚabspathÚismountÚdirnamer¤   )r¼   r$   r$   r*   Úfind_mount_point  s    z;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_pointc                 S   s   g | ]}|j r|j  ¡ ‘qS r$   )r  r¤   r'   r$   r$   r*   r+   †  s   ÿz5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r1   Zdisk_partitionsrp   r   r  r	   r/   r¼   r½   r  r  r  ÚstatÚOSErrorr   r   ÚerrnoÚ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_   ro   ©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,  r.  r$   r$   r$   r*   r  %  s   

=ÿÿr  c                   @   sn   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZdd„ Zdd	„ Z	d
d„ Z
e epZepZe d¡dd„ ƒZdS )ÚTestNetAPIsr÷   c                    sh   ‡ fdd„}t jdd}||ƒ t jdd}ˆ  |g ¡ |D ]&}ˆ  |¡ ˆ  |t¡ ||| ƒ q<d S )Nc                    s(  ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ | jdks¢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Ž   rp   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È   Fr0  T)r!   r8   rG   r1   r1  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_statsro   ÚsocketÚAF_INETÚAF_INET6r4  Ú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
   rj   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)rT  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   r4  r!   r8   r5  rI   r9   r<  )r>   r*  rL   rK  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   r6  ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr:  r‡   r   r¡   r.   rH   )
r>   rI  Zall_duplexesr   ÚstatsrA  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   r6  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   r2  r3  rS  rU  rY  r   r   r   rZ  r$   r$   r$   r*   r/  ´  s   

	<ÿr/  c                   @   sr   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡e e	 d¡dd„ ƒƒZ
e e d¡d	d
„ ƒZdS )ÚTestSensorsAPIsr÷   c                 C   sŠ   t  ¡ }| ¡ D ]t\}}|  |t¡ |D ]Z}|  |jt¡ |jd 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^  r_  )r>   ÚdrL   r`  r$   r$   r*   Ú#test_sensors_temperatures_fahreneitU  s     
ÿÿÿÿ
z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz
no batteryc                 C   sp   t  ¡ }|  |jd¡ |  |jd¡ |jt jt jf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_UNLIMITEDrp   Zpower_pluggedr‡   r¡   )r>   r*  r$   r$   r*   Útest_sensors_batterya  s    ÿz$TestSensorsAPIs.test_sensors_batteryc                 C   sb   t  ¡ }| ¡ D ]L\}}|  |t¡ |D ]2}|  |jt¡ |  |jttf¡ |  	|jd¡ q(qd S r†   )
r1   Zsensors_fansr:  r‡   r   r]  rø   r°   r   rH   )r>   Zfansr   ra  rb  r$   r$   r*   Útest_sensors_fanso  s    z!TestSensorsAPIs.test_sensors_fansN)r€   r   r‚   rƒ   r„   r   rc  re  r   r   rf  r   rg  r$   r$   r$   r*   r[  E  s   

r[  Ú__main__)Úrun_from_name)<Ú__doc__rB  r”   r  r/   r£   rß   r  rm   r7  r˜   rg   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  r/  r[  r€   Zpsutil.tests.runnerri  r  r$   r$   r$   r*   Ú<module>   sx    J% t  5
