
    Xh#C                     n   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
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)mock)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)AARCH64)HAS_NET_IO_COUNTERS)
PYTHON_EXE)PsutilTestCase)pytest)retry_on_failure)sh)skip_on_access_denied)spawn_testproc)	terminate)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         c/var/www/html/cjf29f/d23bf782/d32178f2/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                 T    d}t         rd}t        ||       j                         }|d   S )Ncommandcommr   )r
   r   split)r%   fieldr,   s      r*   ps_namer0   d   s-    En""$G1:    c                     d}t         st        rd}t        ||       }t        j                  dd|      }|j                         S )Nr,   argsz\(python.*?\)$ )r   r
   r   resubr!   )r%   r/   outs      r*   ps_argsr8   l   s;    E
e
UC.C
&&"B
,C99;r1   c                 .    d}t         rd}t        ||       S )Nrssrssizer   r   r%   r/   s     r*   ps_rssr>   v   s    E
eS>r1   c                 .    d}t         rd}t        ||       S )Nvszvsizer<   r=   s     r*   ps_vszrB   }   s    E
eS>r1   c                    	 t        d|        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 zdevice busyzdf returned EBUSY
r               %r4   )r   r!   RuntimeErrorr   lowerr   skipr.   r"   floatr   )	devicer7   errr)   fields	sys_totalsys_usedsys_freesys_percents	            r*   dfrU      s    6&"#))+
 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

# 	r1   c                 .    t        | j                         y N)r   r%   r^   s    r*   tearDownClasszTestProcess.tearDownClass   s    #''r1   c                     t        d| j                        }t        j                  | j                        j	                         }||k(  sJ y )Nppid)r   r%   psutilProcessre   )selfppid_psppid_psutils      r*   	test_ppidzTestProcess.test_ppid   s;    VTXX&nnTXX.335+%%%r1   c                     t        d| j                        }t        j                  | j                        j	                         j
                  }||k(  sJ y )Nuid)r   r%   rf   rg   uidsreal)rh   uid_ps
uid_psutils      r*   test_uidzTestProcess.test_uid   sA    E488$^^DHH-22499
###r1   c                     t        d| j                        }t        j                  | j                        j	                         j
                  }||k(  sJ y )Nrgid)r   r%   rf   rg   gidsro   )rh   gid_ps
gid_psutils      r*   test_gidzTestProcess.test_gid   sA    FDHH%^^DHH-22499
###r1   c                     t        d| j                        }t        j                  | j                        j	                         }||k(  sJ y )Nuser)r   r%   rf   rg   username)rh   username_psusername_psutils      r*   test_usernamezTestProcess.test_username   s;    * ..2;;=o---r1   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)
rf   rg   r   patchKeyErrorr{   r   rn   ro   called)rh   pfuns      r*   test_username_no_resolutionz'TestProcess.test_username_no_resolution   se     NNZZ-8D 	::<3qvvx}}#5555:::	 	 	s   AA??Bc                     t        j                  d       t        | j                        }t	        j
                  | j                        j                         d   dz  }||k(  sJ y )N皙?r   rE   )timesleepr>   r%   rf   rg   memory_info)rh   rss_ps
rss_psutils      r*   test_rss_memoryzTestProcess.test_rss_memory   P    
 	

3!^^DHH-99;A>E
###r1   c                     t        j                  d       t        | j                        }t	        j
                  | j                        j                         d   dz  }||k(  sJ y )Nr   r   rE   )r   r   rB   r%   rf   rg   r   )rh   vsz_ps
vsz_psutils      r*   test_vsz_memoryzTestProcess.test_vsz_memory   r   r1   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.\dr4   z\d)r0   r%   ospathbasenamerK   rf   rg   namer5   r6   )rh   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+%%%r1   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   rf   rg   r   )rh   r   cmdliner   s       r*   test_name_longzTestProcess.test_name_long   s     #>ZZ9M 	@47 @ NN$vvx#????	@	@ 	@@ @	@ 	@s"   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   r4   r   )r   r   rf   AccessDeniedrg   r   rh   r   r   s      r*   test_name_long_cmdline_ad_excz)TestProcess.test_name_long_cmdline_ad_exc   s     #ZZ9M 	74"//26 7 NN$vvx#66667	7 	77 7	7 	7s#   ,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   rf   NoSuchProcessrg   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	 	  	 	s;   ,C 8B4>B(B4C (B1-B44B=	9C  C	zps -o start not availablerV   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%   rf   rg   create_timedatetimefromtimestampstrftimeround)rh   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Hr1   c                     t        | j                        }t        j                  | j                        j	                         }	 ||k(  sJ y # t
        $ r |d t        |       }||k(  sJ Y y w xY wrb   )r0   r%   rf   rg   exeAssertionErrorlen)rh   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 )	r8   r%   joinrf   rg   r   r   r   
startswith)rh   
ps_cmdlinepsutil_cmdlines      r*   test_cmdlinezTestProcess.test_cmdline+  si    TXX&
&..":"B"B"DEs:^)<<!,,Z888///r1   znot reliable on SUNOSznot reliable on AIXc                     t        d| j                        }t        j                         j	                         }||k(  sJ y )Nnice)r   r%   rf   rg   r   )rh   ps_nicepsutil_nices      r*   	test_nicezTestProcess.test_nice9  s7     VTXX&nn&++-+%%%r1   N)__name__
__module____qualname____doc__classmethodr`   rc   rk   rr   rx   r~   r   r   r   r   r   r   r   r   r   r   markskipifr   r   r   r   r   r
   r   r    r1   r*   rY   rY      s/   L 
  &
$
$
.
 $  $ $  $&@7 [[-HII JI7( 0 0 [[&=>[[$9:& ; ?&r1   rY   c                      e Zd ZdZ e       d        Zej                  j                  e	d      ej                  j                   e
j                  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   rf   pidsr   r   insertr   failr   )rh   pids_pspids_psutilx
differences        r*   	test_pidszTestSystemAPIs.test_pidsE  s     E#kkm W'!1NN1a  w<#k**Q.%0EAW4D!E"Ia{&:I J ))NS_<==	 /E Is   )	B.3B.=	B3B3zunreliable on SUNOSrV   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   rf   net_io_countersr.   r   r   )rh   r'   nicr)   s       r*   test_nic_nameszTestSystemAPIs.test_nic_namesY  su     M"))6 	C ??3' ii$SE *  &x) 	r1   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 systemrD   r   r   rf   who)r   r!   r   rL   r.   r   rf   userssubTest	enumerater   terminalr%   rg   )rh   r7   linesr   r   	terminalsidxus           r*   
test_userszTestSystemAPIs.test_usersj  s$   lyy{++788		$',-!1--+01aQWWYq\1	15zS0000\\S\9 	*#FLLN3 *Qvvs+++zzYs^33355$NN155)	*	* 	* .1	* 	*s   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
|       | 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
r   )r   r!   r   rL   r5   findall
capitalizer   rf   r   r   r   r   startedr   )rh   r7   tstampr   r   r   r   psutil_values           r*   test_users_startedz!TestSystemAPIs.test_users_startedz  sX   lyy{++788**<cB%F jj!BCHG& **%<cB$F !jj)@#FG!(;B"Ca1<<>"C"C++ GuMNN\\S\9 	4#FLLN3 4Q'00>>II (6"  $ws|333	4	4 	4 #D
	4 	4s   "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.killr4   r   )r   r   OSErrorerrnoEBADFr   r   rf   _psposix
pid_existsr   getpidr   rh   ms     r*   test_pid_exists_let_raisez(TestSystemAPIs.test_pid_exists_let_raise  s     ZZ%75;;3K
 	w' 8**299;7888O8	 	8 8	 	#   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.waitpidr4   r   )r   r   r  r  r  r   r   rf   r  wait_pidr   r  r   r  s     r*   test_os_waitpid_let_raisez(TestSystemAPIs.test_os_waitpid_let_raise  s     ZZ(gekk26N
 	w' 6((5688O8	 	6 6	 	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  r4   r   g{Gz?)timeout)r   r   r  r  EINTRr   r   rf   r  TimeoutExpiredr  r   r  r   r  s     r*   test_os_waitpid_eintrz$TestSystemAPIs.test_os_waitpid_eintr  s    ZZ(gekk26N
 	v==> D((d(CD88O8	 	D D	 	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#   rf   r  r  r   r  r   r  s     r*   test_os_waitpid_bad_ret_statusz-TestSystemAPIs.test_os_waitpid_bad_ret_status  st    ZZ(w
 	z* 6((5688O8	 	6 6	 	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)rf   disk_partitions
disk_usage
mountpointrU   rN   abstotalusedfreepercentrJ   r   rK   )	rh   	tolerancepartusagerQ   rR   rS   rT   rO   s	            r*   test_disk_usagezTestSystemAPIs.test_disk_usage  s    $	**u5 	=D%%doo6E==?_:	8X{ 5;;23i???5::01I===5::01I===5==;671<<<)	=    #hnn&/362c9*c1s   C	D%D DDN)r   r   r   r   r   r   r   r   r   r
   shutilwhichr   r   r   r   r	  r  r  r  r   r$  r   r1   r*   r   r   A  s    > >& [[&;<[[LFLL44=NO[[//H
 I P =
 * * "4 "4H	 [[$78=  9=r1   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)rh   pagesizes     r*   test_getpagesizezTestMisc.test_getpagesize  s>    =!||8//11114==(((r1   N)r   r   r   r.  r   r1   r*   r(  r(    s    )r1   r(  rb   ),r   r   r  r   r5   r%  r\   r   unittestr   rf   r   r   r   r   r   r	   r
   psutil.testsr   r   r   r   r   r   r   r   r   r   r+  r*  psutil._psutil_posixr   r   r0   r8   r>   rB   rU   r   r   rY   r   r(  r   r1   r*   <module>r2     s       	 	               , # '  )  . ' " 	0(n8  Il3i&. i& 4i&X Il3]=^ ]= 4]=@ Il3)~ ) 4)r1   