o
    i<                     @   s  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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rddlZddlZddlmZ d)ddZ dd Z!dd Z"dd Z#dd Z$e%e d G d!d" d"eZ&e%e d G d#d$ d$eZ'e%e d G d%d& d&eZ(e)d'krd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)which)getpagesizec              	   C   s   dg}t r
|d |dur|dt|g ntstr"|d n|d tr3td}|| | } |d| g t|}t rE|	 }n|	 d	d }g }|D ]}|
 }zt|}W n	 tyf   Y nw || qQ|du rs|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line r,   R/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/psutil/tests/test_posix.pyr   .   s8   


r   c                 C   s   d}t rd}t||  d S )Nr   r   r   )r   r   splitr&   fieldr,   r,   r-   ps_namej   s   r1   c                 C   s   d}t strd}t|| S )Nr   args)r   r   r   r/   r,   r,   r-   ps_argsq   s   
r3   c                 C      d}t rd}t|| S )Nrssrssizer   r   r/   r,   r,   r-   ps_rssx      
r8   c                 C   r4   )Nvszvsizer7   r/   r,   r,   r-   ps_vsz   r9   r<   z
POSIX onlyc                   @   s   e Zd ZdZedd Zedd Zdd Zdd	 Zd
d Z	dd Z
dd Ze e dd Ze e dd Zdd Zdd Zdd Zdd ZeepOeddd Zdd  Ze d!d" Zeed#eed$d%d& Zd'S )(TestProcesszBCompare psutil results against 'ps' command line utility (mainly).c                 C   s   t tddgtjdj| _d S )Nz-Ez-O)stdin)r   r   
subprocessPIPEr&   clsr,   r,   r-   
setUpClass   s
   
zTestProcess.setUpClassc                 C   s   t | j d S N)r   r&   rA   r,   r,   r-   tearDownClass   s   zTestProcess.tearDownClassc                 C   ,   t d| j}t| j }| || d S )Nppid)r   r&   psutilProcessrG   assertEqual)selfppid_psppid_psutilr,   r,   r-   	test_ppid      zTestProcess.test_ppidc                 C   .   t d| j}t| j j}| || d S )Nuid)r   r&   rH   rI   uidsrealrJ   )rK   uid_ps
uid_psutilr,   r,   r-   test_uid      zTestProcess.test_uidc                 C   rP   )Nrgid)r   r&   rH   rI   gidsrS   rJ   )rK   gid_ps
gid_psutilr,   r,   r-   test_gid   rW   zTestProcess.test_gidc                 C   rF   )Nuser)r   r&   rH   rI   usernamerJ   )rK   username_psusername_psutilr,   r,   r-   test_username   rO   zTestProcess.test_usernamec                 C   s`   t  }tjdtd}| | t| j	 |j
sJ W d    d S 1 s)w   Y  d S )Nzpsutil.pwd.getpwuidside_effect)rH   rI   r   patchKeyErrorrJ   r^   r   rR   rS   called)rK   pfunr,   r,   r-   test_username_no_resolution   s
   "z'TestProcess.test_username_no_resolutionc                 C   <   t d t| j}t| j d d }| || d S )N皙?r      )timesleepr8   r&   rH   rI   memory_inforJ   )rK   rss_ps
rss_psutilr,   r,   r-   test_rss_memory      

zTestProcess.test_rss_memoryc                 C   rj   )Nrk   r   rl   )rm   rn   r<   r&   rH   rI   ro   rJ   )rK   vsz_ps
vsz_psutilr,   r,   r-   test_vsz_memory   rs   zTestProcess.test_vsz_memoryc                 C   sv   t | j}tj| }t| j  }t	
dd|}t	
dd|}t	
dd|}t	
dd|}| || d S )Nz\d.\d z\d)r1   r&   ospathbasenamelowerrH   rI   nameresubrJ   )rK   name_psname_psutilr,   r,   r-   	test_name   s   
zTestProcess.test_namec              	   C   s   d}g d}t jd|d4 t jd|d t }| | d W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S )Nlong-program-name)long-program-name-extendedfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdliner   )r   rd   rH   rI   rJ   r|   )rK   r|   cmdlinerg   r,   r,   r-   test_name_long   s   "zTestProcess.test_name_longc              	   C   s   d}t jd|d8 t jdtddd t }| | d W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S Nr   r   r   r   r   rw   rb   )r   rd   rH   AccessDeniedrI   rJ   r|   rK   r|   rg   r,   r,   r-   test_name_long_cmdline_ad_exc   s   
"z)TestProcess.test_name_long_cmdline_ad_excc              	   C   s   d}t jd|d8 t jdtddd t }| tj|j W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S r   )r   rd   rH   NoSuchProcessrI   assertRaisesr|   r   r,   r,   r-   test_name_long_cmdline_nsp_exc   s   
"z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablec                 C   s\   t d| j}t| j }tj|d}t|}tj|d}| 	|||g d S )Nr   z%H:%M:%S)
r   r&   rH   rI   create_timedatetimefromtimestampstrftimeroundassertIn)rK   time_pstime_psutiltime_psutil_tstampround_time_psutilround_time_psutil_tstampr,   r,   r-   test_create_time   s   zTestProcess.test_create_timec                 C   s^   t | j}t| j }z	| || W d S  ty.   |d t| }| || Y d S w rD   )r1   r&   rH   rI   exerJ   AssertionErrorlen)rK   ps_pathnamepsutil_pathnameadjusted_ps_pathnamer,   r,   r-   test_exe  s   
zTestProcess.test_exec                 C   s0   t | j}dt| j }| || d S )N )r3   r&   joinrH   rI   r   rJ   )rK   
ps_cmdlinepsutil_cmdliner,   r,   r-   test_cmdline  s   
zTestProcess.test_cmdlineznot reliable on SUNOSznot reliable on AIXc                 C   s(   t d| j}t  }| || d S )Nnice)r   r&   rH   rI   r   rJ   )rK   ps_nicepsutil_nicer,   r,   r-   	test_nice"  s   zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodrC   rE   rN   rV   r\   ra   ri   r   r   rr   rv   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r,   r,   r,   r-   r=      s:    

	




r=   c                   @   s   e Zd ZdZe dd Zeedee	d dee
 ddd	 Zeeo/e  d
e dd Zdd Zdd Zdd Zdd Zeede dd ZdS )TestSystemAPIszTest some system APIs.c                    s~   t td t tstrd vr dd t t dkr= fddD fdd D  }| dt	| d S )Nr&   r   r   c                       g | ]}| vr|qS r,   r,   .0x)pids_psr,   r-   
<listcomp>;      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    r   r,   r,   r   )pids_psutilr,   r-   r   <  r   zdifference: )
sortedr   rH   pidsr   r   insertr   failr   )rK   
differencer,   )r   r   r-   	test_pids.  s   zTestSystemAPIs.test_pidszunreliable on SUNOSifconfigzno ifconfig cmdznot supportedc                 C   sP   t d}tjdd D ]}| D ]	}||r n
q| d||f qd S )Nzifconfig -aT)pernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   rH   net_io_counterskeysr.   
startswithr   )rK   r)   nicr+   r,   r,   r-   test_nic_namesA  s   
zTestSystemAPIs.test_nic_nameszunreliable on CIc                 C   s   t d}| s| d|d}dd |D }dd |D }| t|tt  t D ]}| |j	| | |j
| q0d S )Nwhozno users on this system
c                 S      g | ]}|  d  qS )r   r.   r   r,   r,   r-   r   V  r   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   r   )r   r   r   r,   r,   r-   r   W  r   )r   r"   skipTestr.   rJ   r   rH   usersr   r|   terminal)rK   outlinesr   	terminalsur,   r,   r-   
test_usersO  s   

zTestSystemAPIs.test_usersc                 C   \   t jdttjdd}| ttjjt	
  |jsJ W d    d S 1 s'w   Y  d S )Nzpsutil._psposix.os.killrw   rb   )r   rd   OSErrorerrnoEBADFr   rH   _psposix
pid_existsrx   getpidrf   rK   mr,   r,   r-   test_pid_exists_let_raise]  s   
"z(TestSystemAPIs.test_pid_exists_let_raisec                 C   r   )Npsutil._psposix.os.waitpidrw   rb   )r   rd   r   r   r   r   rH   r   wait_pidrx   r   rf   r   r,   r,   r-   test_os_waitpid_let_raisef  s   
"z(TestSystemAPIs.test_os_waitpid_let_raisec                 C   sd   t jdttjdd}| jtjjtjj	t
 dd |js J W d    d S 1 s+w   Y  d S )Nr   rw   rb   g{Gz?)timeout)r   rd   r   r   EINTRr   rH   r   TimeoutExpiredr   rx   r   rf   r   r,   r,   r-   test_os_waitpid_eintrn  s   
"z$TestSystemAPIs.test_os_waitpid_eintrc                 C   sT   t jddd}| ttjjt  |j	sJ W d    d S 1 s#w   Y  d S )Nr   )r   r   )
r   rd   r   r$   rH   r   r   rx   r   rf   r   r,   r,   r-   test_os_waitpid_bad_ret_statusw  s   "z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc           
      C   s   dd }d}t jddD ]]}t |j}z||j\}}}}W n% tyD }	 zt|	 }	d|	v s9d|	v s9d|	v r?W Y d }	~	q d }	~	ww | j|j	||d	 | j|j
||d	 | j|j||d	 | j|j|d
d	 qd S )Nc                 S   sv   t d|   }|dd }| }t|d d }t|d d }t|d d }t|d dd	}||||fS )
Nzdf -k %sr   r   rl            %rw   )r   r"   r.   r#   floatreplace)devicer   r+   fieldstotalusedfreepercentr,   r,   r-   df  s   z*TestSystemAPIs.test_disk_usage.<locals>.dfi  @ F)allzno such file or directoryzraw devices not supportedzpermission denied)deltar   )rH   disk_partitions
disk_usage
mountpointr   RuntimeErrorr   r{   assertAlmostEqualr   r   r   r   )
rK   r   	tolerancepartusager   r   r   r   errr,   r,   r-   test_disk_usage  s(   
zTestSystemAPIs.test_disk_usageN)r   r   r   r   r   r   r   r   r   r   r
   r   r	   rH   r   r   r   r   r   r   r   r  r,   r,   r,   r-   r   *  s$    

		
	r   c                   @   s   e Zd Zdd ZdS )TestMiscc                 C   s4   t  }| |d | |t   | |tj d S )Nr   )r   assertGreaterrJ   resourcemmapPAGESIZE)rK   pagesizer,   r,   r-   test_getpagesize  s   zTestMisc.test_getpagesizeN)r   r   r   r
  r,   r,   r,   r-   r    s    r  __main__)run_from_namerD   )-r   r   r   rx   r}   r?   rm   r   rH   r   r   r   r   r   r   r   psutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r  r  psutil._psutil_posixr   r   r1   r3   r8   r<   r   r=   r   r  r   psutil.tests.runnerr  __file__r,   r,   r,   r-   <module>   s^   
< $y	