
    Xi͊                        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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-  G d" d#e*          Z. G d$ d%e*          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 d0 d1e*          Z5dS )2z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)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     p/var/www/development/aibuddy-work/election-extract/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>>   s    BBBqQUBBBr.   c                     g | ]	}|j         
S r&   r'   r)   s     r,   r-   z5TestProcessIter.test_pid_presence.<locals>.<listcomp>B   s     F F F1 F F Fr.   )	osgetpidpsutilprocess_iterspawn_subprocr(   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>F   s     r.   )keyc                     | j         S r@   r'   rA   s    r,   rB   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>G   s    15 r.   )listr3   r4   sortedset)r:   lss     r,   test_no_duplicatesz"TestProcessIter.test_no_duplicatesD   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)
rE   r3   r4   ranger   patchNoSuchProcessr1   r2   cache_clearr:   r+   s     r,   test_emulate_nspz TestProcessIter.test_emulate_nspJ   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 rK   )rE   r3   r4   rR   r   rS   AccessDeniedr1   r2   r    raisesrU   rV   s     r,   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_deniedT   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(   rP   fooz$psutil._psplatform.Process.cpu_timesr    rM   rO   )rQ   ad_value)r3   r4   rE   infokeysr    rZ   
ValueErrorr   rS   rY   calledobject)r:   r<   mflags       r,   
test_attrszTestProcessIter.test_attrs_   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 r@   )rE   r3   r4   _pmaprU   r:   s    r,   test_cache_clearz TestProcessIter.test_cache_clear{   sP    V ""###|'')))<r.   N)	__name__
__module____qualname__r=   rI   rW   r[   rg   rk   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_subproc() 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 r@   )appendr(   )r<   pidss    r,   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr.   c                 @    g | ]}t          j        |j                  S r&   r3   r6   r(   r)   s     r,   r-   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   $    III1&&IIIr.   )timeout   )rw   g{Gz?r|   rw   g      ?   
returncode   c                     t          j        | d|          \  }}t          |          dk    sJ t          |          dk    sJ ||fS )NQ?r~   r}   rL   r3   
wait_procslenprocsrw   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.   )r5   r    rZ   rb   r3   r   	TypeErrortimer   hasattrr!   	terminater(   r   popr   signalSIGTERMrG   )r:   rw   sproc1sproc2sproc3r   tr   r   r<   r   r   rv   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&   ry   r)   s     r,   r-   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>   rz   r.   )r5   r   r3   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   )r5   r3   
pid_existsr(   r6   r7   r8   rv   r9   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>  )r3   rv   r   AssertionErrorr   sleeprR   max)r:   rv   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)rl   rm   rn   r    markskipifr   r   r   r   r   r   r&   r.   r,   rp   rp      s        [=   9, 9,	 9,v [=   ! !	 !< < <. . . . .r.   rp   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   )r3   	boot_time
isinstancefloatr   )r:   bts     r,   test_boot_timezTestMiscAPIs.test_boot_time   sP    "e$$$$$AvvvvDIKKr.   unreliable on CIrq   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        )r3   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r
   r(   r6   )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   getattrr3   boolr1   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)rl   rm   rn   r   r    r   r   r   r3   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                 2   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    rT|dk    st          j        |d| d          c S ||j        k    r't          j        |d|j         d| d	| d          c S d S )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r3   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr    fail)r:   memr   values       r,   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory8  so   #%%y1}}}c}}}}q   #   CK&&&&3&&&&&&&&x!|||S|||x1}}}c}}}K 
	 
	DC&&Ey  !%-----wzz!;$'@'@'@'@'@AAAAA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   )	r3   swap_memoryr   r   r   r   r   r   r   )r:   r   s     r,   test_swap_memoryzTestMemoryAPIs.test_swap_memoryK  s     ""{ 
 
 
 
 
 yA~~~s~~~x1}}}c}}}9q==8a<<<<<<<8q===#===CK&&&&3&&&&&&&&w!|||S|||x1}}}c}}}}}r.   N)rl   rm   rn   r   r   r&   r.   r,   r   r   7  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rep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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          S d S d S )NTpercpur}   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r3   	cpu_countr   rO   r1   pathexistsopenreadr    skip)r:   logicalfdcpuinfo_datas       r,   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalc  s   "$$"""#f.d;;;<<<<<<!||||7>>/** 	Jo&& )"!wwyy) ) ) ) ) ) ) ) ) ) ) ) ) ) )L00{#HIII		J 	J 10s   6BBBc                     t          j                    }t          j        d          }|t          j        d          S 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 NonerL   )   r}   r}   )r3   r   r    r   r   r   getwindowsversion)r:   r   coress      r,   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coreso  s    "$$ ///=;:;;; 	$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   rS   r3   r   rc   )r:   valre   s      r,   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_nonez  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   )r3   rO   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                 L   t          t          j                              }t          j                    t          z   }t          j                    |k     r?t          t          j                              }||k    rd S t          j                    |k     ?t          j        d          S )Nztime remained the same)r  r3   rO   r   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t ikkG## {3444r.   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)	r3   rO   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t	          j        d          S t          j        d          }t          ||          D ];\  }}t          j        |          t          j        |          }}||z
  }|dk    r d S <)NTr   r|   g?)r3   rO   r   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''{9---#4000DdD//    B.r22F4I"4M4MB"W
%%44 &	 r.   zunreliable on OPENBSD + CIrq   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_cpurL   )r3   rO   _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   r3   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{   )r3   cpu_percentrR   r(  r    rZ   rb   )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{   )	r3   r-  r   r   rR   r(  r    rZ   rb   r:   r.  r/  r0  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*  )r3   cpu_times_percentrR   r(  r  r    rZ   rb   r4  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+  Tr3  r   )r3   r7  r   r   rR   r(  r  )r:   r.  r/  r0  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>*  s    6661Q666r.   )r  rR   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   )r3   r7  rO   r   rS   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   >   rC  rB  )r3   	cpu_statsr   r   r   )r:   infosr   r   s       r,   test_cpu_statszTestCpuAPIs.test_cpu_stats2  s     ""} !
 
 
 
 
 M 	! 	!DE4((EA:::: !4#AAAqyyyy	! 	!r.   zskipped due to #1892not supportedc                 2   d }t          j        d          }t          st          r|st	          j        d          S |s
J |             |t          j        d          g           t          r&t          |          t          j                    k    sJ d S d S )Nc                     | D ]O}|j         dk    sJ |j         D ]8}t          ||          }t          |t          t          f          sJ |dk    sJ 9Pd S )N)currentminr   r   )r   r   r   r   r   )rH   ntr   r   s       r,   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsF  s}     & &z%>>>>>J & &D#B--E%ec5\::::: A:::::&& &r.   Tr   z/returns empty list on FreeBSD and Linux aarch64F)	r3   cpu_freqr   r   r    r   r   r   r   )r:   rO  rH   s      r,   test_cpu_freqzTestCpuAPIs.test_cpu_freqC  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   )r3   
getloadavgr   r   r   )r:   loadavgloads      r,   test_getloadavgzTestCpuAPIs.test_getloadavgZ  se    #%%7||q     	 	DdE*****3;;;;;	 	r.   N)rl   rm   rn   r   r   r  r  r  r  r  r    r   r   r   r
   r   r!   r   r(  r1  r5  r8  r;  r@  rH  r   r   rQ  r   rV  r&   r.   r,   r   r   b  s       
J 
J 
J	$ 	$ 	$     
 
 
85 5 5
 
 
B      [		)E2N    b   
 
 
, , ,	9 	9 	9	2 	2 	2	 	 	
@ 
@ 
@! ! !" [)'2HII[L(AA1 1 BA JI1* [N*?CC  DC  r.   r   c                   V   e Zd Z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 )TestDiskAPIsc                 R   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          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   i  P )r3   
disk_usager1   getcwdr   r   r   r   r   shutilr  r   
get_testfnr    rZ   FileNotFoundError)r:   usageshutil_usage	tolerancefnames        r,   test_disk_usagezTestDiskAPIs.test_disk_usaged  s   !")++..} DDDDD{QzA~~~u~~~zA~~~u~~~{UZ''''''{UZ''''''EM((((S(((((%-((((55#	{l000005: 1122Y>>>> 	CuzL$5566BBBB !!],-- 	% 	%e$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   :FF #F znot an ASCII fsrq   c                     t          j        t                    5  t          j        t
                     d d d            d S # 1 swxY w Y   d S r@   )r    rZ   UnicodeEncodeErrorr3   rZ  r   rj   s    r,   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode|  s     ]-.. 	. 	.n---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                 .    t          j        d           d S )N   .)r3   rZ  rj   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 r@   )r   devicer   
mountpointfstypeoptsrN  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 r@   )r1   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&   )rm  r   r)   s     r,   r-   z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>  s>     
 
 
|
L  
 
 
r.   )r3   disk_partitionsr   ro  r   r1   r   r   rl  rm  rn  statOSErrorr   r   errnoEIOEPERMEACCES__file__)r:   rq  rH   diskr'  rx  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}   rL   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   )rN  r   s     r,   rq  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)r3   disk_io_countersr   rG   r:   rq  retrC   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   rS   r3   r  rc   r:   re   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)rl   rm   rn   rc  r    r   r   r   rf  ri  r  r   r1   r   r   r   r3   r  r  r  r&   r.   r,   rX  rX  c  s       % % %0 [H->??. . @?.
     8 8 8t [7bgnn%6777D    [4262444=O   # # 	 #8    r.   rX  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 )TestNetAPIsrI  rq   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}   rL   r   r  r  r   r  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrp  s    r,   rq  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)r3   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   rS   r3   r  rc   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{   )#r3   net_if_addrsnet_if_statssocketAF_INETAF_INET6r  itemsr   r   r   rG   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sr`   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   r3   r  r   rS   r  rc   r  )r:   r  re   r  s       r,    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytesa  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   )	r3   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_statss  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._psplatform.cext.net_if_mtur^   rM   )r   rS   r|  r}  ENODEVr3   r  rc   )r:   re   r  s      r,   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s    
 Z0b11
 
 
 	 %''C"99998OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   %A""A&)A&N)rl   rm   rn   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I( I( I(V; ; ;$* * *$ ["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 )	TestSensorsAPIsrI  rq   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   )	r3   sensors_temperaturesr  r   r   labelrL  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   rS   r3   r  rc   rL  r  r  )r:   dre   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   )	r3   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   )r3   sensors_fansr  r   r   r  rL  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)rl   rm   rn   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  )6__doc__r   r  r}  r1   r#  r\  r   r  r   r   unittestr   r3   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#   rp   r   r   r   rX  r  r  r&   r.   r,   <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L3 L3 L3 L3 L3> L3 L3 L3^(" (" (" (" ("^ (" (" ("V~ ~ ~ ~ ~. ~ ~ ~BG G G G G> G G GTc c c c c. c c cL2* 2* 2* 2* 2*n 2* 2* 2* 2* 2*r.   