o
    adfC                     @   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 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)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r/| dd} |d	| g t|}t r@| n| d
d }g }|D ]}|	 }zt
|}W n	 tya   Y nw || qL|du rn|S |d S )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startZstimez-o   r   )r   appendextendstrr   r   replacer   
splitlinesstripint
ValueError)fmtpidcmdoutput
all_outputline r&   `/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/psutil/tests/test_posix.pyr   -   s2   

r   c                 C   s   d}t rd}t||  d S )NcommandZcommr   )r   r   splitr!   fieldr&   r&   r'   ps_namee   s   r,   c                 C   s0   d}t strd}t|| }tdd|}| S )Nr(   argsz\(python.*?\)$ )r   r   r   resubr   )r!   r+   outr&   r&   r'   ps_argsl   s   
r2   c                 C      d}t rd}t|| S )NZrssZrssizer   r   r*   r&   r&   r'   ps_rssv      
r5   c                 C   r3   )NZvszZvsizer4   r*   r&   r&   r'   ps_vsz}   r6   r7   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!   r<   r&   r&   r'   tearDownClass   s   zTestProcess.tearDownClassc                 C   ,   t d| j}t| j }| || d S )Nppid)r   r!   psutilProcessrB   assertEqual)selfZppid_psZppid_psutilr&   r&   r'   	test_ppid      zTestProcess.test_ppidc                 C   .   t d| j}t| j j}| || d S )Nuid)r   r!   rC   rD   uidsrealrE   )rF   Zuid_psZ
uid_psutilr&   r&   r'   test_uid      zTestProcess.test_uidc                 C   rI   )NZrgid)r   r!   rC   rD   gidsrL   rE   )rF   Zgid_psZ
gid_psutilr&   r&   r'   test_gid   rN   zTestProcess.test_gidc                 C   rA   )Nuser)r   r!   rC   rD   usernamerE   )rF   Zusername_psZusername_psutilr&   r&   r'   test_username   rH   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Zside_effect)rC   rD   r   patchKeyErrorrE   rR   r   rK   rL   called)rF   pZ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sleepr5   r!   rC   rD   memory_inforE   )rF   Zrss_psZ
rss_psutilr&   r&   r'   test_rss_memory      

zTestProcess.test_rss_memoryc                 C   rZ   )Nr[   r   r\   )r]   r^   r7   r!   rC   rD   r_   rE   )rF   Zvsz_psZ
vsz_psutilr&   r&   r'   test_vsz_memory   ra   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.\dr.   z\d)r,   r!   ospathbasenamelowerrC   rD   namer/   r0   rE   )rF   Zname_psZ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-extendedZfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdlinerj   )r   rU   rC   rD   rE   rg   )rF   rg   cmdlinerX   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 Nri   rl   rm   ro   r   r.   rT   )r   rU   rC   ZAccessDeniedrD   rE   rg   rF   rg   rX   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 rr   )r   rU   rC   ZNoSuchProcessrD   assertRaisesrg   rs   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!   rC   rD   Zcreate_timedatetimefromtimestampstrftimeroundZassertIn)rF   Ztime_psZtime_psutilZtime_psutil_tstampZround_time_psutilZ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 r?   )r,   r!   rC   rD   exerE   AssertionErrorlen)rF   Zps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer&   r&   r'   test_exe  s   
zTestProcess.test_exec                 C   s0   t | j}dt| j }| || d S )N )r2   r!   joinrC   rD   rp   rE   )rF   Z
ps_cmdlineZ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!   rC   rD   r   rE   )rF   Zps_niceZpsutil_nicer&   r&   r'   	test_nice%  s   zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodr>   r@   rG   rM   rP   rS   rY   r   r   r`   rb   rh   rq   rt   rv   unittestskipIfr   r   r{   r   r   r   r   r   r&   r&   r&   r'   r8      s:    

	




r8   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 d
d Z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   >  s    zdifference: )
sortedr   rC   Zpidsr   r   insertr~   failr   )rF   
differencer&   )r   r   r'   	test_pids1  s   zTestSystemAPIs.test_pidszunreliable on SUNOSifconfigzno ifconfig cmdznot supportedc                 C   sL   t d}tjddD ]}| D ]	}||r n
q| d||f q
d S )Nzifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   rC   Znet_io_countersr)   
startswithr   )rF   r#   Znicr%   r&   r&   r'   test_nic_namesE  s   
zTestSystemAPIs.test_nic_namesc                 C   s   t d}| s| d|d}dd |D }dd |D }| t|tt  | jt |d1 t	t D ]!\}}| |j
||  | |j||  |jd ur]t|j q<W d    d S 1 siw   Y  d S )Nwho -uno users on this system
c                 S      g | ]}|  d  qS )r   r)   r   r&   r&   r'   r   [  r   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   r   )r   r   r   r&   r&   r'   r   \  r   rC   Zwho)r   r   skipTestr)   rE   r~   rC   userssubTest	enumeraterg   Zterminalr!   rD   )rF   r1   linesr   Z	terminalsidxur&   r&   r'   
test_usersU  s    


"zTestSystemAPIs.test_usersc                 C   s  t d}| s| dd }td|}|rd}n'td|}|r%d}ntd|}|r0d}ntd	|}|rAd}d
d |D }|sJtd| | jt	 |d& t
t	 D ]\}}tj|j|}| |||  qZW d    d S 1 s|w   Y  d S )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\dc                 S   s   g | ]}|  qS r&   )
capitalizer   r&   r&   r'   r   ~  s    z5TestSystemAPIs.test_users_started.<locals>.<listcomp>z(cannot interpret tstamp in who output
%sr   )r   r   r   r/   findallr   ZSkipTestr   rC   r   r   rw   rx   startedry   rE   )rF   r1   Ztstampr   r   r   Zpsutil_valuer&   r&   r'   test_users_startede  s>   
"z!TestSystemAPIs.test_users_startedc                 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.killr.   rT   )r   rU   OSErrorerrnoEBADFru   rC   _psposixZ
pid_existsrc   getpidrW   rF   mr&   r&   r'   test_pid_exists_let_raise  s   "z(TestSystemAPIs.test_pid_exists_let_raisec                 C   r   )Npsutil._psposix.os.waitpidr.   rT   )r   rU   r   r   r   ru   rC   r   wait_pidrc   r   rW   r   r&   r&   r'   test_os_waitpid_let_raise  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   r.   rT   g{Gz?)timeout)r   rU   r   r   ZEINTRru   rC   r   TimeoutExpiredr   rc   r   rW   r   r&   r&   r'   test_os_waitpid_eintr  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   rm   )
r   rU   ru   r   rC   r   r   rc   r   rW   r   r&   r&   r'   test_os_waitpid_bad_ret_status  s   "z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc           
         s    fdd}d}t jddD ]]}t |j}z||j\}}}}W n% tyF }	 zt|	 }	d|	v s;d|	v s;d|	v rAW Y d }	~	q d }	~	ww  j|j	||d	  j|j
||d	  j|j||d	  j|j|d
d	 qd S )Nc           	   
      s   z
t d|   }W n ty$ } zdt| v r d d }~ww |dd }| }t|d d }t|d d }t|d d }t|d	 	d
d}||||fS )Nzdf -k %szdevice busyzdf returned EBUSYr   r   r\            %r.   )
r   r   RuntimeErrorr   rf   r   r)   r   floatr   )	devicer1   errr%   fieldstotalusedfreepercentrF   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   )rC   Zdisk_partitions
disk_usageZ
mountpointr   r   r   rf   ZassertAlmostEqualr   r   r   r   )
rF   r   Z	tolerancepartusager   r   r   r   r   r&   r   r'   test_disk_usage  s(   zTestSystemAPIs.test_disk_usageN)r   r   r   r   r   r   r   r   r   r   r	   r   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   ZassertGreaterrE   resourcemmapPAGESIZE)rF   Zpagesizer&   r&   r'   test_getpagesize  s   zTestMisc.test_getpagesizeN)r   r   r   r   r&   r&   r&   r'   r     s    r   __main__)run_from_namer?   ),r   rw   r   rc   r/   r:   r]   r   rC   r   r   r   r   r   r   r   Zpsutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r   Zpsutil._psutil_posixr   r   r,   r2   r5   r7   r   r8   r   r   r   Zpsutil.tests.runnerr   __file__r&   r&   r&   r'   <module>   s^   
8
 ) 4