
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    =_';                     @   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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rBd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 )+zPOSIX specific tests.    N)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)
CI_TESTING)spawn_testproc)HAS_NET_IO_COUNTERS)mock)PsutilTestCase)
PYTHON_EXE)retry_on_failure)sh)skip_on_access_denied)	terminate)unittest)which)getpagesizec              	   C   s   dg}t r|d |dk	r0|dt|g nts8trD|d n
|d trftd}|| | } |d| g t|}t r|	 }n|	 d	d }g }|D ]8}|
 }zt|}W n tk
r   Y nX || q|dkr|S |d
 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-AZax)commandcommstartZstimez-o   r   )r   appendextendstrr   r   setgetr   
splitlinesstripint
ValueError)fmtpidcmdZfmt_mapoutputZ
all_outputline r)   J/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_posix.pyr   -   s6    


r   c                 C   s   d}t rd}t||  d S )Nr   r   r   )r   r   splitr%   fieldr)   r)   r*   ps_namei   s    r.   c                 C   s   d}t strd}t|| S )Nr   args)r   r   r   r,   r)   r)   r*   ps_argsp   s    r0   c                 C   s   d}t rd}t|| S )NZrssZrssizer   r   r,   r)   r)   r*   ps_rssw   s    r2   c                 C   s   d}t rd}t|| S )NZvszZvsizer1   r,   r)   r)   r*   ps_vsz~   s    r3   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peddd Zdd  Z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%   r8   r)   r)   r*   tearDownClass   s    zTestProcess.tearDownClassc                 C   s,   t d| j}t| j }| || d S )Nppid)r   r%   psutilProcessr=   assertEqual)selfZppid_psZppid_psutilr)   r)   r*   	test_ppid   s    zTestProcess.test_ppidc                 C   s.   t d| j}t| j j}| || d S )Nuid)r   r%   r>   r?   uidsrealr@   )rA   Zuid_psZ
uid_psutilr)   r)   r*   test_uid   s    zTestProcess.test_uidc                 C   s.   t d| j}t| j j}| || d S )NZrgid)r   r%   r>   r?   ZgidsrE   r@   )rA   Zgid_psZ
gid_psutilr)   r)   r*   test_gid   s    zTestProcess.test_gidc                 C   s,   t d| j}t| j }| || d S )Nuser)r   r%   r>   r?   usernamer@   )rA   Zusername_psZusername_psutilr)   r)   r*   test_username   s    zTestProcess.test_usernamec              	   C   sJ   t  }tjdtd*}| | t| j	 |j
s<tW 5 Q R X d S )Nzpsutil.pwd.getpwuidside_effect)r>   r?   r   patchKeyErrorr@   rI   r   rD   rE   calledAssertionError)rA   pfunr)   r)   r*   test_username_no_resolution   s    z'TestProcess.test_username_no_resolutionc                 C   s<   t d t| j}t| j d d }| || d S )N皙?r      )timesleepr2   r%   r>   r?   memory_infor@   )rA   Zrss_psZ
rss_psutilr)   r)   r*   test_rss_memory   s    

zTestProcess.test_rss_memoryc                 C   s<   t d t| j}t| j d d }| || d S )NrT   r   rU   )rV   rW   r3   r%   r>   r?   rX   r@   )rA   Zvsz_psZ
vsz_psutilr)   r)   r*   test_vsz_memory   s    

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)r.   r%   ospathbasenamelowerr>   r?   nameresubr@   )rA   Zname_psZname_psutilr)   r)   r*   	test_name   s    
zTestProcess.test_namec              
   C   s^   d}dddg}t jd|d8 t jd|d t }| | d W 5 Q R X W 5 Q R X d S )Nlong-program-namezlong-program-name-extendedZfooZbarpsutil._psplatform.Process.nameZreturn_value"psutil._psplatform.Process.cmdline)r   rM   r>   r?   r@   r`   )rA   r`   cmdlinerQ   r)   r)   r*   test_name_long   s    
zTestProcess.test_name_longc              
   C   s\   d}t jd|d@ t jdtddd t }| | d W 5 Q R X W 5 Q R X d S Nrd   re   rf   rg   r   r[   rK   )r   rM   r>   AccessDeniedr?   r@   r`   rA   r`   rQ   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@ t jdtddd t }| tj|j W 5 Q R X W 5 Q R X d S rj   )r   rM   r>   NoSuchProcessr?   assertRaisesr`   rl   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%   r>   r?   Zcreate_timedatetimefromtimestampstrftimeroundassertIn)rA   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 n0 tk
rZ   |d t| }| || Y nX d S r;   )r.   r%   r>   r?   Zexer@   rP   len)rA   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 )r0   r%   joinr>   r?   rh   r@   )rA   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%   r>   r?   r|   r@   )rA   Zps_niceZpsutil_nicer)   r)   r*   	test_nice  s    zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodr:   r<   rB   rF   rG   rJ   rS   r   r   rY   rZ   rc   ri   rm   rp   r   skipIfr   r   rv   rx   r{   r   r   r}   r)   r)   r)   r*   r4      s6   

	



r4   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r0d kr0 dd t t dkrz fddD fdd D  }| dt	|  d S )Nr%   r   r   c                    s   g | ]}| kr|qS r)   r)   .0x)pids_psr)   r*   
<listcomp>4  s      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    s   g | ]}| kr|qS r)   r)   r   )pids_psutilr)   r*   r   5  s      zdifference: )
sortedr   r>   Zpidsr   r   insertrw   failr   )rA   
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 ]2}| D ]}||r$ qq$| d||f  qd S )Nzifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   r>   Znet_io_counterskeysr+   
startswithr   )rA   r'   Znicr(   r)   r)   r*   test_nic_names:  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
| q`d S )Nwhozno users on this system
c                 S   s   g | ]}|  d  qS )r   r+   r   r)   r)   r*   r   O  s     z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  d  qS )r   r   r   r)   r)   r*   r   P  s     )r   r!   ZskipTestr+   r@   rw   r>   usersru   r`   terminal)rA   outlinesr   Z	terminalsur)   r)   r*   
test_usersH  s    

zTestSystemAPIs.test_usersc              	   C   sF   t jdttjdd&}| ttjjt	
  |js8tW 5 Q R X d S )Nzpsutil._psposix.os.killr[   rK   )r   rM   OSErrorerrnoEBADFro   r>   _psposixZ
pid_existsr\   getpidrO   rP   rA   mr)   r)   r*   test_pid_exists_let_raiseV  s    
z(TestSystemAPIs.test_pid_exists_let_raisec              	   C   sF   t jdttjdd&}| ttjjt	
  |js8tW 5 Q R X d S )Npsutil._psposix.os.waitpidr[   rK   )r   rM   r   r   r   ro   r>   r   wait_pidr\   r   rO   rP   r   r)   r)   r*   test_os_waitpid_let_raise_  s    
z(TestSystemAPIs.test_os_waitpid_let_raisec              	   C   sN   t jdttjdd.}| jtjjtjj	t
 dd |js@tW 5 Q R X d S )Nr   r[   rK   g{Gz?)timeout)r   rM   r   r   ZEINTRro   r>   r   TimeoutExpiredr   r\   r   rO   rP   r   r)   r)   r*   test_os_waitpid_eintrg  s    
  z$TestSystemAPIs.test_os_waitpid_eintrc              	   C   s>   t jddd&}| ttjjt  |j	s0t
W 5 Q R X d S )Nr   )r   rf   )r   rM   ro   r#   r>   r   r   r\   r   rO   rP   r   r)   r)   r*   test_os_waitpid_bad_ret_statusp  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 nR tk
r }	 z4t|	 }	d|	kstd|	kstd|	kr~W Y 
qn W 5 d }	~	X Y qX | 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   rU            %r[   )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   )r>   Zdisk_partitions
disk_usage
mountpointr   RuntimeErrorr   r_   ZassertAlmostEqualr   r   r   r   )
rA   r   Z	tolerancepartusager   r   r   r   errr)   r)   r*   test_disk_usagey  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)   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assertGreaterr@   resourcemmapZPAGESIZE)rA   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_name)N)-r   rq   r   r\   ra   r6   rV   r>   r   r   r   r   r   r   r   Zpsutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Zpsutil._psutil_posixr   r   r.   r0   r2   r3   r   r4   r   r   r~   Zpsutil.tests.runnerr   __file__r)   r)   r)   r*   <module>   sZ   
< y	
