
    g                        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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/ dd$lm0Z0 dd%lm1Z1 dd&lm2Z2  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-      Z8 G d3 d4e-      Z9 G d5 d6e-      Z:y)7z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)	QEMU_USER)UNICODE_SUFFIX)PsutilTestCase)check_net_address)enum)mock)pytest)retry_on_failurec                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestProcessIterc                 ,   t        j                         t        j                         D cg c]  }|j                   c}v sJ | j                         }|j                  t        j                         D cg c]  }|j                   c}v sJ t        j                  |j                        }|j                          |j                          |j                  t        j                         D cg c]  }|j                   c}vsJ y c c}w c c}w c c}w N)	osgetpidpsutilprocess_iterpidspawn_testprocProcesskillwait)selfxsprocps       M/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_system.pytest_pid_presencez!TestProcessIter.test_pid_presenceB   s    yy{f.A.A.CD.Cquu.CDDDD##%yyF,?,?,AB,AqQUU,ABBBBNN599%		yy0C0C0E F0E10E FFFF EB !Gs   D4D-Dc                     t        j                         D cg c]  }| }}t        |d       t        t        |      d       k(  sJ y c c}w )Nc                     | j                   S r*   r/   r5   s    r8   <lambda>z4TestProcessIter.test_no_duplicates.<locals>.<lambda>M   s        )keyc                     | j                   S r*   r<   r=   s    r8   r>   z4TestProcessIter.test_no_duplicates.<locals>.<lambda>N   s    155r?   )r-   r.   sortedset)r4   r5   lss      r8   test_no_duplicatesz"TestProcessIter.test_no_duplicatesK   sO    ,,./.Aa./bo.&G3
 
 	
 
 0s   	Ac                    t        t        j                                t        d      D ]  }t	        j
                  dt        j                  t        j                                     5  t        t        j                  dg            g k(  sJ 	 d d d        t        j                  j                           y # 1 sw Y   *xY wN   zpsutil.Process.as_dictside_effect	cpu_timesattrs)
listr-   r.   ranger$   patchNoSuchProcessr+   r,   cache_clearr4   r5   s     r8   test_emulate_nspz TestProcessIter.test_emulate_nspQ   s    V  "#qA("00= F//{mDEKKK	
 ++-  s   (&B88C	c                    t        t        j                                t        d      D ]  }t	        j
                  dt        j                  t        j                                     5  t        j                  t        j                        5  t        t        j                  dg             d d d        d d d        t        j                  j                           y # 1 sw Y   2xY w# 1 sw Y   6xY wrG   )rN   r-   r.   rO   r$   rP   AccessDeniedr+   r,   r%   raisesrR   rS   s     r8   test_emulate_access_deniedz*TestProcessIter.test_emulate_access_denied[   s    V  "#qA("//		< ]]6#6#67,,K=AB 8	 ++- 
 87	 s$   ($C*!C-C*C'#C**C3	c                    t        j                  dg      D ]+  }t        |j                  j	                               dgk(  r+J  t        j                  dg      D ]+  }t        |j                  j	                               dgk(  r+J  t        j                  t              5  t        t        j                  dg             d d d        t        j                  dt        j                  dd            5 }t        j                  ddg      D ]'  }|j                  d   J |j                  d   dk\  r'J  |j                  sJ 	 d d d        t        j                  dt        j                  dd            5 }t               }t        j                  ddg|	      D ])  }|j                  d   |u sJ |j                  d   dk\  r)J  |j                  sJ 	 d d d        y # 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr/   rL   fooz$psutil._psplatform.Process.cpu_timesr    rI   rK   )rM   ad_value)r-   r.   rN   infokeysr%   rW   
ValueErrorr$   rP   rV   calledobject)r4   r7   mflags       r8   
test_attrszTestProcessIter.test_attrsf   s   $$E73A&5'111 4 $$E73A&5'111 4]]:&$$E734 'ZZ2++Ar2
 (({/CDvvk*222vve}))) E 88O8
 ZZ2++Ar2
 8D((k*T vvk*d222vve})))	
 88O8
 
 '&
 

 
s1   $!G%8?G28G2=AG>
G>%G/2G;>Hc                     t        t        j                                t        j                  sJ t        j                  j	                          t        j                  rJ y r*   )rN   r-   r.   _pmaprR   r4   s    r8   test_cache_clearz TestProcessIter.test_cache_clear   s@    V  "#|||'')<<<r?   N)	__name__
__module____qualname__r9   rE   rT   rX   rd   rh    r?   r8   r(   r(   A   s!    G
.	.8 r?   r(   c                       e Zd Zej                  j                  exr ed      d        Zej                  j                  exr ed      d        Z	d Z
d Zy)TestProcessAPIsz-spawn_testproc() unreliable on PYPY + WINDOWSreasonc                    fd}g | j                         }| j                         }| j                         }|||fD cg c]!  }t        j                  |j                        # }}t	        j
                  t              5  t        j                  |d       d d d        t	        j
                  t              5  t        j                  |d       d d d        t        j                         }t        j                  |d|      \  }}	t        j                         |z
  dk  sJ |g k(  sJ t        |	      d	k(  sJ g k(  sJ |	D ]  }
t        |
d
      sJ  t        d      d        }|j                           |||      \  }}	|j                  |D cg c]  }|j                   c}v sJ t        r.|j                         j                   t"        j$                   k(  s!J |j                         j                   dk(  sJ |j                  gk(  sJ |	D ]  }
t        |
d
      sJ  t        d      d        }|j                          |j                           |||      \  }}	t'              t'        |j                  |j                  |j                  g      k(  sJ |D ]  }
t        |
d
      rJ  y c c}w # 1 sw Y   "xY w# 1 sw Y   xY wc c}w )Nc                 <    j                  | j                         y r*   )appendr/   )r7   pidss    r8   callbackz1TestProcessAPIs.test_wait_procs.<locals>.callback   s    KKr?   )timeout   )ru   g{Gz?rw   ru   g      ?   
returncode   c                     t        j                  | d|      \  }}t        |      dk(  sJ t        |      dk(  sJ ||fS )NQ?ry   rx   rH   r-   
wait_procslenprocsru   gonealives       r8   test_1z/TestProcessAPIs.test_wait_procs.<locals>.test_1   I     ++thKD% t9>!>u:?"?;r?   c                     t        j                  | d|      \  }}t        |      dk(  sJ t        |      dk(  sJ ||fS )Nr~   ry   rz   r   r   r   s       r8   test_2z/TestProcessAPIs.test_wait_procs.<locals>.test_2   r   r?   )r0   r-   r1   r/   r%   rW   r_   r   	TypeErrortimer   hasattrr&   	terminater
   popr{   signalSIGTERMrC   )r4   ru   sproc1sproc2sproc3r5   r   tr   r   r7   r   r   rt   s                @r8   test_wait_procszTestProcessAPIs.test_wait_procs   s   
	 $$&$$&$$&170HI0H1&0HI]]:&eR0 ']]9%ea0 &IIK''thOeyy{Q$$$rzz5zQrzzAq,///  
"		 
	 	UH-ezzT2TaeeT222288:((V^^O;;;88:((A---

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

3&++-///	0s   A776B0/B0N)ri   rj   rk   r%   markskipifr   r   r   r   r   r   rl   r?   r8   rn   rn      sq    [[>  9,	9,v [[>  !	!<.r?   rn   c                       e Zd Zd Zej
                  j                  exr  ej                          d      d        Z
d Zd Zy)TestMiscAPIsc                     t        j                         }t        |t              sJ |dkD  sJ |t	        j                         k  sJ y Nr   )r-   	boot_time
isinstancefloatr   )r4   bts     r8   test_boot_timezTestMiscAPIs.test_boot_time   s?    "e$$$AvvDIIKr?   unreliable on CIro   c           	         t        j                         }|g k7  sJ |D ]-  }| j                  |      5  |j                  sJ t	        |j                  t
              sJ t	        |j                  t
        t        d       f      sJ |j                  't	        |j                  t
        t        d       f      sJ |j                   |j                   |j                  dkD  sJ t        j                  j                  |j                         t        st        r|j                  !J t        j                  |j                         d d d        0 y # 1 sw Y   <xY w)N)user        )r-   userssubTestnamer   strterminaltypehoststarteddatetimefromtimestampr   r	   r/   r1   )r4   r   r   s      r8   
test_userszTestMiscAPIs.test_users   s    {{D4(yy y!$))S111!$--#tDz1BCCC99(%dii#tDz1BCCC		||c)))!!//=g88+++NN488, )( ((s   DEE	c                     t         j                  }t        t         _        	 t        j                          |t         _        y # |t         _        w xY wr*   )sysstdoutr   r-   test)r4   r   s     r8   	test_testzTestMiscAPIs.test_test  s/    
	 KKMCJCJs   A Ac                    g d}|D ]'  }t        t        t        |      t              r"J |        t        j
                  dk(  rt        j                  sJ t        j                  rJ |j                  d       dt        j                  j                         v r%t        j                  sJ |j                  d       ndt        j                  j                         v rt        j                  sJ t        j                  t        j                  t        j                   gj#                  d      dk(  sJ |j                  d	       |j                  d
       |j                  d       |j                  d       ndt        j                  j                         v s dt        j                  j                         v r$t        j$                  sJ |j                  d       nydt        j                  j                         v rYt        j&                  sJ |j                  d       n5t        j                  sJ t        j                  rJ |j                  d       |D ]  }t        t        |      sJ |        y )N)	r
   r   r   r   r   r	   r   r   r   posixr
   linuxr   bsdTrx   r   r   r	   r   sunossolarisr   darwinr   r   )r   getattrr-   boolr+   r   r
   r   remover   platformlowerr   r   r   r	   r   countr   r   )r4   namesr   s      r8   test_os_constantszTestMiscAPIs.test_os_constants  s   

 Dgfd3T:@D@:  77g<<<~~%%LL!#,,,,..||#|W%#,,,,..zz!zFLL   U#Y'Y'X&3<<--// 2 2 44||#|W%S\\//11||#|W%>>!>||##LL# Dvt,2d2, r?   N)ri   rj   rk   r   r%   r   r   r   r-   r   r   r   r   rl   r?   r8   r   r      sO      [[)<6<<>)2D  --& /3r?   r   c                       e Zd Zd Zd Zy)TestMemoryAPIsc                 H   t        j                         }|j                  dkD  sJ |       |j                  dkD  sJ |       d|j                  cxk  rdk  sJ |        J |       |j
                  dkD  sJ |       |j                  dk\  sJ |       |j                  D ]  }t        ||      }|dk7  rt        |t        t        f      sJ |dk7  s2|dk\  s| j                  |d|d      ||j                  kD  s^| j                  |d|j                  d|d	|d       y )
Nr   d   percenttotalz < 0 ()z > total (total=z, =)r-   virtual_memoryr   	availabler   usedfree_fieldsr   r   intr   fail)r4   memr   values       r8   test_virtual_memoryz"TestMemoryAPIs.test_virtual_memoryH  s   ##%yy1}!c!}}}q %#% CKK&3&++&++&xx!| S |xx1}!c!}KKDC&Ey !%#t555wz))T5$ABB399$))D%9   r?   c                    t        j                         }|j                  dk(  sJ |j                  dk\  sJ |       |j                  dk\  sJ |       |j                  dkD  r|j
                  dkD  sJ |       |j
                  dk(  sJ |       d|j                  cxk  rdk  sJ |        J |       |j                  dk\  sJ |       |j                  dk\  sJ |       y )N)r   r   r   r   sinsoutr   r   )	r-   swap_memoryr   r   r   r   r   r   r   )r4   r   s     r8   test_swap_memoryzTestMemoryAPIs.test_swap_memory\  s      "{{ 
 
 	
 
 yyA~"s"~xx1}!c!}99q=88a<$$<88q=%#%=CKK&3&++&++&ww!| S |xx1}!c!}r?   N)ri   rj   rk   r   r   rl   r?   r8   r   r   G  s    ("r?   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  exr ed	      d
        Zd Zd Zd Zd Zd Zd Zd Ze
j                  j                  exr  ej2                         dk(  d	      e
j                  j                  e d	      d               Ze
j                  j                  e d	      d        Zy)TestCpuAPIsc                 \   t        j                         }|J |t        t        j                  d            k(  sJ |dk\  sJ t        j
                  j                  d      r>t        d      5 }|j                         }d d d        dvrt        j                  d      y y # 1 sw Y   $xY w)NTpercpurx   z/proc/cpuinfozphysical idz#cpuinfo doesn't include physical id)r-   	cpu_countr   rK   r+   pathexistsopenreadr%   skip)r4   logicalfdcpuinfo_datas       r8   test_cpu_count_logicalz"TestCpuAPIs.test_cpu_count_logicalt  s    ""$"""#f..d;<<<<!||77>>/*o&"!wwy 'L0kk"GHH 1 +&&s   .B""B+c                     t        j                         }t        j                  d      }|t        j                  d      t        rt        j                         d d dk  r|J y |dk\  sJ ||k\  sJ y )NFr   zcpu_count_cores() is NonerH   )   rx   rx   )r-   r   r%   r   r   r   getwindowsversion)r4   r   coress      r8   test_cpu_count_coresz TestCpuAPIs.test_cpu_count_cores  ss    ""$  /=++9::s,,.r2f<= =A::e###r?   c                 Z   dD ]  }t        j                  d|      5 }t        j                         J |j                  sJ 	 d d d        t        j                  d|      5 }t        j                  d      J |j                  sJ 	 d d d         y # 1 sw Y   SxY w# 1 sw Y   xY w)N)rv   r   Nz$psutil._psplatform.cpu_count_logicalreturn_valuez"psutil._psplatform.cpu_count_coresFr   )r$   rP   r-   r   r`   )r4   valrb   s      r8   test_cpu_count_nonezTestCpuAPIs.test_cpu_count_none  s     C6S'')111xxx	
 43''6>>>xxx	  ! 
 s   %B"'B!B	!B*	c                     d}t        j                         }t        |       |D ]   }t        |t              sJ |dk\  sJ ||z  }" t        t        |t        |      z
        d      dk(  sJ t        |       y )Nr   r   r   )r-   rK   sumr   r   roundabsr   )r4   r   timescp_times       r8   test_cpu_timeszTestCpuAPIs.test_cpu_times  sx      "E
Ggu---c>!>WE  SU+,a0A555E
r?   c                 8   t        t        j                               }t        j                         t        z   }t        j                         |k  r;t        t        j                               }||kD  ry t        j                         |k  r;| j                  d      )Nztime remained the same)r   r-   rK   r   r   r   )r4   t1stop_att2s       r8   test_cpu_times_time_increasesz)TestCpuAPIs.test_cpu_times_time_increases  sr    !!#$))+.iikG#V%%'(BBw iikG# ii011r?   c           	         t        j                  d      D ]e  }d}t        |       |D ]   }t        |t              sJ |dk\  sJ ||z  }" t        t        |t        |      z
        d      dk(  sJ t        |       g t        t        j                  d      d         t        t        j                  d            k(  sJ y )NTr   r   r   r   F)	r-   rK   r   r   r   r  r  r   r   )r4   r  r   r  s       r8   test_per_cpu_timeszTestCpuAPIs.test_per_cpu_times  s    %%T2EEJ !'5111#~%~  ! USZ/0!4999J 3 6##4034E*9
 
 	
 
r?   c                 x   t        j                  d      }t        j                         t        z   }	 t        j                         |k\  r| j	                  d      S t        j                  d      }t        ||      D ];  \  }}t        j                  |      t        j                  |      }}||z
  }|dk\  s; y  )NTr   rw   g?)r-   rK   r   r   r   zip_cpu_busy_time)r4   tot1	giveup_attot2r  r	  
differences          r8   test_per_cpu_times_2z TestCpuAPIs.test_per_cpu_times_2  s     t,IIK.0	yy{i'yy++##40DdD/B..r2F4I4I"4MB"W
%	 *	 r?   zunreliable on OPENBSD + CIro   c           	         t        j                         }t        j                  d      }|j                  t        | D cg c]  }t	        |       c}      }|j
                  D ]G  }| j                  |||      5  t        t        ||      t        ||      z
        dk  sJ 	 d d d        I y c c}w # 1 sw Y   YxY w)NTr   )fieldbaseper_cpurx   )	r-   rK   _maker  r   r   r   r  r   )r4   r  r  numsummed_valuesr  s         r8   test_cpu_times_comparisonz%TestCpuAPIs.test_cpu_times_comparison  s     !""$/

W#FCH#FG\\EEgFe,w}e/LLM GF " $GFFs    B0<(B55B>	c                    	 t        |t              sJ |dk\  sJ |dt        j                         z  k  sJ y # t        $ r?}t	        d|dt        j                  |      dt        j                  |            d }~ww xY w)Nr   g      Y@
z
last=z
new=)r   r   r-   r   r   pprintpformat)r4   r   last_retnew_reterrs        r8   _test_cpu_percentzTestCpuAPIs._test_cpu_percent  s{    	gu---c>!>ef&6&6&88888 	 x0&..2IK 	s   58 	B :A;;B c                 .   t        j                  d      }t        d      D ]-  }t        j                  d       }| j                  |||       |}/ t	        j
                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wNMbP?)intervalr   rv   )r-   cpu_percentrO   r$  r%   rW   r_   )r4   last_news       r8   test_cpu_percentzTestCpuAPIs.test_cpu_percent  so    !!51sA$$d3C""3c2D  ]]:&+ '&&s   +BBc                    t        j                  dd      }t        |      t        j                         k(  sJ t	        d      D ]5  }t        j                  d d      }|D ]  }| j                  |||        |}7 t        j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nr'  Tr(  r   r   rv   )	r-   r)  r   r   rO   r$  r%   rW   r_   r4   r*  r+  r,  r   s        r8   test_per_cpu_percentz TestCpuAPIs.test_per_cpu_percent  s    !!5>4yF,,....sA$$d4@C&&wc: D	 
 ]]:&48 '&&s   B77C c                 t   t        j                  d      }t        d      D ]P  }t        j                  d       }|D ]  }| j                  |||        | j                  t	        |      ||       |}R t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wr&  )r-   cpu_times_percentrO   r$  r   r%   rW   r_   r0  s        r8   test_cpu_times_percentz"TestCpuAPIs.test_cpu_times_percent!  s    ''7sA**D9C&&wc: ""3s8T37D  ]]:&$$b1 '&&s   B..B7c                 B   t        j                  dd      }t        |      t        j                         k(  sJ t	        d      D ]X  }t        j                  d d      }|D ]8  }|D ]  }| j                  |||        | j                  t        |      ||       : |}Z y )Nr'  Tr/  r   )r-   r3  r   r   rO   r$  r   )r4   r*  r+  r,  cpur   s         r8   test_per_cpu_times_percentz&TestCpuAPIs.test_per_cpu_times_percent,  s    ''tD4yF,,....sA**DFC"G**7D#>  #&&s3xs;  D r?   c           
         t        j                  d       t        j                  d      D cg c]=  }|j                  t	        t        |j                              D cg c]  }d c}      ? }}t        j                  d|      5  t        j                  d      D ]  }|D ]  }| j                  |d d          	 d d d        y c c}w c c}w # 1 sw Y   y xY w)NTr   r   zpsutil.cpu_timesr   )
r-   r3  rK   r  rO   r   r   r$   rP   r$  )r4   r5   
zero_timesr6  r   s        r8   #test_per_cpu_times_percent_negativez/TestCpuAPIs.test_per_cpu_times_percent_negative7  s      - %%T2
2 GGc!))n 56 51Q 5672 	 
 ZZ*D//t<"G**7D$?  # = ED 7
 EDs#   0C	C
(	C
6C
CCc                     t        j                         }|j                  dk(  sJ |j                  D ](  }t        ||      }|dk\  sJ t        r|dv s"|dkD  r(J  y )N)ctx_switches
interruptssoft_interruptssyscallsr   >   r=  r<  )r-   	cpu_statsr   r   r   )r4   infosr   r   s       r8   test_cpu_statszTestCpuAPIs.test_cpu_statsC  sj      "}} !
 
 	
 
 MMDE4(EA::4#AAqy y "r?   arm64zskipped due to #1892not supportedc                    d }t        j                  d      }t        r|st        j                  d      |sJ |        |t        j                  d      g       t
        r#t        |      t        j                         k(  sJ y y )Nc                 
   | D ]~  }|j                   dk(  sJ |j                  dk7  r|j                  |j                  k  sJ |j                   D ]2  }t        ||      }t	        |t
        t        t        f      sJ |dk\  r2J   y )N)currentminr   r   r   )r   r   rG  r   r   r   r   r   )rD   ntr   r   s       r8   check_lsz+TestCpuAPIs.test_cpu_freq.<locals>.check_lsY  s}    zz%>>>>66S=::///JJD#B-E%ec4-?@@@ A:%: '	 r?   Tr   zreturns empty list on FreeBSDF)r-   cpu_freqr   r%   r   r   r   r   )r4   rJ  rD   s      r8   test_cpu_freqzTestCpuAPIs.test_cpu_freqT  sn    
	& __D)2++=>>2r&///01r7f..0000 r?   c                     t        j                         }t        |      dk(  sJ |D ]  }t        |t              sJ |dk\  rJ  y )Nrz   r   )r-   
getloadavgr   r   r   )r4   loadavgloads      r8   test_getloadavgzTestCpuAPIs.test_getloadavgm  sH    ##%7|q   DdE***3;; r?   N)ri   rj   rk   r   r   r   r  r
  r  r  r%   r   r   r   r	   r  r$  r-  r1  r4  r7  r:  rB  r   r   machiner   rL  r   rQ  rl   r?   r8   r   r   s  s   
I	$ 
:2
D [[w'C  	,	9	2	
@!" [[/"(""$/8N   [[L(A1 B1* [[N*?C Dr?   r   c                      e Zd Zej                  j                  exr e d      d        Zej                  j                  e	 d      d        Z
d Zd Zej                  j                  exr ej                  j!                  d       d	      ej                  j                  exr  ej&                          d
      d               Zd Zy)TestDiskAPIszunreliable on PYPY32 + 32BITro   c                    t        j                  t        j                               }|j                  dk(  sJ |j
                  dkD  sJ |       |j                  dkD  sJ |       |j                  dkD  sJ |       |j
                  |j                  kD  sJ |       |j
                  |j                  kD  sJ |       d|j                  cxk  rdk  sn J |j                         t        t        d      rt        j                  t        j                               }d}|j
                  |j
                  k(  sJ t        |j                  |j                  z
        |k  sJ t        s't        |j                  |j                  z
        |k  sJ | j                         }t        j                  t               5  t        j                  |       d d d        y # 1 sw Y   y xY w)N)r   r   r   r   r   r   
disk_usagei  P )r-   rV  r+   getcwdr   r   r   r   r   r   shutilr  r   
get_testfnr%   rW   r   )r4   usageshutil_usage	tolerancefnames        r8   test_disk_usagezTestDiskAPIs.test_disk_usagew  s{    !!"))+.}} DDDD{{Q%%zzA~$u$~zzA~$u$~{{UZZ'..'{{UZZ'..'EMM(S(7%--7(6<(!,,RYY[9L'I;;,"4"4444uzzL$5$556BBB5::(9(99:YFFF !]],-e$ .--s   4GGznot an ASCII fsc                     t        j                  t              5  t        j                  t
               d d d        y # 1 sw Y   y xY wr*   )r%   rW   UnicodeEncodeErrorr-   rV  r    rg   s    r8   test_disk_usage_unicodez$TestDiskAPIs.test_disk_usage_unicode  s+     ]]-.n- /..s	   =Ac                 .    t        j                  d       y )N   .)r-   rV  rg   s    r8   test_disk_usage_bytesz"TestDiskAPIs.test_disk_usage_bytes  s    $r?   c                 z   d }t        j                  d      }|sJ |D ]  } ||       t        rd|j                  v r t        s0t
        j                  j                  |j                        sJ |       |j                   t
        j                  j                  |j                        sJ |       |j                  rJ |        t        j                  d      }|sJ t        j                  d      D ]n  } ||       t        r|j                  s	 t        j                  |j                         t
        j                  j                  |j                        riJ |        d } |t&              }t        j                  d      D cg c](  }|j                  r|j                  j)                         * }}||v sJ y # t        $ rg}t        r)t        r#|j                  t        j                   k(  rY d }~|j                  t        j"                  t        j$                  hvr Y d }~9d }~ww xY wc c}w )Nc                     t        | j                  t              sJ t        | j                  t              sJ t        | j                  t              sJ t        | j
                  t              sJ y r*   )r   devicer   
mountpointfstypeoptsrI  s    r8   check_ntuplez7TestDiskAPIs.test_disk_partitions.<locals>.check_ntuple  sR    bii---bmmS111bii---bggs+++r?   F)allcdromTc                    t         j                  j                  |       } t         j                  j                  |       s?t         j                  j	                  |       } t         j                  j                  |       s?| j                         S r*   )r+   r   abspathismountdirnamer   )r   s    r8   find_mount_pointz;TestDiskAPIs.test_disk_partitions.<locals>.find_mount_point  sT    77??4(Dggood+wwt, ggood+::<r?   )r-   disk_partitionsr   rj  r
   r+   r   r   rg  rh  ri  statOSErrorr   r   errnoEIOEPERMEACCES__file__r   )	r4   rl  rD   diskr#  rs  mountr5   mountss	            r8   test_disk_partitionsz!TestDiskAPIs.test_disk_partitions  s   	, ##.	rD7dii/ww~~dkk28D82 77>>$//28D82;;$$;  ##-	r**t4Dt
AGGDOO, 77>>$//:@D@: 5"	  !* ++5
5|| LL 5 	 

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

r4(A-1r1- #r?   Fperdiskzno disks on this system?T)r-   disk_io_countersr   rC   r4   rl  retr@   s       r8   test_disk_io_countersz"TestDiskAPIs.test_disk_io_counters  s|    	2" %%e4: ::S%%d33x3s3x=(((COO3S" r?   c                     t        j                  di       5 }t        j                  d      J t        j                  d      i k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz#psutil._psplatform.disk_io_countersr   Fr  T)r$   rP   r-   r  r`   r4   rb   s     r8   test_disk_io_counters_no_disksz+TestDiskAPIs.test_disk_io_counters_no_disks  sc     ZZ1
**59AAA**48B>>>88O8
 
 
   AA$$A-N)ri   rj   rk   r%   r   r   r   r   r^  r   ra  rd  r  r   r+   r   r   r   r-   r  r  r  rl   r?   r8   rT  rT  v  s    [[X&D  %%4 [[H->?. @.
 8t [[7bggnn%677D   [[4262244=O  #	#8r?   rT  c                      e Zd Zej                  j                  e d      d        Zej                  j                  e d      d        Zej                  j                  e	d      d        Z
d Zej                  j                  e	d      d        Zej                  j                  exs exs e d	      d
        Zy)TestNetAPIsrD  ro   c                     d }t        j                  d      } ||       t        j                  d      }|g k7  sJ |D ]#  }|sJ t        |t              sJ  |||          % y )Nc                    | d   | j                   k(  sJ | d   | j                  k(  sJ | d   | j                  k(  sJ | d   | j                  k(  sJ | d   | j                  k(  sJ | d   | j
                  k(  sJ | d   | j                  k(  sJ | d   | j                  k(  sJ | j                   dk\  sJ |        | j                  dk\  sJ |        | j                  dk\  sJ |        | j                  dk\  sJ |        | j                  dk\  sJ |        | j
                  dk\  sJ |        | j                  dk\  sJ |        | j                  dk\  sJ |        y )	Nr   rx   rH   rz   r  r  r   r  )
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutrk  s    r8   rl  z6TestNetAPIs.test_net_io_counters.<locals>.check_ntuple  sb   a5BMM)))a5BMM)))a5BOO+++a5BOO+++a5BHH$$$a5BII%%%a5BII%%%a5BJJ&&&==A%)r)%==A%)r)%??a'++'??a'++'88q=$"$=99>%2%>99>%2%>::?&B&?r?   FpernicT)r-   net_io_countersr   r   r  s       r8   test_net_io_countersz TestNetAPIs.test_net_io_counters  sj    	'$ $$E2S$$D1byyCJ3c3'''S" r?   c                     t        j                  di       5 }t        j                  d      J t        j                  d      i k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz"psutil._psplatform.net_io_countersr   Fr  T)r$   rP   r-   r  r`   r  s     r8   test_net_io_counters_no_nicsz(TestNetAPIs.test_net_io_counters_no_nics#  sc     ZZ0r
))7???))6"<<<88O8
 
 
r  zQEMU user not supportedc           
      .   t        j                         }|sJ |       t        j                         }t        t        j
                  t        j                  t         j                  g      }|j                         D ]  \  }}t        |t              sJ t        t        |            t        |      k(  sJ |D ]  }t        |j                  t              sJ t        |j                  t              sJ t        |j                  t        t!        d       f      sJ t        |j"                  t        t!        d       f      sJ |j                  |v sJ t$        r,t&        s&t        |j                  t(        j*                        sJ ||   j,                  r4|j                  t        j
                  k(  r[t	        j                  |j                        }t/        j0                  |      5  |j3                  |j                  df       d d d        n|j                  t        j                  k(  rt	        j4                  |j                  dt        j                  t        j6                  dt        j8                        d   }|\  }	}
}}}t	        j                  |	|
|      }t/        j0                  |      5  |j3                  |       d d d        |j                  |j                  |j"                  |j:                  fD ]9  }||j                  t        j                  k7  s$t=        ||j                         ; |j"                  r|j:                  J |j:                  s|j"                  J   t>        st@        stB        r5tE        t        d      r$t         j                  t        j                  k(  sJ y y tF        r$t         j                  t        jH                  k(  sJ y tJ        rt         j                  dk(  sJ y y # 1 sw Y   @xY w# 1 sw Y   MxY w)Nr   AF_LINKrv   )&r-   net_if_addrsnet_if_statsrC   socketAF_INETAF_INET6r  itemsr   r   r   familyr   addressnetmaskr   	broadcastr   r   r#   IntEnumisup
contextlibclosingbindgetaddrinfoSOCK_STREAM
AI_PASSIVEptpr"   r   r   r   r   r   	AF_PACKETr   )r4   nics	nic_statsfamiliesnicaddrsaddrsr]   afsocktypeproto
_canonnamesaips                  r8   test_net_if_addrszTestNetAPIs.test_net_if_addrs.  s   ""$Tt'')	 HI**,JCc3'''s5z?c%j000!$++s333!$,,444!$,,d4j0ABBB!$..3T
2CDDD{{h...t%dkk4<<@@@S>&& {{fnn4"MM$++6'//2FFDLL!#45 327%11 LL"OO".."--    ?C;HeZ"MM"h>'//2FF2J 3 LLLLNNHH	B ~  ;;&//9-b$++> >>88+++XX>>111Y  'b %5vy)~~777 *>>V%5%5555>>R''' M 32 32s   $O=-P
=P
Pc                 >   t         rdt        j                  dd d d fg}ndg}t        j                  d|      5 }t        j
                         d   d   }|j                  sJ t         r|j                  dk(  sJ |j                  dk(  sJ d d d        y # 1 sw Y   y xY w)	Nem1z06:3d:29)r  rv   z06-3d-29NNNzpsutil._psplatform.net_if_addrsr   r   z06:3d:29:00:00:00z06-3d-29-00-00-00)r
   r-   r  r$   rP   r  r`   r  )r4   r  rb   r  s       r8    test_net_if_addrs_mac_null_bytesz,TestNetAPIs.test_net_if_addrs_mac_null_bytest  s     6>>:tT4HIC<=CZZ-C
&&(/2D88O8||'::::||'::::
 
 
s   ABBc                 |   t        j                         }|sJ |       t         j                  t         j                  t         j                  f}|j                         D ]]  \  }}t        |t              sJ |\  }}}}}	t        |t              sJ ||v sJ ||v sJ |dk\  sJ |dk\  sJ t        |	t              r]J  y r   )	r-   r  NIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNr  r   r   r   )
r4   r  all_duplexesr   statsr  duplexspeedmtuflagss
             r8   test_net_if_statszTestNetAPIs.test_net_if_stats  s    ""$Tt""""%%

  ::<KD%dC(((.3+D&%edD)))\)))\)))A::!8O8eS))) (r?   zLINUX or BSD or MACOS specificc                     t        j                  dt        t        j                  d            5 }t        j                         }|i k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil._psutil_posix.net_if_mtur[   rI   )r$   rP   rv  rw  ENODEVr-   r  r`   )r4   rb   r  s      r8   test_net_if_stats_enodevz$TestNetAPIs.test_net_if_stats_enodev  s[    
 ZZ-b1
 %%'C"9988O8
 
 
s   *A$$A-N)ri   rj   rk   r%   r   r   r   r  r  r   r  r  r  r   r   r   r  rl   r?   r8   r  r    s    [[//H# I#8 [[//H I [[	*CDC( EC(J;$ [[	*CD* E*$ [["c"U#,L  r?   r  c                   n   e Zd Zej                  j                  e d      d        Zej                  j                  e d      d        Zej                  j                  e	 d      ej                  j                  e
 d      d               Zej                  j                  e d      d        Zy)	TestSensorsAPIsrD  ro   c                 v   t        j                         }|j                         D ]  \  }}t        |t              sJ |D ]v  }t        |j
                  t              sJ |j                  |j                  dk\  sJ |j                  |j                  dk\  sJ |j                  f|j                  dk\  rvJ   y r   )	r-   sensors_temperaturesr  r   r   labelrG  highcritical)r4   tempsr   entriesentrys        r8   test_sensors_temperaturesz)TestSensorsAPIs.test_sensors_temperatures  s    ++-"[[]MD'dC((( !%++s333==, ==A---::) ::?*?>>- >>Q... ! +r?   c                 "   ddgi}t        j                  d|      5 }t        j                  d      d   d   }|j                  sJ |j
                  dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ 	 d d d        y # 1 sw Y   y xY w)Ncoretemp)r  g      I@g      N@g     Q@z'psutil._psplatform.sensors_temperaturesr   T)
fahrenheitr   g     ^@g     a@g     c@)r$   rP   r-   r  r`   rG  r  r  )r4   drb   r  s       r8   #test_sensors_temperatures_fahreneitz3TestSensorsAPIs.test_sensors_temperatures_fahreneit  s    567ZZ5A
//4@LQOE88O8==E)))::&&&>>U***
 
 
s   ABBz
no batteryc                 x   t        j                         }|j                  dk\  sJ |j                  dk  sJ |j                  t         j                  t         j
                  hvr|j                  dk\  s-J |j                  t         j
                  k(  r|j                  sJ t        |j                  t              sJ y )Nr   r   )	r-   sensors_batteryr   secsleftPOWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDpower_pluggedr   r   )r4   r  s     r8   test_sensors_batteryz$TestSensorsAPIs.test_sensors_battery  s     $$&{{a{{c!!!<<%%'' 
 
 <<1$$$\\V888$$$$#++T222r?   c                 ,   t        j                         }|j                         D ]m  \  }}t        |t              sJ |D ]Q  }t        |j
                  t              sJ t        |j                  t        t        f      sJ |j                  dk\  rQJ  o y r   )	r-   sensors_fansr  r   r   r  rG  r   r   )r4   fansr   r  r  s        r8   test_sensors_fansz!TestSensorsAPIs.test_sensors_fans  s|    ""$!ZZ\MD'dC((( !%++s333!%--#t===}}))) ! *r?   N)ri   rj   rk   r%   r   r   r   r  r  r   r   r  r   r  rl   r?   r8   r  r    s    [[44_M/ N/ [[44_M	+ N	+ [[//H[[K=3 > I3 [[,,_E* F*r?   r  );__doc__r  r   rw  r+   r   r  rX  r   r  r   r   r-   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(   rn   r   r   r   rT  r  r  rl   r?   r8   <module>r     s       	      
              ,  ! #   ' ' $ % ' , , ) 1 ! %  " ' ' *    )E n E Pc.n c.LU3> U3p)"^ )"X@. @FL> L^_. _D2*n 2*r?   