
    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ZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, dd lm-Z- dd!lm.Z. dd"lm/Z/  G d# d$e,      Z0 G d% d&e,      Z1 G d' d(e,      Z2 G d) d*e,      Z3 G d+ d,e,      Z4 G d- d.e,      Z5 G d/ d0e,      Z6 G d1 d2e,      Z7y)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                   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_testprocProcesskillwait)selfxsprocps       d/var/www/html/cjf29f/d23bf782/d32178f2/venv/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+   r1   s    r4   <lambda>z4TestProcessIter.test_no_duplicates.<locals>.<lambda>I   s
         )keyc                     | j                   S r&   r8   r9   s    r4   r:   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>J   s
    155 r;   )listr)   r*   sortedset)r0   lss     r4   test_no_duplicatesz"TestProcessIter.test_no_duplicatesG   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r0   r1   s     r4   test_emulate_nspz TestProcessIter.test_emulate_nspM   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rD   )r>   r)   r*   rK   r   rL   AccessDeniedr'   r(   r!   raisesrN   rO   s     r4   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_deniedW   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+   rI   fooz$psutil._psplatform.Process.cpu_timesr    rF   rH   )rJ   ad_value)r)   r*   r>   infokeysr!   rS   
ValueErrorr   rL   rR   calledobject)r0   r3   mflags       r4   
test_attrszTestProcessIter.test_attrsb   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*   _pmaprN   r0   s    r4   test_cache_clearz TestProcessIter.test_cache_clear~   s@    V  "#|||'')<<<r;   N)	__name__
__module____qualname__r5   rB   rP   rT   r`   rd    r;   r4   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_testproc() 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+   )r3   pidss    r4   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr;   )timeout   )rq   g{Gz?rs   rq   g      ?   
returncode   c                     t        j                  | d|      \  }}t        |      dk(  sJ t        |      dk(  sJ ||fS )NQ?ru   rt   rE   r)   
wait_procslenprocsrq   gonealives       r4   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 )Nrz   ru   rv   r   r{   r~   s       r4   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r;   )r,   r)   r-   r+   r!   rS   r[   r|   	TypeErrortimer}   hasattrr"   	terminater   poprw   signalSIGTERMr@   )r0   rq   sproc1sproc2sproc3r1   r   tr   r   r3   r   r   rp   s                @r4   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|   )r0   r   r   r   r1   r   r3   s          r4   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 )Nrr   r   )r,   r)   
pid_existsr+   r-   r.   r/   rp   )r0   r2   r3   s      r4   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)   rp   r   AssertionErrorr   sleeprK   max)r0   rp   r+   s      r4   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)re   rf   rg   r!   markskipifr   r   r   r   r   r   rh   r;   r4   rj   rj      sq    [[>  9,	9,v [[>  !	!<.r;   rj   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   )r0   bts     r4   test_boot_timezTestMiscAPIs.test_boot_time   s?    "e$$$AvvDIIKr;   unreliable on CIrk   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-   )r0   r   r   s      r4   
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   bsdTrt   r   r   r
   r	   sunossolarisr   darwinr   r   )r   getattrr)   boolr'   r   r   r   removesysplatformlowerr   r   r   r
   r	   countr   r   )r0   namesr   s      r4   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)re   rf   rg   r   r!   r   r   r   r)   r   r   r   rh   r;   r4   r   r      sJ      [[)<6<<>)2D  --&/3r;   r   c                       e Zd Zd Zd Zy)TestMemoryAPIsc                 <   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| j                  |d| d      ||j                  kD  sX| j                  |d|j                   d| d	| d       y )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r)   virtual_memoryr   	availabler   usedfree_fieldsr   r   intfail)r0   memr   values       r4   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory;  s,   ##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KK 
	DC&Ey !%---wz))thfUG1$=>>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   )r0   r   s     r4   test_swap_memoryzTestMemoryAPIs.test_swap_memoryN  s      "{{ 
 
 	
 
 yyA~"s"~xx1}!c!}99q=88a<$$<88q=%#%=CKK&3&++&++&ww!| S |xx1}!c!}r;   N)re   rf   rg   r   r   rh   r;   r4   r   r   :  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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j4                         dk(  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percpurt   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r)   	cpu_countr}   rH   r'   pathexistsopenreadr!   skip)r0   logicalfdcpuinfo_datas       r4   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalf  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 NonerE   )   rt   rt   )r)   r   r!   r   r   r   getwindowsversion)r0   r   coress      r4   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coresr  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)rr   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r   rL   r)   r   r\   )r0   valr^   s      r4   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_none}  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)   rH   sumr   r   roundabsr   )r0   r   timescp_times       r4   test_cpu_timeszTestCpuAPIs.test_cpu_times  s}      "E
 	Ggu---c>!>WE	 SU+,a0A555E
r;   c                 8   t        t        j                               }t        j                         t        z   }t        j                         |k  r;t        t        j                               }||kD  ry t        j                         |k  r;| j                  d      )Nztime remained the same)r   r)   rH   r   r   r   )r0   t1stop_att2s       r4   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  sr    !!#$))+.iikG#V%%'(BBw iikG# ii011r;   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)   rH   r   r   r   r   r   r   r}   )r0   r   r   r   s       r4   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                 x   t        j                  d      }t        j                         t        z   }	 t        j                         |k\  r| j	                  d      S t        j                  d      }t        ||      D ];  \  }}t        j                  |      t        j                  |      }}||z
  }|dk\  s; y  )NTr   rs   g?)r)   rH   r   r   r   zip_cpu_busy_time)r0   tot1	giveup_attot2r   r  
differences          r4   test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2  s     t,IIK.0	yy{i'yy++##40DdD/  B..r2F4I4I"4MB"W
%	 	 r;   zunreliable on OPENBSD + CIrk   rx   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_cpurE   )	r)   rH   _maker  r   r   r   r   r   )r0   r  r  numsummed_valuesr  s         r4   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)r0   r   last_retnew_reterrs        r4   _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   rr   )r)   cpu_percentrK   r  r!   rS   r[   )r0   last_news       r4   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   rr   )	r)   r!  r}   r   rK   r  r!   rS   r[   r0   r"  r#  r$  r   s        r4   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_percentrK   r  r   r!   rS   r[   r(  s        r4   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   rK   r  r   )r0   r"  r#  r$  cpur   s         r4   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+  rH   r  rK   r}   r   r   rL   r  )r0   r1   
zero_timesr.  r   s        r4   #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   >   r5  r4  )r)   	cpu_statsr   r   r   )r0   infosr   r   s       r4   test_cpu_statszTestCpuAPIs.test_cpu_stats8  so      "}} !
 
 	
 
 MM 	!DE4(EA::4#AAqy y	!r;   arm64z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   )rA   ntr   r   s       r4   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsN  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   )r0   rB  rA   s      r4   test_cpu_freqzTestCpuAPIs.test_cpu_freqI  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 )Nrv   r   )r)   
getloadavgr}   r   r   )r0   loadavgloads      r4   test_getloadavgzTestCpuAPIs.test_getloadavgd  sM    ##%7|q    	DdE***3;;	r;   N)re   rf   rg   r   r   r   r   r  r  r  r!   r   r   r   r
   r"   r  r  r%  r)  r,  r/  r2  r:  r   r   machiner   rD  r   rI  rh   r;   r4   r   r   e  s   
I	$ 
<2
D  [[w'C   b 
,	9	2	
@!" [[/"(""$/8N   [[L(A1 B1. [[N*?C Dr;   r   c                      e Zd Zej                  j                  exr e d      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)TestDiskAPIszunreliable on PYPY32 + 32BITrk   c                    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)   rN  r'   getcwdr   r   r   r   r   r   shutilr   r   
get_testfnr!   rS   FileNotFoundError)r0   usageshutil_usage	tolerancefnames        r4   test_disk_usagez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   4GGznot an ASCII fsc                     t        j                  t              5  t        j                  t
               d d d        y # 1 sw Y   y xY wr&   )r!   rS   UnicodeEncodeErrorr)   rN  r   rc   s    r4   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode  s4     ]]-. 	.n-	. 	. 	.s	   =Ac                 .    t        j                  d       y )N   .)r)   rN  rc   s    r4   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rA  s    r4   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    r4   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sT    77??4(Dggood+wwt, ggood+::<r;   )r)   disk_partitionsr   rc  r   r'   r   r   r`  ra  rb  statOSErrorr   r   errnoEIOEPERMEACCES__file__r   )	r0   re  rA   diskr  rl  mountr1   mountss	            r4   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   rt   rE   rv         r         )
read_countwrite_count
read_byteswrite_bytesr
   r	   	read_time
write_timer   read_merged_countwrite_merged_count	busy_timer   r   r   )rA  r   s     r4   re  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@   r0   re  retr<   s       r4   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   rL   r)   r  r\   r0   r^   s     r4   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)re   rf   rg   r!   r   r   r   r   rW  r   rZ  r]  rx  r   r'   r   r   r   r)   r  r  r  rh   r;   r4   rL  rL  m  s    [[X&D  %%4 [[H->?. @.
 8t [[7bggnn%677D   [[4262244=O  #	#8r;   rL  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<  rk   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   rt   rE   rv   r{  r|  r   r}  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrd  s    r4   re  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       r4   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   rL   r)   r  r\   r  s     r4   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_LINKrr   )#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   )r0   nics	nic_statsfamiliesnicaddrsaddrsrY   afsocktypeproto
_canonnamesaips                  r4   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  rr   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   rL   r  r\   r  )r0   r  r^   r  s       r4    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_byteso  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   )
r0   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r4   test_net_if_statsz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                     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_mturW   rF   )r   rL   ro  rp  ENODEVr)   r  r\   )r0   r^   r  s      r4   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s`    
 ZZ-b1
 	 %%'C"9988O8	 	 	s   *A$$A-N)re   rf   rg   r!   r   r   r   r  r  r  r  r  r   r   r   r  rh   r;   r4   r  r    s    [[//H# I#8 [[//H IH(T;$*$ [["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<  rk   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)r0   tempsr   entriesentrys        r4   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   rL   r)   r  r\   r?  r  r  )r0   dr^   r  s       r4   #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   )r0   r  s     r4   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   )r0   fansr   r  r  s        r4   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s    ""$!ZZ\ 	*MD'dC(((  *!%++s333!%--555}})))*	*r;   N)re   rf   rg   r!   r   r   r   r  r  r   r   r  r   r  rh   r;   r4   r  r    s    [[44_M/ N/ [[44_M	+ N	+ [[//H[[K=3 > I3 [[,,_E* F*r;   r  )8__doc__r   r  rp  r'   r   r  rP  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$   rj   r   r   r   rL  r  r  rh   r;   r4   <module>r     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;   