
    Xh                        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*      Z5y)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                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestProcessIterc                 ,   t        j                         t        j                         D cg c]  }|j                   c}v sJ | j                         }|j                  t        j                         D cg c]  }|j                   c}v sJ t        j                  |j                        }|j                          |j                          |j                  t        j                         D cg c]  }|j                   c}vsJ y c c}w c c}w c c}w N)	osgetpidpsutilprocess_iterpidspawn_subprocProcesskillwait)selfxsprocps       L/var/www/html/myenv/lib/python3.12/site-packages/psutil/tests/test_system.pytest_pid_presencez!TestProcessIter.test_pid_presence;   s    yy{f.A.A.CDquuDDDD""$yyF,?,?,ABqQUUBBBBNN599%		yy0C0C0E F1 FFFF EB !Gs   D4D-Dc                     t        t        j                               }t        |d       t        t	        |      d       k(  sJ y )Nc                     | j                   S r%   r*   r0   s    r3   <lambda>z4TestProcessIter.test_no_duplicates.<locals>.<lambda>F   s
         )keyc                     | j                   S r%   r7   r8   s    r3   r9   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>G   s
    155 r:   )listr(   r)   sortedset)r/   lss     r3   test_no_duplicatesz"TestProcessIter.test_no_duplicatesD   s>    &%%'(bo.&G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        t        j                  j                           y # 1 sw Y   *xY wN   zpsutil.Process.as_dictside_effect	cpu_timesattrs)
r=   r(   r)   ranger   patchNoSuchProcessr&   r'   cache_clearr/   r0   s     r3   test_emulate_nspz TestProcessIter.test_emulate_nspJ   s    V  "#q 	.A("00= J   3 3;- HIIII	J
 ++-	.J Js   (#B55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        d d d        t        j                  j                           y # 1 sw Y   2xY w# 1 sw Y   6xY wrC   )r=   r(   r)   rJ   r   rK   AccessDeniedr&   r'   r    raisesrM   rN   s     r3   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_deniedT   s    V  "#q 	.A("//		< C ]]6#6#67 C,,K=ABC	C ++-	.
C C	C Cs$   ($C*!C-C*C'#C**C3	c                    t        j                  dg      D ]+  }t        |j                  j	                               dgk(  r+J  t        j                  dg      D ]+  }t        |j                  j	                               dgk(  r+J  t        j                  t              5  t        t        j                  dg             d d d        t        j                  dt        j                  dd            5 }t        j                  ddg      D ]'  }|j                  d   J |j                  d   dk\  r'J  |j                  sJ 	 d d d        t        j                  dt        j                  dd            5 }t               }t        j                  ddg|	      D ])  }|j                  d   |u sJ |j                  d   dk\  r)J  |j                  sJ 	 d d d        y # 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr*   rH   fooz$psutil._psplatform.Process.cpu_timesr    rE   rG   )rI   ad_value)r(   r)   r=   infokeysr    rR   
ValueErrorr   rK   rQ   calledobject)r/   r2   mflags       r3   
test_attrszTestProcessIter.test_attrs_   s   $$E73 	2A&5'111	2 $$E73 	2A&5'111	2]]:& 	5$$E734	5ZZ2++Ar2
 	 (({/CD *vvk*222vve})))* 88O8	 ZZ2++Ar2
 
	 8D((k*T * vvk*d222vve})))	*
 88O8
	 
		5 	5	 	
	 
	s1   $!G%8?G28G2=AG>
G>%G/2G;>Hc                     t        t        j                                t        j                  sJ t        j                  j	                          t        j                  rJ y r%   )r=   r(   r)   _pmaprM   r/   s    r3   test_cache_clearz TestProcessIter.test_cache_clear{   s@    V  "#|||'')<<<r:   N)	__name__
__module____qualname__r4   rA   rO   rS   r_   rc    r:   r3   r#   r#   :   s!    G
.	.8 r:   r#   c                       e Zd Zej                  j                  exr ed      d        Zej                  j                  exr ed      d        Z	d Z
d Zy)TestProcessAPIsz,spawn_subproc() unreliable on PYPY + WINDOWSreasonc                    fd}g | j                         }| j                         }| j                         }|||fD cg c]!  }t        j                  |j                        # }}t	        j
                  t              5  t        j                  |d       d d d        t	        j
                  t              5  t        j                  |d       d d d        t        j                         }t        j                  |d|      \  }}	t        j                         |z
  dk  sJ |rJ t        |	      d	k(  sJ rJ |	D ]  }
t        |
d
      sJ  t        d      d        }|j                           |||      \  }}	|j                  |D cg c]  }|j                   c}v sJ t        r.|j                         j                   t"        j$                   k(  s!J |j                         j                   dk(  sJ |j                  gk(  sJ |	D ]  }
t        |
d
      sJ  t        d      d        }|j                          |j                           |||      \  }}	t'              |j                  |j                  |j                  hk(  sJ |D ]  }
t        |
d
      rJ  y c c}w # 1 sw Y   xY w# 1 sw Y   xY wc c}w )Nc                 <    j                  | j                         y r%   )appendr*   )r2   pidss    r3   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr:   )timeout   )rp   g{Gz?rr   rp   g      ?   
returncode   c                     t        j                  | d|      \  }}t        |      dk(  sJ t        |      dk(  sJ ||fS )NQ?rt   rs   rD   r(   
wait_procslenprocsrp   gonealives       r3   test_1z/TestProcessAPIs.test_wait_procs.<locals>.test_1   I     ++thKD% t9>!>u:?"?;r:   c                     t        j                  | d|      \  }}t        |      dk(  sJ t        |      dk(  sJ ||fS )Nry   rt   ru   r   rz   r}   s       r3   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r:   )r+   r(   r,   r*   r    rR   rZ   r{   	TypeErrortimer|   hasattrr!   	terminater   poprv   signalSIGTERMr?   )r/   rp   sproc1sproc2sproc3r0   r~   tr   r   r2   r   r   ro   s                @r3   test_wait_procszTestProcessAPIs.test_wait_procs   s   
	 ##%##%##%170HI1&II]]:& 	1eR0	1]]9% 	1ea0	1IIK''thOeyy{Q$$$x5zQx 	0Aq,///	0 
"		 
	 	UH-ezzT2aee222288:((V^^O;;;88:((A---

|### 	0Aq,///	0 
"		 
	 	UH-e4yVZZVZZ@@@@ 	,A1l+++	,a J	1 	1	1 	1. 3s$    &J%J*:J7K*J47Kc                 $   | j                         }| j                         }| j                         }|||fD cg c]!  }t        j                  |j                        # }}|D ]  }|j	                           t        j
                  |       y c c}w r%   )r+   r(   r,   r*   r   r{   )r/   r   r   r   r0   r~   r2   s          r3   test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeout   s    
 ##%##%##%170HI1&II 	AKKM	%  Js   &Bc                    | j                         }t        j                  |j                        sJ t        j                  |j                        }|j                          |j                          t        j                  |j                        rJ t        j                  d      rJ t        j                  d      dt        j                         v k(  sJ y )Nrq   r   )r+   r(   
pid_existsr*   r,   r-   r.   ro   )r/   r1   r2   s      r3   test_pid_existszTestProcessAPIs.test_pid_exists   s    ""$  +++NN599%		$$UYY///$$R(((  #V[[](:;;;r:   c                 f   t        j                         }|D ]  }	 t        j                  |      sJ  t        t        |      dz   t        |      dz         }|D ]  }t        j                  |      sJ  y # t        $ r0 t	        j
                  d       |t        j                         vsJ Y w xY w)Ng?i:  i>  )r(   ro   r   AssertionErrorr   sleeprJ   max)r/   ro   r*   s      r3   test_pid_exists_2z!TestProcessAPIs.test_pid_exists_2   s    {{} 	0C0((---	0 SY&D	E(9: 	.C((---	. " 0 

3&++-///	0s   A776B0/B0N)rd   re   rf   r    markskipifr   r   r   r   r   r   rg   r:   r3   ri   ri      sq    [[=  9,	9,v [[=  !	!<.r:   ri   c                       e Zd Zd Zej
                  j                  exr  ej                          d      d        Z
d Zy)TestMiscAPIsc                     t        j                         }t        |t              sJ |dkD  sJ |t	        j                         k  sJ y Nr   )r(   	boot_time
isinstancefloatr   )r/   bts     r3   test_boot_timezTestMiscAPIs.test_boot_time   s?    "e$$$AvvDIIKr:   unreliable on CIrj   c           	         t        j                         }|sJ |D ]-  }| j                  |      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kD  sJ t        j                  j                  |j                         t        st        r|j                  !J t        j                  |j                         d d d        0 y # 1 sw Y   <xY w)N)user        )r(   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r
   r*   r,   )r/   r   r   s      r3   
test_userszTestMiscAPIs.test_users   s    u 	-D4( -yy y!$))S111!$--#tDz1BCCC99(%dii#tDz1BCCC		||c)))!!//=g88+++NN488,- -	-- -s   DEE	c                    g d}|D ]'  }t        t        t        |      t              r"J |        t        j
                  dk(  rt        j                  sJ t        j                  rJ |j                  d       dt        j                  j                         v r%t        j                  sJ |j                  d       ndt        j                  j                         v rt        j                  sJ t        j                  t        j                  t        j                   gj#                  d      dk(  sJ |j                  d	       |j                  d
       |j                  d       |j                  d       ndt        j                  j                         v s dt        j                  j                         v r$t        j$                  sJ |j                  d       nydt        j                  j                         v rYt        j&                  sJ |j                  d       n5t        j                  sJ t        j                  rJ |j                  d       |D ]  }t        t        |      sJ |        y )N)	r   r   r   r   r   r
   r	   r   r   posixr   linuxr   bsdTrs   r   r   r
   r	   sunossolarisr   darwinr   r   )r   getattrr(   boolr&   r   r   r   removesysplatformlowerr   r   r   r
   r	   countr   r   )r/   namesr   s      r3   test_os_constantszTestMiscAPIs.test_os_constants  s   

  	ADgfd3T:@D@:	A 77g<<<~~%%LL!#,,,,..||#|W%#,,,,..zz!zFLL   U#Y'Y'X&3<<--// 2 2 44||#|W%S\\//11||#|W%>>!>||##LL#  	3Dvt,2d2,	3r:   N)rd   re   rf   r   r    r   r   r   r(   r   r   r   rg   r:   r3   r   r      sJ      [[)<6<<>)2D  --&/3r:   r   c                       e Zd Zd Zd Zy)TestMemoryAPIsc                 L   t        j                         }|j                  dkD  sJ |       |j                  dkD  sJ |       d|j                  cxk  rdk  sJ |        J |       |j
                  dkD  sJ |       |j                  dk\  sJ |       |j                  D ]  }t        ||      }|dk7  rt        |t              sJ |dk7  s,|dk\  st        j                  |d| d      ||j                  kD  s\t        j                  |d|j                   d| d	| d       y )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r(   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr    fail)r/   memr   values       r3   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory8  s,   ##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KK 
	DC&Ey !%---wz ++ugQ&?@@399$ ++("2399+RvQugQO 
	r:   c                    t        j                         }|j                  dk(  sJ |j                  dk\  sJ |       |j                  dk\  sJ |       |j                  dkD  r|j
                  dkD  sJ |       |j
                  dk(  sJ |       d|j                  cxk  rdk  sJ |        J |       |j                  dk\  sJ |       |j                  dk\  sJ |       y )N)r   r   r   r   sinsoutr   r   )	r(   swap_memoryr   r   r   r   r   r   r   )r/   r   s     r3   test_swap_memoryzTestMemoryAPIs.test_swap_memoryK  s      "{{ 
 
 	
 
 yyA~"s"~xx1}!c!}99q=88a<$$<88q=%#%=CKK&3&++&++&ww!| S |xx1}!c!}r:   N)rd   re   rf   r   r   rg   r:   r3   r   r   7  s    &"r:   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  exr exs ed	       ed
      d               Zd Zd Zd Zd Zd Zd Zd Ze
j                  j                  exr ed	      e
j                  j                  e d	      d               Ze
j                  j                  e d	      d        Zy)TestCpuAPIsc                 \   t        j                         }|J |t        t        j                  d            k(  sJ |dk\  sJ t        j
                  j                  d      r>t        d      5 }|j                         }d d d        dvrt        j                  d      y y # 1 sw Y   $xY w)NTpercpurs   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r(   	cpu_countr|   rG   r&   pathexistsopenreadr    skip)r/   logicalfdcpuinfo_datas       r3   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalc  s    ""$"""#f..d;<<<<!||77>>/*o& )"!wwy)L0kk"GHH 1 +) )s   .B""B+c                     t        j                         }t        j                  d      }|t        j                  d      t        rt        j                         d d dk  r|J y |dk\  sJ ||k\  sJ y )NFr   zcpu_count_cores() is NonerD   )   rs   rs   )r(   r   r    r   r   r   getwindowsversion)r/   r   coress      r3   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coreso  ss    ""$  /=++9::s,,.r2f<= =A::e###r:   c                 Z   dD ]  }t        j                  d|      5 }t        j                         J |j                  sJ 	 d d d        t        j                  d|      5 }t        j                  d      J |j                  sJ 	 d d d         y # 1 sw Y   SxY w# 1 sw Y   xY w)N)rq   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r   rK   r(   r   r[   )r/   valr]   s      r3   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_nonez  s      
	 C6S  '')111xxx	 
 43  ''6>>>xxx	   
	    
   s   %B"'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        |       y )Nr   r   r   )r(   rG   sumr   r   roundabsr   )r/   r   timescp_times       r3   test_cpu_timeszTestCpuAPIs.test_cpu_times  s}      "E
 	Ggu---c>!>WE	 SU+,a0A555E
r:   c                 @   t        t        j                               }t        j                         t        z   }t        j                         |k  r;t        t        j                               }||kD  ry t        j                         |k  r;t        j                  d      )Nztime remained the same)r   r(   rG   r   r   r    r   )r/   t1stop_att2s       r3   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  sr    !!#$))+.iikG#V%%'(BBw iikG# kk233r:   c           	         t        j                  d      D ]e  }d}t        |       |D ]   }t        |t              sJ |dk\  sJ ||z  }" t        t        |t        |      z
        d      dk(  sJ t        |       g t        t        j                  d      d         t        t        j                  d            k(  sJ y )NTr   r   r   r   F)	r(   rG   r   r   r   r   r   r   r|   )r/   r   r   r   s       r3   test_per_cpu_timeszTestCpuAPIs.test_per_cpu_times  s    %%T2 	EEJ  !!'5111#~%~ ! USZ/0!4999J	 6##4034E*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\  s; y  )NTr   rr   g?)r(   rG   r   r   r    r   zip_cpu_busy_time)r/   tot1	giveup_attot2r   r   
differences          r3   test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2  s     t,IIK.0	yy{i'{{9--##40DdD/  B..r2F4I4I"4MB"W
%	 	 r:   zunreliable on OPENBSD + CIrj   rw   c           	         t        j                         }t        j                  d      }|j                  t        | D cg c]  }t	        |       c}      }|j
                  D ]G  }| j                  |||      5  t        t        ||      t        ||      z
        dk  sJ 	 d d d        I y c c}w # 1 sw Y   YxY w)NTr   )fieldbaseper_cpurD   )	r(   rG   _maker  r   r   r   r   r   )r/   r  r  numsummed_valuesr  s         r3   test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparison  s     !""$/

W#FCH#FG\\ 	EEgF e,w}e/LLM 	 $G s    B0<(B55B>	c           
         	 t        |t              sJ |dk\  sJ |dt        j                         z  k  sJ y # t        $ rG}t	        dj                  |t        j                  |      t        j                  |                  d }~ww xY w)Nr   g      Y@z
{}
last={}
new={})r   r   r(   r   r   formatpprintpformat)r/   r   last_retnew_reterrs        r3   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s    		gu---c>!>ef&6&6&88888 	 '..16>>'3J 	s   58 	BABBc                 .   t        j                  d      }t        d      D ]-  }t        j                  d       }| j                  |||       |}/ t	        j
                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wNMbP?)intervalr   rq   )r(   cpu_percentrJ   r  r    rR   rZ   )r/   last_news       r3   test_cpu_percentzTestCpuAPIs.test_cpu_percent  s}    !!51s 	A$$d3C""3c2D	 ]]:& 	,+	, 	, 	,s   +BBc                    t        j                  dd      }t        |      t        j                         k(  sJ t	        d      D ]5  }t        j                  d d      }|D ]  }| j                  |||        |}7 t        j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nr  Tr  r   r   rq   )	r(   r   r|   r   rJ   r  r    rR   rZ   r/   r!  r"  r#  r   s        r3   test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percent  s    !!5>4yF,,....s 	A$$d4@C ;&&wc:;D		
 ]]:& 	948	9 	9 	9s   B77C c                 t   t        j                  d      }t        d      D ]P  }t        j                  d       }|D ]  }| j                  |||        | j                  t	        |      ||       |}R t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wr  )r(   cpu_times_percentrJ   r  r   r    rR   rZ   r'  s        r3   test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percent  s    ''7s 	A**D9C ;&&wc:;""3s8T37D	 ]]:& 	2$$b1	2 	2 	2s   B..B7c                 B   t        j                  dd      }t        |      t        j                         k(  sJ t	        d      D ]X  }t        j                  d d      }|D ]8  }|D ]  }| j                  |||        | j                  t        |      ||       : |}Z y )Nr  Tr&  r   )r(   r*  r|   r   rJ   r  r   )r/   r!  r"  r#  cpur   s         r3   test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percent  s    ''tD4yF,,....s 	A**DFC <" ?G**7D#>?&&s3xs;< D	r:   c           
         t        j                  d       t        j                  d      D cg c]=  }|j                  t	        t        |j                              D cg c]  }d c}      ? }}t        j                  d|      5  t        j                  d      D ]  }|D ]  }| j                  |d d          	 d d d        y c c}w c c}w # 1 sw Y   y xY w)NTr   r   zpsutil.cpu_timesr   )
r(   r*  rG   r  rJ   r|   r   r   rK   r  )r/   r0   
zero_timesr-  r   s        r3   #test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative&  s      - %%T2
 GGc!))n 561Q67

 
 ZZ*D 	@//t< @" @G**7D$?@@	@ 	@ 7
	@ 	@s#   0C	C
(	C
6C
CCc                     t        j                         }|j                  dk(  sJ |j                  D ](  }t        ||      }|dk\  sJ t        r|dv s"|dkD  r(J  y )N)ctx_switches
interruptssoft_interruptssyscallsr   >   r4  r3  )r(   	cpu_statsr   r   r   )r/   infosr   r   s       r3   test_cpu_statszTestCpuAPIs.test_cpu_stats2  so      "}} !
 
 	
 
 MM 	!DE4(EA::4#AAqy y	!r:   zskipped due to #1892not supportedc                    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 y y )Nc                     | D ]y  }|j                   dk(  sJ |j                  dk7  r|j                  |j                  k  sJ |j                   D ]-  }t        ||      }t	        |t
        t        f      sJ |dk\  r-J  { y )N)currentminr   r   r   )r   r   r=  r   r   r   r   )r@   ntr   r   s       r3   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsF  s     &zz%>>>>66S=::///JJ &D#B-E%ec5\::: A:%:&	&r:   Tr   z/returns empty list on FreeBSD and Linux aarch64F)	r(   cpu_freqr   r   r    r   r   r|   r   )r/   r@  r@   s      r3   test_cpu_freqzTestCpuAPIs.test_cpu_freqC  sv    	& __D)w++A  2r&///01r7f..0000 r:   c                     t        j                         }t        |      dk(  sJ |D ]  }t        |t              sJ |dk\  rJ  y )Nru   r   )r(   
getloadavgr|   r   r   )r/   loadavgloads      r3   test_getloadavgzTestCpuAPIs.test_getloadavg\  sM    ##%7|q    	DdE***3;;	r:   N)rd   re   rf   r   r   r   r   r  r  r  r    r   r   r   r
   r   r!   r  r  r$  r(  r+  r.  r1  r9  r   r   rB  r   rG  rg   r:   r3   r   r   b  s   
I	$ 
84
B  [[		)E2N   b 
,	9	2	
@!" [[)'2HI[[L(A1 B J1. [[N*?C Dr:   r   c                   V   e Zd Zd Zej
                  j                  e d      d        Zd Z	d Z
ej
                  j                  exr ej                  j                  d       d      ej
                  j                  exr  ej"                          d	      d
               Zd Zy)TestDiskAPIsc                    t        j                  t        j                               }|j                  dk(  sJ |j
                  dkD  sJ |       |j                  dkD  sJ |       |j                  dkD  sJ |       |j
                  |j                  kD  sJ |       |j
                  |j                  kD  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 | j                         }t        j                  t               5  t        j                  |       d d d        y # 1 sw Y   y xY w)N)r   r   r   r   r   r   
disk_usagei  P )r(   rK  r&   getcwdr   r   r   r   r   r   shutilr   r   
get_testfnr    rR   FileNotFoundError)r/   usageshutil_usage	tolerancefnames        r3   test_disk_usagezTestDiskAPIs.test_disk_usagef  s   !!"))+.}} DDDD{{Q%%zzA~$u$~zzA~$u$~{{UZZ'..'{{UZZ'..'EMM(S(7%--7(6<(!,,RYY[9L'I;;,"4"4444uzzL$5$556BBB5::(9(99:YFFF !]],- 	%e$	% 	% 	%s   4GGznot an ASCII fsrj   c                     t        j                  t              5  t        j                  t
               d d d        y # 1 sw Y   y xY wr%   )r    rR   UnicodeEncodeErrorr(   rK  r   rb   s    r3   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode  s4     ]]-. 	.n-	. 	. 	.s	   =Ac                 .    t        j                  d       y )N   .)r(   rK  rb   s    r3   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytes  s    $r:   c                 z   d }t        j                  d      }|sJ |D ]  } ||       t        rd|j                  v r t        s0t
        j                  j                  |j                        sJ |       |j                   t
        j                  j                  |j                        sJ |       |j                  rJ |        t        j                  d      }|sJ t        j                  d      D ]n  } ||       t        r|j                  s	 t        j                  |j                         t
        j                  j                  |j                        riJ |        d } |t&              }t        j                  d      D cg c](  }|j                  r|j                  j)                         * }}||v sJ y # t        $ rg}t        r)t        r#|j                  t        j                   k(  rY d }~|j                  t        j"                  t        j$                  hvr Y d }~9d }~ww xY wc c}w )Nc                     t        | j                  t              sJ t        | j                  t              sJ t        | j                  t              sJ t        | j
                  t              sJ y r%   )r   devicer   
mountpointfstypeoptsr?  s    r3   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  sR    bii---bmmS111bii---bggs+++r:   F)allcdromTc                    t         j                  j                  |       } t         j                  j                  |       s?t         j                  j	                  |       } t         j                  j                  |       s?| j                         S r%   )r&   r   abspathismountdirnamer   )r   s    r3   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sT    77??4(Dggood+wwt, ggood+::<r:   )r(   disk_partitionsr   r`  r   r&   r   r   r]  r^  r_  statOSErrorr   r   errnoEIOEPERMEACCES__file__r   )	r/   rb  r@   diskr  ri  mountr0   mountss	            r3   test_disk_partitionsz!TestDiskAPIs.test_disk_partitions  s   	, ##.	r 	%D7dii/ww~~dkk28D82 77>>$//28D82;;$$;	% ##-	r**t4 	ADt
AGGDOO, 77>>$//:@D@:	A"	  !* ++5
|| LL 
 

 1  %%CII4J  yyell(CC D&
s$   G-H8	H5)H0=-H00H5z/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                     d }t        j                  d      }|J d        ||       t        j                  d      }t        |      t        t        |            k(  sJ |D ]  }|sJ |        |||           y )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 t        r| d   | j                  k(  sJ | j                  D ]  }t        | |      dk\  rJ |         y )
Nr   rs   rD   ru         r         )
read_countwrite_count
read_byteswrite_bytesr
   r	   	read_time
write_timer   read_merged_countwrite_merged_count	busy_timer   r   r   )r?  r   s     r3   rb  z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntuple  s   a5BMM)))a5BNN***a5BMM)))a5BNN***v!u,,,!u---a5B$8$8888a5B$9$9999a5BLL000a5BLL000

 2r4(A-1r1-2r:   Fperdiskzno disks on this system?T)r(   disk_io_countersr|   r?   r/   rb  retr;   s       r3   test_disk_io_countersz"TestDiskAPIs.test_disk_io_counters  s    	2" %%e4: ::S%%d33x3s3x=((( 	#COO3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        y # 1 sw Y   y xY w)Nz#psutil._psplatform.disk_io_countersr   Fr  T)r   rK   r(   r  r[   r/   r]   s     r3   test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disks  sh     ZZ1
 	**59AAA**48B>>>88O8	 	 	   AA$$A-N)rd   re   rf   rT  r    r   r   r   rW  rZ  ru  r   r&   r   r   r   r(   r  r  r  rg   r:   r3   rI  rI  e  s    %4 [[H->?. @.
 8t [[7bggnn%677D   [[4262244=O  #	#8r:   rI  c                      e Zd Zej                  j                  e d      d        Zej                  j                  e d      d        Zd Z	d Z
d Zej                  j                  exs exs e d      d	        Zy
)TestNetAPIsr:  rj   c                     d }t        j                  d      } ||       t        j                  d      }|g k7  sJ |D ]#  }|sJ t        |t              sJ  |||          % y )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 |        y )	Nr   rs   rD   ru   rx  ry  r   rz  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutra  s    r3   rb  z6TestNetAPIs.test_net_io_counters.<locals>.check_ntuple  sb   a5BMM)))a5BMM)))a5BOO+++a5BOO+++a5BHH$$$a5BII%%%a5BII%%%a5BJJ&&&==A%)r)%==A%)r)%??a'++'??a'++'88q=$"$=99>%2%>99>%2%>::?&B&?r:   FpernicT)r(   net_io_countersr   r   r  s       r3   test_net_io_countersz TestNetAPIs.test_net_io_counters  so    	'$ $$E2S$$D1byy 	#CJ3c3'''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        y # 1 sw Y   y xY w)Nz"psutil._psplatform.net_io_countersr   Fr  T)r   rK   r(   r  r[   r  s     r3   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics  sh     ZZ0r
 	))7???))6"<<<88O8	 	 	r  c           
      p   t        j                         }|sJ |       t        j                         }t        j                  t        j
                  t         j                  h}|j                         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(  rFt        j                  |j                        5 }|j+                  |j                  df       d d d        n|j                  t        j
                  k(  rt        j,                  |j                  dt        j
                  t        j.                  dt        j0                        d   }|\  }	}
}}}t        j                  |	|
|      5 }|j+                  |       d d d        |j                  |j                  |j"                  |j2                  fD ]9  }||j                  t        j
                  k7  s$t5        ||j                         ; |j"                  r|j2                  J |j2                  r|j"                  J |j"                  s|j                  s|j                  t        j                  t        j
                  hv s|j"                  t7        |      k(  rJ   t8        st:        st<        r5t?        t        d      r$t         j                  t        j                  k(  sJ y y t@        r$t         j                  t        jB                  k(  sJ y tD        rt         j                  dk(  sJ y y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   AF_LINKrq   )#r(   net_if_addrsnet_if_statssocketAF_INETAF_INET6r  itemsr   r   r|   r?   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srX   afsocktypeproto
_canonnamesaips                  r3   test_net_if_addrszTestNetAPIs.test_net_if_addrs  sH   ""$Tt'')	 NNFOOV^^D**, 4	BJCc3'''s5z?c%j000 1B!$++s333!$,,444!$,,d4j0ABBB!$..3T
2CDDD{{h...!$++t||<<<S>&& {{fnn4#]]4;;7 61FFDLL!#456 67%11 LL"OO".."--    ?C;HeZ#]]2x? '1FF2J' LLLLNNHH	 ?B ~  ;;&//9-b$++>? >>88+++XX>>111 NN'HH>>^D-AAAAc1B4	Bl %5vy)~~777 *>>V%5%5555>>R''' [6 6' 's   :P.P+P(+P5c                 >   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 |j                  dk(  sJ d d d        y # 1 sw Y   y xY w)	Nem1z06:3d:29)r  rq   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)r   r(   r  r   rK   r  r[   r  )r/   r  r]   r  s       r3    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytese  s     6>>:tT4HIC<=CZZ-C
 	;&&(/2D88O8||'::::||'::::	; 	; 	;s   ABBc                 |   t        j                         }|sJ |       t         j                  t         j                  t         j                  f}|j                         D ]]  \  }}t        |t              sJ |\  }}}}}	t        |t              sJ ||v sJ ||v sJ |dk\  sJ |dk\  sJ t        |	t              r]J  y r   )	r(   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   )
r/   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r3   test_net_if_statszTestNetAPIs.test_net_if_statsw  s    ""$Tt""""%%

  ::< 	*KD%dC(((.3+D&%edD)))\)))\)))A::!8O8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        y # 1 sw Y   y xY w)Nzpsutil._psutil_posix.net_if_mturV   rE   )r   rK   rl  rm  ENODEVr(   r  r[   )r/   r]   r  s      r3   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s`    
 ZZ-b1
 	 %%'C"9988O8	 	 	s   *A$$A-N)rd   re   rf   r    r   r   r   r  r  r  r  r  r   r   r   r  rg   r:   r3   r  r    s    [[//H# I#8 [[//H II(V;$*$ [["c"U#,L  r:   r  c                   n   e Zd Zej                  j                  e d      d        Zej                  j                  e d      d        Zej                  j                  e	 d      ej                  j                  e
 d      d               Zej                  j                  e d      d        Zy)	TestSensorsAPIsr:  rj   c                 v   t        j                         }|j                         D ]  \  }}t        |t              sJ |D ]v  }t        |j
                  t              sJ |j                  |j                  dk\  sJ |j                  |j                  dk\  sJ |j                  f|j                  dk\  rvJ   y r   )	r(   sensors_temperaturesr  r   r   labelr=  highcritical)r/   tempsr   entriesentrys        r3   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures  s    ++-"[[] 		/MD'dC(((  /!%++s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        y # 1 sw Y   y xY w)Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)
fahrenheitr   g     ^@g     a@g     c@)r   rK   r(   r  r[   r=  r  r  )r/   dr]   r  s       r3   #test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneit  s    567ZZ5A
 	+//4@LQOE88O8==E)))::&&&>>U***	+ 	+ 	+s   ABBz
no batteryc                 x   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 |j                  t         j
                  k(  r|j                  sJ t        |j                  t              sJ y )Nr   r   )	r(   sensors_batteryr   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDpower_pluggedr   r   )r/   r  s     r3   test_sensors_batteryz$TestSensorsAPIs.test_sensors_battery  s     $$&{{a{{c!!!<<%%'' 
 
 <<1$$$\\V888$$$$#++T222r:   c                     t        j                         }|j                         D ]g  \  }}t        |t              sJ |D ]K  }t        |j
                  t              sJ t        |j                  t              sJ |j                  dk\  rKJ  i y r   )r(   sensors_fansr  r   r   r  r=  r   )r/   fansr   r  r  s        r3   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s    ""$!ZZ\ 	*MD'dC(((  *!%++s333!%--555}})))*	*r:   N)rd   re   rf   r    r   r   r   r  r  r   r   r  r   r  rg   r:   r3   r  r    s    [[44_M/ N/ [[44_M	+ N	+ [[//H[[K=3 > I3 [[,,_E* F*r:   r  )6__doc__r   r  rm  r&   r  rM  r   r  r   r   unittestr   r(   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#   ri   r   r   r   rI  r  r  rg   r:   r3   <module>r     s        	     
              )   ! # ' ' $ % ' , , ) 1 %  ' ' *  )E n E Pc.n c.LL3> L3^("^ ("V@. @FI> IXc. cL2*n 2*r:   