
    gO                        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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/ dd$lm0Z0 dd%lm1Z1 dd&lm2Z2  G d' d(e-          Z3 G d) d*e-          Z4 G d+ d,e-          Z5 G d- d.e-          Z6 G d/ d0e-          Z7 G d1 d2e-          Z8 G d3 d4e-          Z9 G d5 d6e-          Z:dS )7z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)	QEMU_USER)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)pytest)retry_on_failurec                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestProcessIterc                    t          j                    d t          j                    D             v sJ |                                 }|j        d t          j                    D             v sJ t          j        |j                  }|                                 |                                 |j        d t          j                    D             vsJ d S )Nc                     g | ]	}|j         
S  pid.0xs     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/psutil/tests/test_system.py
<listcomp>z5TestProcessIter.test_pid_presence.<locals>.<listcomp>C   s    DDDquDDD    c                     g | ]	}|j         
S r+   r,   r.   s     r1   r2   z5TestProcessIter.test_pid_presence.<locals>.<listcomp>E   s    BBBqQUBBBr3   c                     g | ]	}|j         
S r+   r,   r.   s     r1   r2   z5TestProcessIter.test_pid_presence.<locals>.<listcomp>I   s     F F F1 F F Fr3   )	osgetpidpsutilprocess_iterspawn_testprocr-   Processkillwaitselfsprocps      r1   test_pid_presencez!TestProcessIter.test_pid_presenceB   s    y{{DDf.A.C.CDDDDDDD##%%yBBF,?,A,ABBBBBBBN59%%		y F F0C0E0E F F FFFFFFFr3   c                     d t          j                    D             }t          |d           t          t          |          d           k    sJ d S )Nc                     g | ]}|S r+   r+   r.   s     r1   r2   z6TestProcessIter.test_no_duplicates.<locals>.<listcomp>L   s    ///Aa///r3   c                     | j         S Nr,   r0   s    r1   <lambda>z4TestProcessIter.test_no_duplicates.<locals>.<lambda>M   s     r3   )keyc                     | j         S rF   r,   rG   s    r1   rH   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>N   s    15 r3   )r8   r9   sortedset)r?   lss     r1   test_no_duplicatesz"TestProcessIter.test_no_duplicatesK   sl    //,..///boo...&GG3
 3
 3
 
 
 
 
 
 
r3   c                    t          t          j                               t          d          D ]}t	          j        dt          j        t          j                                        5  t          t          j        dg                    g k    sJ 	 d d d            n# 1 swxY w Y   t          j        	                                 d S N   zpsutil.Process.as_dictside_effect	cpu_timesattrs)
listr8   r9   ranger$   patchNoSuchProcessr6   r7   cache_clearr?   r0   s     r1   test_emulate_nspz TestProcessIter.test_emulate_nspQ   s   V ""###q 	. 	.A("0==   L L F/{mDDDEEKKKKK	L L L L L L L L L L L L L L L
 ++----	. 	.s   +*B""B&	)B&	c                    t          t          j                               t          d          D ]}t	          j        dt          j        t          j                                        5  t          j
        t          j                  5  t          t          j        dg                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j                                         d S rP   )rW   r8   r9   rX   r$   rY   AccessDeniedr6   r7   r%   raisesr[   r\   s     r1   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_denied[   s   V ""###q 	. 	.A("/	<<   C C ]6#677 C C,K=AAABBBC C C C C C C C C C C C C C C	C C C C C C C C C C C C C C C ++----	. 	.s6   +C
$B:.C:B>>CB>CC	C	c                    t          j        dg          D ]/}t          |j                                                  dgk    sJ 0t          j        dg          D ]/}t          |j                                                  dgk    sJ 0t          j        t                    5  t          t          j        dg                     d d d            n# 1 swxY w Y   t          j	        dt          j
        dd                    5 }t          j        ddg          D ]$}|j        d         J |j        d         dk    sJ %|j        sJ 	 d d d            n# 1 swxY w Y   t          j	        dt          j
        dd                    5 }t                      }t          j        ddg|	          D ]&}|j        d         |u sJ |j        d         dk    sJ '|j        sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr-   rU   fooz$psutil._psplatform.Process.cpu_timesr    rR   rT   )rV   ad_value)r8   r9   rW   infokeysr%   r`   
ValueErrorr$   rY   r_   calledobject)r?   rA   mflags       r1   
test_attrszTestProcessIter.test_attrsf   s   $E7333 	2 	2A&&5'11111$E7333 	2 	2A&&5'11111]:&& 	5 	5$E7333444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5Z2+Ar22
 
 
 	 ({/CDDD * *vk*222ve})))))8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Z2+Ar22
 
 
 
	 88D(k*T   * * vk*d2222ve})))))8OOOO
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s8   &$CCC
AEE!$E!AG66G:=G:c                     t          t          j                               t          j        sJ t          j                                         t          j        rJ d S rF   )rW   r8   r9   _pmapr[   r?   s    r1   test_cache_clearz TestProcessIter.test_cache_clear   sP    V ""###|'')))<r3   N)	__name__
__module____qualname__rB   rN   r]   ra   rm   rq   r+   r3   r1   r(   r(   A   sq        G G G
 
 
. . .	. 	. 	.  8         r3   r(   c                       e Zd Zej                            eoed          d             Zej                            eoed          d             Z	d Z
d ZdS )TestProcessAPIsz-spawn_testproc() unreliable on PYPY + WINDOWSreasonc                    fd}g |                                  }|                                  }|                                  }d |||fD             }t          j        t                    5  t	          j        |d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        |d           d d d            n# 1 swxY w Y   t          j                    }t	          j        |d|          \  }}t          j                    |z
  d	k     sJ |g k    sJ t          |          d
k    sJ g k    sJ |D ]}	t          |	d          rJ t          d          d             }
|                                  |
||          \  }}|j        d |D             v sJ t          r+|                                j        t           j         k    sJ n|                                j        dk    sJ |j        gk    sJ |D ]}	t          |	d          rJ t          d          d             }|                                 |                                  |||          \  }}t%                    t%          |j        |j        |j        g          k    sJ |D ]}	t          |	d          sJ d S )Nc                 <                         | j                   d S rF   )appendr-   )rA   pidss    r1   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr3   c                 @    g | ]}t          j        |j                  S r+   r8   r;   r-   r.   s     r1   r2   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   $    III1&&IIIr3   )timeout   )r}   g{Gz?r   r}   g      ?   
returncode   c                     t          j        | d|          \  }}t          |          dk    sJ t          |          dk    sJ ||fS )NQ?r   r   rQ   r8   
wait_procslenprocsr}   gonealives       r1   test_1z/TestProcessAPIs.test_wait_procs.<locals>.test_1   V     +th  KD% t99>>>>u::????;r3   c                     g | ]	}|j         
S r+   r,   r.   s     r1   r2   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   s    222ae222r3   c                     t          j        | d|          \  }}t          |          dk    sJ t          |          dk    sJ ||fS )Nr   r   r   r   r   r   s       r1   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r3   )r:   r%   r`   rh   r8   r   	TypeErrortimer   hasattrr&   	terminater-   r
   popr   signalSIGTERMrL   )r?   r}   sproc1sproc2sproc3r   tr   r   rA   r   r   r|   s               @r1   test_wait_procszTestProcessAPIs.test_wait_procs   s   
	 	 	 	 	 $$&&$$&&$$&&II0HIII]:&& 	1 	1eR0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]9%% 	1 	1ea0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1IKK'thOOOey{{Q$$$$rzzzz5zzQrzzzz 	0 	0Aq,//////	"			 	 
		 	fUH--ez22T2222222 	.88::(V^O;;;;;88::(A----
|#### 	0 	0Aq,//////	"			 	 
		 	fUH--e4yyCVZ DEEEEEE 	, 	,A1l++++++	, 	,s$   -BBB4CCCc                     |                                  }|                                  }|                                  }d |||fD             }|D ]}|                                 t          j        |           d S )Nc                 @    g | ]}t          j        |j                  S r+   r   r.   s     r1   r2   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>   r   r3   )r:   r   r8   r   )r?   r   r   r   r   rA   s         r1   test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeout   s    
 $$&&$$&&$$&&II0HIII 	 	AKKMMMM%     r3   c                    |                                  }t          j        |j                  sJ t          j        |j                  }|                                 |                                 t          j        |j                  rJ t          j        d          rJ t          j        d          dt          j                    v k    sJ d S )Nr   r   )r:   r8   
pid_existsr-   r;   r<   r=   r|   r>   s      r1   test_pid_existszTestProcessAPIs.test_pid_exists   s    ##%% +++++N59%%		$UY/////$R((((( ##V[]](:;;;;;;r3   c                 p   t          j                    }|D ]T}	 t          j        |          sJ # t          $ r. t	          j        d           |t          j                    vsJ Y Qw xY wt          t          |          dz   t          |          dz             }|D ]}t          j        |          rJ d S )Ng?i:  i>  )r8   r|   r   AssertionErrorr   sleeprX   max)r?   r|   r-   s      r1   test_pid_exists_2z!TestProcessAPIs.test_pid_exists_2   s    {}} 	0 	0C0(------! 0 0 0 
3&+--//////	0
 SYY&D		E(9:: 	. 	.C(------	. 	.s   05A('A(N)rr   rs   rt   r%   markskipifr   r   r   r   r   r   r+   r3   r1   rv   rv      s        [>   9, 9,	 9,v [>   ! !	 !< < <. . . . .r3   rv   c                       e Zd Zd Zej                            eo ej	                     d          d             Z
d Zd ZdS )TestMiscAPIsc                     t          j                    }t          |t                    sJ |dk    sJ |t	          j                    k     sJ d S Nr   )r8   	boot_time
isinstancefloatr   )r?   bts     r1   test_boot_timezTestMiscAPIs.test_boot_time   sP    "e$$$$$AvvvvDIKKr3   unreliable on CIrw   c           	         t          j                    }|g k    sJ |D ]#}|                     |          5  |j        sJ t	          |j        t
                    sJ t	          |j        t
          t          d           f          sJ |j        +t	          |j        t
          t          d           f          sJ |j         |j         |j	        dk    sJ t          j
                            |j	                   t          st          r
|j        J nt          j        |j                   d d d            n# 1 swxY w Y   %d S )N)user        )r8   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r	   r-   r;   )r?   r   r   s      r1   
test_userszTestMiscAPIs.test_users   s    {{{{ 	- 	-D4(( - -y   !$)S11111!$-#tDzz1BCCCCC9(%di#tDzz1BCCCCC		|c))))!//=== -g -8++++N48,,,- - - - - - - - - - - - - - -	- 	-s   C3D66D:	=D:	c                     t           j        }t          t           _        	 t          j                     |t           _        d S # |t           _        w xY wrF   )sysstdoutr   r8   test)r?   r   s     r1   	test_testzTestMiscAPIs.test_test  s>    
	 KMMMCJJJCJs   A   Ac                    g d}|D ]4}t          t          t          |          t                    s
J |            5t          j        dk    rt          j        sJ t          j        rJ |                    d           dt          j
                                        v r%t          j        sJ |                    d           ndt          j
                                        v rt          j        sJ t          j        t          j        t          j        g                    d          dk    sJ |                    d	           |                    d
           |                    d           |                    d           ndt          j
                                        v s dt          j
                                        v r$t          j        sJ |                    d           nudt          j
                                        v r#t          j        sJ |                    d           n1t          j        sJ t          j        rJ |                    d           |D ]!}t          t          |          r
J |            "d S )N)	r
   r   r   r   r   r	   r   r   r   posixr
   linuxr   bsdTr   r   r   r	   r   sunossolarisr   darwinr   r   )r   getattrr8   boolr6   r   r
   r   remover   platformlowerr   r   r   r	   r   countr   r   )r?   namesr   s      r1   test_os_constantszTestMiscAPIs.test_os_constants  so   

 

 

  	A 	ADgfd33T::@@D@@@@7g<~%%%LL!!!#,,,....|###W%%%%#,,,....z!!!FLL     U###Y'''Y'''X&&&&3<--//// 2 2 4 444|###W%%%%S\//1111|###W%%%>!!!|###LL###  	3 	3Dvt,,22d2222	3 	3r3   N)rr   rs   rt   r   r%   r   r   r   r8   r   r   r   r   r+   r3   r1   r   r      s              [)<6<>>)2D   - - -&     /3 /3 /3 /3 /3r3   r   c                       e Zd Zd Zd ZdS )TestMemoryAPIsc                 <   t          j                    }|j        dk    s
J |            |j        dk    s
J |            d|j        cxk    rdk    sn J |            |j        dk    s
J |            |j        dk    s
J |            |j        D ]}t          ||          }|dk    rt          |t          t          f          sJ |dk    rR|dk    s|                     |d|d          ||j        k    r&|                     |d|j        d|d	|d          d S )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r8   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)r?   memr   values       r1   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memoryH  s]   #%%y1}}}c}}}}q   #   CK&&&&3&&&&&&&&x!|||S|||x1}}}c}}}K 	 	DC&&Ey  !%#t55555wzz))TTT555$ABBB39$$))44DDD%%%9  	 	r3   c                    t          j                    }|j        dk    sJ |j        dk    s
J |            |j        dk    s
J |            |j        dk    r|j        dk    s
J |            n|j        dk    s
J |            d|j        cx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   )	r8   swap_memoryr   r   r   r   r   r   r   )r?   r   s     r1   test_swap_memoryzTestMemoryAPIs.test_swap_memory\  s     ""{ 
 
 
 
 
 yA~~~s~~~x1}}}c}}}9q==8a<<<<<<<8q===#===CK&&&&3&&&&&&&&w!|||S|||x1}}}c}}}}}r3   N)rr   rs   rt   r   r   r+   r3   r1   r   r   G  s2          (" " " " "r3   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                            eoed	          d
             Zd Zd Zd Zd Zd Zd Zd Ze
j                            eo ej                    dk    d	          e
j                            e d	          d                         Ze
j                            e d	          d             ZdS )TestCpuAPIsc                 |   t          j                    }|J |t          t          j        d                    k    sJ |dk    sJ t          j                            d          rSt          d          5 }|                                }d d d            n# 1 swxY w Y   d|vrt          j
        d          d S d S )NTpercpur   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r8   	cpu_countr   rT   r6   pathexistsopenreadr%   skip)r?   logicalfdcpuinfo_datas       r1   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalt  s   "$$"""#f.d;;;<<<<<<!||||7>>/** 	Io&& )"!wwyy) ) ) ) ) ) ) ) ) ) ) ) ) ) )L00k"GHHH		I 	I 10s   6BBBc                     t          j                    }t          j        d          }|t          j        d          t          r%t          j                    d d         dk    r|J d S |dk    sJ ||k    sJ d S )NFr   zcpu_count_cores() is NonerQ   )   r   r   )r8   r   r%   r   r   r   getwindowsversion)r?   r   coress      r1   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_cores  s    "$$ ///=+9::: 	$s,..rr2f<<=====A::::e######r3   c                 H   dD ]}t          j        d|          5 }t          j                    J |j        sJ 	 d d d            n# 1 swxY w Y   t          j        d|          5 }t          j        d          J |j        sJ 	 d d d            n# 1 swxY w Y   d S )N)r   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr  )r$   rY   r8   r   ri   )r?   valrk   s      r1   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_none  sE     
	  
	 C6S    '))111x	                             
 43    '666>>>x	                             
	  
	 s#   AA	A	(!BB	B	c                 $   d}t          j                    }t          |           |D ]&}t          |t                    sJ |dk    sJ ||z  }'t          t          |t          |          z
            d          dk    sJ t          |           d S )Nr   r   r  )r8   rT   sumr   r   roundabsr   )r?   r   timescp_times       r1   test_cpu_timeszTestCpuAPIs.test_cpu_times  s     ""E


 	 	Ggu-----c>>>>WEESU+,,a00A5555E




r3   c                 N   t          t          j                              }t          j                    t          z   }t          j                    |k     r?t          t          j                              }||k    rd S t          j                    |k     ?|                     d          )Nztime remained the same)r  r8   rT   r   r   r   )r?   t1stop_att2s       r1   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  s    !##$$)++.ikkG##V%''((BBww ikkG## ii0111r3   c           	         t          j        d          D ]~}d}t          |           |D ]&}t          |t                    sJ |dk    sJ ||z  }'t          t          |t          |          z
            d          dk    sJ t          |           t          t          j        d          d                   t          t          j        d                    k    sJ d S )NTr   r   r   r  F)	r8   rT   r  r   r   r  r  r   r   )r?   r  r   r  s       r1   test_per_cpu_timeszTestCpuAPIs.test_per_cpu_times  s   %T222 	 	EEJJJ  ! !!'511111#~~~~ USZZ/00!449999JJJJ6#4000344E***9
 9
 
 
 
 
 
 
r3   c                    t          j        d          }t          j                    t          z   }	 t          j                    |k    r|                     d          S t          j        d          }t          ||          D ];\  }}t          j        |          t          j        |          }}||z
  }|dk    r d S <)NTr   r   g?)r8   rT   r   r   r   zip_cpu_busy_time)r?   tot1	giveup_attot2r  r  
differences          r1   test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2  s     t,,,IKK.0		y{{i''yy+++#4000DdD//  B.r22F4I"4M4MB"W
%%FF &	r3   zunreliable on OPENBSD + CIrw   c           	         t          j                    }t          j        d          }|                    d t          | D                       }|j        D ]g}|                     |||          5  t          t          ||          t          ||          z
            dk     sJ 	 d d d            n# 1 swxY w Y   hd S )NTr   c                 ,    g | ]}t          |          S r+   )r  )r/   nums     r1   r2   z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>  s    #F#F#FCHH#F#F#Fr3   )fieldbaseper_cpur   )r8   rT   _maker  r   r   r  r   )r?   r&  r'  summed_valuesr%  s        r1   test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparison  s    !!"$///

#F#FW#F#F#FGG\ 	 	EEgFF  e,,w}e/L/LLMM                  	 	s   05B22B6	9B6	c                 &   	 t          |t                    sJ |dk    sJ |dusJ |dt          j                    z  k    sJ d S # t          $ rA}t	          d|dt          j        |          dt          j        |                    d }~ww xY w)Nr   g       g      Y@
z
last=z
new=)r   r   r8   r   r   pprintpformat)r?   r   last_retnew_reterrs        r1   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s    		gu-----c>>>>$&&&&ef&6&8&88888888 	 	 	 .33x0000&.2I2I2IK  	s   AA 
B<BBc                 >   t          j        d          }t          d          D ]0}t          j        d           }|                     |||           |}1t	          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S NMbP?)intervalr   r   )r8   cpu_percentrX   r2  r%   r`   rh   )r?   last_news       r1   test_cpu_percentzTestCpuAPIs.test_cpu_percent  s    !5111s 	 	A$d333C""3c222DD]:&& 	, 	,++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   /BBBc                    t          j        dd          }t          |          t          j                    k    sJ t	          d          D ]6}t          j        d d          }|D ]}|                     |||           |}7t          j        t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nr5  Tr6  r   r   r   )	r8   r7  r   r   rX   r2  r%   r`   rh   r?   r8  r9  r:  r   s        r1   test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percent  s   !5>>>4yyF,......s 	 	A$d4@@@C ; ;&&wc::::DD]:&& 	9 	948888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   C  CCc                    t          j        d          }t          d          D ]Y}t          j        d           }|D ]}|                     |||           |                     t	          |          ||           |}Zt          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S r4  )r8   cpu_times_percentrX   r2  r  r%   r`   rh   r>  s        r1   test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percent"  s   '777s 	 	A*D999C ; ;&&wc::::""3s88T3777DD]:&& 	2 	2$b1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   B;;B?B?c                 \   t          j        dd          }t          |          t          j                    k    sJ t	          d          D ]_}t          j        d d          }|D ]B}|D ]}|                     |||           |                     t          |          ||           C|}`d S )Nr5  Tr=  r   )r8   rA  r   r   rX   r2  r  )r?   r8  r9  r:  cpur   s         r1   test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percent-  s    'tDDD4yyF,......s 	 	A*DFFFC < <" ? ?G**7D#>>>>&&s3xxs;;;;DD	 	r3   c                 6   t          j        d           d t          j        d          D             }t          j        d|          5  t          j        d          D ]}|D ]}|                     |d d            	 d d d            d S # 1 swxY w Y   d S )NTr   c           
          g | ]@}|                     d  t          t          |j                            D                       AS )c                     g | ]}d S )r   r+   r.   s     r1   r2   zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp><  s    6661Q666r3   )r(  rX   r   r   r.   s     r1   r2   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>;  sS     
 
 
 GG66c!)nn 5 566677
 
 
r3   zpsutil.cpu_timesr  )r8   rA  rT   r$   rY   r2  )r?   
zero_timesrD  r   s       r1   #test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative8  s)    ----
 
%T222
 
 

 Z*DDD 	@ 	@/t<<< @ @" @ @G**7D$????@@	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   5BBBc                     t          j                    }|j        dk    sJ |j        D ]-}t          ||          }|dk    sJ t          s|dv r|dk    sJ .d S )N)ctx_switches
interruptssoft_interruptssyscallsr   )rL  rM  )r8   	cpu_statsr   r   r   )r?   infosr   r   s       r1   test_cpu_statszTestCpuAPIs.test_cpu_statsD  s     ""} !
 
 
 
 
 M 	! 	!DE4((EA:::: !4#AAAqyyyy	! 	!r3   arm64zskipped due to #1892not supportedc                 $   d }t          j        d          }t          r|st          j        d          |s
J |             |t          j        d          g           t
          r&t          |          t          j                    k    sJ d S d S )Nc                     | D ]r}|j         dk    sJ |j        dk    r|j        |j        k    sJ |j         D ]>}t          ||          }t	          |t
          t          t          f          sJ |dk    sJ ?sd S )N)currentminr   r   r   )r   r   rW  r   r   r   r   r   )rM   ntr   r   s       r1   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsZ  s     & &z%>>>>>6S==:////J & &D#B--E%ec4-?@@@@@ A:::::&	& &r3   Tr   zreturns empty list on FreeBSDF)r8   cpu_freqr   r%   r   r   r   r   )r?   rZ  rM   s      r1   test_cpu_freqzTestCpuAPIs.test_cpu_freqU  s    
	& 	& 	& _D))) 	?2 	?+=>>>2&////0111 	1r77f.000000	1 	100r3   c                     t          j                    }t          |          dk    sJ |D ]!}t          |t                    sJ |dk    sJ "d S )Nr   r   )r8   
getloadavgr   r   r   )r?   loadavgloads      r1   test_getloadavgzTestCpuAPIs.test_getloadavgn  se    #%%7||q     	 	DdE*****3;;;;;	 	r3   N)rr   rs   rt   r   r  r  r  r  r  r!  r%   r   r   r   r	   r*  r2  r;  r?  rB  rE  rJ  rR  r   r   machiner   r\  r   ra  r+   r3   r1   r   r   s  s       
I 
I 
I	$ 	$ 	$     
 
 
:2 2 2
 
 
D   [w'C     
 
 
, , ,	9 	9 	9	2 	2 	2	 	 	
@ 
@ 
@! ! !" [/"("$$/8N    [L(AA1 1 BA 1* [N*?CC  DC  r3   r   c                      e Zd Zej                            eoe d          d             Zej                            e	 d          d             Z
d Zd Zej                            eoej                            d           d	          ej                            eo ej                     d
          d                         Zd ZdS )TestDiskAPIszunreliable on PYPY32 + 32BITrw   c                 |   t          j        t          j                              }|j        dk    sJ |j        dk    s
J |            |j        dk    s
J |            |j        dk    s
J |            |j        |j        k    s
J |            |j        |j        k    s
J |            d|j        cxk    rdk    sn J |j                    t          t          d          rt          j        t          j                              }d}|j        |j        k    sJ t          |j        |j        z
            |k     sJ t          s"t          |j        |j        z
            |k     sJ |                                 }t          j        t                     5  t          j        |           d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   r   r   
disk_usagei  P )r8   rf  r6   getcwdr   r   r   r   r   r   shutilr  r   
get_testfnr%   r`   r   )r?   usageshutil_usage	tolerancefnames        r1   test_disk_usagezTestDiskAPIs.test_disk_usagex  s    !")++..} DDDDD{QzA~~~u~~~zA~~~u~~~{UZ''''''{UZ''''''EM((((S(((((%-(((6<(( 	G!,RY[[99L'I;,"44444uzL$5566BBBB G5:(99::YFFFF !!],-- 	% 	%e$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   F11F58F5znot an ASCII fsc                     t          j        t                    5  t          j        t
                     d d d            d S # 1 swxY w Y   d S rF   )r%   r`   UnicodeEncodeErrorr8   rf  r    rp   s    r1   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode  s     ]-.. 	. 	.n---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                 .    t          j        d           d S )N   .)r8   rf  rp   s    r1   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytes  s    $r3   c                    d }t          j        d          }|sJ |D ]} ||           t          r
d|j        v rt          s/t
          j                            |j                  s
J |            n|j         t
          j                            |j	                  s
J |            |j
        s
J |            t          j        d          }|sJ t          j        d          D ]} ||           t          s|j	        r	 t          j        |j	                   t
          j                            |j	                  s
J |            d# t          $ rR}t          r!t          r|j        t          j        k    rY d }~|j        t          j        t          j        fvr Y d }~d }~ww xY wd } |t&                    }d t          j        d          D             }||v sJ d S )Nc                     t          | j        t                    sJ t          | j        t                    sJ t          | j        t                    sJ t          | j        t                    sJ d S rF   )r   devicer   
mountpointfstypeoptsrY  s    r1   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  sh    bi-----bmS11111bi-----bgs+++++++r3   F)allcdromTc                 "   t           j                            |           } t           j                            |           s>t           j                            |           } t           j                            |           >|                                 S rF   )r6   r   abspathismountdirnamer   )r   s    r1   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sd    7??4((Dgood++ -wt,, good++ -::<<r3   c                 N    g | ]"}|j         	|j                                         #S r+   )rx  r   r.   s     r1   r2   z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>  s>     
 
 
|
L  
 
 
r3   )r8   disk_partitionsr   rz  r
   r6   r   r   rw  rx  ry  statOSErrorr   r   errnoEIOEPERMEACCES__file__)r?   r|  rM   diskr1  r  mountmountss           r1   test_disk_partitionsz!TestDiskAPIs.test_disk_partitions  sR   	, 	, 	, #...			 	% 	%DL 7di// w~~dk2288D8888 7>>$/2288D888;$$$$$$ #---			*t444 	A 	ADL At A
AGDO,,, 7>>$/::@@D@@@@    % !% !CI4J4J  yel(CCC DCCCC	  	  	  ! **
 
+555
 
 

 s   E
F(#F#> F##F(z/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                 0   d }t          j        d          }|
J d             ||           t          j        d          }t          |          t          t          |                    k    sJ |D ]}|s
J |             |||                     d S )Nc                    | d         | j         k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        k    sJ t          st
          s| d         | j        k    sJ | d         | j        k    sJ t          r:| d         | j	        k    sJ | d         | j
        k    sJ | d	         | j        k    sJ nt          r| d         | j        k    sJ | j        D ] }t          | |          dk    s
J |             !d S )
Nr   r   rQ   r         r        )
read_countwrite_count
read_byteswrite_bytesr	   r   	read_time
write_timer   read_merged_countwrite_merged_count	busy_timer   r   r   )rY  r   s     r1   r|  z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntuple  sM   a5BM))))a5BN****a5BM))))a5BN**** 1v 1!u,,,,!u---- 1a5B$88888a5B$99999a5BL00000 1a5BL0000
 2 2r4((A---r----2 2r3   Fperdiskzno disks on this system?T)r8   disk_io_countersr   rL   r?   r|  retrI   s       r1   test_disk_io_countersz"TestDiskAPIs.test_disk_io_counters  s    	2 	2 	2" %e444 :S%d3333xx3s3xx==(((( 	# 	#COOOOOLS""""	# 	#r3   c                     t          j        di           5 }t          j        d          J t          j        d          i k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz#psutil._psplatform.disk_io_countersr  Fr  T)r$   rY   r8   r  ri   r?   rk   s     r1   test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disks  s     Z1
 
 
 	*5999AAA*4888B>>>>8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   <A!!A%(A%N)rr   rs   rt   r%   r   r   r   r   rn  r   rq  rt  r  r   r6   r   r   r   r8   r  r  r  r+   r3   r1   rd  rd  w  sI       [X&D   % % %4 [H->??. . @?.
     8 8 8t [7bgnn%6777D    [4262444=O   # # 	 #8    r3   rd  c                      e Zd Zej                            e d          d             Zej                            e d          d             Zej                            e	d          d             Z
d Zej                            e	d          d             Zej                            epepe d	          d
             ZdS )TestNetAPIsrT  rw   c                     d }t          j        d          } ||           t          j        d          }|g k    sJ |D ].}|sJ t          |t                    sJ  |||                    /d S )Nc                    | d         | j         k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        k    sJ | d         | j        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 |             | j        dk    s
J |             d S )	Nr   r   rQ   r   r  r  r  r  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutr{  s    r1   r|  z6TestNetAPIs.test_net_io_counters.<locals>.check_ntuple	  s~   a5BM))))a5BM))))a5BO++++a5BO++++a5BH$$$$a5BI%%%%a5BI%%%%a5BJ&&&&=A%%%r%%%=A%%%r%%%?a''''''?a''''''8q==="===9>>>2>>>9>>>2>>>:???B?????r3   FpernicT)r8   net_io_countersr   r   r  s       r1   test_net_io_countersz TestNetAPIs.test_net_io_counters  s    	' 	' 	'$ $E222S$D111byyyy 	# 	#CJJJc3'''''LS""""	# 	#r3   c                     t          j        di           5 }t          j        d          J t          j        d          i k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz"psutil._psplatform.net_io_countersr  Fr  T)r$   rY   r8   r  ri   r  s     r1   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics$  s     Z0r
 
 
 	)777???)666"<<<<8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  zQEMU user not supportedc           
         t          j                    }|s
J |            t          j                    }t          t          j        t          j        t           j        g          }|                                D ]\  }}t          |t                    sJ t          t          |                    t          |          k    sJ |D ]q}t          |j        t                    sJ t          |j        t                    sJ t          |j        t          t!          d           f          sJ t          |j        t          t!          d           f          sJ |j        |v sJ t$          r(t&          s!t          |j        t(          j                  sJ ||         j        r-|j        t          j        k    rbt	          j        |j                  }t/          j        |          5  |                    |j        df           d d d            n# 1 swxY w Y   n|j        t          j        k    rt	          j        |j        dt          j        t          j        dt          j                  d         }|\  }	}
}}}t	          j        |	|
|          }t/          j        |          5  |                    |           d d d            n# 1 swxY w Y   |j        |j        |j        |j        fD ].}|*|j        t          j        k    rt=          ||j                   /|j        r|j        J a|j        r	|j        J st>          st@          stB          r5tE          t          d          rt           j        t          j        k    sJ d S d S tF          rt           j        t          j$        k    sJ d S tJ          rt           j        dk    sJ d S d S )Nr   AF_LINKr   )&r8   net_if_addrsnet_if_statsrL   socketAF_INETAF_INET6r  itemsr   r   r   familyr   addressnetmaskr   	broadcastr   r   r#   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr"   r   r   r   r   r   	AF_PACKETr   )r?   nics	nic_statsfamiliesnicaddrsaddrsrf   afsocktypeproto
_canonnamesaips                  r1   test_net_if_addrszTestNetAPIs.test_net_if_addrs/  s#   "$$T'))	 HII**,, /	2 /	2JCc3'''''s5zz??c%jj0000 ,2 ,2!$+s33333!$,44444!$,d4jj0ABBBBB!$.3T

2CDDDDD{h.... At A%dk4<@@@@@S>& ' {fn44"M$+66'/22 6 6FFDL!#45556 6 6 6 6 6 6 6 6 6 6 6 6 6 677%1 L"O"."-      ?C;HeZ"M"h>>'/22 ' 'FF2JJJ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' LLNH	 ? ?B ~  ;&/99-b$+>>>> 28++++X 2>111Y,2\  	(% 	(5 	(vy)) 8~77778 877 	(>V%5555555 	(>R''''	( 	(''s$    H		HHK  KKc                 4   t           rdt          j        dd d d fg}ndg}t          j        d|          5 }t          j                    d         d         }|j        sJ t           r|j        dk    sJ n|j        dk    sJ d d d            d S # 1 swxY w Y   d S )	Nem1z06:3d:29)r  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
   r8   r  r$   rY   r  ri   r  )r?   r  rk   r  s       r1    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytesu  s     	>6>:tT4HICC<=CZ-C
 
 
 	;&((/2D8OOO ;|'::::::|':::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   ABBBc                    t          j                    }|s
J |            t           j        t           j        t           j        f}|                                D ]n\  }}t          |t                    sJ |\  }}}}}	t          |t                    sJ ||v sJ ||v sJ |dk    sJ |dk    sJ t          |	t                    sJ od S r   )	r8   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   )
r?   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r1   test_net_if_statszTestNetAPIs.test_net_if_stats  s    "$$T""%

  ::<< 	* 	*KD%dC(((((.3+D&%edD)))))\))))\))))A::::!8888eS))))))	* 	*r3   zLINUX or BSD or MACOS specificc                     t          j        dt          t          j        d                    5 }t          j                    }|i k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil._psutil_posix.net_if_mturd   rR   )r$   rY   r  r  ENODEVr8   r  ri   )r?   rk   r  s      r1   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s    
 Z-b11
 
 
 	 %''C"99998OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   %A""A&)A&N)rr   rs   rt   r%   r   r   r   r  r  r   r  r  r  r   r   r   r  r+   r3   r1   r  r    s?       [//HH# # IH#8 [//HH  IH [	*CDDC( C( EDC(J; ; ;$ [	*CDD* * ED*$ ["c"U#,L       r3   r  c                      e Zd Zej                            e d          d             Zej                            e d          d             Zej                            e	 d          ej                            e
 d          d                         Zej                            e d          d             ZdS )	TestSensorsAPIsrT  rw   c                 H   t          j                    }|                                D ]y\  }}t          |t                    sJ |D ]Z}t          |j        t                    sJ |j        |j        dk    sJ |j        |j        dk    sJ |j        |j        dk    sJ [zd S r   )	r8   sensors_temperaturesr  r   r   labelrW  highcritical)r?   tempsr   entriesentrys        r1   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures  s    +--"[[]] 		/ 		/MD'dC(((((  / /!%+s33333=, =A----:) :????>- >Q..../		/ 		/r3   c                    ddgi}t          j        d|          5 }t          j        d          d         d         }|j        sJ |j        dk    sJ |j        d	k    sJ |j        d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr  T)
fahrenheitr   g     ^@g     a@g     c@)r$   rY   r8   r  ri   rW  r  r  )r?   drk   r  s       r1   #test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneit  s    567Z5A
 
 
 	+/4@@@LQOE8OOO=E)))):&&&&>U*****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   AA<<B B z
no batteryc                 .   t          j                    }|j        dk    sJ |j        dk    sJ |j        t           j        t           j        fvr|j        dk    sJ n|j        t           j        k    r	|j        sJ t          |j        t                    sJ d S )Nr   r   )	r8   sensors_batteryr   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDpower_pluggedr   r   )r?   r  s     r1   test_sensors_batteryz$TestSensorsAPIs.test_sensors_battery  s     $&&{a{c!!!!<%' 
 
 
 <1$$$$$|v:::((((#+T2222222r3   c                 0   t          j                    }|                                D ]m\  }}t          |t                    sJ |D ]N}t          |j        t                    sJ t          |j        t          t          f          sJ |j        dk    sJ Ond S r   )	r8   sensors_fansr  r   r   r  rW  r   r   )r?   fansr   r  r  s        r1   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s    "$$!ZZ\\ 	* 	*MD'dC(((((  * *!%+s33333!%-#t=====})))))*	* 	*r3   N)rr   rs   rt   r%   r   r   r   r  r   r   r   r  r   r  r+   r3   r1   r  r    s       [44_MM/ / NM/ [44_MM	+ 	+ NM	+ [//HH[K==3 3 >= IH3 [,,_EE* * FE* * *r3   r  );__doc__r  r   r  r6   r   r-  rh  r   r  r   r   r8   r   r   r   r   r   r   r	   r
   r   r   psutil._compatr   r   r   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(   rv   r   r   r   rd  r  r  r+   r3   r1   <module>r     s           				      



                                                                     , , , , , ,       ! ! ! ! ! ! # # # # # #             ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % ' ' ' ' ' ' , , , , , , , , , , , , ) ) ) ) ) ) 1 1 1 1 1 1 ! ! ! ! ! ! % % % % % %       " " " " " " ' ' ' ' ' ' ' ' ' ' ' ' * * * * * *                   ) ) ) ) ) )E  E  E  E  E n E  E  E Pc. c. c. c. c.n c. c. c.LU3 U3 U3 U3 U3> U3 U3 U3p)" )" )" )" )"^ )" )" )"XA A A A A. A A AHL L L L L> L L L^_ _ _ _ _. _ _ _D3* 3* 3* 3* 3*n 3* 3* 3* 3* 3*r3   