
    gC                     ~   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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 erddlZddlZddlm Z  d&dZ!d Z"d Z#d Z$d Z%d Z&ejN                  jQ                  e d       G d  d!e             Z)ejN                  jQ                  e d       G d" d#e             Z*ejN                  jQ                  e d       G d$ d%e             Z+y)'zPOSIX specific tests.    N)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)AARCH64)HAS_NET_IO_COUNTERS)
PYTHON_EXE)	QEMU_USER)PsutilTestCase)mock)pytest)retry_on_failure)sh)skip_on_access_denied)spawn_testproc)	terminate)which)getpagesizec                 ,   dg}t         r|j                  d       ||j                  dt        |      g       n/t        st
        r|j                  d       n|j                  d       t        r| j                  dd      } |j                  d	| g       t        |      }t         r|j                         n|j                         d
d }g }|D ]/  }|j                         }	 t        |      }|j                  |       1 ||S |d   S # t        $ r Y 'w xY w)zwWrapper for calling the ps command with a little bit of cross-platform
    support for a narrow range of features.
    psz--no-headersNz-pz-Aaxstartstimez-o   r   )r   appendextendstrr	   r   replacer   
splitlinesstripint
ValueError)fmtpidcmdoutput
all_outputlines         L/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_posix.pyr   r   /   s   
 &C

>"


D#c(#$	#

4

4kk'7+JJc{WF$)V v/@/@/B12/FFJzz|	t9D 	$  {!}  		s    D	DDc                 |    d}t         rd}t        ||       j                         }t        rd|d   v sJ |d   S |d   S )Ncommandcommz
/bin/qemu-r   r   )r	   r   splitr   )r'   fieldr.   s      r,   ps_namer2   f   sL    En""$Gwqz)))qz1:    c                     d}t         st        rd}t        ||       }t        j                  dd|      }|j                         S )Nr.   argsz\(python.*?\)$ )r   r	   r   resubr#   )r'   r1   outs      r,   ps_argsr:   q   s;    E
e
UC.C
&&"B
,C99;r3   c                 .    d}t         rd}t        ||       S )Nrssrssizer   r   r'   r1   s     r,   ps_rssr@   {   s    E
eS>r3   c                 .    d}t         rd}t        ||       S )Nvszvsizer>   r?   s     r,   ps_vszrD      s    E
eS>r3   c                    	 t        d| z        j                         }|j                  d      d   }|j                         }t        |d         dz  }t        |d         dz  }t        |d         dz  }t        |d	   j                  d
d            }||||fS # t        $ r6}dt        |      j	                         v rt        j                  d       d }~ww xY w)Nzdf -k %szdevice busyzdf returned EBUSY
r               %r6   )r   r#   RuntimeErrorr    lowerr   skipr0   r$   floatr!   )	devicer9   errr+   fields	sys_totalsys_usedsys_freesys_percents	            r,   dfrW      s    f$%++-
 99T?1DZZ\FF1I%I6!9~$H6!9~$Hq	))#r23Kx;77  CHNN,,++122s   B 	C"1CCz
POSIX onlyreasonc                      e Zd ZdZed        Zed        Zd Zd Zd Z	d Z
d Z e        e       d	               Z e        e       d
               Zd Zd Zd Zd Zej*                  j-                  exs ed      d        Zd Z e       d        Zej*                  j-                  ed      ej*                  j-                  ed      d               Zy)TestProcesszBCompare psutil results against 'ps' command line utility (mainly).c                 f    t        t        ddgt        j                        j                  | _        y )Nz-Ez-O)stdin)r   r   
subprocessPIPEr'   clss    r,   
setUpClasszTestProcess.setUpClass   s&     t$JOO

# 	r3   c                 .    t        | j                         y N)r   r'   r`   s    r,   tearDownClasszTestProcess.tearDownClass   s    #''r3   c                     t        d| j                        }t        j                  | j                        j	                         }||k(  sJ y )Nppid)r   r'   psutilProcessrg   )selfppid_psppid_psutils      r,   	test_ppidzTestProcess.test_ppid   s;    VTXX&nnTXX.335+%%%r3   c                     t        d| j                        }t        j                  | j                        j	                         j
                  }||k(  sJ y )Nuid)r   r'   rh   ri   uidsreal)rj   uid_ps
uid_psutils      r,   test_uidzTestProcess.test_uid   sA    E488$^^DHH-22499
###r3   c                     t        d| j                        }t        j                  | j                        j	                         j
                  }||k(  sJ y )Nrgid)r   r'   rh   ri   gidsrq   )rj   gid_ps
gid_psutils      r,   test_gidzTestProcess.test_gid   sA    FDHH%^^DHH-22499
###r3   c                     t        d| j                        }t        j                  | j                        j	                         }||k(  sJ y )Nuser)r   r'   rh   ri   username)rj   username_psusername_psutils      r,   test_usernamezTestProcess.test_username   s;    * ..2;;=o---r3   c                    t        j                         }t        j                  dt              5 }|j                         t        |j                         j                        k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzpsutil.pwd.getpwuidside_effect)
rh   ri   r   patchKeyErrorr}   r    rp   rq   called)rj   pfuns      r,   test_username_no_resolutionz'TestProcess.test_username_no_resolution   s]     NNZZ-8D::<3qvvx}}#5555::: EDDs   AA??Bc                     t        j                  d       t        | j                        }t	        j
                  | j                        j                         d   dz  }||k(  sJ y )N皙?r   rG   )timesleepr@   r'   rh   ri   memory_info)rj   rss_ps
rss_psutils      r,   test_rss_memoryzTestProcess.test_rss_memory   P    
 	

3!^^DHH-99;A>E
###r3   c                     t        j                  d       t        | j                        }t	        j
                  | j                        j                         d   dz  }||k(  sJ y )Nr   r   rG   )r   r   rD   r'   rh   ri   r   )rj   vsz_ps
vsz_psutils      r,   test_vsz_memoryzTestProcess.test_vsz_memory   r   r3   c                    t        | j                        }t        j                  j	                  |      j                         }t        j                  | j                        j                         j                         }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }||k(  sJ y )Nz\d.\dr6   z\d)r2   r'   ospathbasenamerM   rh   ri   namer7   r8   )rj   name_psname_psutils      r,   	test_namezTestProcess.test_name   s    $((#''""7+113nnTXX.335;;= &&2w/ffXr;7&&G,ffUB4+%%%r3   c                    d}g d}t        j                  d|      5  t        j                  d|      5  t        j                         }|j	                         dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nlong-program-name)long-program-name-extendedfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdliner   )r   r   rh   ri   r   )rj   r   cmdliner   s       r,   test_name_longzTestProcess.test_name_long   st     #>ZZ9M47 NN$vvx#????	 NM  NMs"   A>*A2!A>2A;	7A>>Bc                 4   d}t        j                  d|      5  t        j                  dt        j                  dd            5  t        j                         }|j                         dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNr   r   r   r   r   r6   r   )r   r   rh   AccessDeniedri   r   rj   r   r   s      r,   test_name_long_cmdline_ad_excz)TestProcess.test_name_long_cmdline_ad_exc   s}     #ZZ9M4"//26 NN$vvx#6666 NM  NMs#   ,B*B1BB	BBc                    d}t        j                  d|      5  t        j                  dt        j                  dd            5  t        j                         }t        j                  t        j                        5  |j                          d d d        d d d        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r   )r   r   rh   NoSuchProcessri   r   raisesr   r   s      r,   test_name_long_cmdline_nsp_excz*TestProcess.test_name_long_cmdline_nsp_exc   s     #ZZ9M4"00B7 NN$]]6#7#78FFH 9 NM 98  NMs;   ,C 8B4>B(B4C (B1-B44B=	9C  C	zps -o start not availablerX   c                 h   t        d| j                        }t        j                  | j                        j	                         }t
        j
                  j                  |      j                  d      }t        |      }t
        j
                  j                  |      j                  d      }|||hv sJ y )Nr   z%H:%M:%S)	r   r'   rh   ri   create_timedatetimefromtimestampstrftimeround)rj   time_pstime_psutiltime_psutil_tstampround_time_psutilround_time_psutil_tstamps         r,   test_create_timezTestProcess.test_create_time  s    Wdhh'nnTXX.::<%..<<

(:
 	
 "+.#+#4#4#B#B$

(:
 	! -/GHHHHr3   c                     t        | j                        }t        j                  | j                        j	                         }	 ||k(  sJ y # t
        $ r |d t        |       }||k(  sJ Y y w xY wrd   )r2   r'   rh   ri   exeAssertionErrorlen)rj   ps_pathnamepsutil_pathnameadjusted_ps_pathnames       r,   test_exezTestProcess.test_exe  sq    dhh' ..2668
	7/111 	7 $//A[1A#B "6666	7s   A A-,A-c                    t        | j                        }dj                  t        j                  | j                        j                               }t        r+t        |      t        |      k  r|j                  |      sJ y ||k(  sJ y )N )	r:   r'   joinrh   ri   r   r
   r   
startswith)rj   
ps_cmdlinepsutil_cmdlines      r,   test_cmdlinezTestProcess.test_cmdline0  si    TXX&
&..":"B"B"DEs:^)<<!,,Z888///r3   znot reliable on SUNOSznot reliable on AIXc                     t        d| j                        }t        j                         j	                         }||k(  sJ y )Nnice)r   r'   rh   ri   r   )rj   ps_nicepsutil_nices      r,   	test_nicezTestProcess.test_nice>  s7     VTXX&nn&++-+%%%r3   N)__name__
__module____qualname____doc__classmethodrb   re   rm   rt   rz   r   r   r   r   r   r   r   r   r   r   r   markskipifr   r   r   r   r   r	   r   r    r3   r,   r[   r[      s/   L 
  &
$
$
.
 $  $ $  $&@7 [[-HII JI7( 0 0 [[&=>[[$9:& ; ?&r3   r[   c                      e Zd ZdZ e       d        Zej                  j                  e	d      ej                  j                   e
d       d      ej                  j                  e d      d                      Z e       d	        Z e       d
        Zd Zd Zd Zd Zej                  j                  ed       e       d               Zy)TestSystemAPIszTest some system APIs.c                 p   t        t        d            }t        j                         }t        s
t
        rd|vr|j                  dd       t        |      t        |      z
  dkD  rH|D cg c]	  }||vs| c}|D cg c]	  }||vs| c}z   }| j                  dt        |      z         y c c}w c c}w )Nr'   r   r   zdifference: )
sortedr   rh   pidsr   r   insertr   failr    )rj   pids_pspids_psutilx
differences        r,   	test_pidszTestSystemAPIs.test_pidsJ  s     E#kkm W'!1NN1a  w<#k**Q.%0E[AW4D![E"I"aa{&:7I J ))NS_<==	 /E Is   )	B.3B.=	B3B3zunreliable on SUNOSrX   ifconfigzno ifconfig cmdznot supportedc                     t        d      }t        j                  d      D ]@  }|j                         D ]  }|j	                  |      s * | j                  d|d|       y )Nzifconfig -aT)perniczcouldn't find z nic in 'ifconfig -a' output
)r   rh   net_io_countersr0   r   r   )rj   r)   nicr+   s       r,   test_nic_nameszTestSystemAPIs.test_nic_names^  s_     M"))6C??3' ' iiF$  7r3   c                    t        d      }|j                         st        j                  d      |j	                  d      }|D cg c]  }|j	                         d    }}|D cg c]  }|j	                         d    }}t        |      t        t        j                               k(  sJ | j                  t        j                         |      5  t        t        j                               D ]Y  \  }}|j                  ||   k(  sJ |j                  ||   k(  sJ |j                  ;t        j                  |j                         [ 	 d d d        y c c}w c c}w # 1 sw Y   y xY w)Nwho -uno users on this systemrF   r   r   rh   who)r   r#   r   rN   r0   r   rh   userssubTest	enumerater   terminalr'   ri   )rj   r9   linesr   r   	terminalsidxus           r,   
test_userszTestSystemAPIs.test_userso  s   lyy{++788		$',-u!1u-+015aQWWYq\5	15zS0000\\S\9#FLLN3Qvvs+++zzYs^33355$NN155)	 4 :9 .199s   E&EAE +!E  E)c                    t        d      }|j                         st        j                  d      d }t	        j
                  d|      }|rd}nmt	        j
                  d|      }|rd}nRt	        j
                  d|      }|rd}n7t	        j
                  d	|      }|rd}|D cg c]  }|j                          }}|st        j                  d
|z        | j                  t        j                         |      5  t        t        j                               D ]G  \  }}t        j                  j                  |j                        j                  |      }|||   k(  rGJ  	 d d d        y c c}w # 1 sw Y   y xY w)Nr   r   z\d\d\d\d-\d\d-\d\d \d\d:\d\dz%Y-%m-%d %H:%Mz[A-Z][a-z][a-z] \d\d \d\d:\d\dz%b %d %H:%Mz[A-Z][a-z][a-z] \d\dz%b %dz[a-z][a-z][a-z] \d\dz(cannot interpret tstamp in who output
%sr   )r   r#   r   rN   r7   findall
capitalizer   rh   r   r   r   r   startedr   )rj   r9   tstampr   r   r   r   psutil_values           r,   test_users_startedz!TestSystemAPIs.test_users_started  sO   lyy{++788**<cB%F jj!BCHG& **%<cB$F !jj)@#FG!(;B"C7a1<<>7"C++;sC  \\S\9#FLLN3Q'00>>II (6"  $ws|333	 4 :9 #D :9s   "E,:A$E1E11E:c                 h   t        j                  dt        t        j                  d            5 }t        j                  t              5  t        j                  j                  t        j                                d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nzpsutil._psposix.os.killr6   r   )r   r   OSErrorerrnoEBADFr   r   rh   _psposix
pid_existsr   getpidr   rj   ms     r,   test_pid_exists_let_raisez(TestSystemAPIs.test_pid_exists_let_raise  su     ZZ%75;;3K
w'**299;7 (88O8
 
 ('
 
#   B(
2B<B(B%	!B((B1c                 h   t        j                  dt        t        j                  d            5 }t        j                  t              5  t        j                  j                  t        j                                d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Npsutil._psposix.os.waitpidr6   r   )r   r   r  r  r  r   r   rh   r  wait_pidr   r  r   r	  s     r,   test_os_waitpid_let_raisez(TestSystemAPIs.test_os_waitpid_let_raise  su     ZZ(gekk26N
w'((5 (88O8
 
 ('
 
r  c                    t        j                  dt        t        j                  d            5 }t        j                  t        j                  j                        5  t        j                  j                  t        j                         d       d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr  r6   r   g{Gz?)timeout)r   r   r  r  EINTRr   r   rh   r  TimeoutExpiredr  r   r  r   r	  s     r,   test_os_waitpid_eintrz$TestSystemAPIs.test_os_waitpid_eintr  s    ZZ(gekk26N
v==>((d(C ?88O8
 
 ?>
 
s#   .B>4B2B>2B;	7B>>Cc                 8   t        j                  dd      5 }t        j                  t              5  t
        j                  j                  t        j                                d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr  )r   r   )r   r   r   r   r%   rh   r  r  r   r  r   r	  s     r,   test_os_waitpid_bad_ret_statusz-TestSystemAPIs.test_os_waitpid_bad_ret_status  sh    ZZ(w
z*((5 +88O8
 
 +*
 
s"   B2B$BB		BBzunreliable on AIXc                    d}t        j                  d      D ]  }t        j                  |j                        }	 t	        |j
                        \  }}}}t        |j                  |z
        |k  sJ t        |j                  |z
        |k  sJ t        |j                  |z
        |k  sJ t        |j                  |z
        dk  rJ  y # t        $ r0}t        |      j                         }d|v sd|v sd|v rY d }~ d }~ww xY w)Ni  @ F)allr   zno such file or directoryzraw devices not supportedzpermission denied)rh   disk_partitions
disk_usage
mountpointrW   rP   abstotalusedfreepercentrL   r    rM   )	rj   	tolerancepartusagerS   rT   rU   rV   rQ   s	            r,   test_disk_usagezTestSystemAPIs.test_disk_usage  s    $	**u5D%%doo6E==?_:	8X{ 5;;23i???5::01I===5::01I===5==;671<<<) 6    #hnn&/362c9*c1s   C	D%D DDN)r   r   r   r   r   r   r   r   r   r	   r   r   r   r   r  r  r  r  r  r   r&  r   r3   r,   r   r   F  s    > >& [[&;<[[E*--6GH[[//H
 I I =
 * * $4 $4L	 [[$78=  9=r3   r   c                       e Zd Zd Zy)TestMiscc                     t               }|dkD  sJ |t        j                          k(  sJ |t        j                  k(  sJ y )Nr   )r   resourcemmapPAGESIZE)rj   pagesizes     r,   test_getpagesizezTestMisc.test_getpagesize  s>    =!||8//11114==(((r3   N)r   r   r   r.  r   r3   r,   r(  r(    s    )r3   r(  rd   ),r   r   r  r   r7   r^   r   rh   r   r   r   r   r   r   r	   psutil.testsr
   r   r   r   r   r   r   r   r   r   r   r   r   r+  r*  psutil._psutil_posixr   r   r2   r:   r@   rD   rW   r   r   r[   r   r(  r   r3   r,   <module>r1     s#      	 	             , # " '   )  . ' "  	0(n8  Il3i&. i& 4i&X Il3_=^ _= 4_=D Il3)~ ) 4)r3   