
    ɧd                        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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.  G d$ d%e)          Z/ G d& d'e)          Z0 G d( d)e)          Z1 G d* d+e)          Z2 G d, d-e)          Z3 G d. d/e)          Z4 G d0 d1e)          Z5e6d2k    rdd3l7m8Z8  e8e9           dS dS )4zTests for system APIS.    N)AIX)BSD)FREEBSD)LINUX)MACOS)NETBSD)OPENBSD)POSIX)SUNOS)WINDOWS)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)PYPY)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)retry_on_failure)unittestc                       e Zd Zd Zd Z ej        eoed          d             Z	 ej        eoed          d             Z
d Zd ZdS )	TestProcessAPIsc                 h   |                      t          j                    d t          j                    D                        |                                 }|                      |j        d t          j                    D                        t          j        |j                  }|                                 |	                                 | 
                    |j        d t          j                    D                        t          j        dt          j        t          j                                        5  |                     t          t          j                              g            d d d            n# 1 swxY w Y   t          j        dt          j        t          j                                        5  |                     t          j                  5  t          t          j                               d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                     g | ]	}|j         
S  pid.0xs     8lib/python3.11/site-packages/psutil/tests/test_system.py
<listcomp>z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>@   s    #I#I#IaAE#I#I#I    c                     g | ]	}|j         
S r(   r)   r+   s     r.   r/   z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>B   s    !G!G!GA!%!G!G!Gr0   c                     g | ]	}|j         
S r(   r)   r+   s     r.   r/   z5TestProcessAPIs.test_process_iter.<locals>.<listcomp>F   s    $J$J$JqQU$J$J$Jr0   zpsutil.Processside_effect)assertInosgetpidpsutilprocess_iterspawn_testprocr*   ProcesskillwaitassertNotInr!   patchNoSuchProcessassertEquallistAccessDeniedassertRaisesselfsprocps      r.   test_process_iterz!TestProcessAPIs.test_process_iter?   s   bikk#I#I63F3H3H#I#I#IJJJ##%%ei!G!G1D1F1F!G!G!GHHHN59%%		$J$JF4G4I4I$J$J$JKKKZ($*$8$E$EG G G 	> 	>T&"5"7"788"===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> Z($*$7	$D$DF F F 	, 	,""6#677 , ,V(**+++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sH   =5E>>FF H'"!HH'H	H'H	H''H+.H+c                    t          j        dg          D ]=}|                     t          |j                                                  dg           >|                     t                    5  t          t          j        dg                     d d d            n# 1 swxY w Y   t          j	        dt          j
        dd                    5 }t          j        ddg          D ]C}|                     |j        d                    |                     |j        d         d           D|j        sJ 	 d d d            n# 1 swxY w Y   t          j	        dt          j
        dd                    5 }t                      }t          j        ddg|	          D ]D}|                     |j        d         |           |                     |j        d         d           E|j        sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr*   )attrsfooz$psutil._psplatform.Process.cpu_timesr    r3   	cpu_times)rK   ad_value)r8   r9   rA   rB   infokeysrD   
ValueErrorr!   r?   rC   assertIsNoneassertGreaterEqualcalledobjectassertIs)rF   rH   mflags       r.   test_prcess_iter_w_attrsz(TestProcessAPIs.test_prcess_iter_w_attrsP   s   $E7333 	; 	;AT!&++--005'::::z** 	5 	5$E7333444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5Z>$*$72$>$>@ @ @ 	CD({/CDDD : :!!!&"5666''uq99998OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Z>$*$72$>$>@ @ @ 	CD88D( +.? ? ? : :af[14888''uq99998OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s8   /$BB#&B#A%EE	E	9A5G<<H H z-spawn_testproc() unreliable on PYPY + WINDOWSc                     fd}g                                   }                                  }                                  }d |||fD             }                     t          t          j        |d                                t
          t          j        |d           t          j                    }t          j        |d|          \  }}                     t          j                    |z
  d	                                |g                                 t          |          d
                                g            |D ]%}	 
                    t          |	d                     &t          d           fd            }
|                                  |
||          \  }}                     |j        d |D                        t           r9                     |                                j        t&          j                    n-                     |                                j        d                                |j        g           |D ]%}	 
                    t          |	d                     &t          d           fd            }
|                                 |                                  |
||          \  }}                     t+                    t+          |j        |j        |j        g                     |D ]%}	                     t          |	d                     &d S )Nc                 <                         | j                   d S N)appendr*   )rH   pidss    r.   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callbackg   s    KKr0   c                 @    g | ]}t          j        |j                  S r(   r8   r;   r*   r+   s     r.   r/   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>n   $    III1&&IIIr0   )timeout   )r`   g{Gz?re   r`   g      ?   
returncode   c                     t          j        | d|          \  }}                    t          |          d                               t          |          d           ||fS )NQ?rg   rf      r8   
wait_procsrA   lenprocsr`   gonealiverF   s       r.   testz-TestProcessAPIs.test_wait_procs.<locals>.test{   g     +E45=? ? ?KD%SYY***SZZ+++;r0   c                     g | ]	}|j         
S r(   r)   r+   s     r.   r/   z3TestProcessAPIs.test_wait_procs.<locals>.<listcomp>   s    "7"7"7Q15"7"7"7r0   c                     t          j        | d|          \  }}                    t          |          d                               t          |          d           ||fS )Nrl   rg   rh   r   rn   rq   s       r.   ru   z-TestProcessAPIs.test_wait_procs.<locals>.test   rv   r0   )r:   rD   rR   r8   ro   	TypeErrortime
assertLessrA   rp   assertFalsehasattrr"   	terminater5   r*   r
   popri   signalSIGTERMset
assertTrue)rF   r`   sproc1sproc2sproc3rr   trs   rt   rH   ru   r_   s   `          @r.   test_wait_procszTestProcessAPIs.test_wait_procsd   sR   	 	 	 	 	 $$&&$$&&$$&&II0HIII*f&7KKK)V%6JJJIKK'thOOOe	a---r"""UQ'''r""" 	7 	7AWQ556666	"			 	 	 	 
		 	d5(++efj"7"7$"7"7"7888 	7TXXZZ2V^ODDDDTXXZZ2A666
|,,, 	7 	7AWQ556666	"			 	 	 	 
		 	d5(++eTCVZ(L$M$MNNN 	6 	6AOOGA|445555	6 	6r0   c                     |                                  }|                                  }|                                  }d |||fD             }|D ]}|                                 t          j        |          \  }}d S )Nc                 @    g | ]}t          j        |j                  S r(   rb   r+   s     r.   r/   z>TestProcessAPIs.test_wait_procs_no_timeout.<locals>.<listcomp>   rc   r0   )r:   r~   r8   ro   )rF   r   r   r   rr   rH   rs   rt   s           r.   test_wait_procs_no_timeoutz*TestProcessAPIs.test_wait_procs_no_timeout   s     $$&&$$&&$$&&II0HIII 	 	AKKMMMM'..eeer0   c                 $   |                                  }|                     t          j        |j                             t          j        |j                  }|                                 |                                 |                     t          j        |j                             |                     t          j        d                     | 	                    t          j        d          dt          j
                    v            d S )Nrd   r   )r:   r   r8   
pid_existsr*   r;   r<   r=   r|   rA   r_   rE   s      r.   test_pid_existszTestProcessAPIs.test_pid_exists   s    ##%%)%)44555N59%%		*5955666*2..///*1--qFKMM/ABBBBBr0   c                    t          j                    }|D ]g}	 t          j        |          sJ # t          $ rA t	          j        d           |t          j                    v r|                     |           Y dw xY wt          t          |          dz   t          |          dz             }|D ]+}| 	                    t          j        |          |           ,d S )Ng?i  ip  msg)
r8   r_   r   AssertionErrorrz   sleepfailrangemaxr|   )rF   r_   r*   s      r.   test_pid_exists_2z!TestProcessAPIs.test_pid_exists_2   s    {}} 	# 	#C#(------! # # # 
2&+--' #IIcNNN# SYY%s4yy4'788 	> 	>CV.s33====	> 	>s   0AA;:A;N)__name__
__module____qualname__rI   rZ   r#   skipIfr   r   r   r   r   r   r(   r0   r.   r%   r%   =   s        , , ,"  ( X_T%gDF F56 56F F56n X_T%gDF F/ /F F/C C C> > > > >r0   r%   c                   t    e Zd Zd Z ej        eo ej                     d          d             Z	d Z
d ZdS )TestMiscAPIsc                     t          j                    }|                     |t                     |                     |d           |                     |t          j                               d S Nr   )r8   	boot_timeassertIsInstancefloatassertGreaterr{   rz   )rF   bts     r.   test_boot_timezTestMiscAPIs.test_boot_time   s\    b%(((2q!!!DIKK(((((r0   unreliable on CIc                    t          j                    }|                     |g            |D ]#}|j        s
J |            |                     |j        t
                     |                     |j        t
          t          d           f           |j        /|                     |j        t
          t          d           f           |j         |j         |j	        dk    s
J |            t          j
                            |j	                   t          st          r|                     |j                   
t          j        |j                   %d S )N        )r8   usersassertNotEqualnamer   strterminaltypehoststarteddatetimefromtimestampr   r	   rS   r*   r;   )rF   r   users      r.   
test_userszTestMiscAPIs.test_users   s:   E2&&& 	) 	)D9""d"""!!$)S111!!$-#tDzz1BCCCy D%%di#tDzz1BCCCMMII<#%++t+++++DL999 )' )!!$(++++tx((((	) 	)r0   c                     t           j        }t          t           _        	 t          j                     |t           _        d S # |t           _        w xY wr]   )sysstdoutr   r8   ru   )rF   r   s     r.   	test_testzTestMiscAPIs.test_test   s>    
	 KMMMCJJJCJs   A   Ac                 2   g d}|D ]2}|                      t          t          |          t          |           3t          j        dk    rt          j        sJ t          j        rJ |                    d           dt          j
                                        v r%t          j        sJ |                    d           ndt          j
                                        v rt          j        sJ |                     t          j        t          j        t          j        g                    d          d	           |                    d
           |                    d           |                    d           |                    d           ndt          j
                                        v s dt          j
                                        v r$t          j        sJ |                    d           nudt          j
                                        v r#t          j        sJ |                    d           n1t          j        sJ t          j        rJ |                    d           |D ]-}|                     t          t          |          d|           .d S )N)	r
   r   r   r   r   r	   r   r   r   r   posixr
   linuxr   bsdTrf   r   r   r	   r   sunossolarisr   darwinr   r   F)r   getattrr8   boolr6   r   r
   r   remover   platformlowerr   r   rA   r   r	   r   countr   r   rW   )rF   namesr   s      r.   test_os_constantszTestMiscAPIs.test_os_constants   s|   + + + 	I 	ID!!'&$"7"74!HHHH7g 	$<~%%%LL!!!#,,,... &|###W%%%%#,,,... &z!!!  &.&."(-"116taA A AU###Y'''Y'''X&&&&CL..000 &!3!3!5!55&|###W%%%%S\//111 &|###W%%%>!!!|###LL###  	B 	BDMM'&$//DMAAAA	B 	Br0   N)r   r   r   r   r#   r   r   r8   r   r   r   r   r(   r0   r.   r   r      s        ) ) ) X_Z6$68JKK) ) LK)$     #B #B #B #B #Br0   r   c                       e Zd Zd Zd ZdS )TestMemoryAPIsc                 D   t          j                    }|j        dk    s
J |            |j        dk    s
J |            d|j        cxk    rdk    sn J |            |j        dk    s
J |            |j        dk    s
J |            |j        D ]}t          ||          }|dk    r"| 	                    |t          t          f           |dk    rR|dk    s|                     |d|d           ||j        k    r&|                     |d|j        d|d	|d           d S )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r8   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr   r   )rF   memr   values       r.   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memory  s   #%%y1}!!c!!!}q %%#%%%CK++++3++++++++x!|  S   x1}!!c!!!K 		@ 		@DC&&Ey  :%%ec4[999w @z =IItttUUU;<<<39$ @II!%syyy$$$? @ @ @		@ 		@r0   c                    t          j                    }|                     |j        d           |j        dk    s
J |            |j        dk    s
J |            |j        dk    r|j        dk    s
J |            n|j        dk    s
J |            d|j        cxk    rdk    sn J |            |j        dk    s
J |            |j	        dk    s
J |            d S )N)r   r   r   r   sinsoutr   r   )
r8   swap_memoryrA   r   r   r   r   r   r   r   )rF   r   s     r.   test_swap_memoryzTestMemoryAPIs.test_swap_memory   s    ""KL	N 	N 	N yA~""s"""x1}!!c!!!9q= 	&8a<$$$$$$8q=%%#%%%CK++++3++++++++w!|  S   x1}!!c!!!!!r0   N)r   r   r   r   r   r(   r0   r.   r   r     s5        @ @ @$" " " " "r0   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z ej        e d          d             Z ej        e d          d             ZdS )TestCpuAPIsc                    t          j                    }|                     |           |                     |t	          t          j        d                               |                     |d           t          j        	                    d          rSt          d          5 }|                                }d d d            n# 1 swxY w Y   d|vrt          j        d          d S d S )NTpercpurf   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r8   	cpu_countassertIsNotNonerA   rp   rN   rT   r6   pathexistsopenreadr#   SkipTest)rF   logicalfdcpuinfo_datas       r.   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logical3  s"   "$$W%%%#f&6d&C&C&C"D"DEEE+++7>>/** 	Oo&& )"!wwyy) ) ) ) ) ) ) ) ) ) ) ) ) ) )L0 O'(MNNN		O 	OO Os   #CCCc                 V   t          j                    }t          j        d          }||                     d          t          r6t	          j                    d d         dk    r|                     |           d S |                     |d           |                     ||           d S )NFr   zcpu_count_cores() is Nonerm   )   rf   rf   )r8   r   skipTestr   r   getwindowsversionrS   rT   )rF   r   coress      r.   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_cores?  s    "$$ /// 	=-- ;<<< 	4s,..rr2f< 	4e$$$$$##E1---##GU33333r0   c                    dD ]}t          j        d|          5 }|                     t          j                               |j        sJ 	 d d d            n# 1 swxY w Y   t          j        d|          5 }|                     t          j        d                     |j        sJ 	 d d d            n# 1 swxY w Y   d S )N)rd   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r!   r?   rS   r8   r   rU   )rF   valrX   s      r.   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_noneJ  sW     	  	 CB),. . .  12!!&"2"4"4555x                              @),. . .  12!!&"25"A"A"ABBBx                             	  	 s#   0AA	A	92B88B<	?B<	c                 (   d}t          j                    }t          |           |D ]8}|                     |t                     |                     |d           ||z  }9|                     |t          |                     t          |           d S )Nr   r   )r8   rN   sumr   r   rT   rA   r   )rF   r   timescp_times       r.   test_cpu_timeszTestCpuAPIs.test_cpu_timesV  s     ""E


 	 	G!!'5111##GS111WEEE

+++E




r0   c                 R   t          t          j                              }t          j                    t          z   }t          j                    |k     r?t          t          j                              }||k    rd S t          j                    |k     ?|                     d           d S )Nztime remained the same)r   r8   rN   rz   r   r   )rF   t1stop_att2s       r.   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increasess  s    !##$$)++.ikkG# 	V%''((BBw  ikkG# 	 			*+++++r0   c                    t          j        d          D ]}d}t          |           |D ]8}|                     |t                     |                     |d           ||z  }9|                     |t          |                     t          |           |                     t          t          j        d          d                   t          t          j        d                               d S )NTr   r   r   F)	r8   rN   r   r   r   rT   rA   r   rp   )rF   r   r   r   s       r.   test_per_cpu_timeszTestCpuAPIs.test_per_cpu_times}  s    %T222 	 	EEJJJ  ! !%%gu555''555 UCJJ///JJJJV-T:::1=>>V-U;;;<<	> 	> 	> 	> 	>r0   c                    t          j        d          }t          j                    t          z   }	 t          j                    |k    r|                     d          S t          j        d          }t          ||          D ];\  }}t          j        |          t          j        |          }}||z
  }|dk    r d S <)NTr   re   g?)r8   rN   rz   r   r   zip_cpu_busy_time)rF   tot1	giveup_attot2r   r  
differences          r.   test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2  s     t,,,IKK.0		y{{i' ,yy+++#4000DdD//  B.r22F4I"4M4MB"W
% FF	r0   c                    t          j                    }t          j        d          }|                    d t          | D                       }|j        D ]6}|                     t          ||          t          ||          d           7d S )NTr   c                 ,    g | ]}t          |          S r(   )r   )r,   nums     r.   r/   z9TestCpuAPIs.test_cpu_times_comparison.<locals>.<listcomp>  s    #F#F#FCHH#F#F#Fr0   rf   delta)r8   rN   _maker  r   assertAlmostEqualr   )rF   baseper_cpusummed_valuesfields        r.   test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparison  s     !!"$///

#F#FW#F#F#FGG\ 	N 	NE""e$$gmU&C&C1 # N N N N	N 	Nr0   c                    	 |                      |t                     |                     |d           |                     |d           |                     |dt          j                    z             d S # t          $ rA}t          d|dt          j	        |          dt          j	        |                    d }~ww xY w)Nr   g       g      Y@
z
last=z
new=)
r   r   rT   assertIsNotassertLessEqualr8   r   r   pprintpformat)rF   r   last_retnew_reterrs        r.   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s    	I!!'5111##GS111Wd+++  %&2B2D2D*DEEEEE 	I 	I 	I .V^H----v~g/F/F/F"H I I I	Is   A1A5 5
C ?<B;;C c                 @   t          j        d          }t          d          D ]0}t          j        d           }|                     |||           |}1|                     t
                    5  t          j        d           d d d            d S # 1 swxY w Y   d S NMbP?)intervalr   rd   )r8   cpu_percentr   r#  rD   rR   )rF   lastr-   news       r.   test_cpu_percentzTestCpuAPIs.test_cpu_percent  s    !5111s 	 	A$d333C""3c222DDz** 	, 	,++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   0BBBc                    t          j        dd          }|                     t          |          t          j                               t          d          D ]6}t          j        d d          }|D ]}|                     |||           |}7|                     t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nr&  Tr'  r   r   rd   )	r8   r(  rA   rp   r   r   r#  rD   rR   rF   r)  r-   r*  r   s        r.   test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percent  s%   !5>>>TF$4$6$6777s 	 	A$d4@@@C ; ;&&wc::::DDz** 	9 	948888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   +CCCc                    t          j        d          }t          d          D ]Y}t          j        d           }|D ]}|                     |||           |                     t	          |          ||           |}Z|                     t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S r%  )r8   cpu_times_percentr   r#  r   rD   rR   r.  s        r.   test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percent  s   '777s 	 	A*D999C ; ;&&wc::::""3s88T3777DDz** 	2 	2$b1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   B<<C C c                 x   t          j        dd          }|                     t          |          t          j                               t          d          D ]_}t          j        d d          }|D ]B}|D ]}|                     |||           |                     t          |          ||           C|}`d S )Nr&  Tr-  r   )r8   r1  rA   rp   r   r   r#  r   )rF   r)  r-   r*  cpur   s         r.   test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percent  s    'tDDDTF$4$6$6777s 	 	A*DFFFC < <" ? ?G**7D#>>>>&&s3xxs;;;;DD	 	r0   c                 6   t          j        d           d t          j        d          D             }t          j        d|          5  t          j        d          D ]}|D ]}|                     |d d            	 d d d            d S # 1 swxY w Y   d S )NTr   c           
          g | ]@}|                     d  t          t          |j                            D                       AS )c                     g | ]}d S )r   r(   r+   s     r.   r/   zNTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>.<listcomp>  s    @@@Qq@@@r0   )r  r   rp   r   r+   s     r.   r/   zCTestCpuAPIs.test_per_cpu_times_percent_negative.<locals>.<listcomp>  sS     > > > gg@@%AI*?*?@@@AA > > >r0   zpsutil.cpu_timesr   )r8   r1  rN   r!   r?   r#  )rF   
zero_timesr4  r   s       r.   #test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative  s'    ----> >%/t<<<> > >
Z*DDD 	@ 	@/t<<< @ @" @ @G**7D$????@@	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   5BBBc                    t          j                    }|                     |j        d           |j        D ]I}t	          ||          }|                     |d           t          s|dv r|                     |d           Jd S )N)ctx_switches
interruptssoft_interruptssyscallsr   )r<  r=  )r8   	cpu_statsrA   r   r   rT   r   r   )rF   infosr   r   s       r.   test_cpu_statszTestCpuAPIs.test_cpu_stats  s     ""MI	K 	K 	K M 	- 	-DE4((E##E1--- -4#AA -""5!,,,	- 	-r0   znot suportedc                 H     fd}t          j        d          }t          r|s                     d          |s
J |             |t          j        d          g           t          r6                     t          |          t          j                               d S d S )Nc                 N   | D ]}                     |j        d           |j        dk    r                     |j        |j                   |j        D ]P}t          ||          }                    |t          t          t          f           
                    |d           Qd S )N)currentminr   r   r   )rA   r   r   r  rE  r   r   r   r   r   rT   )lsntr   r   rF   s       r.   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_ls  s     6 6  -FGGG6S= =((RV<<<J 6 6D#B--E))%#tU1CDDD++E155556	6 6r0   Tr   zreturns empty list on FreeBSDF)r8   cpu_freqr   r   r   rA   rp   r   )rF   rI  rG  s   `  r.   test_cpu_freqzTestCpuAPIs.test_cpu_freq  s    	6 	6 	6 	6 	6 _D))) 	A2 	A-- ?@@@2&////0111 	:SWWf&6&8&899999	: 	:r0   not supportedc                     t          j                    }|                     t          |          d           |D ]3}|                     |t
                     |                     |d           4d S )Nrh   r   )r8   
getloadavgrA   rp   r   r   rT   )rF   loadavgloads      r.   test_getloadavgzTestCpuAPIs.test_getloadavg  st    #%%Wq))) 	/ 	/D!!$...##D#....	/ 	/r0   N)r   r   r   r   r   r   r   r  r  r  r  r#  r+  r/  r2  r5  r:  rB  r#   r   r   rK  r   rQ  r(   r0   r.   r   r   1  s\       
O 
O 
O	4 	4 	4
  
  
 
 
 
:, , ,> > >B  N N NI I I, , ,	9 	9 	9	2 	2 	2	 	 	@ @ @- - - X_%~66: : 76:* X_'99/ / :9/ / /r0   r   c                   H   e Zd Z ej        eoe d          d             Z ej        e d          d             Z	d Z
d Z ej        eoej                            d           d           ej        eo ej                     d	          d
                         Zd ZdS )TestDiskAPIszunreliable on PYPY32 + 32BITc                    t          j        t          j                              }|                     |j        d           |j        dk    s
J |            |j        dk    s
J |            |j        dk    s
J |            |j        |j        k    s
J |            |j        |j        k    s
J |            d|j	        cxk    rdk    sn J |j	                    t          t          d          rt          j        t          j                              }d}|                     |j        |j                   |                     |j        |j        |           |                     |j        |j        |           |                                 }|                     t                    5  t          j        |           d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   r   r   
disk_usagei  P r  )r8   rU  r6   getcwdrA   r   r   r   r   r   r}   shutilr  
get_testfnrD   r   )rF   usageshutil_usage	tolerancefnames        r.   test_disk_usagezTestDiskAPIs.test_disk_usage#  s   !")++..(LMMM{Q%%%%%zA~$$u$$$zA~$$u$$${UZ'.....{UZ'.....EM7777S77777%-7776<(( 	4!,RY[[99L'IU[,*<===""5:|/@)2 # 4 4 4""5:|/@)2 # 4 4 4
 !!011 	% 	%e$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   %GGGznot an ASCII fsc                     |                      t                    5  t          j        t                     d d d            d S # 1 swxY w Y   d S r]   )rD   UnicodeEncodeErrorr8   rU  r   rF   s    r.   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode>  s     122 	. 	.n---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AA	Ac                 .    t          j        d           d S )N   .)r8   rU  r`  s    r.   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytesD  s    $r0   c                 >     fd}t          j        d          }                     ||           |D ]} ||           t          r
d|j        v rt
          s/t          j                            |j	                  s
J |            n|j	         t          j                            |j
                  s
J |            |j        s
J |            t          j        d          }                     ||           t          j        d          D ]} ||           t          s|j
        r	 t          j        |j
                   t          j                            |j
                  s
J |            d# t          $ rR}t          r!t          r|j        t           j        k    rY d }~|j        t           j        t           j        fvr Y d }~d }~ww xY wd } |t(                    }d t          j        d          D             }                     ||           d S )	Nc                 ^                        | j        t                                          | j        t                                          | j        t                                          | j        t                                          | j        t          t          d           f                                | j	        t          t          d           f           | j        "t          s                    | j        d           | j	                            | j	        d           d S d S r   )r   devicer   
mountpointfstypeoptsmaxfiler   r   maxpathr   r   rH  rF   s    r.   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntupleH  s   !!")S111!!"-555!!")S111!!"'3///!!"*sDJJ.?@@@!!"*sDJJ.?@@@z 2n 2""2:q111z 2""2:q111112 2r0   F)allr   cdromTc                 "   t           j                            |           } t           j                            |           s>t           j                            |           } t           j                            |           >|                                 S r]   )r6   r   abspathismountdirnamer   )r   s    r.   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_pointy  sd    7??4((Dgood++ -wt,, good++ -::<<r0   c                 N    g | ]"}|j         	|j                                         #S r(   )rh  r   r+   s     r.   r/   z5TestDiskAPIs.test_disk_partitions.<locals>.<listcomp>  sC     D D D167lD!,$$&& D D Dr0   )r8   disk_partitionsr   r   rj  r
   r6   r   r   rg  rh  ri  statOSErrorr   r   errnoEIOEPERMEACCES__file__r5   )rF   rn  rG  diskr"  ru  mountmountss   `       r.   test_disk_partitionsz!TestDiskAPIs.test_disk_partitionsG  s   
	2 
	2 
	2 
	2 
	2 #...### 	% 	%DL 7di/  w~~dk2288D8888 7>>$/2288D888;$$$$$$ #---###*t444 	A 	ADL At A
AGDO,,, 7>>$/::@@D@@@@    % !% !CI4J !  yel(CC     	  	  	  ! **D D(T222D D DeV$$$$$s   -E55
G?#G' GGz/proc/diskstatsz3/proc/diskstats not available on this linux versionr   c                 R     fd}t          j        d          }|
J d             ||           t          j        d          }                     t          |          t          t	          |                               |D ]}|s
J |             |||                     d S )Nc                 &                        | d         | j                                        | d         | j                                        | d         | j                                        | d         | j                   t
          st          sՉ                     | d         | j                                        | d         | j                   t          rd                     | d         | j
                                        | d         | j                                        | d	         | j                   n(t          r!                     | d         | j                   | j        D ] }t          | |          dk    s
J |             !d S )
Nr   rf   rm   rh         r         )rA   
read_countwrite_count
read_byteswrite_bytesr	   r   	read_time
write_timer   read_merged_countwrite_merged_count	busy_timer   r   r   )rH  r   rF   s     r.   rn  z8TestDiskAPIs.test_disk_io_counters.<locals>.check_ntuple  s   RUBM222RUBN333RUBM222RUBN333 :v :  A555  A666 :$$RUB,@AAA$$RUB,ABBB$$RUBL9999 :$$RUBL999
 2 2r4((A-11r11112 2r0   Fperdiskzno disks on this system?T)r8   disk_io_countersrA   rp   r   rF   rn  retkeys   `   r.   test_disk_io_countersz"TestDiskAPIs.test_disk_io_counters  s    
	2 	2 	2 	2 	2" %e444:: ::::S%d333S3s3xx==111 	# 	#COOOOOLS""""	# 	#r0   c                    t          j        di           5 }|                     t          j        d                     |                     t          j        d          i            |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz#psutil._psplatform.disk_io_countersr   Fr  T)r!   r?   rS   r8   r  rA   rU   rF   rX   s     r.   test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disks  s     Z=%') ) ) 	,-f5eDDDEEEV4TBBBBGGG8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AB  BBN)r   r   r   r#   r   r   r   r]  r   ra  rd  r  r   r6   r   r   r   r8   r  r  r  r(   r0   r.   rS  rS  !  s        X_T*(l,JKK% % LK%4 X_\#455. . 65.
     ;% ;% ;%z X_UD27>>2C#D#DDJL LX_ZA(?(?(A(A$A') )# #) )L L#8    r0   rS  c                       e Zd Z ej        e d          d             Z ej        e d          d             Zd Zd Z	d Z
 ej        epepe d          d             Zd	S )
TestNetAPIsrL  c                 4     fd}t          j        d          } ||           t          j        d          }                     |g            |D ]C}                     |                                |t
                      |||                    Dd S )Nc                 h                        | d         | j                                        | d         | j                                        | d         | j                                        | d         | j                                        | d         | j                                        | d         | j                                        | d         | 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 |             d S )	Nr   rf   rm   rh   r  r  r   r  )	rA   
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrm  s    r.   rn  z6TestNetAPIs.test_net_io_counters.<locals>.check_ntuple  s   RUBM222RUBM222RUBO444RUBO444RUBH---RUBI...RUBI...RUBJ///=A%))r)))=A%))r)))?a'+++++?a'+++++8q=$$"$$$9>%%2%%%9>%%2%%%:?&&B&&&&&r0   FpernicT)r8   net_io_countersr   r   r   r   r  s   `   r.   test_net_io_countersz TestNetAPIs.test_net_io_counters  s    	' 	' 	' 	' 	'$ $E222S$D111C$$$ 	# 	#COOC   !!#s+++LS""""	# 	#r0   c                    t          j        di           5 }|                     t          j        d                     |                     t          j        d          i            |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz"psutil._psplatform.net_io_countersr   Fr  T)r!   r?   rS   r8   r  rA   rU   r  s     r.   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics  s     Z<%') ) ) 	,-f4EBBBCCCV34@@@"EEE8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c           
         t          j                    }|s
J |            t          j                    }t          t          j        t          j        t           j        g          }|                                D ]"\  }}| 	                    |t                     |                     t          t          |                    t          |                     |D ]}| 	                    |j        t                     | 	                    |j        t                     | 	                    |j        t          t#          d           f           | 	                    |j        t          t#          d           f           |                     |j        |           t(          j        dk    r,t,          s%| 	                    |j        t.          j                   ||         j        r-|j        t          j        k    rbt	          j        |j                  }t5          j        |          5  |                    |j        df           d d d            n# 1 swxY w Y   n|j        t          j        k    rt	          j        |j        dt          j        t          j        dt          j                  d         }|\  }	}
}}}t	          j        |	|
|          }t5          j        |          5  |                    |           d d d            n# 1 swxY w Y   |j        |j        |j        |j         fD ].}|*|j        t          j        k    rtC          ||j                   /|j        r| "                    |j                    |j         r| "                    |j                   $tF          stH          stJ          rCtM          t          d          r,|                     t           j        t          j                   d S d S tN          r,|                     t           j        t          j(                   d S tR          r"|                     t           j        d           d S d S )N)rh   r  r   AF_LINKrd   )*r8   net_if_addrsnet_if_statsr   socketAF_INETAF_INET6r  itemsr   r   rA   rp   familyr   addressnetmaskr   	broadcastr5   r   version_infor   r    IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr   rS   r   r   r   r}   r   	AF_PACKETr   )rF   nics	nic_statsfamiliesnicaddrsaddrsrP   afsocktypeproto	canonnamesaips                  r.   test_net_if_addrszTestNetAPIs.test_net_if_addrs  sU   "$$T'))	 HII**,, &	6 &	6JC!!#s+++SU__c%jj999 #6 #6%%dk3777%%dlC888%%dlS$t**4EFFF%%dnsDJJ6GHHHdk8444#v- Ed E))$+t|DDDS>& ' {fn4 '"M$+66'/22 6 6FFDL!#45556 6 6 6 6 6 6 6 6 6 6 6 6 6 67 '%1 L!V_".63D F  FFG I >B:HeY"M"h>>'/22 ' 'FF2JJJ' ' ' ' ' ' ' ' ' ' ' ' ' ' '<t~8% ? ?B ?  ;&/9 ?-b$+>>>> 6%%dh////X 6%%dn555G#6J  	1% 	15 	1vy)) A  @@@@@A A 	1V^V-=>>>>> 	1V^R00000	1 	1s$   IIIK??LL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        d           n|                     |j        d           d d d            d S # 1 swxY w Y   d S )	Nem1z06:3d:29)r  rd   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!   r?   r  rU   rA   r  )rF   r  rX   r  s       r.    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytes  s      	>6>:tT4HICC<=CZ9%(* * * 	D-.&((/2D8OOO D  /BCCCC  /BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A'B))B-0B-c                    t          j                    }|s
J |            t           j        t           j        t           j        f}|                                D ]\  }}|                     |t                     |\  }}}}|                     |t                     | 	                    ||           | 	                    ||           | 
                    |d           | 
                    |d           d S r   )r8   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   r5   rT   )	rF   r  all_duplexesr   statsr  duplexspeedmtus	            r.   test_net_if_statszTestNetAPIs.test_net_if_stats$  s    "$$T..13  ::<< 	, 	,KD%!!$,,,',$D&%!!$---MM&,///MM&,///##E1---##C++++	, 	,r0   zLINUX or BSD or MACOS specificc                     t          j        dt          t          j        d                    5 }t          j                    }|                     |i            |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil._psutil_posix.net_if_mturM   r3   )	r!   r?   ry  rz  ENODEVr8   r  rA   rU   )rF   rX   r  s      r.   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev3  s     Z9$+EL"$=$=? ? ? 	BC%''CS"%%%8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   3A00A47A4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>>  ?>:1 :1 :1xD D D", , , X_%/3/%057 7 7 7  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dS )TestSensorsAPIsrL  c                    t          j                    }|                                D ]\  }}|                     |t                     |D ]}|                     |j        t                     |j        |                     |j        d           |j        |                     |j        d           |j	        |                     |j	        d           d S r   )
r8   sensors_temperaturesr  r   r   labelrE  rT   highcritical)rF   tempsr   entriesentrys        r.   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures@  s    +--"[[]] 		? 		?MD'!!$,,,  ? ?%%ek3777= >++EM1===: ;++EJ:::> ?++ENA>>>?		? 		?r0   c                 d   ddgi}t          j        d|          5 }t          j        d          d         d         }|j        sJ |                     |j        d           |                     |j        d	           |                     |j        d
           d d d            d S # 1 swxY w Y   d S )Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)
fahrenheitr   g     ^@g     a@g     c@)	r!   r?   r8   r  rU   rA   rE  r  r  )rF   drX   r  s       r.   #test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneitN  s   567ZA%&( ( ( 	4+,/! ! !!+--.0E8OOOU]E222UZ///U^U333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   A<B%%B),B)z
no batteryc                    t          j                    }|                     |j        d           |                     |j        d           |j        t           j        t           j        fvr|                     |j        d           n/|j        t           j        k    r|                     |j	                   | 
                    |j	        t                     d S )Nr   r   )r8   sensors_batteryrT   r   r  secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr   power_pluggedr   r   )rF   r  s     r.   test_sensors_batteryz$TestSensorsAPIs.test_sensors_batteryZ  s     $&&Q///S[#...< 9 & ; = = 	3##CL!4444|v:: 3 1222c/66666r0   c                 d   t          j                    }|                                D ]\  }}|                     |t                     |D ]d}|                     |j        t                     |                     |j        t          t          f           | 	                    |j        d           ed S r   )
r8   sensors_fansr  r   r   r  rE  r   r   rT   )rF   fansr   r  r  s        r.   test_sensors_fansz!TestSensorsAPIs.test_sensors_fansh  s    "$$!ZZ\\ 	: 	:MD'!!$,,,  : :%%ek3777%%emc4[AAA''q999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C? ? DC? X_11?CC	4 	4 DC	4 X_,,o>>X__l33
7 
7 43 ?>
7 X_))?;;: : <;: : :r0   r  __main__)run_from_name):__doc__r  r   rz  r6   r  rW  r   r  r   rz   r8   r   r   r   r   r   r   r	   r
   r   r   psutil._compatr   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   rS  r  r  r   psutil.tests.runnerr   r~  r(   r0   r.   <module>r     sc           				     



                                                               , , , , , ,       ! ! ! ! ! ! # # # # # #             ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % ' ' ' ' ' ' , , , , , , , , , , , , ) ) ) ) ) ) 1 1 1 1 1 1 ! ! ! ! ! !       ' ' ' ' ' ' ' ' ' ' ' ' * * * * * *             ) ) ) ) ) ) ! ! ! ! ! !B> B> B> B> B>n B> B> B>JGB GB GB GB GB> GB GB GBT"" "" "" "" ""^ "" "" ""Jm/ m/ m/ m/ m/. m/ m/ m/`J J J J J> J J JZM M M M M. M M M`2: 2: 2: 2: 2:n 2: 2: 2:j z 111111M( r0   