
    ɧd(;                     |   d Z ddlZddlZddlZddlZddlZddlZddlZddl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$ ej%        e d           G d de                      Z& ej%        e d           G d d e                      Z' ej%        e d           G d! d"e                      Z(e)d#k    rdd$l*m+Z+  e+e,           dS dS )&zPOSIX specific tests.    N)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)
CI_TESTING)HAS_NET_IO_COUNTERS)
PYTHON_EXE)PsutilTestCase)mock)retry_on_failure)sh)skip_on_access_denied)spawn_testproc)	terminate)unittest)which)getpagesizec                    dg}t           r|                    d           |%|                    dt          |          g           n9t          st
          r|                    d           n|                    d           t          r%t          d          }|                    | |           } |                    d| g           t          |          }t           r|	                                }n|	                                d	d         }g }|D ]L}|
                                }	 t          |          }n# t          $ r Y nw xY w|                    |           M||S |d
         S )z|
    Wrapper 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)commandcommstartstimez-o   r   )r   appendextendstrr	   r   setgetr   
splitlinesstripint
ValueError)fmtpidcmdfmt_mapoutput
all_outputlines          7lib/python3.11/site-packages/psutil/tests/test_posix.pyr   r   .   s    &C #

>"""
 

D#c((#$$$$ 	C 	JJtJJt $;<<kk#s##JJc{WWF )""$$""$$QRR(J    zz||	t99DD 	 	 	D	 	$
 !}s   %D55
EEc                 h    d}t           rd}t          ||                                           d         S )Nr   r   r   )r	   r   splitr)   fields     r/   ps_namer4   j   s3    E eS>>!!!$$    c                 F    d}t           st          rd}t          ||           S )Nr   args)r   r	   r   r2   s     r/   ps_argsr8   q   s)    E
 e eS>>r5   c                 8    d}t           rd}t          ||           S )Nrssrssizer   r   r2   s     r/   ps_rssr=   x   s"    E
 eS>>r5   c                 8    d}t           rd}t          ||           S )Nvszvsizer<   r2   s     r/   ps_vszrA      s"    E
 eS>>r5   z
POSIX onlyc                      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        eped          d             Zd Zd Z ej        ed           ej        ed          d                         ZdS )TestProcesszBCompare psutil results against 'ps' command line utility (mainly).c                 `    t          t          ddgt          j                  j        | _        d S )Nz-Ez-O)stdin)r   r   
subprocessPIPEr)   clss    r/   
setUpClasszTestProcess.setUpClass   s0     *dD!9'18 8 88; 	r5   c                 .    t          | j                   d S N)r   r)   rH   s    r/   tearDownClasszTestProcess.tearDownClass   s    #'r5   c                     t          d| j                  }t          j        | j                                                  }|                     ||           d S )Nppid)r   r)   psutilProcessrO   assertEqual)selfppid_psppid_psutils      r/   	test_ppidzTestProcess.test_ppid   sL    VTX&&nTX..3355+.....r5   c                     t          d| j                  }t          j        | j                                                  j        }|                     ||           d S )Nuid)r   r)   rP   rQ   uidsrealrR   )rS   uid_ps
uid_psutils      r/   test_uidzTestProcess.test_uid   sO    E48$$^DH--22449
,,,,,r5   c                     t          d| j                  }t          j        | j                                                  j        }|                     ||           d S )Nrgid)r   r)   rP   rQ   gidsrZ   rR   )rS   gid_ps
gid_psutils      r/   test_gidzTestProcess.test_gid   sO    FDH%%^DH--22449
,,,,,r5   c                     t          d| j                  }t          j        | j                                                  }|                     ||           d S )Nuser)r   r)   rP   rQ   usernamerR   )rS   username_psusername_psutils      r/   test_usernamezTestProcess.test_username   sL    ** .22;;==o66666r5   c                 @   t          j                    }t          j        dt                    5 }|                     |                                t          |                                j	                             |j
        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil.pwd.getpwuidside_effect)rP   rQ   r   patchKeyErrorrR   rf   r!   rY   rZ   called)rS   pfuns      r/   test_username_no_resolutionz'TestProcess.test_username_no_resolution   s     NZ-8DDD 	QZZ\\3qvvxx}+=+=>>>:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBBc                     t          j        d           t          | j                  }t	          j        | j                                                  d         dz  }|                     ||           d S )N皙?r      )timesleepr=   r)   rP   rQ   memory_inforR   )rS   rss_ps
rss_psutils      r/   test_rss_memoryzTestProcess.test_rss_memory   c    
 	
3!!^DH--99;;A>E
,,,,,r5   c                     t          j        d           t          | j                  }t	          j        | j                                                  d         dz  }|                     ||           d S )Nrt   r   ru   )rv   rw   rA   r)   rP   rQ   rx   rR   )rS   vsz_ps
vsz_psutils      r/   test_vsz_memoryzTestProcess.test_vsz_memory   r|   r5   c                    t          | j                  }t          j                            |                                          }t          j        | j                                                                                  }t          j
        dd|          }t          j
        dd|          }t          j
        dd|          }t          j
        dd|          }|                     ||           d S )Nz\d.\d z\d)r4   r)   ospathbasenamelowerrP   rQ   nameresubrR   )rS   name_psname_psutils      r/   	test_namezTestProcess.test_name   s    $(##'""7++1133nTX..3355;;== &2w//fXr;77&G,,fUB44+.....r5   c                 B   d}g d}t          j        d|          5  t          j        d|          5  t          j                    }|                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nlong-program-name)long-program-name-extendedfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdliner   )r   rm   rP   rQ   rR   r   )rS   r   cmdlinerp   s       r/   test_name_longzTestProcess.test_name_long   sX    #>>>Z9%)+ + + 	I 	I@)02 2 2 I IN$$  +GHHHI I I I I I I I I I I I I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is4   B<A<0B<B 	 BB 	BBBc                 `   d}t          j        d|          5  t          j        dt          j        dd                    5  t          j                    }|                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S Nr   r   r   r   r   r   rk   )r   rm   rP   AccessDeniedrQ   rR   r   rS   r   rp   s      r/   test_name_long_cmdline_ad_excz)TestProcess.test_name_long_cmdline_ad_exc   s]    #Z9%)+ + + 	@ 	@@(.(;Ar(B(BD D D @ @N$$  +>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s5   *B#<B?B#B	B#B	B##B'*B'c                 Z   d}t          j        d|          5  t          j        dt          j        dd                    5  t          j                    }|                     t          j        |j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   )r   rm   rP   NoSuchProcessrQ   assertRaisesr   r   s      r/   test_name_long_cmdline_nsp_excz*TestProcess.test_name_long_cmdline_nsp_exc   sY    #Z9%)+ + + 	@ 	@@(.(<Q(C(CE E E @ @N$$!!&"6???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s5   *B 9B<B B	B B	B  B$'B$zps -o start not availablec                    t          d| j                  }t          j        | j                                                  }t
          j                            |                              d          }t          |          }t
          j                            |                              d          }| 	                    |||g           d S )Nr   z%H:%M:%S)
r   r)   rP   rQ   create_timedatetimefromtimestampstrftimeroundassertIn)rS   time_pstime_psutiltime_psutil_tstampround_time_psutilround_time_psutil_tstamps         r/   test_create_timezTestProcess.test_create_time   s    Wdh''nTX..::<<%.<< !*-- 	 "+..#+#4#B#B$ $'x
33 	!g 24LMNNNNNr5   c                 .   t          | j                  }t          j        | j                                                  }	 |                     ||           d S # t          $ r1 |d t          |                   }|                     ||           Y d S w xY wrL   )r4   r)   rP   rQ   exerR   AssertionErrorlen)rS   ps_pathnamepsutil_pathnameadjusted_ps_pathnames       r/   test_exezTestProcess.test_exe  s    dh'' .226688
	@[/::::: 	@ 	@ 	@ $//@K0@0@/@#A [*>??????	@s   A 7BBc                     t          | j                  }d                    t          j        | j                                                            }|                     ||           d S )N )r8   r)   joinrP   rQ   r   rR   )rS   
ps_cmdlinepsutil_cmdlines      r/   test_cmdlinezTestProcess.test_cmdline  sV    TX&&
&.":":"B"B"D"DEE^44444r5   znot reliable on SUNOSznot reliable on AIXc                     t          d| j                  }t          j                                                    }|                     ||           d S )Nnice)r   r)   rP   rQ   r   rR   )rS   ps_nicepsutil_nices      r/   	test_nicezTestProcess.test_nice  sJ     VTX&&n&&++--+.....r5   N)__name__
__module____qualname____doc__classmethodrJ   rM   rV   r]   rc   ri   rr   r   r   r{   r   r   r   r   r   r   skipIfr   r   r   r   r   r	   r   r    r5   r/   rC   rC      s       LL< < [<   [/ / /
- - -
- - -
7 7 7
   - -  - - -  -/ / /I I I
@ 
@ 
@	@ 	@ 	@ X_U\c#>??
O 
O @?
O@ @ @5 5 5 X_U344X_S/00/ / 10 54/ / /r5   rC   c                      e Zd ZdZ e            d             Z ej        ed           ej         e	d           d           ej        e
 d          d                                     Z ej        eo ej                     d           e            d	                         Zd
 Zd Zd Zd Z ej        ed           e            d                         ZdS )TestSystemAPIszTest some system APIs.c                    t          t          d                    t          j                    t          st
          rdvr                    dd           t                    t                    z
  dk    rDfdD             fdD             z   }|                     dt          |          z              d S d S )Nr)   r   r   c                     g | ]}|v|	S r   r   ).0xpids_pss     r/   
<listcomp>z,TestSystemAPIs.test_pids.<locals>.<listcomp>5  s#    EEEAW4DE!EEEr5   c                     g | ]}|v|	S r   r   )r   r   pids_psutils     r/   r   z,TestSystemAPIs.test_pids.<locals>.<listcomp>6  s#    EEE0DE!EEEr5   zdifference: )
sortedr   rP   pidsr   r   insertr   failr!   )rS   
differencer   r   s     @@r/   	test_pidszTestSystemAPIs.test_pids(  s     E##kmm  	!G 	! 0 	!NN1a    w<<#k***Q. 	8EEEE[EEEEEEEWEEEFJIIns:677777	8 	8r5   zunreliable on SUNOSifconfigzno ifconfig cmdznot supportedc                 
   t          d          }t          j        d                                          D ]K}|                                D ]}|                    |          r n|                     d|d|           Ld S )Nzifconfig -aT)perniczcouldn't find z nic in 'ifconfig -a' output
)r   rP   net_io_counterskeysr1   
startswithr   )rS   r,   nicr.   s       r/   test_nic_nameszTestSystemAPIs.test_nic_names;  s     M"")666;;== 	& 	&C & &??3'' E 			VV%& & &	& 	&r5   zunreliable on CIc                    t          d          }|                                s|                     d          |                    d          }d |D             }d |D             }|                     t          |          t          t          j                                         t          j                    D ]8}|                     |j	        |           |                     |j
        |           9d S )Nwhozno users on this system
c                 B    g | ]}|                                 d          S )r   r1   r   r   s     r/   r   z-TestSystemAPIs.test_users.<locals>.<listcomp>P  s$    ---!1---r5   c                 B    g | ]}|                                 d          S )r   r   r   s     r/   r   z-TestSystemAPIs.test_users.<locals>.<listcomp>Q  s$    111aQWWYYq\111r5   )r   r%   skipTestr1   rR   r   rP   usersr   r   terminal)rS   outlinesr   	terminalsus         r/   
test_userszTestSystemAPIs.test_usersI  s     iiyy{{ 	;-- 9:::		$--u---115111	US%8%8999 	1 	1AMM!&%(((MM!*i0000	1 	1r5   c                     t          j        dt          t          j        d                    5 }|                     t          t          j        j        t          j
                               |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzpsutil._psposix.os.killr   rk   )r   rm   OSErrorerrnoEBADFr   rP   _psposix
pid_existsr   getpidro   rS   ms     r/   test_pid_exists_let_raisez(TestSystemAPIs.test_pid_exists_let_raiseW  s     Z1$+EK$<$<> > > 	ABgv'A29;;OOO8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   ABB
Bc                     t          j        dt          t          j        d                    5 }|                     t          t          j        j        t          j
                               |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Npsutil._psposix.os.waitpidr   rk   )r   rm   r   r   r   r   rP   r   wait_pidr   r   ro   r   s     r/   test_os_waitpid_let_raisez(TestSystemAPIs.test_os_waitpid_let_raise`  s     Z4$+EK$<$<> > > 	ABgv'?MMM8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                 8   t          j        dt          t          j        d                    5 }|                     t          j        j        t          j        j	        t          j                    d           |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   rk   g{Gz?)timeout)r   rm   r   r   EINTRr   rP   r   TimeoutExpiredr   r   r   ro   r   s     r/   test_os_waitpid_eintrz$TestSystemAPIs.test_os_waitpid_eintrh  s    Z4$+EK$<$<> > > 	AB.(")++t  E E E 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBBc                     t          j        dd          5 }|                     t          t          j        j        t          j                               |j	        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )r   r   )
r   rm   r   r'   rP   r   r   r   r   ro   r   s     r/   test_os_waitpid_bad_ret_statusz-TestSystemAPIs.test_os_waitpid_bad_ret_statusq  s    Z4%,. . . 	12j$o6	E E E8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA++A/2A/zunreliable on AIXc                    d }d}t          j        d          D ]}t          j        |j                  }	  ||j                  \  }}}}|                     |j        ||           |                     |j        ||           |                     |j        ||           |                     |j	        |d           # t          $ r8}	t          |	                                          }	d|	v sd|	v sd	|	v rY d }	~	 d }	~	ww xY wd S )
Nc                    t          d| z                                            }|                    d          d         }|                                }t          |d                   dz  }t          |d                   dz  }t          |d                   dz  }t	          |d                             dd	                    }||||fS )
Nzdf -k %sr   r   ru            %r   )r   r%   r1   r&   floatreplace)devicer   r.   fieldstotalusedfreepercents           r/   dfz*TestSystemAPIs.test_disk_usage.<locals>.df}  s    Z&())//11C99T??1%DZZ\\Fq	NNT)Evay>>D(Dvay>>D(DF1I--c26677G4w//r5   i  @ F)all)deltar   zno such file or directoryzraw devices not supportedzpermission denied)rP   disk_partitions
disk_usage
mountpointr  assertAlmostEqualr  r  r  r  RuntimeErrorr!   r   )
rS   r  	tolerancepartusager  r  r  r  errs
             r/   test_disk_usagezTestSystemAPIs.test_disk_usagez  s[   	0 	0 	0 $	*u555 	H 	HD%do66EH-/R__*tT7 &&u{E&KKK&&uz4y&III&&uz4y&III&&u}gQ&GGGG   
 
 
 #hhnn&&.#5 3s:+s2 HHHH
		H 	Hs   C
D-C>=C>>DN)r   r   r   r   r   r   r   r   r	   r   r   r   r
   rP   r   r   r   r   r  r  r   r   r   r5   r/   r   r   $  s|         8 8 8$ X_U122X_z***,=>>X_,,o>>	& 	& ?> ?> 32	& X_Z6$68JKK
1 
1  LK
1         X_S-..H H  /.H H Hr5   r   c                       e Zd Zd ZdS )TestMiscc                     t                      }|                     |d           |                     |t          j                                |                     |t          j                   d S )Nr   )r   assertGreaterrR   resourcemmapPAGESIZE)rS   pagesizes     r/   test_getpagesizezTestMisc.test_getpagesize  s^    ==8Q'''8#7#9#9:::4=11111r5   N)r   r   r   r)  r   r5   r/   r"  r"    s#        2 2 2 2 2r5   r"  __main__)run_from_namerL   )-r   r   r   r   r   rF   rv   rP   r   r   r   r   r   r   r	   psutil.testsr
   r   r   r   r   r   r   r   r   r   r   r   r&  r%  psutil._psutil_posixr   r   r4   r8   r=   rA   r   rC   r   r"  r   psutil.tests.runnerr+  __file__r   r5   r/   <module>r0     sT       				 				                                                 # # # # # # , , , , , , # # # # # # ' ' ' ' ' '       ) ) ) ) ) )       . . . . . . ' ' ' ' ' ' " " " " " " ! ! ! ! ! !       	 1KKKOOO000000. . . .x% % %       UL))Z/ Z/ Z/ Z/ Z/. Z/ Z/ *)Z/z UL))vH vH vH vH vH^ vH vH *)vHr UL))2 2 2 2 2~ 2 2 *)2 z 111111M( r5   