
    /h                        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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$e,          Z0 G d% d&e,          Z1 G d' d(e,          Z2 G d) d*e,          Z3 G d+ d,e,          Z4 G d- d.e,          Z5 G d/ d0e,          Z6 G d1 d2e,          Z7dS )3zTests for system APIS.    N)mock)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)broadcast_addr)AARCH64)ASCII_FS)
CI_TESTING)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)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     K/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_system.py
<listcomp>z5TestProcessIter.test_pid_presence.<locals>.<listcomp>?   s    DDDquDDD    c                     g | ]	}|j         
S r'   r(   r*   s     r-   r.   z5TestProcessIter.test_pid_presence.<locals>.<listcomp>A   s    BBBqQUBBBr/   c                     g | ]	}|j         
S r'   r(   r*   s     r-   r.   z5TestProcessIter.test_pid_presence.<locals>.<listcomp>E   s     F F F1 F F Fr/   )	osgetpidpsutilprocess_iterspawn_testprocr)   Processkillwaitselfsprocps      r-   test_pid_presencez!TestProcessIter.test_pid_presence>   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Fr/   c                     t          t          j                              }t          |d           t          t	          |          d           k    sJ d S )Nc                     | j         S Nr(   r,   s    r-   <lambda>z4TestProcessIter.test_no_duplicates.<locals>.<lambda>I   s     r/   )keyc                     | j         S rA   r(   rB   s    r-   rC   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>J   s    15 r/   )listr4   r5   sortedset)r;   lss     r-   test_no_duplicatesz"TestProcessIter.test_no_duplicatesG   sf    &%''((boo...&GG3
 3
 3
 
 
 
 
 
 
r/   c                    t          t          j                               t          d          D ]}t	          j        dt          j        t          j                                        5  t          t          j        dg                    r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)
rF   r4   r5   ranger   patchNoSuchProcessr2   r3   cache_clearr;   r,   s     r-   test_emulate_nspz TestProcessIter.test_emulate_nspM   s   V ""###q 	. 	.A("0==   J J   3;- H H HIIIIII	J J J J J J J J J J J J J J J
 ++----	. 	.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 rL   )rF   r4   r5   rS   r   rT   AccessDeniedr2   r3   r!   raisesrV   rW   s     r-   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_deniedW   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)   rQ   fooz$psutil._psplatform.Process.cpu_timesr    rN   rP   )rR   ad_value)r4   r5   rF   infokeysr!   r[   
ValueErrorr   rT   rZ   calledobject)r;   r=   mflags       r-   
test_attrszTestProcessIter.test_attrsb   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 rA   )rF   r4   r5   _pmaprV   r;   s    r-   test_cache_clearz TestProcessIter.test_cache_clear~   sP    V ""###|'')))<r/   N)	__name__
__module____qualname__r>   rJ   rX   r\   rh   rl   r'   r/   r-   r$   r$   =   sq        G G G
 
 
. . .	. 	. 	.  8         r/   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                 h   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 |rJ t          |          d
k    sJ r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%                    |j        |j        |j        hk    sJ |D ]}	t          |	d          sJ d S )Nc                 <                         | j                   d S rA   )appendr)   )r=   pidss    r-   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr/   c                 @    g | ]}t          j        |j                  S r'   r4   r7   r)   r*   s     r-   r.   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   $    III1&&IIIr/   )timeout   )rx   g{Gz?r}   rx   g      ?   
returncode   c                     t          j        | d|          \  }}t          |          dk    sJ t          |          dk    sJ ||fS )NQ?r   r~   rM   r4   
wait_procslenprocsrx   gonealives       r-   test_1z/TestProcessAPIs.test_wait_procs.<locals>.test_1   V     +th  KD% t99>>>>u::????;r/   c                     g | ]	}|j         
S r'   r(   r*   s     r-   r.   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   s    222ae222r/   c                     t          j        | d|          \  }}t          |          dk    sJ t          |          dk    sJ ||fS )Nr   r   r   r   r   r   s       r-   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r/   )r6   r!   r[   rc   r4   r   	TypeErrortimer   hasattrr"   	terminater)   r   popr   signalSIGTERMrH   )r;   rx   sproc1sproc2sproc3r   tr   r   r=   r   r   rw   s               @r-   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$$$$5zzQ 	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4yyVZVZ@@@@@ 	, 	,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'   rz   r*   s     r-   r.   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>   r{   r/   )r6   r   r4   r   )r;   r   r   r   r   r=   s         r-   test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeout   s    
 $$&&$$&&$$&&II0HIII 	 	AKKMMMM%     r/   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   )r6   r4   
pid_existsr)   r7   r8   r9   rw   r:   s      r-   test_pid_existszTestProcessAPIs.test_pid_exists   s    ##%% +++++N59%%		$UY/////$R((((( ##V[]](:;;;;;;r/   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>  )r4   rw   r   AssertionErrorr   sleeprS   max)r;   rw   r)   s      r-   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)rm   rn   ro   r!   markskipifr   r   r   r   r   r   r'   r/   r-   rq   rq      s        [>   9, 9,	 9,v [>   ! !	 !< < <. . . . .r/   rq   c                       e Zd Zd Zej                            eo ej	                     d          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   )r4   	boot_time
isinstancefloatr   )r;   bts     r-   test_boot_timezTestMiscAPIs.test_boot_time   sP    "e$$$$$AvvvvDIKKr/   unreliable on CIrr   c           	         t          j                    }|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        )r4   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r
   r)   r7   )r;   r   r   s      r-   
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   C3D22D6	9D6	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   getattrr4   boolr2   r   r   r   removesysplatformlowerr   r   r   r
   r	   countr   r   )r;   namesr   s      r-   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 	3r/   N)rm   rn   ro   r   r!   r   r   r   r4   r   r   r   r'   r/   r-   r   r      s}              [)<6<>>)2D   - - -&/3 /3 /3 /3 /3r/   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                    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, =)r4   virtual_memoryr   	availabler   usedfree_fieldsr   r   intfail)r;   memr   values       r-   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory;  sc   #%%y1}}}c}}}}q   #   CK&&&&3&&&&&&&&x!|||S|||x1}}}c}}}K 
	 
	DC&&Ey  !%-----wzz))t$=$=U$=$=$=>>>39$$))OO39OOOOuOOO  
	 
	r/   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   )	r4   swap_memoryr   r   r   r   r   r   r   )r;   r   s     r-   test_swap_memoryzTestMemoryAPIs.test_swap_memoryN  s     ""{ 
 
 
 
 
 yA~~~s~~~x1}}}c}}}9q==8a<<<<<<<8q===#===CK&&&&3&&&&&&&&w!|||S|||x1}}}c}}}}}r/   N)rm   rn   ro   r   r   r'   r/   r-   r   r   :  s2          &" " " " "r/   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	           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)r4   	cpu_countr   rP   r2   pathexistsopenreadr!   skip)r;   logicalfdcpuinfo_datas       r-   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalf  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 NonerM   )   r~   r~   )r4   r   r!   r   r   r   getwindowsversion)r;   r   coress      r-   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coresr  s    "$$ ///=+9::: 	$s,..rr2f<<=====A::::e######r/   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   rT   r4   r   rd   )r;   valrf   s      r-   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   )r4   rP   sumr   r   roundabsr   )r;   r   timescp_times       r-   test_cpu_timeszTestCpuAPIs.test_cpu_times  s     ""E


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




r/   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  r4   rP   r   r   r   )r;   t1stop_att2s       r-   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  s    !##$$)++.ikkG##V%''((BBww ikkG## ii0111r/   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)	r4   rP   r  r   r   r  r  r   r   )r;   r  r   r  s       r-   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
 
 
 
 
 
 
r/   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?)r4   rP   r   r   r   zip_cpu_busy_time)r;   tot1	giveup_attot2r  r  
differences          r-   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
%%44 &	 r/   zunreliable on OPENBSD + CIrr   r   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     r-   r.   z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>  s    #F#F#FCHH#F#F#Fr/   )fieldbaseper_cpurM   )r4   rP   _maker  r   r   r  r   )r;   r  r  summed_valuesr  s        r-   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           
      2   	 t          |t                    sJ |dk    sJ |dt          j                    z  k    sJ d S # t          $ rM}t	          d                    |t          j        |          t          j        |                              d }~ww xY w)Nr   g      Y@z
{}
last={}
new={})r   r   r4   r   r   formatpprintpformat)r;   r   last_retnew_reterrs        r-   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s    		gu-----c>>>>ef&6&8&88888888 	 	 	 '..116>'3J3J   	s   ;? 
B	A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|   )r4   cpu_percentrS   r)  r!   r[   rc   )r;   last_news       r-   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 )Nr,  Tr-  r   r   r|   )	r4   r.  r   r   rS   r)  r!   r[   rc   r;   r/  r0  r1  r   s        r-   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 r+  )r4   cpu_times_percentrS   r)  r  r!   r[   rc   r5  s        r-   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 )Nr,  Tr4  r   )r4   r8  r   r   rS   r)  r  )r;   r/  r0  r1  cpur   s         r-   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	 	r/   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     r-   r.   zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>0  s    6661Q666r/   )r  rS   r   r   r*   s     r-   r.   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>/  sS     
 
 
 GG66c!)nn 5 566677
 
 
r/   zpsutil.cpu_timesr   )r4   r8  rP   r   rT   r)  )r;   
zero_timesr;  r   s       r-   #test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative,  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   >   rD  rC  )r4   	cpu_statsr   r   r   )r;   infosr   r   s       r-   test_cpu_statszTestCpuAPIs.test_cpu_stats8  s     ""} !
 
 
 
 
 M 	! 	!DE4((EA:::: !4#AAAqyyyy	! 	!r/   arm64zskipped due to #1892not supportedc                 2   d }t          j        d          }t          s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 ]l}|j         dk    sJ |j        dk    r|j        |j        k    sJ |j         D ]8}t          ||          }t	          |t
          t          f          sJ |dk    sJ 9md S )N)currentminr   r   r   )r   r   rN  r   r   r   r   )rI   ntr   r   s       r-   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsN  s     & &z%>>>>>6S==:////J & &D#B--E%ec5\::::: A:::::&	& &r/   Tr   z/returns empty list on FreeBSD and Linux aarch64F)	r4   cpu_freqr   r   r!   r   r   r   r   )r;   rQ  rI   s      r-   test_cpu_freqzTestCpuAPIs.test_cpu_freqI  s    
	& 	& 	& _D))) 	w 	 	+A   2&////0111 	1r77f.000000	1 	100r/   c                     t          j                    }t          |          dk    sJ |D ]!}t          |t                    sJ |dk    sJ "d S )Nr   r   )r4   
getloadavgr   r   r   )r;   loadavgloads      r-   test_getloadavgzTestCpuAPIs.test_getloadavgd  se    #%%7||q     	 	DdE*****3;;;;;	 	r/   N)rm   rn   ro   r   r   r  r	  r  r  r  r!   r   r   r   r
   r"   r!  r)  r2  r6  r9  r<  rA  rI  r   r   machiner   rS  r   rX  r'   r/   r-   r   r   e  s       
I 
I 
I	$ 	$ 	$     
 
 
<2 2 2
 
 
D      [w'C    b   
 
 
, , ,	9 	9 	9	2 	2 	2	 	 	
@ 
@ 
@! ! !" [/"("$$/8N    [L(AA1 1 BA 1. [N*?CC  DC  r/   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 + 32BITrr   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 )r4   r]  r2   getcwdr   r   r   r   r   r   shutilr  r   
get_testfnr!   r[   FileNotFoundError)r;   usageshutil_usage	tolerancefnames        r-   test_disk_usagezTestDiskAPIs.test_disk_usagen  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 rA   )r!   r[   UnicodeEncodeErrorr4   r]  r   rk   s    r-   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode  s     ]-.. 	. 	.n---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                 .    t          j        d           d S )N   .)r4   r]  rk   s    r-   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytes  s    $r/   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        h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 rA   )r   devicer   
mountpointfstypeoptsrP  s    r-   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  sh    bi-----bmS11111bi-----bgs+++++++r/   F)allcdromTc                 "   t           j                            |           } t           j                            |           s>t           j                            |           } t           j                            |           >|                                 S rA   )r2   r   abspathismountdirnamer   )r   s    r-   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sd    7??4((Dgood++ -wt,, good++ -::<<r/   c                 N    g | ]"}|j         	|j                                         #S r'   )rp  r   r*   s     r-   r.   z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>  s>     
 
 
|
L  
 
 
r/   )r4   disk_partitionsr   rr  r   r2   r   r   ro  rp  rq  statOSErrorr   r   errnoEIOEPERMEACCES__file__)r;   rt  rI   diskr(  r{  mountmountss           r-   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~   rM   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   )rP  r   s     r-   rt  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 2r/   Fperdiskzno disks on this system?T)r4   disk_io_countersr   rH   r;   rt  retrD   s       r-   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""""	# 	#r/   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   rT   r4   r  rd   r;   rf   s     r-   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)rm   rn   ro   r!   r   r   r   r   rf  r   ri  rl  r  r   r2   r   r   r   r4   r  r  r  r'   r/   r-   r[  r[  m  sI       [X&D   % % %4 [H->??. . @?.
     8 8 8t [7bgnn%6777D    [4262444=O   # # 	 #8    r/   r[  c                      e Zd Zej                            e d          d             Zej                            e d          d             Zd Z	d Z
d Zej                            epepe d          d	             Zd
S )TestNetAPIsrK  rr   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~   rM   r   r  r  r   r  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrs  s    r-   rt  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?????r/   FpernicT)r4   net_io_countersr   r   r  s       r-   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""""	# 	#r/   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   rT   r4   r  rd   r  s     r-   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics  s     Z0r
 
 
 	)777???)666"<<<<8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c           
         t          j                    }|s
J |            t          j                    }t          j        t          j        t           j        h}|                                D ]\  }}t          |t                    sJ t          t          |                    t          |          k    sJ |D ]}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          |j        t$          j                  sJ ||         j        r|j        t          j        k    rNt          j        |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        |	|
|          5 }|                    |           d d d            n# 1 swxY w Y   |j        |j        |j        |j        fD ].}|*|j        t          j        k    rt5          ||j                   /|j        r
|j        J n|j        r	|j        J |j        r@|j        r9|j        t          j        t          j        hv r|j        t7          |          k    sJ t8          st:          st<          r5t?          t          d          rt           j        t          j        k    sJ d S d S t@          rt           j        t          j!        k    sJ d S tD          rt           j        dk    sJ d S d S )Nr   AF_LINKr|   )#r4   net_if_addrsnet_if_statssocketAF_INETAF_INET6r  itemsr   r   r   rH   familyr   addressnetmaskr   	broadcastenumIntEnumisupbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr    r   r   r   r   r   r   	AF_PACKETr   )r;   nics	nic_statsfamiliesnicaddrsaddrsra   afsocktypeproto
_canonnamesaips                  r-   test_net_if_addrszTestNetAPIs.test_net_if_addrs%  s4   "$$T'))	 NFOV^D**,, 4	B 4	BJCc3'''''s5zz??c%jj0000 1B 1B!$+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....!$+t|<<<<<S>& ' {fn44#]4;77 61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#]2x?? '1FF2JJJ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' LLNH	 ? ?B ~  ;&/99-b$+>>>> 28++++X 2>111 NBB 'HHH>^D-A-AAAAAc1Bf  	(% 	(5 	(vy)) 8~77778 877 	(>V%5555555 	(>R''''	( 	(''s$   1GG!GI==JJ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   r4   r  r   rT   r  rd   r  )r;   r  rf   r  s       r-    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_byteso  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   )	r4   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   )
r;   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r-   test_net_if_statszTestNetAPIs.test_net_if_stats  s    "$$T""%

  ::<< 	* 	*KD%dC(((((.3+D&%edD)))))\))))\))))A::::!8888eS))))))	* 	*r/   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_mtur_   rN   )r   rT   r  r  ENODEVr4   r  rd   )r;   rf   r  s      r-   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s    
 Z-b11
 
 
 	 %''C"99998OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   %A""A&)A&N)rm   rn   ro   r!   r   r   r   r  r  r  r  r  r   r   r   r  r'   r/   r-   r  r    s        [//HH# # IH#8 [//HH  IHH( H( H(T; ; ;$* * *$ ["c"U#,L       r/   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 )	TestSensorsAPIsrK  rr   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   )	r4   sensors_temperaturesr  r   r   labelrN  highcritical)r;   tempsr   entriesentrys        r-   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures  s    +--"[[]] 		/ 		/MD'dC(((((  / /!%+s33333=, =A----:) :????>- >Q..../		/ 		/r/   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   rT   r4   r  rd   rN  r  r  )r;   drf   r  s       r-   #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        h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   )	r4   sensors_batteryr   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDpower_pluggedr   r   )r;   r  s     r-   test_sensors_batteryz$TestSensorsAPIs.test_sensors_battery  s     $&&{a{c!!!!<%' 
 
 
 <1$$$$$\V888$$$$#+T2222222r/   c                 "   t          j                    }|                                D ]f\  }}t          |t                    sJ |D ]G}t          |j        t                    sJ t          |j        t                    sJ |j        dk    sJ Hgd S r   )r4   sensors_fansr  r   r   r  rN  r   )r;   fansr   r  r  s        r-   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s    "$$!ZZ\\ 	* 	*MD'dC(((((  * *!%+s33333!%-55555})))))*	* 	*r/   N)rm   rn   ro   r!   r   r   r   r  r  r   r   r  r   r  r'   r/   r-   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* * *r/   r  )8__doc__r   r  r  r2   r   r$  r_  r   r  r   r   unittestr   r4   r   r   r   r   r   r	   r
   r   r   r   psutil._commonr   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   rq   r   r   r   r[  r  r  r'   r/   r-   <module>r     sJ        				      



                                                                     ) ) ) ) ) )             ! ! ! ! ! ! # # # # # # ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % ' ' ' ' ' ' , , , , , , , , , , , , ) ) ) ) ) ) 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L3 L3 L3 L3 L3> L3 L3 L3^(" (" (" (" ("^ (" (" ("VE E E E E. E E EPL L L L L> L L L^b b b b b. b b bJ2* 2* 2* 2* 2*n 2* 2* 2* 2* 2*r/   