<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ?                 @   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 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 Z"dd Z#dd Z$ej%e d G d!d" d"ej&Z'ej%e d G d#d$ d$ej&Z(e)d%kree* dS )&zPOSIX specific tests.    N)AIX)BSD)LINUX)OPENBSD)OSX)POSIX)SUNOS)callable)PY3)APPVEYOR)get_kernel_version)get_test_subprocess)mock)
PYTHON_EXE)reap_children)retry_before_failing)run_test_module_by_name)sh)skip_on_access_denied)TRAVIS)unittest)wait_for_pid)whichc             C   sp   t s| jdd} tr | jdd} tr0| jdd} t| }t sN|jdd j }yt|S  tk
rj   |S X d	S )
zkExpects a ps command with a -o argument and parse the result
    returning only the value of interest.
    z --no-headers  z-o startz-o stimez-o rssz	-o rssize
   N)	r   replacer   r   r   splitstripint
ValueError)cmdoutput r#   "/usr/lib64/python3.6/test_posix.pyps+   s    r%   c             C   s&   d}t rd}td|| f jdd S )NcommandZcommzps --no-headers -o %s -p %sr   r   )r   r%   r   )pidfieldr#   r#   r$   ps_nameI   s    r)   c             C   s    d}t strd}td|| f S )Nr&   argszps --no-headers -o %s -p %s)r   r   r%   )r'   r(   r#   r#   r$   ps_argsP   s    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jepeddd Zdd  Zd!d" Zejed#ejed$d%d& Z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| _t| j d S )Nz-Ez-O)stdin)r   r   
subprocessPIPEr'   r   )clsr#   r#   r$   
setUpClass[   s    
zTestProcess.setUpClassc             C   s
   t   d S )N)r   )r0   r#   r#   r$   tearDownClassa   s    zTestProcess.tearDownClassc             C   s.   t d| j }tj| jj }| j|| d S )Nzps --no-headers -o ppid -p %s)r%   r'   psutilProcessZppidassertEqual)selfZppid_psZppid_psutilr#   r#   r$   	test_ppide   s    zTestProcess.test_ppidc             C   s0   t d| j }tj| jj j}| j|| d S )Nzps --no-headers -o uid -p %s)r%   r'   r3   r4   uidsrealr5   )r6   Zuid_psZ
uid_psutilr#   r#   r$   test_uidj   s    zTestProcess.test_uidc             C   s0   t d| j }tj| jj j}| j|| d S )Nzps --no-headers -o rgid -p %s)r%   r'   r3   r4   Zgidsr9   r5   )r6   Zgid_psZ
gid_psutilr#   r#   r$   test_gido   s    zTestProcess.test_gidc             C   s.   t d| j }tj| jj }| j|| d S )Nzps --no-headers -o user -p %s)r%   r'   r3   r4   usernamer5   )r6   Zusername_psZusername_psutilr#   r#   r$   test_usernamet   s    zTestProcess.test_usernamec             C   sJ   t j }tjdtd*}| j|j t|j j	 |j
s<tW d Q R X d S )Nzpsutil.pwd.getpwuid)side_effect)r3   r4   r   patchKeyErrorr5   r<   strr8   r9   calledAssertionError)r6   pZfunr#   r#   r$   test_username_no_resolutiony   s    z'TestProcess.test_username_no_resolutionc             C   s@   t jd td| j }tj| jj d d }| j|| d S )Ng?zps --no-headers -o rss -p %sr   i   )timesleepr%   r'   r3   r4   memory_infor5   )r6   Zrss_psZ
rss_psutilr#   r#   r$   test_rss_memory   s    
zTestProcess.test_rss_memoryc             C   s@   t jd td| j }tj| jj d d }| j|| d S )Ng?zps --no-headers -o vsz -p %sr   i   )rF   rG   r%   r'   r3   r4   rH   r5   )r6   Zvsz_psZ
vsz_psutilr#   r#   r$   test_vsz_memory   s    
zTestProcess.test_vsz_memoryc             C   sZ   t | j}tjj|j }tj| jj j }t	j
dd|}t	j
dd|}| j|| d S )Nz\d.\d )r)   r'   ospathbasenamelowerr3   r4   nameresubr5   )r6   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j }| j|j d W d Q R X W d Q R X d S )Nzlong-program-namezlong-program-name-extendedZfooZbarzpsutil._psplatform.Process.name)return_valuez"psutil._psplatform.Process.cmdline)r   r?   r3   r4   r5   rP   )r6   rP   cmdlinerD   r#   r#   r$   test_name_long   s    


zTestProcess.test_name_longc             C   s\   d}t jd|d@ t jdtjddd tj }| j|j d W d Q R X W d Q R X d S )Nzlong-program-namezpsutil._psplatform.Process.name)rT   z"psutil._psplatform.Process.cmdliner   rK   )r>   )r   r?   r3   AccessDeniedr4   r5   rP   )r6   rP   rD   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jddd tj }| jtj|j W d Q R X W d Q R X d S )Nzlong-program-namezpsutil._psplatform.Process.name)rT   z"psutil._psplatform.Process.cmdliner   rK   )r>   )r   r?   r3   ZNoSuchProcessr4   assertRaisesrP   )r6   rP   rD   r#   r#   r$   test_name_long_cmdline_nsp_exc   s    
z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablec             C   sh   t d| j jdd }tj| jj }tjj|jd}t	|}tjj|jd}| j
|||g d S )Nzps --no-headers -o start -p %sr   r   z%H:%M:%S)r%   r'   r   r3   r4   Zcreate_timedatetimeZfromtimestampZstrftimeroundassertIn)r6   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| jj }y| j|| W n0 tk
rZ   |d t| }| j|| Y nX d S )N)r)   r'   r3   r4   Zexer5   rC   len)r6   Zps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer#   r#   r$   test_exe   s    
zTestProcess.test_exec             C   s0   t | j}djtj| jj }| j|| d S )Nr   )r+   r'   joinr3   r4   rU   r5   )r6   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j j }| j|| d S )Nzps --no-headers -o nice -p %s)r%   r'   r3   r4   nicer5   )r6   Zps_niceZpsutil_nicer#   r#   r$   	test_nice   s    zTestProcess.test_nicec       	         s   fdd}t jtj }g }ddddddd	d
ddg
}trNt dk rN|jd trft dk rf|jd xtt jD ]  jdsr |krqrqry0|j	 }xt
dD ]}||  qW |j	 }W n t jk
r   Y qrX t|| dkrrd ||f }|j| qrW |r| jddj|  d S )Nc                sB   f }t |  d }|d k	r:t|r: dkr0tjf}||  n| d S )Nrlimit)getattrr	   r3   ZRLIMIT_NOFILE)rD   attrr*   )rP   r#   r$   call   s    
z&TestProcess.test_num_fds.<locals>.callZ	terminatekillZsuspendZresumerc   Zsend_signalwaitZchildrenZas_dictZmemory_info_ex      $   re      Znum_ctx_switches_r   z@failure while processing Process.%s method (before=%s, after=%s)r   )rk   rl   rm   )rk   rl   rn   )r3   r4   rL   getpidr   r   appenddir
startswithZnum_fdsrangerW   absfailra   )	r6   rh   rD   ZfailuresZignored_namesZnum1xZnum2rv   r#   )rP   r$   test_num_fds   s4    



zTestProcess.test_num_fdsN)__name__
__module____qualname____doc__classmethodr1   r2   r7   r:   r;   r=   rE   r   r   rI   rJ   rS   rV   rX   rZ   r   skipIfr   r   r^   r`   rb   r   r   rd   rx   r#   r#   r#   r$   r,   W   s,   			

r,   c               @   s   e Zd ZdZe dd Zejedeje	deje
d ddd	 Zejep`e	o`ej  d
e dd Zdd Zdd Zdd Zdd Zejeddd ZdS )TestSystemAPIszTest some system APIs.c             C   s   t strddddg}nddddg}t|tjd}|j d j }|j dksPtt	rbt
|tjj}g }x<|jdd	d  D ]&}|rzt|j d j }|j| qzW |j|j tj }|j  |j  tstrd|kr|jdd | j|| d S )
Nr%   z-Az-or'   Zax)stdoutr   r   r   )r   r   r   r.   r/   Zcommunicater   ZpollrC   r
   rA   sysr   encodingr   r   rq   remover'   r3   Zpidssortr   r   insertr5   )r6   r!   rD   r"   Zpids_psliner'   Zpids_psutilr#   r#   r$   	test_pids   s(    zTestSystemAPIs.test_pidszunreliable on SUNOSzunreliable on TRAVISZifconfigzno ifconfig cmdc             C   sV   t d}xHtjddj D ]4}x.|j D ]}|j|r(P q(W | jd||f  qW d S )Nzifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   r3   Znet_io_counterskeysr   rs   rv   )r6   r"   Znicr   r#   r#   r$   test_nic_names?  s    
zTestSystemAPIs.test_nic_namesz unreliable on APPVEYOR or TRAVISc             C   sx   t d}|jd}dd |D }dd |D }| jt|ttj  x,tj D ] }| j|j| | j|j| qPW d S )NZwhor   c             S   s   g | ]}|j  d  qS )r   )r   ).0rw   r#   r#   r$   
<listcomp>T  s    z-TestSystemAPIs.test_users.<locals>.<listcomp>c             S   s   g | ]}|j  d  qS )r   )r   )r   rw   r#   r#   r$   r   U  s    )	r   r   r5   r_   r3   usersr]   rP   Zterminal)r6   outlinesr   Z	terminalsur#   r#   r$   
test_usersN  s    
zTestSystemAPIs.test_usersc             C   sF   t jdttjdd&}| jttjjt	j
  |js8tW d Q R X d S )Nzpsutil._psposix.os.killrK   )r>   )r   r?   OSErrorerrnoEBADFrY   r3   _psposixZ
pid_existsrL   rp   rB   rC   )r6   mr#   r#   r$   test_pid_exists_let_raise[  s    z(TestSystemAPIs.test_pid_exists_let_raisec             C   sF   t jdttjdd&}| jttjjt	j
  |js8tW d Q R X d S )Nzpsutil._psposix.os.waitpidrK   )r>   )r   r?   r   r   r   rY   r3   r   wait_pidrL   rp   rB   rC   )r6   r   r#   r#   r$   test_os_waitpid_let_raised  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
j dd |js@tW d Q R X d S )Nzpsutil._psposix.os.waitpidrK   )r>   g{Gz?)Ztimeout)r   r?   r   r   ZEINTRrY   r3   r   ZTimeoutExpiredr   rL   rp   rB   rC   )r6   r   r#   r#   r$   test_os_waitpid_eintrl  s    z$TestSystemAPIs.test_os_waitpid_eintrc             C   s>   t jddd&}| jttjjtj  |j	s0t
W d Q R X d S )Nzpsutil._psposix.os.waitpidr   )rT   )r   r   )r   r?   rY   r    r3   r   r   rL   rp   rB   rC   )r6   r   r#   r#   r$   test_os_waitpid_bad_ret_statusu  s
    
z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc       
      C   s   dd }d}xt jddD ]}t j|j}y||j\}}}}W nL tk
r }	 z0t|	j }	d|	ksvd|	ksvd	|	krzwn W Y d d }	~	X qX | j|j	||d
 | j|j
||d
 | j|j||d
 | j|j|dd
 qW d S )Nc             S   sv   t d|  j }|jdd }|j }t|d d }t|d d }t|d d }t|d jdd	}||||fS )
Nzdf -k %sr   r   i   rk         %rK   )r   r   r   r   floatr   )devicer   r   Zfieldstotalusedfreepercentr#   r#   r$   df  s    z*TestSystemAPIs.test_disk_usage.<locals>.dfr   i   F)allzno such file or directoryzraw devices not supportedzpermission denied)Zdeltar   i   i  @ )r3   Zdisk_partitionsZ
disk_usageZ
mountpointr   RuntimeErrorrA   rO   ZassertAlmostEqualr   r   r   r   )
r6   r   Z	tolerancepartZusager   r   r   r   errr#   r#   r$   test_disk_usage~  s"    
zTestSystemAPIs.test_disk_usageN)ry   rz   r{   r|   r   r   r   r~   r   r   r   r   r   r3   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r     s   

			r   __main__)+r|   r[   r   rL   rQ   r.   r   rF   r3   r   r   r   r   r   r   r   Zpsutil._compatr	   r
   Zpsutil.testsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r)   r+   r~   ZTestCaser,   r   ry   __file__r#   r#   r#   r$   <module>   sT   
 E
 
