
    f                        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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. dd"lm/Z/ dd#lm0Z0 dd$lm1Z1  G d% d&e-      Z2 G d' d(e-      Z3 G d) d*e-      Z4 G d+ d,e-      Z5 G d- d.e-      Z6 G d/ d0e-      Z7 G d1 d2e-      Z8e9d3k(  rdd4l:m;Z;  e;e<       yy)5zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)PY3)FileNotFoundError)long)ASCII_FS)
CI_TESTING)DEVNULL)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)enum)mock)retry_on_failurec                       e Zd Zd Zd Z ej                  exr ed      d        Z	 ej                  exr ed      d        Z
d Zd Zy)	TestProcessAPIsc                 f   | j                  t        j                         t        j                         D cg c]  }|j
                   c}       | j                         }| j                  |j
                  t        j                         D cg c]  }|j
                   c}       t        j                  |j
                        }|j                          |j                          | j                  |j
                  t        j                         D cg c]  }|j
                   c}       t        j                         D cg c]  }| }}| j                  t        |d       t        t        |      d              t        j                  dt        j                   t        j                                     5  | j                  t#        t        j                               g        d d d        t        j                  dt        j$                  t        j                                     5  | j'                  t        j$                        5  t#        t        j                                d d d        d d d        y c c}w c c}w c c}w c c}w # 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   y xY w)Nc                     | j                   S Npidxs    :/usr/lib/python3/dist-packages/psutil/tests/test_system.py<lambda>z3TestProcessAPIs.test_process_iter.<locals>.<lambda>M   s
    QUU     )keyc                     | j                   S r)   r*   r,   s    r.   r/   z3TestProcessAPIs.test_process_iter.<locals>.<lambda>N   s
    !%% r0   zpsutil.Processside_effect)assertInosgetpidpsutilprocess_iterr+   spawn_testprocProcesskillwaitassertNotInassertEqualsortedsetr#   patchNoSuchProcesslistAccessDeniedassertRaises)selfr-   sprocplss        r.   test_process_iterz!TestProcessAPIs.test_process_iterA   s   biik63F3F3H#IaAEE#IJ##%eii1D1D1F!GA!%%!GHNN599%		F4G4G4I$JqQUU$JK  ,,./Aa//2?+3r70	

 ZZ&*>*>ryy{*K
 	> T&"5"5"78"=	> ZZ&*=*=biik*J
 	, ""6#6#67 ,V((*+,	, 	,' $J!G %K 0	> 	>, ,	, 	,sG   I;
J 
J
 	J
:.J, J'J*J'JJ$	 J''J0c                    t        j                  dg      D ]6  }| j                  t        |j                  j                               dg       8 | 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                  |j                  d          | j                  |j                  d   d       A |j                  sJ 	 d d d        t        j                  dt        j                  dd            5 }t               }t        j                  ddg|	      D ]@  }| j                  |j                  d   |       | j                  |j                  d   d       B |j                  sJ 	 d d d        y # 1 sw Y   QxY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr+   )attrsfooz$psutil._psplatform.Process.cpu_timesr    r3   	cpu_times)rM   ad_value)r8   r9   r?   rD   infokeysrF   
ValueErrorr#   rB   rE   assertIsNoneassertGreaterEqualcalledobjectassertIs)rG   rI   mflags       r.   test_prcess_iter_w_attrsz(TestProcessAPIs.test_prcess_iter_w_attrs[   s   $$E73 	;AT!&&++-05':	;z* 	5$$E734	5ZZ2++Ar2
 	 (({/CD :!!!&&"56''uq9: 88O8	 ZZ2++Ar2
 
	 8D((k*T : aff[148''uq9	:
 88O8
	 
		5 	5	 	
	 
	s&   &!G:A)G#A5G/G #G,/G8z-spawn_testproc() unreliable on PYPY + WINDOWSc                 V    fd}g  j                         } j                         } j                         }|||fD cg c]!  }t        j                  |j                        # }} j	                  t
        t        j                  |d        j	                  t        t        j                  |d       t        j                         }t        j                  |d|      \  }}	 j                  t        j                         |z
  d        j                  |g         j                  t        |	      d	        j                  g        |	D ]  }
 j                  t        |
d
              t        d       fd       }|j                           |||      \  }}	 j!                  |j                  |D cg c]  }|j                   c}       t"        r: j                  |j%                         j&                  t(        j*                          n* j                  |j%                         j&                  d        j                  |j                  g       |	D ]  }
 j                  t        |
d
              t        d       fd       }|j                          |j                           |||      \  }}	 j                  t-              t-        |j                  |j                  |j                  g             |D ]  }
 j/                  t        |
d
              y c c}w c c}w )Nc                 <    j                  | j                         y r)   )appendr+   )rI   pidss    r.   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callbackx   s    KKr0   )timeout   )ra   g{Gz?rc   ra   g      ?   
returncode   c                     t        j                  | d|      \  }}j                  t        |      d       j                  t        |      d       ||fS )NQ?re   rd      r8   
wait_procsr?   lenprocsra   gonealiverG   s       r.   test_1z/TestProcessAPIs.test_wait_procs.<locals>.test_1   R     ++thKD% SY*SZ+;r0   c                     t        j                  | d|      \  }}j                  t        |      d       j                  t        |      d       ||fS )Nrj   re   rf   r   rl   ro   s       r.   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   rt   r0   )r:   r8   r;   r+   rF   rT   rm   	TypeErrortime
assertLessr?   rn   assertFalsehasattrr$   	terminater5   r
   poprg   signalSIGTERMrA   
assertTrue)rG   ra   sproc1sproc2sproc3r-   rp   trq   rr   rI   rs   rv   r`   s   `            @r.   test_wait_procszTestProcessAPIs.test_wait_procst   s   	 $$&$$&$$&170HI1&II*f&7&7K)V%6%6JIIK''thOe		a-r"UQ'r" 	7AWQ56	7 
"		 
	 	UH-efjj$"7Q155"78TXXZ22V^^ODTXXZ22A6

|, 	7AWQ56	7 
"		 
	 	UH-eTCVZZ(L$MN 	6AOOGA|45	6] J0 #8s   &L!7L&
c                 $   | j                         }| j                         }| j                         }|||fD cg c]!  }t        j                  |j                        # }}|D ]  }|j	                           t        j
                  |       y c c}w r)   )r:   r8   r;   r+   r|   rm   )rG   r   r   r   r-   rp   rI   s          r.   test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeout   s     $$&$$&$$&170HI1&II 	AKKM	%  Js   &Bc                    | j                         }| j                  t        j                  |j                               t        j
                  |j                        }|j                          |j                          | j                  t        j                  |j                               | j                  t        j                  d             | j                  t        j                  d      dt        j                         v        y )Nrb   r   )r:   r   r8   
pid_existsr+   r;   r<   r=   rz   r?   r`   )rG   rH   rI   s      r.   test_pid_existszTestProcessAPIs.test_pid_exists   s    ##%))%))45NN599%		**59956**2./**1-qFKKM/ABr0   c                    t        j                         }|D ]  }	 t        j                  |      sJ  t        t        |      dz   t        |      dz         }|D ](  }| j                  t        j                  |      |       * y # t        $ r< t	        j
                  d       | j                  |t        j                                Y w xY w)Ng?i:  i>  msg)
r8   r`   r   AssertionErrorrx   sleepr>   rangemaxrz   )rG   r`   r+   s      r.   test_pid_exists_2z!TestProcessAPIs.test_pid_exists_2   s    {{} 	5C5((---	5 SY&D	E(9: 	>CV..s3=	> " 5 

3  fkkm4	5s   BAC
CN)__name__
__module____qualname__rK   r\   unittestskipIfr   r   r   r   r   r    r0   r.   r&   r&   @   sl    ,42 X__I7676r X__I!!C>r0   r&   c                   x    e Zd Zd Z ej
                  exr  ej                          d      d        Z	d Z
d Zy)TestMiscAPIsc                     t        j                         }| j                  |t               | j	                  |d       | j                  |t        j                                y Nr   )r8   	boot_timeassertIsInstancefloatassertGreaterry   rx   )rG   bts     r.   test_boot_timezTestMiscAPIs.test_boot_time   sD    b%(2q!DIIK(r0   unreliable on CIc           	         t        j                         }| j                  |g        |D ]R  }| j                  |      5  |j                  sJ | j                  |j                  t               | j                  |j                  t        t        d       f       |j                  +| j                  |j                  t        t        d       f       |j                   |j                   | j                  |j                  d       t        j                  j                  |j                         t        st        r| j!                  |j"                         nt        j$                  |j"                         d d d        U y # 1 sw Y   axY w)N)user        )r8   usersassertNotEqualsubTestnamer   strterminaltypehostr   starteddatetimefromtimestampr   r	   rU   r+   r;   )rG   r   r   s      r.   
test_userszTestMiscAPIs.test_users   s   E2& 	-D4( -yy y%%dii5%%dmmc4:5FG99())$))c4:5FG		""4<<5!!//=g%%dhh/NN488,- -	-- -s   D5F  F
	c                     t         j                  }t        t         _        	 t        j                          |t         _        y # |t         _        w xY wr)   )sysstdoutr   r8   test)rG   r   s     r.   	test_testzTestMiscAPIs.test_test   s/    
	 KKMCJCJs   A Ac                    g d}|D ](  }| j                  t        t        |      t        |       * 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 | j                  t        j                  t        j                   t        j"                  gj%                  d      d	       |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 ]#  }| j+                  t        t        |      |       % y )N)	r
   r   r   r   r   r	   r   r   r   r   posixr
   linuxr   bsdTrd   r   r   r	   r   sunossolarisr   darwinr   r   )r   getattrr8   boolr6   r   r
   r   remover   platformlowerr   r   r?   r   r	   r   countr   r   rz   )rG   namesr   s      r.   test_os_constantszTestMiscAPIs.test_os_constants   s   

  	ID!!'&$"74!H	I 77g<<<~~%%LL!#,,,,..||#|W%#,,,,..zz!z  ^^V^^V]]CII 	 U#Y'Y'X&3<<--// 2 2 44||#|W%S\\//11||#|W%>>!>||##LL#  	>DWVT2=	>r0   N)r   r   r   r   r   r   r   r8   r   r   r   r   r   r0   r.   r   r      sD    ) X__Z6$68JK- L-& 2>r0   r   c                       e Zd Zd Zd Zy)TestMemoryAPIsc                 P   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| j                  |t        t        f       |dk7  s6|dk\  s| j                  |d|d      ||j                  kD  sb| j                  |d|j                  d|d	|d       y )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r8   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)rG   memr   values       r.   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory/  s   ##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KK 	DC&Ey %%ec4[9wz))T5$ABB399$))D%9 	r0   c                    t        j                         }| j                  |j                  d       |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   )
r8   swap_memoryr?   r   r   r   r   r   r   r   )rG   r   s     r.   test_swap_memoryzTestMemoryAPIs.test_swap_memoryC  s      "KKL	
 yyA~"s"~xx1}!c!}99q=88a<$$<88q=%#%=CKK&3&++&++&ww!| S |xx1}!c!}r0   N)r   r   r   r   r   r   r0   r.   r   r   .  s    ("r0   r   c                   Z   e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
j                  exr ed      d	        Zd
 Zd Zd Zd Zd Zd Zd Z e
j                  exr  ej0                         dk(  d       e
j                  e d      d               Z e
j                  e d      d        Zy)TestCpuAPIsc                    t        j                         }| j                  |       | j                  |t	        t        j
                  d                   | j                  |d       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percpurd   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r8   	cpu_countassertIsNotNoner?   rn   rP   rV   r6   pathexistsopenreadr   SkipTest)rG   logicalfdcpuinfo_datas       r.   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalV  s    ""$W%#f&6&6d&C"DE+77>>/*o& )"!wwy)L0''(MNN 1 +) )s   CCc                 *   t        j                         }t        j                  d      }|| j                  d      t        r,t	        j
                         d d dk  r| j                  |       y | j                  |d       | j                  ||       y )NFr   zcpu_count_cores() is Nonerk   )   rd   rd   )r8   r   skipTestr   r   getwindowsversionrU   rV   )rG   r   coress      r.   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_coresb  s}    ""$  /=-- ;<<s,,.r2f<e$##E1-##GU3r0   c                    dD ]  }t        j                  d|      5 }| j                  t        j                                |j
                  sJ 	 d d d        t        j                  d|      5 }| j                  t        j                  d             |j
                  sJ 	 d d d         y # 1 sw Y   `xY w# 1 sw Y   xY w)N)rb   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r#   rB   rU   r8   r   rW   )rG   valrZ   s      r.   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_nonem  s      
	 C6S  !!&"2"2"45xxx	 
 43  !!&"2"25"ABxxx	   
	    
   s   2B//4B;/B8	;C	c                     d}t        j                         }t        |       |D ]/  }| j                  |t               | j                  |d       ||z  }1 | j                  |t        |             t        |       y )Nr   r   )r8   rP   sumr   r   rV   assertAlmostEqualr   )rG   r   timescp_times       r.   test_cpu_timeszTestCpuAPIs.test_cpu_times{  sr      "E
 	G!!'51##GS1WE	 	uc%j1E
r0   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   r8   rP   rx   r   r   )rG   t1stop_att2s       r.   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  sr    !!#$))+.iikG#V%%'(BBw iikG# ii011r0   c                    t        j                  d      D ]i  }d}t        |       |D ]/  }| j                  |t               | j                  |d       ||z  }1 | j                  |t        |             t        |       k | j                  t        t        j                  d      d         t        t        j                  d                   y )NTr   r   r   F)
r8   rP   r   r   r   rV   r   r   r?   rn   )rG   r   r   r   s       r.   test_per_cpu_timeszTestCpuAPIs.test_per_cpu_times  s    %%T2 	EEJ  !%%gu5''5 ! ""5#e*5J	 	  -a01  ./	
r0   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   rc   g?)r8   rP   rx   r   r   zip_cpu_busy_time)rG   tot1	giveup_attot2r  r  
differences          r.   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
%		 r0   zunreliable on OPENBSD + CIc           	         t        j                         }t        j                  d      }|j                  t        | D cg c]  }t	        |       c}      }|j
                  D ]G  }| j                  |||      5  | j                  t        ||      t        ||      d       d d d        I y c c}w # 1 sw Y   YxY w)NTr   )fieldbaseper_cpurd   delta)	r8   rP   _maker  r   r   r   r   r   )rG   r  r  numsummed_valuesr  s         r.   test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparison  s    
 !""$/

W#FCH#FG\\ 	EEgF &&D%(M51 '  	 $G s    B0<)B55B>	c                 ^   	 | j                  |t               | j                  |d       | j                  |d       | j	                  |dt        j                         z         y # t        $ r?}t        d|dt        j                  |      dt        j                  |            d }~ww xY w)Nr   g       g      Y@
z
last=z
new=)
r   r   rV   assertIsNotassertLessEqualr8   r   r   pprintpformat)rG   r   last_retnew_reterrs        r.   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s    		!!'51##GS1Wd+  %&2B2B2D*DE 	 x0&..2IK 	s   A!A$ $	B,-:B''B,c                 &   t        j                  d      }t        d      D ]-  }t        j                  d       }| j                  |||       |}/ | j	                  t
              5  t        j                  d       d d d        y # 1 sw Y   y xY wNMbP?)intervalr   rb   )r8   cpu_percentr   r"  rF   rT   )rG   last_news       r.   test_cpu_percentzTestCpuAPIs.test_cpu_percent  s    !!51s 	A$$d3C""3c2D	 z* 	,+	, 	, 	,s   'BBc                    t        j                  dd      }| j                  t        |      t        j                                t        d      D ]5  }t        j                  d d      }|D ]  }| j                  |||        |}7 | j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nr%  Tr&  r   r   rb   )	r8   r'  r?   rn   r   r   r"  rF   rT   rG   r(  r)  r*  r   s        r.   test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percent  s    !!5>TF$4$4$67s 	A$$d4@C ;&&wc:;D		
 z* 	948	9 	9 	9s   B>>Cc                 l   t        j                  d      }t        d      D ]P  }t        j                  d       }|D ]  }| j                  |||        | j                  t	        |      ||       |}R | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wr$  )r8   cpu_times_percentr   r"  r   rF   rT   r.  s        r.   test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percent  s    ''7s 	A**D9C ;&&wc:;""3s8T37D	 z* 	2$$b1	2 	2 	2s   
B**B3c                 X   t        j                  dd      }| j                  t        |      t        j                                t        d      D ]X  }t        j                  d d      }|D ]8  }|D ]  }| j                  |||        | j                  t        |      ||       : |}Z y )Nr%  Tr-  r   )r8   r1  r?   rn   r   r   r"  r   )rG   r(  r)  r*  cpur   s         r.   test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percent  s    ''tDTF$4$4$67s 	A**DFC <" ?G**7D#>?&&s3xs;< D	r0   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   )
r8   r1  rP   r  r   rn   r   r#   rB   r"  )rG   r-   
zero_timesr4  r   s        r.   #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                  |j                  d       |j                  D ]>  }t	        ||      }| j                  |d       t        r(|dv s-| j                  |d       @ y )N)ctx_switches
interruptssoft_interruptssyscallsr   )r:  r;  )r8   	cpu_statsr?   r   r   rV   r   r   )rG   infosr   r   s       r.   test_cpu_statszTestCpuAPIs.test_cpu_stats&  st      "MMI	
 MM 	-DE4(E##E1-4#AA""5!,	-r0   arm64zskipped due to #1892not supportedc                 "     fd}t        j                  d      }t        r|s j                  d      |sJ |        |t        j                  d      g       t        r. j                  t        |      t        j                                y y )Nc                 V   | D ]  }j                  |j                  d       |j                  dk7  r&j                  |j                  |j                         |j                  D ]A  }t        ||      }j                  |t        t        t        f       j                  |d       C  y )N)currentminr   r   r   )r?   r   r   r  rE  r   r   r   r   r   rV   )rJ   ntr   r   rG   s       r.   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_ls:  s     6  -FG66S=((RVV<JJ 6D#B-E))%#tU1CD++E156	6r0   Tr   zreturns empty list on FreeBSDF)r8   cpu_freqr   r   r   r?   rn   r   )rG   rH  rJ   s   `  r.   test_cpu_freqzTestCpuAPIs.test_cpu_freq5  sq    
	6 __D)2-- ?@@2r&///01SWf&6&6&89 r0   c                     t        j                         }| j                  t        |      d       |D ]*  }| j	                  |t
               | j                  |d       , y )Nrf   r   )r8   
getloadavgr?   rn   r   r   rV   )rG   loadavgloads      r.   test_getloadavgzTestCpuAPIs.test_getloadavgN  sS    ##%Wq) 	/D!!$.##D#.	/r0   N)r   r   r   r   r   r   r   r  r  r  r   r   r   r	   r  r"  r+  r/  r2  r5  r8  r@  r   r   machiner   rJ  r   rO  r   r0   r.   r   r   U  s    
O	4 
:2
F X__Z+G-IJ K
,	9	2	
@- X__/"(""$/1G X__%7: 8:* X__'9/ :/r0   r   c                   P   e Zd Z ej                  exr e d      d        Z ej                  e d      d        Z	d Z
d Z ej                  exr ej                  j                  d       d       ej                  exr  ej$                          d	      d
               Zd Zy)TestDiskAPIszunreliable on PYPY32 + 32BITc                    t        j                  t        j                               }| j	                  |j
                  d       |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                  |j                         | j                  |j                  |j                  |       t        s(| j                  |j                  |j                  |       | j                         }| 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  )r8   rT  r6   getcwdr?   r   r   r   r   r   r{   shutilr   r   
get_testfnrF   r   )rG   usageshutil_usage	tolerancefnames        r.   test_disk_usagezTestDiskAPIs.test_disk_usageX  s   !!"))+.(LM{{Q%%zzA~$u$~zzA~$u$~{{UZZ'..'{{UZZ'..'EMM(S(7%--7(6<(!,,RYY[9L'IU[[,*<*<=""

L--Y #   &&JJ 1 1 '  !01 	%e$	% 	% 	%s   G''G0znot an ASCII fsc                     | j                  t              5  t        j                  t               d d d        y # 1 sw Y   y xY wr)   )rF   UnicodeEncodeErrorr8   rT  r   rG   s    r.   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicodew  s6     12 	.n-	. 	. 	.s	   9Ac                 .    t        j                  d       y )N   .)r8   rT  r_  s    r.   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytes}  s    $r0   c                      fd}t        j                  d      } 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      } 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+                         * }} j-                  ||       y # t        $ rg}t        r)t        r#|j                   t         j"                  k(  rY d }~|j                   t         j$                  t         j&                  fvr Y d }~Ed }~ww xY wc c}w )Nc                 `   j                  | j                  t               j                  | j                  t               j                  | j                  t               j                  | j
                  t               j                  | j                  t        t        d       f       j                  | j                  t        t        d       f       | j                  "t        sj                  | j                  d       | j                  j                  | j                  d       y y r   )r   devicer   
mountpointfstypeoptsmaxfiler   r   maxpathr   r   rG  rG   s    r.   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  s    !!"))S1!!"--5!!"))S1!!"''3/!!"**sDJ.?@!!"**sDJ.?@zz%n""2::q1zz%""2::q1 &r0   F)allr   cdromTc                    t         j                  j                  |       } t         j                  j                  |       s?t         j                  j	                  |       } t         j                  j                  |       s?| j                         S r)   )r6   r   abspathismountdirnamer   )r   s    r.   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sT    77??4(Dggood+wwt, ggood+::<r0   )r8   disk_partitionsr   r   ri  r
   r6   r   r   rf  rg  rh  statOSErrorr   r   errnoEIOEPERMEACCES__file__r   r5   )	rG   rm  rJ   diskr!  rt  mountr-   mountss	   `        r.   test_disk_partitionsz!TestDiskAPIs.test_disk_partitions  s   
	2 ##.# 	%D7dii/ww~~dkk28D82 77>>$//28D82;;$$;	% ##-#**t4 	ADt
AGGDOO, 77>>$//:@D@:	A"	  !* ++5
|| LL 
 

 	eV$1  %%CII4J  yyell(CC D&
s$   8G20-I%2	I";)I*-II"z/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                      fd}t        j                  d      }|J d        ||       t        j                  d      } j                  t        |      t        t	        |                   |D ]  }|sJ |        |||           y )Nc                    j                  | d   | j                         j                  | d   | j                         j                  | d   | j                         j                  | d   | j                         t
        st        sǉj                  | d   | j                         j                  | d   | j                         t        r^j                  | d   | j                         j                  | d   | j                         j                  | d	   | j                         n%t        rj                  | d   | j                         | j                  D ]  }t        | |      dk\  rJ |         y )
Nr   rd   rk   rf         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   )rG  r   rG   s     r.   rm  z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntuple  s/   RUBMM2RUBNN3RUBMM2RUBNN3v  A5  A6$$RUB,@,@A$$RUB,A,AB$$RUBLL9$$RUBLL9

 2r4(A-1r1-2r0   Fperdiskzno disks on this system?T)r8   disk_io_countersr?   rn   rA   rG   rm  retr1   s   `   r.   test_disk_io_countersz"TestDiskAPIs.test_disk_io_counters  s    	2" %%e4: ::S%%d3S3s3x=1 	#COO3S"	#r0   c                    t        j                  di       5 }| j                  t        j                  d             | j                  t        j                  d      i        |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz#psutil._psplatform.disk_io_countersr   Fr  T)r#   rB   rU   r8   r  r?   rW   rG   rZ   s     r.   test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disks  sl     ZZ1
 	f55eDEV44TBBG88O8	 	 	   AA<<BN)r   r   r   r   r   r   r   r\  r   r`  rc  r  r   r6   r   r   r   r8   r  r  r  r   r0   r.   rR  rR  W  s    X__T*(l,JK% L%< X__\#45. 6.
 >%@ X__7bggnn%677= X__42622446H#	#8r0   rR  c                       e Zd Z ej                  e d      d        Z ej                  e d      d        Zd Zd Z	d Z
 ej                  exs exs e d      d        Zy	)
TestNetAPIsrB  c                      fd}t        j                  d      } ||       t        j                  d      } j                  |g        |D ]4  } j                  |        j	                  |t
                |||          6 y )Nc                 V   j                  | d   | j                         j                  | d   | j                         j                  | d   | j                         j                  | d   | j                         j                  | d   | j
                         j                  | d   | j                         j                  | d   | j                         j                  | d   | 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   rd   rk   rf   r  r  r   r  )	r?   
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrl  s    r.   rm  z6TestNetAPIs.test_net_io_counters.<locals>.check_ntuple  ss   RUBMM2RUBMM2RUBOO4RUBOO4RUBHH-RUBII.RUBII.RUBJJ/==A%)r)%==A%)r)%??a'++'??a'++'88q=$"$=99>%2%>99>%2%>::?&B&?r0   FpernicT)r8   net_io_countersr   r   r   r   r  s   `   r.   test_net_io_countersz TestNetAPIs.test_net_io_counters  sy    	'$ $$E2S$$D1C$ 	#COOC !!#s+S"	#r0   c                    t        j                  di       5 }| j                  t        j                  d             | j                  t        j                  d      i        |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz"psutil._psplatform.net_io_countersr   Fr  T)r#   rB   rU   r8   r  r?   rW   r  s     r.   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics  sl     ZZ0r
 	f44EBCV334@"E88O8	 	 	r  c           
      	   t        j                         }|sJ |       t        j                         }t        t        j
                  t        j                  t         j                  g      }|j                         D ]:  \  }}| j                  |t               | j                  t        t        |            t        |             |D ]  }| j                  |j                  t               | j                  |j                  t               | j                  |j                   t        t#        d       f       | j                  |j$                  t        t#        d       f       | j'                  |j                  |       t(        r0t*        s*| j                  |j                  t,        j.                         ||   j0                  r4|j                  t        j
                  k(  r[t	        j                  |j                        }t3        j4                  |      5  |j7                  |j                  df       d d d        n|j                  t        j                  k(  rt	        j8                  |j                  dt        j                  t        j:                  dt        j<                        d   }|\  }	}
}}}t	        j                  |	|
|      }t3        j4                  |      5  |j7                  |       d d d        |j                  |j                   |j$                  |j>                  fD ]9  }||j                  t        j                  k7  s$tA        ||j                         ; |j$                  r| jC                  |j>                         |j>                  s| jC                  |j$                          = tD        stF        stH        r@tK        t        d      r/| j                  t         j                  t        j                         y y tL        r/| j                  t         j                  t        jN                         y tP        r!| j                  t         j                  d       y y # 1 sw Y   {xY w# 1 sw Y   xY w)Nr   AF_LINKrb   ))r8   net_if_addrsnet_if_statsrA   socketAF_INETAF_INET6r  itemsr   r   r?   rn   familyr   addressnetmaskr   	broadcastr5   r   r   r"   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr!   rU   r   r   r   r{   r   	AF_PACKETr   )rG   nics	nic_statsfamiliesnicaddrsaddrsrR   afsocktypeproto	canonnamesaips                  r.   test_net_if_addrszTestNetAPIs.test_net_if_addrs  s6   ""$Tt'')	 HI**, /	6JC!!#s+SU_c%j9 ,6%%dkk37%%dllC8%%dllS$t*4EF%%dnnsDJ6GHdkk84t))$++t||DS>&& {{fnn4"MM$++6'//2 6FFDLL!#456 67%11 LL"OO".."--    >B:HeY"MM"h>'//2 'FF2J' LLLLNNHH	 ?B ~  ;;&//9-b$++>? >>%%dhh/XX%%dnn5Y,6/	6b %5vy)  @ *V^^V-=-=>V^^R0 M6 6' 's   Q'Q4'Q14Q>c                 l   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                  |j                  d       n| j                  |j                  d       d d d        y # 1 sw Y   y xY w)	Nem1z06:3d:29)r  rb   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)	r
   r8   r  r#   rB   r  rW   r?   r  )rG   r  rZ   r  s       r.    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytes\  s     6>>:tT4HIC<=CZZ-C
 	D&&(/2D88O8  /BC  /BC	D 	D 	Ds   A(B**B3c                    t        j                         }|sJ |       t         j                  t         j                  t         j                  f}|j                         D ]  \  }}| j                  |t               |\  }}}}}	| j                  |t               | j                  ||       | j                  ||       | j                  |d       | j                  |d       | j                  |	t                y r   )r8   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   r5   rV   )
rG   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r.   test_net_if_statszTestNetAPIs.test_net_if_statsn  s    ""$Tt""""%%

  ::< 	.KD%!!$,.3+D&%e!!$-MM&,/MM&,/##E1-##C+!!%-	.r0   zLINUX or BSD or MACOS specificc                     t        j                  dt        t        j                  d            5 }t        j                         }| j                  |i        |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil._psutil_posix.net_if_mturO   r3   )	r#   rB   rw  rx  ENODEVr8   r  r?   rW   )rG   rZ   r  s      r.   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  sd    
 ZZ-b1
 	 %%'CS"%88O8	 	 	s   5A//A8N)r   r   r   r   r   r   r  r  r  r  r  r   r   r   r  r   r0   r.   r  r    s    X__,,o># ?#8 X__,,o> ?C1JD$.$ X__"c"U#%Er0   r  c                   
   e Zd Z ej                  e d      d        Z ej                  e d      d        Z ej                  e d       ej                  e	 d      d               Z
 ej                  e d      d        Zy)TestSensorsAPIsrB  c                    t        j                         }|j                         D ]  \  }}| j                  |t               |D ]  }| j                  |j
                  t               |j                  | j                  |j                  d       |j                  | j                  |j                  d       |j                  | j                  |j                  d         y r   )
r8   sensors_temperaturesr  r   r   labelrE  rV   highcritical)rG   tempsr   entriesentrys        r.   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures  s    ++-"[[] 		?MD'!!$,  ?%%ekk37==,++EMM1=::)++EJJ:>>-++ENNA>?		?r0   c                 b   ddgi}t        j                  d|      5 }t        j                  d      d   d   }|j                  sJ | j                  |j                  d       | j                  |j                  d	       | j                  |j                  d
       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#   rB   r8   r  rW   r?   rE  r  r  )rG   drZ   r  s       r.   #test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneit  s    567ZZ5A
 	4//4@LQOE88O8U]]E2UZZ/U^^U3	4 	4 	4s   A?B%%B.z
no batteryc                    t        j                         }| j                  |j                  d       | j	                  |j                  d       |j
                  t         j                  t         j                  fvr| j                  |j
                  d       n8|j
                  t         j                  k(  r| j                  |j                         | j                  |j                  t               y )Nr   r   )r8   sensors_batteryrV   r   r  secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr   power_pluggedr   r   )rG   r  s     r.   test_sensors_batteryz$TestSensorsAPIs.test_sensors_battery  s     $$&Q/S[[#.<<%%'' 
 
 ##CLL!4||v::: 1 12c//6r0   c                 Z   t        j                         }|j                         D ]  \  }}| j                  |t               |D ]d  }| j                  |j
                  t               | j                  |j                  t        t        f       | j                  |j                  d       f  y r   )
r8   sensors_fansr  r   r   r  rE  r   r   rV   )rG   fansr   r  r  s        r.   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s    ""$!ZZ\ 	:MD'!!$,  :%%ekk37%%emmc4[A''q9:	:r0   N)r   r   r   r   r   r   r  r  r   r   r  r   r  r   r0   r.   r  r    s    X__11?C? D? X__11?C	4 D	4 X__,,o>X___l37 4 ?7 X__))?;: <:r0   r  __main__)run_from_name)=__doc__r  r   rx  r6   r   r  rV  r~   r  r   rx   r   r8   r   r   r   r   r   r   r	   r
   r   r   psutil._compatr   r   r   psutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r   r   r   rR  r  r  r   psutil.tests.runnerr  r|  r   r0   r.   <module>r     s       	      
               ,  ! #   ' ' $ % ' , , ) 1 ! %  ' ' *   )R>n R>jV>> V>r$"^ $"N/. /DT> Tn]. ]@3:n 3:l z1( r0   