<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Œ=Ý_‹  ã               @   sz  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rvdd3l7m8Z8 e8e9ƒ dS )4zTests for system APIS.é    N)ÚAIX)ÚBSD)ÚFREEBSD)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚFileNotFoundError)Úlong)ÚASCII_FS)Úcheck_net_address)Ú
CI_TESTING)ÚDEVNULL)Úenum)ÚGLOBAL_TIMEOUT)ÚHAS_BATTERY)ÚHAS_CPU_FREQ)ÚHAS_GETLOADAVG)ÚHAS_NET_IO_COUNTERS)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚIS_64BIT)Úmock)ÚPsutilTestCase)ÚPYPY)Úretry_on_failure)ÚGITHUB_ACTIONS)ÚUNICODE_SUFFIX)Ú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   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 Q R X tjdt t ¡ ¡d* |  tj¡ tt ¡ ƒ W d Q R X W d Q R X d S )Nc             S   s   g | ]
}|j ‘qS © )Úpid)Ú.0Úxr$   r$   úK/opt/alt/python37/lib64/python3.7/site-packages/psutil/tests/test_system.pyú
<listcomp>@   s    z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>c             S   s   g | ]
}|j ‘qS r$   )r%   )r&   r'   r$   r$   r(   r)   B   s    c             S   s   g | ]
}|j ‘qS r$   )r%   )r&   r'   r$   r$   r(   r)   F   s    zpsutil.Process)Úside_effect)ÚassertInÚosÚgetpidÚpsutilÚprocess_iterÚspawn_testprocr%   ÚProcessÚkillÚwaitZassertNotInr   ÚpatchÚNoSuchProcessÚassertEqualÚlistÚAccessDeniedÚassertRaises)ÚselfÚsprocÚpr$   r$   r(   Útest_process_iter?   s    z!TestProcessAPIs.test_process_iterc          	   C   s8  x.t jdgdD ]}|  t|j ¡ ƒdg¡ qW |  t¡ tt jdgdƒ W d Q R X tj	dt  
dd¡dL}x:t jddgdD ]&}|  |jd ¡ |  |jd d¡ q‚W |js¶t‚W d Q R X tj	dt  
dd¡dX}tƒ }x>t jddg|d	D ](}|  |jd |¡ |  |jd d¡ qòW |js*t‚W d Q R X d S )
Nr%   )ÚattrsZfooz$psutil._psplatform.Process.cpu_timesr   Ú )r*   Ú	cpu_times)r>   Zad_value)r.   r/   r6   r7   ÚinfoÚkeysr9   Ú
ValueErrorr   r4   r8   ÚassertIsNoneÚassertGreaterEqualÚcalledÚAssertionErrorÚobjectÚassertIs)r:   r<   ÚmÚflagr$   r$   r(   Útest_prcess_iter_w_attrsP   s$    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 ¡ x|D ]}	ˆ 
t|	dƒ¡ qÂW tdƒ‡fdd„ƒ}
| ¡  |
||ƒ\}}ˆ |jdd„ |D ƒ¡ tr:ˆ | ¡ jtj ¡ nˆ | ¡ jd¡ ˆ ˆ |jg¡ x|D ]}	ˆ 
t|	dƒ¡ qbW tdƒ‡fdd„ƒ}
| ¡  | ¡  |
||ƒ\}}ˆ tˆ ƒt|j|j|jgƒ¡ x|D ]}	ˆ t|	dƒ¡ qÔW d S )Nc                s   ˆ   | j¡ d S )N)Úappendr%   )r<   )Úpidsr$   r(   Úcallbackg   s    z1TestProcessAPIs.test_wait_procs.<locals>.callbackc             S   s   g | ]}t  |j¡‘qS r$   )r.   r1   r%   )r&   r'   r$   r$   r(   r)   n   s    z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>éÿÿÿÿ)Útimeouté   )rO   g{®Gáz„?)rQ   rO   g      à?é   Ú
returncodeé   c                s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Ng¸…ëQ¸ž?)rQ   rO   rR   é   )r.   Ú
wait_procsr6   Úlen)ÚprocsrO   Ú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)   …   s    c                s<   t j| d|d\}}ˆ  t|ƒd¡ ˆ  t|ƒd¡ ||fS )Ng¸…ëQ¸ž?)rQ   rO   rS   r   )r.   rW   r6   rX   )rY   rO   rZ   r[   )r:   r$   r(   r\   Ž   s
    )r0   r9   rC   r.   rW   Ú	TypeErrorÚtimeÚ
assertLessr6   rX   ÚassertFalseÚhasattrr   Ú	terminater+   r%   r	   ÚpoprT   ÚsignalÚSIGTERMÚsetÚ
assertTrue)r:   rO   Úsproc1Úsproc2Úsproc3rY   ÚtrZ   r[   r<   r\   r$   )rN   r:   r(   Útest_wait_procsd   sB    

 
zTestProcessAPIs.test_wait_procsc             C   sT   |   ¡ }|   ¡ }|   ¡ }dd„ |||fD ƒ}x|D ]}| ¡  q2W t |¡\}}d S )Nc             S   s   g | ]}t  |j¡‘qS r$   )r.   r1   r%   )r&   r'   r$   r$   r(   r)   £   s    z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>)r0   rb   r.   rW   )r:   rh   ri   rj   rY   r<   rZ   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 
¡ k¡ d S )NrP   r   )r0   rg   r.   Ú
pid_existsr%   r1   r2   r3   r`   r6   rN   )r:   r;   r<   r$   r$   r(   Útest_pid_exists¨   s    zTestProcessAPIs.test_pid_existsc          	   C   sž   t  ¡ }xT|D ]L}yt  |¡s"t‚W q tk
rX   t d¡ |t  ¡ krT|  |¡ Y qX qW tt|ƒd t|ƒd ƒ}x |D ]}| j	t  |¡|d q~W d S )Ngš™™™™™¹?iˆ  ip  )Úmsg)
r.   rN   rn   rG   r^   ÚsleepÚfailÚrangeÚmaxr`   )r:   rN   r%   r$   r$   r(   Útest_pid_exists_2²   s    


z!TestProcessAPIs.test_pid_exists_2N)Ú__name__Ú
__module__Ú__qualname__r=   rL   r"   ÚskipIfr   r   rl   rm   ro   ru   r$   r$   r$   r(   r#   =   s   
8


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   )r.   Z	boot_timeÚassertIsInstanceÚfloatÚassertGreaterr_   r^   )r:   Zbtr$   r$   r(   Útest_boot_timeÄ   s    zTestMiscAPIs.test_boot_timezunreliable on CIc             C   sÆ   t  ¡ }|  |g ¡ x¬|D ]¤}|js,t|ƒ‚|  |jt¡ |  |jttd ƒf¡ |j	d k	rp|  |j	ttd ƒf¡ |j |j	 |j
dksŽt|ƒ‚tj |j
¡ ts¤tr²|  |j¡ qt  |j¡ qW d S )Ng        )r.   ÚusersÚassertNotEqualÚnamerG   r{   ÚstrÚterminalÚtypeÚhostÚstartedÚdatetimeÚfromtimestampr   r   rD   r%   r1   )r:   r   Úuserr$   r$   r(   Ú
test_usersÊ   s    

zTestMiscAPIs.test_usersc             C   s&   t j}tt _zt ¡  W d |t _X d S )N)ÚsysÚstdoutr   r.   r\   )r:   rŒ   r$   r$   r(   Ú	test_testÝ   s
    zTestMiscAPIs.test_testc          	   C   s”  ddddddddd	g	}x"|D ]}| j tt|ƒt|d
 qW tjdkrHtjsPt‚tjrZt‚| 	d¡ dt
j ¡ krˆtjs|t‚| 	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rjtjs<t‚| 	d¡ n"tjsTt‚tjr`t‚| 	d¡ x$|D ]}| jtt|ƒd|d
 qpW d S )Nr	   r   r   r   r   r   r   r   r
   )rp   ÚposixÚlinuxZbsdTrR   ÚsunosÚsolarisÚdarwinF)r{   Úgetattrr.   Úboolr,   r   r	   rG   r   Úremover‹   ÚplatformÚlowerr   r   r6   r   r   r   Úcountr
   r   rI   )r:   Únamesr   r$   r$   r(   Útest_os_constantsæ   s>    











zTestMiscAPIs.test_os_constantsN)rv   rw   rx   r~   r"   ry   r   r.   r   rŠ   r   rš   r$   r$   r$   r(   rz   Â   s   	rz   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|ƒ‚xt|jD ]j}t	||ƒ}|dkrž|  
|ttf¡ |dkrx|dksÀ|  d||f ¡ ||jkrx|  d||j||f ¡ qxW d S )Nr   éd   ÚpercentÚtotalz%r < 0 (%s)z%r > total (total=%s, %s=%s))r.   Zvirtual_memoryrž   rG   Z	availabler   ÚusedÚfreeÚ_fieldsr“   r{   Úintr   rr   )r:   Ú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œ   )r.   Zswap_memoryr6   r¡   rž   rG   rŸ   r    r   r¦   r§   )r:   r£   r$   r$   r(   Útest_swap_memory   s    

 zTestMemoryAPIs.test_swap_memoryN)rv   rw   rx   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   st   t  ¡ }|  |¡ |  |tt jddƒ¡ |  |d¡ tj 	d¡rpt
dƒ}| ¡ }W d Q R X d|krpt d¡‚d S )NT)ÚpercpurR   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r.   Ú	cpu_countZassertIsNotNoner6   rX   r@   rE   r,   Ú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   sf   t  ¡ }t jdd}|d kr&|  d¡‚trJt ¡ d d… dkrJ|  |¡ n|  |d¡ |  ||¡ d S )NF)r°   zphysical cpu_count() is NonerV   )é   rR   rR   )r.   r«   ÚskipTestr   r‹   ÚgetwindowsversionrD   rE   )r:   r°   Zphysicalr$   r$   r(   Útest_cpu_count_physical?  s    
z#TestCpuAPIs.test_cpu_count_physicalc          
   C   sz   xtdD ]l}t jd|d}|  t ¡ ¡ |js2t‚W d Q R X t jd|d"}|  tjdd¡ |jsht‚W d Q R X qW d S )N)rP   r   Nz$psutil._psplatform.cpu_count_logical)Úreturn_valuez%psutil._psplatform.cpu_count_physicalF)r°   )r   r4   rD   r.   r«   rF   rG   )r:   ÚvalrJ   r$   r$   r(   Útest_cpu_count_noneJ  s    


zTestCpuAPIs.test_cpu_count_nonec             C   s^   d}t  ¡ }t|ƒ x,|D ]$}|  |t¡ |  |d¡ ||7 }qW |  |t|ƒ¡ t|ƒ d S )Nr   g        )r.   r@   Úsumr{   r|   rE   r6   r‚   )r:   rž   ÚtimesÚcp_timer$   r$   r(   Útest_cpu_timesV  s    
zTestCpuAPIs.test_cpu_timesc             C   sP   t t ¡ ƒ}t ¡ t }x(t ¡ |k r@t t ¡ ƒ}||krd S qW |  d¡ d S )Nztime remained the same)rº   r.   r@   r^   r   rr   )r:   Út1Zstop_atÚt2r$   r$   r(   Útest_cpu_times_time_increasess  s    z)TestCpuAPIs.test_cpu_times_time_increasesc             C   s”   xft jddD ]V}d}t|ƒ x,|D ]$}|  |t¡ |  |d¡ ||7 }q$W |  |t|ƒ¡ t|ƒ qW |  tt jddd ƒtt jddƒ¡ d S )NT)rª   r   g        F)	r.   r@   rº   r{   r|   rE   r6   r‚   rX   )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 }xht ¡ |kr0|  d¡S t jdd}x@t||ƒD ]2\}}t  |¡t  |¡ }}|| }|dkrHd S qHW qW d S )NT)rª   rQ   gš™™™™™©?)r.   r@   r^   r   rr   Ú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   s\   t  ¡ }t jdd}| dd„ t|Ž D ƒ¡}x*|jD ] }| jt||ƒt||ƒdd q4W d S )NT)rª   c             S   s   g | ]}t |ƒ‘qS r$   )rº   )r&   Únumr$   r$   r(   r)   ²  s    z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>rR   )Údelta)r.   r@   Ú_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‚   y<|   |t¡ |  |d¡ |  |d¡ |  |dt ¡  ¡ W n@ tk
r| } z"td|t 	|¡t 	|¡f ƒ‚W d d }~X Y nX d S )Ng        g       €g      Y@z
%s
last=%s
new=%s)
r{   r|   rE   ZassertIsNotÚassertLessEqualr.   r«   rG   ÚpprintÚpformat)r:   r   Zlast_retZnew_retÚerrr$   r$   r(   Ú_test_cpu_percent·  s    zTestCpuAPIs._test_cpu_percentc          	   C   sb   t jdd}x.tdƒD ]"}t jd d}|  |||¡ |}qW |  t¡ t jdd W d Q R X d S )Ngü©ñÒMbP?)Úintervalrœ   rP   )r.   Úcpu_percentrs   rÐ   r9   rC   )r:   Úlastr'   Únewr$   r$   r(   Útest_cpu_percentÁ  s    zTestCpuAPIs.test_cpu_percentc          	   C   sŠ   t jddd}|  t|ƒt  ¡ ¡ x>tdƒD ]2}t jd dd}x|D ]}|  |||¡ qDW |}q,W |  t¡ t jddd W d Q R X d S )Ngü©ñÒMbP?T)rÑ   rª   rœ   rP   )	r.   rÒ   r6   rX   r«   rs   rÐ   r9   rC   )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}xNtdƒD ]B}t jd d}x|D ]}|  |||¡ q,W |  t|ƒ||¡ |}qW |  t¡ t jdd W d Q R X d S )Ngü©ñÒMbP?)rÑ   rœ   rP   )r.   Úcpu_times_percentrs   rÐ   rº   r9   rC   )r:   rÓ   r'   rÔ   r   r$   r$   r(   Útest_cpu_times_percentÕ  s    
z"TestCpuAPIs.test_cpu_times_percentc             C   s†   t jddd}|  t|ƒt  ¡ ¡ x^tdƒD ]R}t jd dd}x:|D ]2}x|D ]}|  |||¡ qNW |  t|ƒ||¡ qDW |}q,W d S )Ngü©ñÒMbP?T)rÑ   rª   rœ   )r.   r×   r6   rX   r«   rs   rÐ   rº   )r:   rÓ   r'   rÔ   Úcpur   r$   r$   r(   Útest_per_cpu_times_percentà  s    

z&TestCpuAPIs.test_per_cpu_times_percentc          	   C   sr   t jdd dd„ t jddD ƒ}tjd|d8 x0t jddD ] }x|D ]}|  |d d ¡ qJW q@W W d Q R X d S )NT)rª   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)   î  s    zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>)rÇ   rs   rX   r¡   )r&   r'   r$   r$   r(   r)   î  s   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>zpsutil.cpu_times)r·   )r.   r×   r@   r   r4   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   sX   t  ¡ }|  |jd¡ x<|jD ]2}t||ƒ}|  |d¡ ts|dkr|  |d¡ qW d S )N)Úctx_switchesÚ
interruptsÚsoft_interruptsÚsyscallsr   )rÜ   rÝ   )r.   Z	cpu_statsr6   r¡   r“   rE   r   r}   )r:   Zinfosr   r¤   r$   r$   r(   Útest_cpu_statsõ  s    
zTestCpuAPIs.test_cpu_statsznot suportedc                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                sr   xl| D ]d}ˆ   |jd¡ |jdkr2ˆ  |j|j¡ x6|jD ],}t||ƒ}ˆ  |ttt	f¡ ˆ  
|d¡ q:W qW d S )N)ÚcurrentÚminrt   g        r   )r6   r¡   rt   rÌ   rá   r“   r{   r¢   r   r|   rE   )ÚlsÚntr   r¤   )r:   r$   r(   Úcheck_ls  s    


z+TestCpuAPIs.test_cpu_freq.<locals>.check_lsT)rª   zreturns empty list on FreeBSDF)	r.   Zcpu_freqr   r´   rG   r   r6   rX   r«   )r:   rå   rã   r$   )r:   r(   Útest_cpu_freq  s    

zTestCpuAPIs.test_cpu_freqznot supportedc             C   sB   t  ¡ }|  t|ƒd¡ x$|D ]}|  |t¡ |  |d¡ qW d S )NrS   g        )r.   Ú
getloadavgr6   rX   r{   r|   rE   )r:   ZloadavgÚloadr$   r$   r(   Útest_getloadavg  s
    
zTestCpuAPIs.test_getloadavgN)rv   rw   rx   r²   r¶   r¹   r½   rÀ   rÁ   rÄ   rË   rÐ   rÕ   rÖ   rØ   rÚ   rÛ   rà   r"   ry   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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 | j|j|j|d |  ¡ }|  t¡ t  |¡ W d Q R X d S )N)rž   rŸ   r    r   r   rœ   Ú
disk_usagei  P )rÆ   )r.   rë   r,   Úgetcwdr6   r¡   rž   rG   rŸ   r    r   ra   ÚshutilrÈ   Z
get_testfnr9   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 Q R X d S )N)r9   ÚUnicodeEncodeErrorr.   rë   r!   )r:   r$   r$   r(   Útest_disk_usage_unicode>  s    z$TestDiskAPIs.test_disk_usage_unicodec             C   s   t  d¡ d S )Nó   .)r.   rë   )r:   r$   r$   r(   Útest_disk_usage_bytesD  s    z"TestDiskAPIs.test_disk_usage_bytesc                sˆ  ‡ fdd„}t jdd}ˆ j||d xj|D ]b}||ƒ trHd|jkrHq,tsdtj |j	¡sjt
|ƒ‚n|j	 tj |j¡s€t
|ƒ‚|js,t
|ƒ‚q,W t jdd}ˆ j||d x¤t jddD ]”}||ƒ tsº|jrºyt |j¡ W nV tk
r6 } z6trtr|jtjkrwº|jtjtjfkr&‚ W d d }~X Y qºX tj |j¡sºt
|ƒ‚qºW 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 )Nr   )r{   Údevicer‚   Ú
mountpointÚfstypeÚoptsÚmaxfiler¢   r„   Úmaxpathr    r}   )rä   )r:   r$   r(   Úcheck_ntupleH  s    
z7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleF)Úall)rp   ZcdromTc             S   s2   t j | ¡} xt j | ¡s(t j | ¡} qW |  ¡ S )N)r,   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(   r)   €  s    z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>)r.   Zdisk_partitionsrg   r   rø   r	   r,   r¬   r­   rõ   rG   rö   r÷   ÚstatÚOSErrorr    r   ÚerrnoZEIOÚEPERMÚEACCESÚ__file__r+   )r:   rû   rã   ZdiskrÏ   r   ZmountZmountsr$   )r:   r(   Útest_disk_partitionsG  s<    

z!TestDiskAPIs.test_disk_partitionsz/proc/diskstatsz3/proc/diskstats not available on this linux versionzunreliable on CIc                s~   ‡ fdd„}t jdd}|d k	s(tdƒ‚||ƒ t jdd}ˆ  t|ƒtt|ƒƒ¡ x$|D ]}|sjt|ƒ‚||| ƒ qZW d 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¡ x$| jD ]}t| |ƒdksÎt| ƒ‚qÎW d S )
Nr   rR   rV   rS   é   é   r³   é   é   )r6   Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesr   r   Ú	read_timeÚ
write_timer   Zread_merged_countZwrite_merged_countZ	busy_timer   r¡   r“   rG   )rä   r   )r:   r$   r(   rû   ‰  s    z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntupleF)Úperdiskzno disks on this system?T)r.   Údisk_io_countersrG   r6   rX   rf   )r:   rû   ÚretÚkeyr$   )r:   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 d Q R X d S )Nz#psutil._psplatform.disk_io_counters)r·   F)r  T)r   r4   rD   r.   r  r6   rF   rG   )r:   rJ   r$   r$   r(   Útest_disk_io_counters_no_disks¤  s
    
z+TestDiskAPIs.test_disk_io_counters_no_disksN)rv   rw   rx   r"   ry   r   r   rð   r   rò   rô   r  r   r,   r¬   r­   r   r.   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 )ÚTestNetAPIsznot supportedc                sl   ‡ fdd„}t jdd}||ƒ t jdd}ˆ  |g ¡ x.|D ]&}ˆ  |¡ ˆ  |t¡ ||| ƒ q>W 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   rR   rV   rS   r  r	  r³   r
  )
r6   Ú
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚerrinÚerroutÚdropinÚdropoutrG   )rä   )r:   r$   r(   rû   ²  s     z6TestNetAPIs.test_net_io_counters.<locals>.check_ntupleF)ÚpernicT)r.   Únet_io_countersr€   rg   r{   r‚   )r:   rû   r  r  r$   )r:   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 d Q R X d S )Nz"psutil._psplatform.net_io_counters)r·   F)r!  T)r   r4   rD   r.   r"  r6   rF   rG   )r:   rJ   r$   r$   r(   Útest_net_io_counters_no_nicsÍ  s
    
z(TestNetAPIs.test_net_io_counters_no_nicsc             C   sx  t  ¡ }|st|ƒ‚t  ¡ }ttjtjt jgƒ}xä| 	¡ D ]Ö\}}|  
|t¡ |  tt|ƒƒt|ƒ¡ x¦|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r:t |j¡}t |¡ | |jdf¡ W d Q R X nj|jtjkr¤t |jdtjtjdtj ¡d }|\}	}
}}}t |	|
|¡}t |¡ | |¡ W d Q R X xB|j|j|j|j!fD ]*}|d k	rº|jtjkrºt"||jƒ qºW |jrþ|  #|j!¡ qr|j!rr|  #|j¡ qrW q<W t$s*t%s*t&rHt'tdƒrt|  t jtj¡ n,t(r`|  t jtj)¡ nt*rt|  t jd¡ d S )N)rS   r  r   ÚAF_LINKrP   )+r.   Únet_if_addrsrG   Únet_if_statsrf   ÚsocketÚAF_INETÚAF_INET6r%  Úitemsr{   r‚   r6   rX   Úfamilyr¢   ÚaddressÚnetmaskr„   Ú	broadcastr+   r‹   Úversion_infor   r   ÚIntEnumÚisupÚ
contextlibÚclosingÚbindÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVEÚptpr   rD   r   r   r
   ra   r   Ú	AF_PACKETr   )r:   ÚnicsZ	nic_statsZfamiliesZnicÚaddrsÚaddrÚsrA   ÚafÚsocktypeÚprotoÚ	canonnameÚsaÚipr$   r$   r(   Útest_net_if_addrs×  sX    

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 d Q R X d S )	NÚem1z06:3d:29)rF  rP   z06-3d-29NNNzpsutil._psplatform.net_if_addrs)r·   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)
r	   r.   r%  r   r4   r&  rF   rG   r6   r-  )r:   r  rJ   r=  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}xh| ¡ D ]\\}}|  |t¡ |\}}}}|  |t	¡ |  
||¡ |  
||¡ |  |d¡ |  |d¡ q.W d S )Nr   )r.   r'  rG   ÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNr+  r{   r‚   r”   r+   rE   )	r:   r;  Zall_duplexesr   Zstatsr2  ÚduplexÚspeedÚmtur$   r$   r(   Útest_net_if_stats$  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 d Q R X d S )Nzpsutil._psutil_posix.net_if_mtur?   )r*   )
r   r4   r  r  ZENODEVr.   r'  r6   rF   rG   )r:   rJ   r  r$   r$   r(   Útest_net_if_stats_enodev3  s
    z$TestNetAPIs.test_net_if_stats_enodevN)rv   rw   rx   r"   ry   r   r#  r$  rE  rG  rN  r   r   r   rO  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 )ÚTestSensorsAPIsznot supportedc             C   s’   t  ¡ }x„| ¡ D ]x\}}|  |t¡ xb|D ]Z}|  |jt¡ |jd k	rV|  |jd¡ |jd k	rn|  |jd¡ |j	d k	r,|  |j	d¡ q,W qW d S )Nr   )
r.   Úsensors_temperaturesr+  r{   r‚   Úlabelrá   rE   ÚhighÚcritical)r:   Útempsr   ÚentriesÚentryr$   r$   r(   Útest_sensors_temperatures@  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 d Q R X d S )NZcoretemp)rR  g      I@g      N@g     €Q@z'psutil._psplatform.sensors_temperatures)r·   T)Z
fahrenheitr   g     €^@g     €a@g     Àc@)
r   r4   r.   rQ  rF   rG   r6   rá   rS  rT  )r:   ÚdrJ   rU  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krF|  |jd¡ n|jt jkr^|  |j	¡ |  
|j	t¡ d S )Nr   rœ   )r.   Zsensors_batteryrE   r   rÌ   ÚsecsleftÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrg   Úpower_pluggedr{   r”   )r:   r  r$   r$   r(   Útest_sensors_batteryZ  s    
z$TestSensorsAPIs.test_sensors_batteryc             C   sj   t  ¡ }x\| ¡ D ]P\}}|  |t¡ x:|D ]2}|  |jt¡ |  |jttf¡ |  	|jd¡ q,W qW d S )Nr   )
r.   Zsensors_fansr+  r{   r‚   rR  rá   r¢   r   rE   )r:   Zfansr   rV  rW  r$   r$   r(   Útest_sensors_fansh  s    
z!TestSensorsAPIs.test_sensors_fansN)rv   rw   rx   r"   ry   r   rX  rZ  r   r   r_  r   r`  r$   r$   r$   r(   rP  >  s
   rP  Ú__main__)Úrun_from_name):Ú__doc__r3  r‡   r  r,   rÍ   rí   rd   r(  r‹   r^   r.   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#   rz   r›   r©   rê   r  rP  rv   Zpsutil.tests.runnerrb  r  r$   r$   r$   r(   Ú<module>   st    J% q  5
