
    ;^h                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSKJ"r"  SSKJ#r#  SSKJ$r$  SSKJ%r%  SSKJ&r&  SSKJ'r'  SSKJ(r(  SSKJ)r)  SSKJ*r*  SSKJ+r+  SSKJ,r,  SS KJ-r-  SS!KJ.r.  SS"KJ/r/   " S# S$\,5      r0 " S% S&\,5      r1 " S' S(\,5      r2 " S) S*\,5      r3 " S+ S,\,5      r4 " S- S.\,5      r5 " S/ S0\,5      r6 " S1 S2\,5      r7g)3zTests for system APIS.    N)mock)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)broadcast_addr)AARCH64)ASCII_FS)
CI_TESTING)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)HAS_NET_IO_COUNTERS)HAS_SENSORS_BATTERY)HAS_SENSORS_FANS)HAS_SENSORS_TEMPERATURES)IS_64BIT)MACOS_12PLUS)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)pytest)retry_on_failurec                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestProcessIter=   c                 N   [         R                  " 5       [        R                  " 5        Vs/ s H  oR                  PM     sn;   d   eU R                  5       nUR                  [        R                  " 5        Vs/ s H  oR                  PM     sn;   d   e[        R                  " UR                  5      nUR                  5         UR                  5         UR                  [        R                  " 5        Vs/ s H  oR                  PM     sn;  d   eg s  snf s  snf s  snf N)	osgetpidpsutilprocess_iterpidspawn_testprocProcesskillwait)selfxsprocps       J/var/www/html/env/lib/python3.13/site-packages/psutil/tests/test_system.pytest_pid_presence!TestProcessIter.test_pid_presence>   s    yy{f.A.A.CD.Cuu.CDDDD##%yyF,?,?,AB,AqUU,ABBBBNN599%		yy0C0C0E F0E10E FFFF EB !Gs   D;D:D"c                     [        [        R                  " 5       5      n[        US S9[        [	        U5      S S9:X  d   eg )Nc                     U R                   $ r'   r,   r2   s    r5   <lambda>4TestProcessIter.test_no_duplicates.<locals>.<lambda>I   s        )keyc                     U R                   $ r'   r:   r;   s    r5   r<   r=   J   s    155r>   )listr*   r+   sortedset)r1   lss     r5   test_no_duplicates"TestProcessIter.test_no_duplicatesG   s>    &%%'(bo.&G3
 
 	
 
r>   c                    [        [        R                  " 5       5        [        S5       H  n[        R
                  " S[        R                  " [        R                  " 5       5      S9   [        [        R                  " S/S95      (       a   e S S S 5        [        R                  R                  5         M     g ! , (       d  f       N1= fN   zpsutil.Process.as_dictside_effect	cpu_timesattrs)
rA   r*   r+   ranger   patchNoSuchProcessr(   r)   cache_clearr1   r2   s     r5   test_emulate_nsp TestProcessIter.test_emulate_nspM   s    V  "#qA("00=   3 3;- HIIIII	
 ++-  s   )&B;;
C		c           	         [        [        R                  " 5       5        [        S5       H  n[        R
                  " S[        R                  " [        R                  " 5       5      S9   [        R                  " [        R                  5         [        [        R                  " S/S95        S S S 5        S S S 5        [        R                  R                  5         M     g ! , (       d  f       N9= f! , (       d  f       NB= frH   )rA   r*   r+   rO   r   rP   AccessDeniedr(   r)   r!   raisesrR   rS   s     r5   test_emulate_access_denied*TestProcessIter.test_emulate_access_deniedW   s    V  "#qA("//		< ]]6#6#67,,K=AB 8	 ++- 
 87	 s$   )%C1C -C1 
C.*C11
C?	c                 L   [         R                  " S/S9 H-  n[        UR                  R	                  5       5      S/:X  a  M-   e   [         R                  " S/S9 H-  n[        UR                  R	                  5       5      S/:X  a  M-   e   [
        R                  " [        5         [        [         R                  " S/S95        S S S 5        [        R                  " S[         R                  " SS5      S9 n[         R                  " SS/S9 H*  nUR                  S   b   eUR                  S   S:  a  M*   e   UR                  (       d   e S S S 5        [        R                  " S[         R                  " SS5      S9 n[        5       n[         R                  " SS/US	9 H,  nUR                  S   UL d   eUR                  S   S:  a  M,   e   UR                  (       d   e S S S 5        g ! , (       d  f       GN3= f! , (       d  f       N= f! , (       d  f       g = f)
Nr,   rM   fooz$psutil._psplatform.Process.cpu_timesr    rJ   rL   )rN   ad_value)r*   r+   rA   infokeysr!   rX   
ValueErrorr   rP   rW   calledobject)r1   r4   mflags       r5   
test_attrsTestProcessIter.test_attrsb   s   $$E73A&5'111 4 $$E73A&5'111 4]]:&$$E734 'ZZ2++Ar2
 (({/CDvvk*222vve}))) E 88O8
 ZZ2++Ar2
 8D((k*T vvk*d222vve})))	
 88O8
 
 '&
 

 
s1   'G28=H9HA
HH2
H
H
H#c                     [        [        R                  " 5       5        [        R                  (       d   e[        R                  R	                  5         [        R                  (       a   eg r'   )rA   r*   r+   _pmaprR   r1   s    r5   test_cache_clear TestProcessIter.test_cache_clear~   s@    V  "#|||'')<<<r>    N)__name__
__module____qualname____firstlineno__r6   rE   rT   rY   rf   rk   __static_attributes__rm   r>   r5   r$   r$   =   s!    G
.	.8 r>   r$   c                       \ rS rSr\R
                  R                  \=(       a    \SS9S 5       r	\R
                  R                  \=(       a    \SS9S 5       r
S rS rSrg	)
TestProcessAPIs   z-spawn_testproc() unreliable on PYPY + WINDOWSreasonc                   ^ U4S jn/ mU R                  5       nU R                  5       nU R                  5       nX#U4 Vs/ s H#  n[        R                  " UR                  5      PM%     nn[        R
                  " [        5         [        R                  " USS9  S S S 5        [        R
                  " [        5         [        R                  " USS9  S S S 5        [        R                  " 5       n[        R                  " USUS9u  p[        R                  " 5       U-
  S:  d   eU(       a   e[        U	5      S	:X  d   eT(       a   eU	 H  n
[        U
S
5      (       d  M   e   [        S5      S 5       nUR                  5         U" Xa5      u  pUR                  U Vs/ s H  oUR                  PM     sn;   d   e[        (       a0  UR                  5       R                   ["        R$                  * :X  d   eO UR                  5       R                   S:X  d   eTUR                  /:X  d   eU	 H  n
[        U
S
5      (       d  M   e   [        S5      S 5       nUR                  5         UR                  5         U" Xa5      u  p['        T5      UR                  UR                  UR                  1:X  d   eU H  n
[        U
S
5      (       a  M   e   g s  snf ! , (       d  f       GNA= f! , (       d  f       GN= fs  snf )Nc                 <   > TR                  U R                  5        g r'   )appendr,   )r4   pidss    r5   callback1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr>   )timeout   )r|   g{Gz?r   r|   g      ?   
returncode   c                 |    [         R                  " U SUS9u  p#[        U5      S:X  d   e[        U5      S:X  d   eX#4$ )NQ?r   r   rI   r*   
wait_procslenprocsr|   gonealives       r5   test_1/TestProcessAPIs.test_wait_procs.<locals>.test_1   E     ++thKD t9>!>u:?"?;r>   c                 |    [         R                  " U SUS9u  p#[        U5      S:X  d   e[        U5      S:X  d   eX#4$ )Nr   r   r   r   r   r   s       r5   test_2/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r>   )r-   r*   r.   r,   r!   rX   ra   r   	TypeErrortimer   hasattrr"   	terminater   popr   signalSIGTERMrC   )r1   r|   sproc1sproc2sproc3r2   r   tr   r   r4   r   r   r{   s                @r5   test_wait_procsTestProcessAPIs.test_wait_procs   sw   
	 $$&$$&$$&170HI0H1&0HI]]:&eR0 ']]9%ea0 &IIK''thOyy{Q$$$x5zQxAq,////  
"		 
	 	U-zzT2TeeT2222588:((V^^O;;;88:((A---

|###Aq,////  
"		 
	 	U-4yVZZVZZ@@@@A1l++++ a J&&%%. 3s$    *KK>K( K:
K%(
K7c                 0   U R                  5       nU R                  5       nU R                  5       nXU4 Vs/ s H#  n[        R                  " UR                  5      PM%     nnU H  nUR	                  5         M     [        R
                  " U5        g s  snf r'   )r-   r*   r.   r,   r   r   )r1   r   r   r   r2   r   r4   s          r5   test_wait_procs_no_timeout*TestProcessAPIs.test_wait_procs_no_timeout   s}    
 $$&$$&$$&170HI0H1&0HIAKKM %  Js   *Bc                    U R                  5       n[        R                  " UR                  5      (       d   e[        R                  " UR                  5      nUR                  5         UR                  5         [        R                  " UR                  5      (       a   e[        R                  " S5      (       a   e[        R                  " S5      S[        R                  " 5       ;   :X  d   eg )Nr~   r   )r-   r*   
pid_existsr,   r.   r/   r0   r{   )r1   r3   r4   s      r5   test_pid_existsTestProcessAPIs.test_pid_exists   s    ##%  ++++NN599%		$$UYY////$$R((((  #V[[](:;;;r>   c                    [         R                  " 5       nU H!  n [         R                  " U5      (       d   eM#     [        [        U5      S-   [        U5      S-   5      nU H   n[         R                  " U5      (       d  M    e   g ! [         a5    [        R
                  " S5        U[         R                  " 5       ;  d   e M  f = f)Ng?i:  i>  )r*   r{   r   AssertionErrorr   sleeprO   max)r1   r{   r,   s      r5   test_pid_exists_2!TestProcessAPIs.test_pid_exists_2   s    {{}C0((----  SY&D	E(9:C((----  " 0 

3&++-///	0s   B;CCrm   N)rn   ro   rp   rq   r!   markskipifr   r   r   r   r   r   rr   rm   r>   r5   rt   rt      sq    [[>  9,	9,v [[>  !	!<.r>   rt   c                       \ rS rSrS r\R                  R                  \=(       a    \	R                  " 5       (       + SS9S 5       rS rSrg)	TestMiscAPIs   c                     [         R                  " 5       n[        U[        5      (       d   eUS:  d   eU[        R                  " 5       :  d   eg Nr   )r*   	boot_time
isinstancefloatr   )r1   bts     r5   test_boot_timeTestMiscAPIs.test_boot_time   sB    "e$$$$AvvDIIKr>   unreliable on CIrv   c           	         [         R                  " 5       nU(       d   eU GHN  nU R                  US9   UR                  (       d   e[	        UR                  [
        5      (       d   e[	        UR                  [
        [        S 5      45      (       d   eUR                  b,  [	        UR                  [
        [        S 5      45      (       d   eUR                    UR                    UR                  S:  d   e[        R                  R                  UR                  5        [        (       d  [        (       a  UR                  b   eO [         R                  " UR                  5        S S S 5        GMQ     g ! , (       d  f       GMd  = f)N)user        )r*   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r
   r,   r.   )r1   r   r   s      r5   
test_usersTestMiscAPIs.test_users   s    uD4(yy y!$))S1111!$--#tDz1BCCCC99(%dii#tDz1BCCCC		||c)))!!//=7gg88+++NN488, )( ((s   D3E55
F	c                 n   / SQnU H-  n[        [        [        U5      [        5      (       a  M(   U5       e   [        R
                  S:X  Ga  [        R                  (       d   e[        R                  (       a   eUR                  S5        S[        R                  R                  5       ;   a*  [        R                  (       d   eUR                  S5        GOS[        R                  R                  5       ;   a  [        R                  (       d   e[        R                  [        R                  [        R                   /R#                  S5      S:X  d   eUR                  S	5        UR                  S
5        UR                  S5        UR                  S5        OS[        R                  R                  5       ;   d"  S[        R                  R                  5       ;   a)  [        R$                  (       d   eUR                  S5        OS[        R                  R                  5       ;   a(  [        R&                  (       d   eUR                  S5        O?[        R                  (       d   e[        R                  (       a   eUR                  S5        U H  n[        [        U5      (       d  M   U5       e   g )N)	r   r   r   r   r   r
   r	   r   r   posixr   linuxr   bsdTr   r   r   r
   r	   sunossolarisr   darwinr   r   )r   getattrr*   boolr(   r   r   r   removesysplatformlowerr   r   r   r
   r	   countr   r   )r1   namesr   s      r5   test_os_constantsTestMiscAPIs.test_os_constants  s   

 Dgfd3T::@D@:  77g<<<~~%%LL!#,,,,..||#|W%#,,,,..zz!zFLL   U#Y'Y'X&3<<--// 2 2 44||#|W%S\\//11||#|W%>>!>||##LL# Dvt,,2d2, r>   rm   N)rn   ro   rp   rq   r   r!   r   r   r   r*   r   r   r   rr   rm   r>   r5   r   r      sH      [[)6<<>)2D  --&/3r>   r   c                        \ rS rSrS rS rSrg)TestMemoryAPIsi:  c                 b   [         R                  " 5       nUR                  S:  d   U5       eUR                  S:  d   U5       eSUR                  s=::  a  S::  d   U5       e   U5       eUR
                  S:  d   U5       eUR                  S:  d   U5       eUR                   H  n[        X5      nUS:w  a  [        U[        5      (       d   eUS:w  d  M3  US:  d  U R                  U< SU S35      eX1R                  :  d  Mb  U R                  U< SUR                   SU S	U S35      e   g )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r*   virtual_memoryr   	availabler   usedfree_fieldsr   r   intfail)r1   memr   values       r5   test_virtual_memory"TestMemoryAPIs.test_virtual_memory;  s&   ##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KKDC&Ey !%----wz))thfUG1$=>>99$))("2399+RvQugQO   r>   c                    [         R                  " 5       nUR                  S:X  d   eUR                  S:  d   U5       eUR                  S:  d   U5       eUR                  S:  a  UR
                  S:  d   U5       eOUR
                  S:X  d   U5       eSUR                  s=::  a  S::  d   U5       e   U5       eUR                  S:  d   U5       eUR                  S:  d   U5       eg )N)r   r   r   r   sinsoutr   r   )	r*   swap_memoryr   r   r   r   r   r   r   )r1   r   s     r5   test_swap_memoryTestMemoryAPIs.test_swap_memoryN  s      "{{ 
 
 	
 
 yyA~"s"~xx1}!c!}99q=88a<$$<88q=%#%=CKK&3&++&++&ww!| S |xx1}!c!}r>   rm   N)rn   ro   rp   rq   r   r   rr   rm   r>   r5   r   r   :  s    &"r>   r   c                      \ rS rSrS rS rS rS rS rS r	S r
\R                  R                  \=(       a    \S	S
9\" S5      S 5       5       rS rS rS rS rS rS rS r\R                  R                  \=(       a    \R6                  " 5       S:H  SS
9\R                  R                  \(       + SS
9S 5       5       r\R                  R                  \(       + SS
9S 5       rSr g)TestCpuAPIsie  c                 z   [         R                  " 5       nUc   eU[        [         R                  " SS95      :X  d   eUS:  d   e[        R
                  R                  S5      (       aA  [        S5       nUR                  5       nS S S 5        SW;  a  [        R                  " S5      eg g ! , (       d  f       N,= f)NTpercpur   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r*   	cpu_countr   rL   r(   pathexistsopenreadr!   skip)r1   logicalfdcpuinfo_datas       r5   test_cpu_count_logical"TestCpuAPIs.test_cpu_count_logicalf  s    ""$"""#f..d;<<<<!||77>>/**o&"!wwy 'L0kk"GHH 1 +&&s   5B,,
B:c                     [         R                  " 5       n[         R                  " SS9nUc  [        R                  " S5      e[        (       a"  [
        R                  " 5       S S S::  a  Ub   eg US:  d   eX:  d   eg )NFr   zcpu_count_cores() is NonerI   )   r   r   )r*   r   r!   r   r   r   getwindowsversion)r1   r   coress      r5   test_cpu_count_cores TestCpuAPIs.test_cpu_count_coresr  ss    ""$  /=++9::7s,,.r2f<= =A::###r>   c                    S H  n[         R                  " SUS9 n[        R                  " 5       b   eUR                  (       d   e S S S 5        [         R                  " SUS9 n[        R                  " SS9b   eUR                  (       d   e S S S 5        M     g ! , (       d  f       N\= f! , (       d  f       M  = f)N)r~   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr  )r   rP   r*   r   rb   )r1   valrd   s      r5   test_cpu_count_noneTestCpuAPIs.test_cpu_count_none}  s     C6S'')111xxx	
 43''6>>>xxx	  ! 
 s   ,B%+B/
B,	/
B>	c                    Sn[         R                  " 5       n[        U5        U H&  n[        U[        5      (       d   eUS:  d   eX-  nM(     [        [        U[        U5      -
  5      S5      S:X  d   e[        U5        g )Nr   r   r  )r*   rL   sumr   r   roundabsr   )r1   r   timescp_times       r5   test_cpu_timesTestCpuAPIs.test_cpu_times  sy      "E
Ggu----c>!>E  SU+,a0A555E
r>   c                 H   [        [        R                  " 5       5      n[        R                  " 5       [        -   n[        R                  " 5       U:  a?  [        [        R                  " 5       5      nX1:  a  g [        R                  " 5       U:  a  M?  U R                  S5      e)Nztime remained the same)r  r*   rL   r   r   r   )r1   t1stop_att2s       r5   test_cpu_times_time_increases)TestCpuAPIs.test_cpu_times_time_increases  sp    !!#$))+.iikG#V%%'(Bw iikG# ii011r>   c           	         [         R                  " SS9 Hn  nSn[        U5        U H&  n[        U[        5      (       d   eUS:  d   eX#-  nM(     [        [        U[        U5      -
  5      S5      S:X  d   e[        U5        Mp     [        [         R                  " SS9S   5      [        [         R                  " SS95      :X  d   eg )NTr   r   r   r  F)	r*   rL   r  r   r   r  r  r   r   )r1   r  r   r  s       r5   test_per_cpu_timesTestCpuAPIs.test_per_cpu_times  s    %%T2EEJ !'51111#~%~  ! USZ/0!4999J 3 6##4034E*9
 
 	
 
r>   c                 z   [         R                  " SS9n[        R                  " 5       [        -   n [        R                  " 5       U:  a  U R	                  S5      $ [         R                  " SS9n[        X5       H<  u  pE[         R                  " U5      [         R                  " U5      pTXT-
  nUS:  d  M<    g    M  )NTr   r   g?)r*   rL   r   r   r   zip_cpu_busy_time)r1   tot1	giveup_attot2r  r  
differences          r5   test_per_cpu_times_2 TestCpuAPIs.test_per_cpu_times_2  s     t,IIK.0	yy{i'yy++##40Dd/..r2F4I4I"4MBW
%	 *	 r>   zunreliable on OPENBSD + CIrv   r   c           	         [         R                  " 5       n[         R                  " SS9nUR                  [        U6  Vs/ s H  n[	        U5      PM     sn5      nUR
                   HC  nU R                  XQUS9   [        [        X5      [        XE5      -
  5      S:  d   e S S S 5        ME     g s  snf ! , (       d  f       M\  = f)NTr   )fieldbaseper_cpurI   )	r*   rL   _maker$  r  r   r   r  r   )r1   r.  r/  numsummed_valuesr-  s         r5   test_cpu_times_comparison%TestCpuAPIs.test_cpu_times_comparison  s     !""$/

W#FCH#FG\\EEgF,w}/LLM GF " $GFFs   B/:'B44
C	c           
      ,    [        U[        5      (       d   eUS:  d   eUS[        R                  " 5       -  ::  d   eg ! [         aI  n[	        SR                  U[        R                  " U5      [        R                  " U5      5      5      eS nAff = f)Nr   g      Y@z
{}
last={}
new={})r   r   r*   r   r   formatpprintpformat)r1   r   last_retnew_reterrs        r5   _test_cpu_percentTestCpuAPIs._test_cpu_percent  s    		gu----c>!>ef&6&6&88888 	 '..16>>'3J 	s   =A   
B
ABBc                 0   [         R                  " SS9n[        S5       H+  n[         R                  " S S9nU R                  X1U5        UnM-     [        R
                  " [        5         [         R                  " SS9  S S S 5        g ! , (       d  f       g = fNMbP?)intervalr   r~   )r*   cpu_percentrO   r<  r!   rX   ra   )r1   last_news       r5   test_cpu_percentTestCpuAPIs.test_cpu_percent  sm    !!51sA$$d3C""3c2D  ]]:&+ '&&s   )B
Bc                    [         R                  " SSS9n[        U5      [         R                  " 5       :X  d   e[	        S5       H5  n[         R                  " S SS9nU H  nU R                  XAU5        M     UnM7     [        R                  " [        5         [         R                  " SSS9  S S S 5        g ! , (       d  f       g = f)Nr@  TrA  r   r   r~   )	r*   rB  r   r   rO   r<  r!   rX   ra   r1   rC  rD  rE  r   s        r5   test_per_cpu_percent TestCpuAPIs.test_per_cpu_percent  s    !!5>4yF,,....sA$$d4@C&&wc: D	 
 ]]:&48 '&&s   B77
Cc                 x   [         R                  " SS9n[        S5       HO  n[         R                  " S S9nU H  nU R                  XAU5        M     U R                  [	        U5      X5        UnMQ     [
        R                  " [        5         [         R                  " SS9  S S S 5        g ! , (       d  f       g = fr?  )r*   cpu_times_percentrO   r<  r  r!   rX   ra   rJ  s        r5   test_cpu_times_percent"TestCpuAPIs.test_cpu_times_percent  s    ''7sA**D9C&&wc: ""3s8T7D  ]]:&$$b1 '&&s   B++
B9c                 F   [         R                  " SSS9n[        U5      [         R                  " 5       :X  d   e[	        S5       HY  n[         R                  " S SS9nU H9  nU H  nU R                  XQU5        M     U R                  [        U5      X5        M;     UnM[     g )Nr@  TrI  r   )r*   rN  r   r   rO   r<  r  )r1   rC  rD  rE  cpur   s         r5   test_per_cpu_times_percent&TestCpuAPIs.test_per_cpu_times_percent!  s    ''tD4yF,,....sA**DFC"G**7#>  #&&s3x;  D r>   c           
         [         R                  " SS9  [         R                  " SS9 Vs/ s HA  nUR                  [	        [        UR                  5      5       Vs/ s H  nSPM     sn5      PMC     nn[        R                  " SUS9   [         R                  " SS9 H  nU H  nU R                  US S 5        M     M!     S S S 5        g s  snf s  snf ! , (       d  f       g = f)NTr   r   zpsutil.cpu_timesr  )
r*   rN  rL   r0  rO   r   r   r   rP   r<  )r1   r2   
zero_timesrR  r   s        r5   #test_per_cpu_times_percent_negative/TestCpuAPIs.test_per_cpu_times_percent_negative,  s      - %%T2
2 GGc!))n 56 51Q 5672 	 
 ZZ*D//t<"G**7D$?  # = ED 7
 EDs#   1CC(C
8CC
C#c                     [         R                  " 5       nUR                  S:X  d   eUR                   H3  n[        X5      nUS:  d   e[        (       a  M#  US;   d  M+  US:  a  M3   e   g )N)ctx_switches
interruptssoft_interruptssyscallsr   >   r[  rZ  )r*   	cpu_statsr   r   r   )r1   infosr   r   s       r5   test_cpu_statsTestCpuAPIs.test_cpu_stats8  sj      "}} !
 
 	
 
 MMDE(EA::34#AAqy y "r>   arm64zskipped due to #1892not supportedc                 J   S n[         R                  " SS9n[        (       d  [        (       a  U(       d  [        R
                  " S5      eU(       d   U5       eU" [         R                  " SS9/5        [        (       a%  [        U5      [         R                  " 5       :X  d   eg g )Nc                    U  H  nUR                   S:X  d   eUR                  S:w  a  UR                  UR                  ::  d   eUR                    H3  n[        X5      n[	        U[
        [        45      (       d   eUS:  a  M3   e   M     g )N)currentminr   r   r   )r   r   rf  r   r   r   r   )rD   ntr   r   s       r5   check_ls+TestCpuAPIs.test_cpu_freq.<locals>.check_lsN  s{    zz%>>>>66S=::///JJD#B-E%ec5\:::: A:%: '	 r>   Tr   z/returns empty list on FreeBSD and Linux aarch64F)	r*   cpu_freqr   r   r!   r   r   r   r   )r1   ri  rD   s      r5   test_cpu_freqTestCpuAPIs.test_cpu_freqI  s|    
	& __D)Gww++A  2r&///015r7f..0000 r>   c                     [         R                  " 5       n[        U5      S:X  d   eU H"  n[        U[        5      (       d   eUS:  a  M"   e   g )Nr   r   )r*   
getloadavgr   r   r   )r1   loadavgloads      r5   test_getloadavgTestCpuAPIs.test_getloadavgd  sK    ##%7|q   DdE****3;; r>   rm   N)!rn   ro   rp   rq   r  r
  r  r  r  r!  r*  r!   r   r   r   r
   r"   r3  r<  rF  rK  rO  rS  rW  r`  r   r   machiner   rl  r   rr  rr   rm   r>   r5   r   r   e  s   
I	$ 
<2
D  [[w'C   b 
,	9	2	
@!" [[/(""$/8N   [[L(A1 B1. [[N*?C Dr>   r   c                      \ rS rSr\R
                  R                  \=(       a    \(       + SS9S 5       r	\R
                  R                  \
(       + SS9S 5       rS rS r\R
                  R                  \=(       a     \R                   R#                  S	5      (       + S
S9\R
                  R                  \=(       a    \R(                  " 5       (       + SS9S 5       5       rS rSrg)TestDiskAPIsim  zunreliable on PYPY32 + 32BITrv   c                    [         R                  " [        R                  " 5       5      nUR                  S:X  d   eUR
                  S:  d   U5       eUR                  S:  d   U5       eUR                  S:  d   U5       eUR
                  UR                  :  d   U5       eUR
                  UR                  :  d   U5       eSUR                  s=::  a  S::  d  O   UR                  5       e[        [        S5      (       a  [        R                  " [        R                  " 5       5      nSnUR
                  UR
                  :X  d   e[        UR                  UR                  -
  5      U:  d   e[        (       d(  [        UR                  UR                  -
  5      U:  d   eU R                  5       n[        R                  " [         5         [         R                  " U5        S S S 5        g ! , (       d  f       g = f)N)r   r   r   r   r   r   
disk_usagei  P )r*   rx  r(   getcwdr   r   r   r   r   r   shutilr  r   
get_testfnr!   rX   FileNotFoundError)r1   usageshutil_usage	tolerancefnames        r5   test_disk_usageTestDiskAPIs.test_disk_usagen  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   G..
G<znot an ASCII fsc                     [         R                  " [        5         [        R                  " [
        5        S S S 5        g ! , (       d  f       g = fr'   )r!   rX   UnicodeEncodeErrorr*   rx  r   rj   s    r5   test_disk_usage_unicode$TestDiskAPIs.test_disk_usage_unicode  s+     ]]-.n- /..s	   ?
Ac                 0    [         R                  " S5        g )N   .)r*   rx  rj   s    r5   test_disk_usage_bytes"TestDiskAPIs.test_disk_usage_bytes  s    $r>   c                    S n[         R                  " SS9nU(       d   eU H  nU" U5        [        (       a  SUR                  ;   a  M(  [        (       d6  [
        R                  R                  UR                  5      (       d   U5       eOUR                    [
        R                  R                  UR                  5      (       d   U5       eUR                  (       a  M   U5       e   [         R                  " SS9nU(       d   e[         R                  " SS9 H  nU" U5        [        (       a  M  UR                  (       d  M+   [
        R                  " UR                  5        [
        R                  R                  UR                  5      (       d   U5       eM     S nU" [&        5      n[         R                  " SS9 Vs/ s H0  nUR                  (       d  M  UR                  R)                  5       PM2     nnXh;   d   eg ! [         av  n[        (       a0  [        (       a%  UR                  [        R                   :X  a   S nAGM0  UR                  [        R"                  [        R$                  1;  a  e  S nAGMf  S nAff = fs  snf )Nc                    [        U R                  [        5      (       d   e[        U R                  [        5      (       d   e[        U R                  [        5      (       d   e[        U R
                  [        5      (       d   eg r'   )r   devicer   
mountpointfstypeoptsrh  s    r5   check_ntuple7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  s^    bii----bmmS1111bii----bggs++++r>   F)allcdromTc                 2   [         R                  R                  U 5      n [         R                  R                  U 5      (       dE  [         R                  R	                  U 5      n [         R                  R                  U 5      (       d  ME  U R                  5       $ r'   )r(   r   abspathismountdirnamer   )r   s    r5   find_mount_point;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sZ    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   )	r1   r  rD   diskr;  r  mountr2   mountss	            r5   test_disk_partitions!TestDiskAPIs.test_disk_partitions  s   	, ##.	rDw7dii/5ww~~dkk228D82 77>>$//228D82;;;$$;  ##-	r**t4D7t
AGGDOO, 77>>$//::@D@: 5"	  !* ++5
5|| !ALL 5 	 

 1  %~%%CII4J  yyell(CC D&
s*    HJJ
J4J 
/J  Jz/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                    S n[         R                  " SS9nUc   S5       eU" U5        [         R                  " SS9n[        U5      [        [        U5      5      :X  d   eU H  nU(       d   U5       eU" X#   5        M     g )Nc                 T   U S   U R                   :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   e[        (       d  [
        (       d  U S   U R                  :X  d   eU S   U R                  :X  d   e[        (       a@  U S   U R                  :X  d   eU S   U R                  :X  d   eU S	   U R                  :X  d   eO [        (       a  U S   U R                  :X  d   eU R                   H  n[        X5      S:  a  M   U 5       e   g )
Nr   r   rI   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   )rh  r   s     r5   r  8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntuple  s   a5BMM)))a5BNN***a5BMM)))a5BNN***Gvv!u,,,!u---5a5B$8$8888a5B$9$9999a5BLL000Wa5BLL000

r(A-1r1- #r>   Fperdiskzno disks on this system?T)r*   disk_io_countersr   rC   r1   r  retr?   s       r5   test_disk_io_counters"TestDiskAPIs.test_disk_io_counters  sz    	2" %%e4: ::S%%d33x3s3x=(((COO3" r>   c                     [         R                  " S0 S9 n[        R                  " SS9b   e[        R                  " SS90 :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz#psutil._psplatform.disk_io_countersr  Fr  T)r   rP   r*   r  rb   r1   rd   s     r5   test_disk_io_counters_no_disks+TestDiskAPIs.test_disk_io_counters_no_disks  sc     ZZ1
**59AAA**48B>>>88O8
 
 
   AA%%
A3rm   N)rn   ro   rp   rq   r!   r   r   r   r   r  r   r  r  r  r   r(   r   r   r   r*   r  r  r  rr   rm   r>   r5   rv  rv  m  s    [[X&D  %%4 [[H->?. @.
 8t [[7bggnn%677D   [[462244=O  #	#8r>   rv  c                   (   \ rS rSr\R
                  R                  \(       + SS9S 5       r\R
                  R                  \(       + SS9S 5       r	S r
S rS r\R
                  R                  \=(       d    \=(       d    \(       + S	S9S
 5       rSrg)TestNetAPIsi  rc  rv   c                     S n[         R                  " SS9nU" U5        [         R                  " SS9nU/ :w  d   eU H-  nU(       d   e[        U[        5      (       d   eU" X#   5        M/     g )Nc                    U S   U R                   :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   eU S   U R
                  :X  d   eU S   U R                  :X  d   eU S   U R                  :X  d   eU R                   S:  d   U 5       eU R                  S:  d   U 5       eU R                  S:  d   U 5       eU R                  S:  d   U 5       eU R                  S:  d   U 5       eU R
                  S:  d   U 5       eU R                  S:  d   U 5       eU R                  S:  d   U 5       eg )	Nr   r   rI   r   r  r  r  r  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutr  s    r5   r  6TestNetAPIs.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       r5   test_net_io_counters TestNetAPIs.test_net_io_counters  sk    	'$ $$E2S$$D1byyCJ3c3''''" r>   c                     [         R                  " S0 S9 n[        R                  " SS9b   e[        R                  " SS90 :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nz"psutil._psplatform.net_io_countersr  Fr  T)r   rP   r*   r  rb   r  s     r5   test_net_io_counters_no_nics(TestNetAPIs.test_net_io_counters_no_nics  sc     ZZ0r
))7???))6"<<<88O8
 
 
r  c           
      l	   [         R                  " 5       nU(       d   U5       e[         R                  " 5       n[        R                  [        R
                  [         R                  1nUR                  5        GHf  u  pE[        U[        5      (       d   e[        [        U5      5      [        U5      :X  d   eU GH  n[        UR                  [        5      (       d   e[        UR                  [        5      (       d   e[        UR                  [        [!        S 5      45      (       d   e[        UR"                  [        [!        S 5      45      (       d   eUR                  U;   d   e[        UR                  [$        R&                  5      (       d   eX$   R(                  (       Ga  UR                  [        R                  :X  aG  [        R                  " UR                  5       nUR+                  UR                  S45        S S S 5        OUR                  [        R
                  :X  a  [        R,                  " UR                  S[        R
                  [        R.                  S[        R0                  5      S   nUu  ppn[        R                  " XU5       nUR+                  U5        S S S 5        UR                  UR                  UR"                  UR2                  4 H=  nUc  M  UR                  [        R
                  :w  d  M(  [5        XR                  5        M?     UR"                  (       a  UR2                  b   eO UR2                  (       a  UR"                  b   eUR"                  (       d  GM  UR                  (       d  GM  UR                  [        R                  [        R
                  1;   d  GM  UR"                  [7        U5      :X  a  GM    e   GMi     [8        (       d  [:        (       d  [<        (       a;  [?        [        S5      (       a%  [         R                  [        R                  :X  d   eg g [@        (       a%  [         R                  [        RB                  :X  d   eg [D        (       a  [         R                  S:X  d   eg g ! , (       d  f       GN= f! , (       d  f       GN= f)Nr   AF_LINKr~   )#r*   net_if_addrsnet_if_statssocketAF_INETAF_INET6r  itemsr   r   r   rC   familyr   addressnetmaskr   	broadcastenumIntEnumisupbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr    r   r   r   r   r   r   	AF_PACKETr   )r1   nics	nic_statsfamiliesnicaddrsaddrsr_   afsocktypeproto
_canonnamesaips                  r5   test_net_if_addrsTestNetAPIs.test_net_if_addrs%  sA   ""$Tt'')	 NNFOOV^^D**,JCc3''''s5z?c%j000!$++s3333!$,,4444!$,,d4j0ABBBB!$..3T
2CDDDD{{h...!$++t||<<<<>&&& {{fnn4#]]4;;71FFDLL!#45 877%11 LL"OO".."--    ?C;e#]]2?1FF2J @ LLLLNNHH	B ~  ;;&//9-b++> >>88+++XX>>111 NNN'HH>>^D-AAAAc  'l 3%%55vy))~~777 *U>>V%5%5555W>>R''' [ 87 @?s   'RR$
R!$
R3c                 j   [         (       a  S[        R                  SS S S 4/nOS/n[        R                  " SUS9 n[        R
                  " 5       S   S   nUR                  (       d   e[         (       a  UR                  S:X  d   eOUR                  S:X  d   eS S S 5        g ! , (       d  f       g = f)	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   r*   r  r   rP   r  rb   r  )r1   r  rd   r  s       r5    test_net_if_addrs_mac_null_bytes,TestNetAPIs.test_net_if_addrs_mac_null_byteso  s     56>>:tT4HIC<=CZZ-C
&&(/2D88O8u||'::::||'::::
 
 
s   AB$$
B2c                    [         R                  " 5       nU(       d   U5       e[         R                  [         R                  [         R                  4nUR                  5        Hn  u  p4[        U[        5      (       d   eUu  pVpxn	[        U[        5      (       d   eXb;   d   eXb;   d   eUS:  d   eUS:  d   e[        U	[        5      (       a  Mn   e   g r   )	r*   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   )
r1   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r5   test_net_if_statsTestNetAPIs.test_net_if_stats  s    ""$Tt""""%%

  ::<KDdC((((.3+D%edD))))))))))A::!8O8eS)))) (r>   zLINUX or BSD or MACOS specificc                     [         R                  " S[        [        R                  S5      S9 n[
        R                  " 5       nU0 :X  d   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nzpsutil._psutil_posix.net_if_mtur]   rJ   )r   rP   r  r  ENODEVr*   r  rb   )r1   rd   r  s      r5   test_net_if_stats_enodev$TestNetAPIs.test_net_if_stats_enodev  s[    
 ZZ-b1
 %%'C"9988O8
 
 
s   1A))
A7rm   N)rn   ro   rp   rq   r!   r   r   r   r  r  r  r   r  r   r   r   r  rr   rm   r>   r5   r  r    s    [[//H# I#8 [[//H IH(T;$*$ [["c"U#,L  r>   r  c                      \ rS rSr\R
                  R                  \(       + SS9S 5       r\R
                  R                  \(       + SS9S 5       r	\R
                  R                  \
(       + SS9\R
                  R                  \(       + SS9S 5       5       r\R
                  R                  \(       + SS9S 5       rS	rg
)TestSensorsAPIsi  rc  rv   c                    [         R                  " 5       nUR                  5        H  u  p#[        U[        5      (       d   eU H  n[        UR
                  [        5      (       d   eUR                  b  UR                  S:  d   eUR                  b  UR                  S:  d   eUR                  c  Mq  UR                  S:  a  M   e   M     g r   )	r*   sensors_temperaturesr  r   r   labelrf  highcritical)r1   tempsr   entriesentrys        r5   test_sensors_temperatures)TestSensorsAPIs.test_sensors_temperatures  s    ++-"[[]MDdC(((( !%++s3333==, ==A---::) ::?*?>>- >>Q... ! +r>   c                 4   SS/0n[         R                  " SUS9 n[        R                  " SS9S   S   nUR                  (       d   eUR
                  S:X  d   eUR                  S	:X  d   eUR                  S
:X  d   e S S S 5        g ! , (       d  f       g = f)Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr  T)
fahrenheitr   g     ^@g     a@g     c@)r   rP   r*   r  rb   rf  r  r  )r1   drd   r  s       r5   #test_sensors_temperatures_fahreneit3TestSensorsAPIs.test_sensors_temperatures_fahreneit  s    567ZZ5A
//4@LQOE88O8==E)))::&&&>>U***
 
 
s   A$B		
Bz
no batteryc                    [         R                  " 5       nUR                  S:  d   eUR                  S::  d   eUR                  [         R                  [         R
                  1;  a  UR                  S:  d   eO1UR                  [         R
                  :X  a  UR                  (       d   e[        UR                  [        5      (       d   eg )Nr   r   )	r*   sensors_batteryr   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDpower_pluggedr   r   )r1   r  s     r5   test_sensors_battery$TestSensorsAPIs.test_sensors_battery  s     $$&{{a{{c!!!<<%%'' 
 
 <<1$$$\\V888$$$$#++T2222r>   c                 H   [         R                  " 5       nUR                  5        Hy  u  p#[        U[        5      (       d   eU HW  n[        UR
                  [        5      (       d   e[        UR                  [        5      (       d   eUR                  S:  a  MW   e   M{     g r   )r*   sensors_fansr  r   r   r  rf  r   )r1   fansr   r  r  s        r5   test_sensors_fans!TestSensorsAPIs.test_sensors_fans  s    ""$!ZZ\MDdC(((( !%++s3333!%--5555}}))) ! *r>   rm   N)rn   ro   rp   rq   r!   r   r   r   r  r"  r   r   r*  r   r/  rr   rm   r>   r5   r  r    s    [[44_M/ N/ [[44_M	+ N	+ [[//H[[K=3 > I3 [[,,_E* F*r>   r  )8__doc__r   r  r  r(   r   r7  rz  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"   r$   rt   r   r   r   rv  r  r  rm   r>   r5   <module>r5     s       	      
              )   ! # ' ' $ % ' , , ) 1 ! %  ' ' *  )E n E Pc.n c.LL3> L3^("^ ("VE. EPL> L^b. bJ2*n 2*r>   