U
    +È-eK  ã                   @   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 dd$lm1Z1 G 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 d/d0„ d0e-ƒZ7G d1d2„ d2e-ƒZ8e9d3kr’dd4l:m;Z; e;e<ƒ dS )5zTests for system APIS.é    N)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚPY3)Ú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   s8  |   t ¡ dd„ t ¡ D ƒ¡ |  ¡ }|   |jdd„ t ¡ D ƒ¡ t |j¡}| ¡  | 	¡  |  
|jdd„ t ¡ D ƒ¡ dd„ t ¡ D ƒ}|  t|dd„ dtt|ƒd	d„ d¡ tjd
t t ¡ ¡d |  tt ¡ ƒg ¡ W 5 Q R X tjd
t t ¡ ¡d* |  tj¡ tt ¡ ƒ W 5 Q R X W 5 Q R X d S )Nc                 S   s   g | ]
}|j ‘qS © ©Úpid©Ú.0Úxr%   r%   úY/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/psutil/tests/test_system.pyÚ
<listcomp>C   s     z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r%   r&   r(   r%   r%   r+   r,   E   s     c                 S   s   g | ]
}|j ‘qS r%   r&   r(   r%   r%   r+   r,   I   s     c                 S   s   g | ]}|‘qS r%   r%   r(   r%   r%   r+   r,   L   s     c                 S   s   | j S ©Nr&   ©r*   r%   r%   r+   Ú<lambda>M   ó    z3TestProcessAPIs.test_process_iter.<locals>.<lambda>)Úkeyc                 S   s   | j S r-   r&   r.   r%   r%   r+   r/   N   r0   zpsutil.Process©Zside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterÚspawn_testprocr'   ÚProcessÚkillÚwaitÚassertNotInÚassertEqualÚsortedÚsetr"   ÚpatchZNoSuchProcessÚlistÚAccessDeniedÚassertRaises)ÚselfÚsprocÚpÚlsr%   r%   r+   Útest_process_iterB   s(    ÿÿÿz!TestProcessAPIs.test_process_iterc              	   C   s,  t jdgdD ]}|  t|j ¡ ƒdg¡ q|  t¡ tt jdgdƒ W 5 Q R X tj	dt  
dd¡dH}t jddgdD ]&}|  |jd ¡ |  |jd d¡ q||js®t‚W 5 Q R X tj	dt  
dd¡dT}tƒ }t jddg|d	D ](}|  |jd |¡ |  |jd d¡ qè|jst‚W 5 Q R X d S )
Nr'   )ÚattrsZfooz$psutil._psplatform.Process.cpu_timesr   Ú r2   Ú	cpu_times)rI   Zad_value)r6   r7   r=   rA   ÚinfoÚkeysrC   Ú
ValueErrorr"   r@   rB   ÚassertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectZassertIs)rD   rF   ÚmÚflagr%   r%   r+   Útest_prcess_iter_w_attrsX   s0    
ÿ
ÿ ÿ
z(TestProcessAPIs.test_prcess_iter_w_attrsz-spawn_testproc() unreliable on PYPY + WINDOWSc                    sæ  ‡ fdd„}g ‰ ˆ  ¡ }ˆ  ¡ }ˆ  ¡ }dd„ |||fD ƒ}ˆjttj|dd ˆjttj|dd t ¡ }tj|d	|d
\}}ˆ t ¡ | d¡ ˆ |g ¡ ˆ t	|ƒd¡ ˆ ˆ g ¡ |D ]}	ˆ 
t|	dƒ¡ qÀtdƒ‡fdd„ƒ}
| ¡  |
||ƒ\}}ˆ |jdd„ |D ƒ¡ tr6ˆ | ¡ jtj ¡ nˆ | ¡ jd¡ ˆ ˆ |jg¡ |D ]}	ˆ 
t|	dƒ¡ q\tdƒ‡fdd„ƒ}| ¡  | ¡  |||ƒ\}}ˆ tˆ ƒt|j|j|jgƒ¡ |D ]}	ˆ t|	dƒ¡ qÊd S )Nc                    s   ˆ   | j¡ d S r-   )Úappendr'   )rF   )Úpidsr%   r+   Úcallbacko   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc                 S   s   g | ]}t  |j¡‘qS r%   ©r6   r9   r'   r(   r%   r%   r+   r,   v   s     z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rY   g{®Gáz„?©r\   rY   g      à?é   Ú
returncodeé   c                    s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nç¸…ëQ¸ž?r^   r]   é   ©r6   Ú
wait_procsr=   Úlen©ÚprocsrY   ÚgoneÚalive©rD   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,      s     c                    s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Nrb   r^   r_   r   rd   rg   rk   r%   r+   Útest_2–   s    ÿ
z/TestProcessAPIs.test_wait_procs.<locals>.test_2)r8   rC   rN   r6   re   Ú	TypeErrorÚtimeÚ
assertLessr=   rf   ÚassertFalseÚhasattrr#   Ú	terminater3   r'   r	   Úpopr`   ÚsignalÚSIGTERMr?   Ú
assertTrue)rD   rY   Úsproc1Úsproc2Úsproc3rh   Útri   rj   rF   rl   rm   r%   )rX   rD   r+   Útest_wait_procsl   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%   rZ   r(   r%   r%   r+   r,   «   s     z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r8   rs   r6   re   )rD   rx   ry   rz   rh   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 
¡ k¡ d S )Nr[   r   )r8   rw   r6   Ú
pid_existsr'   r9   r:   r;   rq   r=   rX   )rD   rE   rF   r%   r%   r+   Útest_pid_exists°   s    zTestProcessAPIs.test_pid_existsc              	   C   s   t  ¡ }|D ]F}zt  |¡s t‚W q tk
rP   t d¡ |  |t  ¡ ¡ Y qX qtt|ƒd t|ƒd ƒ}|D ]}| j	t  |¡|d qrd S )Ngš™™™™™¹?i˜:  i€>  ©Úmsg)
r6   rX   r~   rR   ro   Úsleepr<   ÚrangeÚmaxrq   )rD   rX   r'   r%   r%   r+   Útest_pid_exists_2º   s    
z!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__rH   rV   Ú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   )r6   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterrp   ro   )rD   Zbtr%   r%   r+   Útest_boot_timeË   s    zTestMiscAPIs.test_boot_timeúunreliable on CIc                 C   sÂ   t  ¡ }|  |g ¡ |D ]¤}|js*t|ƒ‚|  |jt¡ |  |jttd ƒf¡ |j	d k	rn|  |j	ttd ƒf¡ |j |j	 |j
dksŒt|ƒ‚tj |j
¡ ts¢tr°|  |j¡ qt  |j¡ qd S )Nç        )r6   ÚusersÚassertNotEqualÚnamerR   r   ÚstrZterminalÚtypeÚhostÚstartedÚdatetimeÚfromtimestampr   r   rO   r'   r9   )rD   r“   Úuserr%   r%   r+   Ú
test_usersÑ   s    
zTestMiscAPIs.test_usersc                 C   s&   t j}tt _zt ¡  W 5 |t _X d S r-   )ÚsysÚstdoutr   r6   Útest)rD   rŸ   r%   r%   r+   Ú	test_testä   s
    zTestMiscAPIs.test_testc              	   C   sŠ  ddddddddd	g	}|D ]}| j tt|ƒt|d
 qtjdkrDtjsLt‚tjrVt‚| 	d¡ dt
j ¡ kr„tjsxt‚| 	d¡ n¾dt
j ¡ krätjsœt‚|  tjtjtjg d¡d¡ | 	d¡ | 	d¡ | 	d¡ | 	d¡ n^dt
j ¡ ksdt
j ¡ krtjst‚| 	d	¡ n&dt
j ¡ krftjs8t‚| 	d¡ n"tjsPt‚tjr\t‚| 	d¡ |D ]}| jtt|ƒ|d
 qjd S )Nr	   r   r   r   r   r   r   r   r
   r€   ÚposixÚlinuxZbsdTr]   ÚsunosÚsolarisÚdarwin)r   Úgetattrr6   Úboolr4   r•   r	   rR   r   Úremoverž   ÚplatformÚlowerr   r   r=   r   r   r   Úcountr
   r   rq   )rD   Únamesr•   r%   r%   r+   Útest_os_constantsí   sP      ÿ




ÿÿÿ


ÿ
zTestMiscAPIs.test_os_constantsN)r†   r‡   rˆ   r   r‰   rŠ   r   r6   r“   r   r¡   r®   r%   r%   r%   r+   r‹   É   s
   
	r‹   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestMemoryAPIsc                 C   sæ   t  ¡ }|jdkst|ƒ‚|jdks,t|ƒ‚d|j  krBdksLn t|ƒ‚|jdks^t|ƒ‚|jdkspt|ƒ‚|jD ]j}t	||ƒ}|dkrœ|  
|ttf¡ |dkrv|dks¾|  d||f ¡‚||jkrv|  d||j||f ¡‚qvd S )Nr   éd   ÚpercentÚtotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r6   Zvirtual_memoryr²   rR   Ú	availabler±   ÚusedÚfreeÚ_fieldsr§   r   Úintr   Úfail)rD   Úmemr•   Úvaluer%   r%   r+   Útest_virtual_memory  s"     


ÿz"TestMemoryAPIs.test_virtual_memoryc                 C   s²   t  ¡ }|  |jd¡ |jdks(t|ƒ‚|jdks:t|ƒ‚|jdkrX|jdksjt|ƒ‚n|jdksjt|ƒ‚d|j  kr€dksŠn t|ƒ‚|j	dksœt|ƒ‚|j
dks®t|ƒ‚d S )N)r²   r´   rµ   r±   ÚsinÚsoutr   r°   )r6   Zswap_memoryr=   r¶   r²   rR   r´   rµ   r±   r¼   r½   )rD   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   st   t  ¡ }|  |¡ |  |tt jddƒ¡ |  |d¡ tj 	d¡rpt
dƒ}| ¡ }W 5 Q R X d|krpt d¡‚d S )NT©Úpercpur]   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r6   Ú	cpu_countZassertIsNotNoner=   rf   rK   rP   r4   ÚpathÚexistsÚopenÚreadr‰   ZSkipTest)rD   ÚlogicalÚfdZcpuinfo_datar%   r%   r+   Útest_cpu_count_logical:  s    

z"TestCpuAPIs.test_cpu_count_logicalc                 C   sf   t  ¡ }t jdd}|d kr&|  d¡‚trJt ¡ d d… dkrJ|  |¡ n|  |d¡ |  ||¡ d S )NF©rÇ   zcpu_count_cores() is Nonerc   )é   r]   r]   )r6   rÂ   ÚskipTestr   rž   ÚgetwindowsversionrO   rP   )rD   rÇ   Zcoresr%   r%   r+   Útest_cpu_count_coresF  s    
z TestCpuAPIs.test_cpu_count_coresc              
   C   sv   dD ]l}t jd|d}|  t ¡ ¡ |js0t‚W 5 Q R X t jd|d"}|  tjdd¡ |jsft‚W 5 Q R X qd S )N)r[   r   Nz$psutil._psplatform.cpu_count_logical©Zreturn_valuez"psutil._psplatform.cpu_count_coresFrÊ   )r"   r@   rO   r6   rÂ   rQ   rR   )rD   ÚvalrT   r%   r%   r+   Útest_cpu_count_noneQ  s    ÿÿzTestCpuAPIs.test_cpu_count_nonec                 C   sZ   d}t  ¡ }t|ƒ |D ]$}|  |t¡ |  |d¡ ||7 }q|  |t|ƒ¡ t|ƒ d S )Nr   r’   )r6   rK   Úsumr   rŽ   rP   ÚassertAlmostEqualr–   )rD   r²   ÚtimesÚcp_timer%   r%   r+   Útest_cpu_times]  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Ò   r6   rK   ro   r   r¸   )rD   Út1Zstop_atÚt2r%   r%   r+   Útest_cpu_times_time_increasesz  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)
r6   rK   rÒ   r   rŽ   rP   rÓ   r–   r=   rf   )rD   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À   r\   gš™™™™™©?)r6   rK   ro   r   r¸   ÚzipZ_cpu_busy_time)rD   Ztot1Z	giveup_atZtot2r×   rØ   Ú
differencer%   r%   r+   Útest_per_cpu_times_2¥  s    
z TestCpuAPIs.test_per_cpu_times_2c                 C   sX   t  ¡ }t jdd}| dd„ t|Ž D ƒ¡}|jD ] }| jt||ƒt||ƒdd q2d S )NTrÀ   c                 S   s   g | ]}t |ƒ‘qS r%   )rÒ   )r)   Únumr%   r%   r+   r,   ¹  s     z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>r]   ©Údelta)r6   rK   Ú_makerÛ   r¶   rÓ   r§   )rD   ÚbaseZper_cpuZsummed_valuesÚfieldr%   r%   r+   Útest_cpu_times_comparison´  s    
  ÿz%TestCpuAPIs.test_cpu_times_comparisonc              
   C   s‚   z<|   |t¡ |  |d¡ |  |d¡ |  |dt ¡  ¡ W n@ tk
r| } z"td|t 	|¡t 	|¡f ƒ‚W 5 d }~X Y nX d S )Nr’   g       €g      Y@z
%s
last=%s
new=%s)
r   rŽ   rP   ZassertIsNotÚassertLessEqualr6   rÂ   rR   ÚpprintÚpformat)rD   r±   Zlast_retZnew_retÚerrr%   r%   r+   Ú_test_cpu_percent¾  s      ÿzTestCpuAPIs._test_cpu_percentc              	   C   s^   t jdd}tdƒD ]"}t jd d}|  |||¡ |}q|  t¡ t jdd W 5 Q R X d S ©Nçü©ñÒMbP?)Úintervalr°   r[   )r6   Úcpu_percentrƒ   ré   rC   rN   )rD   Ú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 5 Q R X d S )Nrë   T©rì   rÁ   r°   r[   )	r6   rí   r=   rf   rÂ   rƒ   ré   rC   rN   ©rD   rî   rï   rð   r±   r%   r%   r+   Útest_per_cpu_percentÑ  s    z TestCpuAPIs.test_per_cpu_percentc              	   C   sz   t jdd}tdƒD ]>}t jd d}|D ]}|  |||¡ q(|  t|ƒ||¡ |}q|  t¡ t jdd W 5 Q R X d S rê   )r6   Úcpu_times_percentrƒ   ré   rÒ   rC   rN   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°   )r6   rõ   r=   rf   rÂ   rƒ   ré   rÒ   )rD   rî   rï   rð   Úcpur±   r%   r%   r+   Útest_per_cpu_times_percentç  s    z&TestCpuAPIs.test_per_cpu_times_percentc              	   C   sj   t jdd dd„ t jddD ƒ}tjd|d0 t jddD ]}|D ]}|  |d d ¡ qFq>W 5 Q R X d S )NTrÀ   c                 S   s*   g | ]"}|  d d„ tt|jƒƒD ƒ¡‘qS )c                 S   s   g | ]}d ‘qS )r   r%   r(   r%   r%   r+   r,   õ  s     zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)rá   rƒ   rf   r¶   r(   r%   r%   r+   r,   õ  s   ÿzCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_timesrÏ   )r6   rõ   rK   r"   r@   ré   )rD   Z
zero_timesr÷   r±   r%   r%   r+   Ú#test_per_cpu_times_percent_negativeò  s    
ÿz/TestCpuAPIs.test_per_cpu_times_percent_negativec                 C   sT   t  ¡ }|  |jd¡ |jD ]2}t||ƒ}|  |d¡ ts|dkr|  |d¡ qd S )N)Úctx_switchesÚ
interruptsZsoft_interruptsZsyscallsr   )rú   rû   )r6   Z	cpu_statsr=   r¶   r§   rP   r   r   )rD   Ú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¡‚|s6t|ƒ‚|t jddgƒ tr`ˆ  t|ƒt  ¡ ¡ d S )Nc                    sj   | D ]`}ˆ   |jd¡ |jdkr0ˆ  |j|j¡ |jD ],}t||ƒ}ˆ  |ttt	f¡ ˆ  
|d¡ q6qd S )N)ÚcurrentÚminr„   r’   r   )r=   r¶   r„   rå   r   r§   r   r·   r   rŽ   rP   )rG   Úntr•   rº   rk   r%   r+   Úcheck_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsTrÀ   zreturns empty list on FreeBSDF)	r6   Zcpu_freqr   rÌ   rR   r   r=   rf   rÂ   )rD   r  rG   r%   rk   r+   Útest_cpu_freq
  s    

zTestCpuAPIs.test_cpu_freqc                 C   s>   t  ¡ }|  t|ƒd¡ |D ]}|  |t¡ |  |d¡ qd S )Nr_   r’   )r6   Ú
getloadavgr=   rf   r   rŽ   rP   )rD   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¿   8  s,   
!

	
ÿr¿   c                   @   sŒ   e Zd Ze eoe d¡dd„ ƒZe e d¡dd„ ƒZ	dd„ Z
d	d
„ Ze eo\ej d¡ d¡e eope ¡  d¡dd„ ƒƒZdd„ ZdS )ÚTestDiskAPIszunreliable on PYPY32 + 32BITc              	   C   s   t  t ¡ ¡}|  |jd¡ |jdks.t|ƒ‚|jdks@t|ƒ‚|j	dksRt|ƒ‚|j|jksft|ƒ‚|j|j	kszt|ƒ‚d|j
  krdksœn t|j
ƒ‚ttdƒrôt t ¡ ¡}d}|  |j|j¡ | j|j	|j	|d tsô| j|j|j|d |  ¡ }|  t¡ t  |¡ W 5 Q R X d S )N)r²   r´   rµ   r±   r   r°   Ú
disk_usagei  P rß   )r6   r
  r4   Úgetcwdr=   r¶   r²   rR   r´   rµ   r±   rr   ÚshutilrÓ   r   Z
get_testfnrC   r   )rD   ÚusageZshutil_usageZ	toleranceÚfnamer%   r%   r+   Útest_disk_usage-  s,    "
ÿÿzTestDiskAPIs.test_disk_usageznot an ASCII fsc              	   C   s$   |   t¡ t t¡ W 5 Q R X d S r-   )rC   ÚUnicodeEncodeErrorr6   r
  r   rk   r%   r%   r+   Útest_disk_usage_unicodeJ  s    z$TestDiskAPIs.test_disk_usage_unicodec                 C   s   t  d¡ d S )Nó   .)r6   r
  rk   r%   r%   r+   Útest_disk_usage_bytesP  s    z"TestDiskAPIs.test_disk_usage_bytesc                    s†  ‡ fdd„}t jdd}ˆ j||d |D ]b}||ƒ trFd|jkrFq*tsbtj |j	¡sht
|ƒ‚n|j	 tj |j¡s~t
|ƒ‚|js*t
|ƒ‚q*t jdd}ˆ j||d t jddD ]š}||ƒ ts´|jr´zt |j¡ W n\ tk
r6 } z<trtr|jtjkrW Y ¢q´|jtjtjfkr&‚ W 5 d }~X Y q´X tj |j¡s´t
|ƒ‚q´dd	„ }|tƒ}d
d„ t jddD ƒ}ˆ  ||¡ d S )Nc                    sœ   ˆ   | jt¡ ˆ   | jt¡ ˆ   | jt¡ ˆ   | jt¡ ˆ   | jttd ƒf¡ ˆ   | j	ttd ƒf¡ | jd k	r€t
s€ˆ  | jd¡ | j	d k	r˜ˆ  | j	d¡ d S rŒ   )r   Údevicer–   Ú
mountpointÚfstypeÚoptsZmaxfiler·   r—   Zmaxpathr   r   ©r  rk   r%   r+   Úcheck_ntupleT  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úallr€   ZcdromTc                 S   s.   t j | ¡} t j | ¡s&t j | ¡} q|  ¡ S r-   )r4   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>)r6   Zdisk_partitionsrw   r   r  r	   r4   rÃ   rÄ   r  rR   r  r  ÚstatÚOSErrorr   r   ÚerrnoÚEIOÚEPERMÚEACCESÚ__file__r3   )rD   r  rG   Zdiskrè   r  ÚmountZmountsr%   rk   r+   Útest_disk_partitionsS  s>    

ÿz!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionr‘   c                    sz   ‡ fdd„}t jdd}|d k	s(tdƒ‚||ƒ t jdd}ˆ  t|ƒtt|ƒƒ¡ |D ]}|sht|ƒ‚||| ƒ qXd S )Nc                    sì   ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ tsÆtsÆˆ   | d | j¡ ˆ   | d | j¡ t	r°ˆ   | d | j
¡ ˆ   | d | j¡ ˆ   | d	 | j¡ ntrÆˆ   | d | j¡ | jD ]}t| |ƒdksÌt| ƒ‚qÌd S )
Nr   r]   rc   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§   rR   )r  r•   rk   r%   r+   r  •  s    
z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF©Zperdiskzno disks on this system?T)r6   Údisk_io_countersrR   r=   rf   r?   ©rD   r  Úretr1   r%   rk   r+   Útest_disk_io_counters  s    z"TestDiskAPIs.test_disk_io_countersc              	   C   sN   t jdi d6}|  tjdd¡ |  tjddi ¡ |js@t‚W 5 Q R X d S )Nz#psutil._psplatform.disk_io_countersrÏ   Fr.  T)r"   r@   rO   r6   r/  r=   rQ   rR   ©rD   rT   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   r4   rÃ   rÄ   r   r6   r/  r2  r4  r%   r%   r%   r+   r	  +  s   

=ÿÿr	  c                   @   sn   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZdd„ Zdd	„ Z	d
d„ Z
e epZepZe d¡dd„ ƒZdS )ÚTestNetAPIsrÿ   c                    sh   ‡ fdd„}t jdd}||ƒ t jdd}ˆ  |g ¡ |D ]&}ˆ  |¡ ˆ  |t¡ ||| ƒ q<d S )Nc                    s(  ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ ˆ   | d | j¡ | jdks¢t	| ƒ‚| jdks´t	| ƒ‚| jdksÆt	| ƒ‚| jdksØt	| ƒ‚| jdksêt	| ƒ‚| jdksüt	| ƒ‚| jdkst	| ƒ‚| jdks$t	| ƒ‚d S )	Nr   r]   rc   r_   r(  r)  rË   r*  )
r=   Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrR   r  rk   r%   r+   r  ¾  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF©ZpernicT)r6   Únet_io_countersr”   rw   r   r–   r0  r%   rk   r+   Útest_net_io_counters¼  s    
z TestNetAPIs.test_net_io_countersc              	   C   sN   t jdi d6}|  tjdd¡ |  tjddi ¡ |js@t‚W 5 Q R X d S )Nz"psutil._psplatform.net_io_countersrÏ   Fr6  T)r"   r@   rO   r6   r7  r=   rQ   rR   r3  r%   r%   r+   Útest_net_io_counters_no_nicsÙ  s    ÿz(TestNetAPIs.test_net_io_counters_no_nicsc                 C   sb  t  ¡ }|st|ƒ‚t  ¡ }ttjtjt jgƒ}| 	¡ D ]Æ\}}|  
|t¡ |  tt|ƒƒt|ƒ¡ |D ]’}|  
|jt¡ |  
|jt¡ |  
|jttd ƒf¡ |  
|jttd ƒf¡ |  |j|¡ trÞtsÞ|  
|jtj¡ || jr–|jtjkr,t |j¡}t |¡ | |jdf¡ W 5 Q R X nj|jtjkr–t |jdtjtjdtj¡d }|\}	}
}}}t |	|
|¡}t |¡ | |¡ W 5 Q R X |j|j|j|j fD ]*}|d k	rª|jtjkrªt!||jƒ qª|jrì|  "|j ¡ qj|j rj|  "|j¡ qjq8t#st$st%r2t&tdƒr^|  t jtj¡ n,t'rJ|  t jtj(¡ nt)r^|  t jd¡ d S )Nr   ÚAF_LINKr[   )*r6   Únet_if_addrsrR   Únet_if_statsr?   ÚsocketÚAF_INETÚAF_INET6r:  Úitemsr   r–   r=   rf   Úfamilyr·   ÚaddressÚnetmaskr—   Ú	broadcastr3   r   r   r!   ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEZptpr    rO   r   r   r
   rr   r   Ú	AF_PACKETr   )rD   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrL   ÚafÚsocktypeÚprotoÚ	canonnameÚsaÚipr%   r%   r+   Útest_net_if_addrsã  sh    
    þþÿ
zTestNetAPIs.test_net_if_addrsc              	   C   sz   t rdtjdd d d fg}ndg}tjd|dB}t ¡ d d }|jsJt‚t r^|  |j	d¡ n|  |j	d¡ W 5 Q R X d S )	NÚem1z06:3d:29)rY  r[   z06-3d-29NNNzpsutil._psplatform.net_if_addrsrÏ   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r6   r:  r"   r@   r;  rQ   rR   r=   rB  )rD   r1  rT   rP  r%   r%   r+   Ú test_net_if_addrs_mac_null_bytes  s    ÿ
z,TestNetAPIs.test_net_if_addrs_mac_null_bytesc           
      C   sœ   t  ¡ }|st|ƒ‚t jt jt jf}| ¡ D ]j\}}|  |t¡ |\}}}}}	|  |t	¡ |  
||¡ |  
||¡ |  |d¡ |  |d¡ |  |	t¡ q,d S rŒ   )r6   r<  rR   ZNIC_DUPLEX_FULLZNIC_DUPLEX_HALFZNIC_DUPLEX_UNKNOWNr@  r   r–   r¨   r3   rP   )
rD   rN  Zall_duplexesr•   ÚstatsrF  ZduplexÚspeedZmtuÚflagsr%   r%   r+   Útest_net_if_stats0  s    þzTestNetAPIs.test_net_if_statszLINUX or BSD or MACOS specificc              	   C   sD   t jdttjdƒd$}t ¡ }|  |i ¡ |js6t	‚W 5 Q R X d S )Nzpsutil._psutil_posix.net_if_mturJ   r2   )
r"   r@   r   r!  ZENODEVr6   r<  r=   rQ   rR   )rD   rT   r1  r%   r%   r+   Útest_net_if_stats_enodev@  s    
ÿz$TestNetAPIs.test_net_if_stats_enodevN)r†   r‡   rˆ   r‰   rŠ   r   r8  r9  rX  rZ  r^  r   r   r   r_  r%   r%   r%   r+   r5  º  s   

	<ÿr5  c                   @   sr   e Zd Ze e d¡dd„ ƒZe e d¡dd„ ƒZe e d¡e e	 d¡dd„ ƒƒZ
e e d¡d	d
„ ƒZdS )ÚTestSensorsAPIsrÿ   c                 C   sŠ   t  ¡ }| ¡ D ]t\}}|  |t¡ |D ]Z}|  |jt¡ |jd k	rR|  |jd¡ |jd k	rj|  |jd¡ |j	d k	r(|  |j	d¡ q(qd S rŒ   )
r6   Úsensors_temperaturesr@  r   r–   Úlabelr   rP   ÚhighÚcritical)rD   Útempsr•   ÚentriesÚentryr%   r%   r+   Útest_sensors_temperaturesM  s    


z)TestSensorsAPIs.test_sensors_temperaturesc              	   C   sp   ddgi}t jd|dN}tjddd d }|js8t‚|  |jd¡ |  |jd	¡ |  |j	d
¡ W 5 Q R X d S )NZcoretemp)rb  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperaturesrÏ   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)
r"   r@   r6   ra  rQ   rR   r=   r   rc  rd  )rD   ÚdrT   re  r%   r%   r+   Ú#test_sensors_temperatures_fahreneit[  s     
ÿÿÿÿ
z3TestSensorsAPIs.test_sensors_temperatures_fahreneitz
no batteryc                 C   sp   t  ¡ }|  |jd¡ |  |jd¡ |jt jt jfkrF|  |jd¡ n|jt jkr^|  |j	¡ |  
|j	t¡ d S )Nr   r°   )r6   Zsensors_batteryrP   r±   rå   ZsecsleftZPOWER_TIME_UNKNOWNZPOWER_TIME_UNLIMITEDrw   Zpower_pluggedr   r¨   )rD   r1  r%   r%   r+   Útest_sensors_batteryg  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Œ   )
r6   Zsensors_fansr@  r   r–   rb  r   r·   r   rP   )rD   Zfansr•   rf  rg  r%   r%   r+   Útest_sensors_fansu  s    z!TestSensorsAPIs.test_sensors_fansN)r†   r‡   rˆ   r‰   rŠ   r   rh  rj  r   r   rk  r   rl  r%   r%   r%   r+   r`  K  s   

r`  Ú__main__)Úrun_from_name)=Ú__doc__rG  rš   r!  r4   rª   ræ   r  ru   r=  rž   ro   r‰   r6   r   r   r   r   r   r   r   r	   r
   r   Zpsutil._compatr   r   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	  r5  r`  r†   Zpsutil.tests.runnerrn  r%  r%   r%   r%   r+   Ú<module>   sz    
J% t  5
