a
    QIh#C                     @   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
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dZ!dd Z"dd Z#dd Z$dd Z%d d! Z&ej'j(e d"d#G d$d% d%eZ)ej'j(e d"d#G d&d' d'eZ*ej'j(e d"d#G d(d) d)eZ+dS )+zPOSIX specific tests.    N)mock)AIX)BSD)LINUX)MACOS)OPENBSD)POSIX)SUNOS)AARCH64)HAS_NET_IO_COUNTERS)
PYTHON_EXE)PsutilTestCase)pytest)retry_on_failure)sh)skip_on_access_denied)spawn_testproc)	terminate)getpagesizec              	   C   s   dg}t r|d |dur0|dt|g nts8trD|d n
|d tr^| dd} |d	| g t|}t r| n| d
d }g }|D ]6}|	 }zt
|}W n ty   Y n0 || q|du r|S |d 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'   Q/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_posix.pyr   -   s0    

r   c                 C   s"   d}t rd}t||  }|d S )NcommandZcommr   )r	   r   split)r"   fieldr)   r'   r'   r(   ps_named   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   s   d}t rd}t|| S )NZrssZrssizer   r   r"   r+   r'   r'   r(   ps_rssv   s    r5   c                 C   s   d}t rd}t|| S )NZvszZvsizer3   r4   r'   r'   r(   ps_vsz}   s    r6   c           	   
   C   s   zt d|   }W n@ tyV } z(dt| v r@td W Y d }~n
d }~0 0 |dd }| }t|d d }t|d d }t|d d }t	|d	 
d
d}||||fS )Nzdf -k zdevice busyzdf returned EBUSY
r               %r.   )r   r   RuntimeErrorr   lowerr   skipr*   r   floatr   )	devicer1   errr&   fields	sys_totalsys_usedsys_freesys_percentr'   r'   r(   df   s    
rH   z
POSIX onlyreasonc                   @   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jepedddd Zd d! Ze d"d# Zejjed$dejjed%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"   rO   r'   r'   r(   tearDownClass   s    zTestProcess.tearDownClassc                 C   s,   t d| j}t| j }||ks(J d S )Nppid)r   r"   psutilProcessrT   )selfZppid_psZppid_psutilr'   r'   r(   	test_ppid   s    zTestProcess.test_ppidc                 C   s.   t d| j}t| j j}||ks*J d S )Nuid)r   r"   rU   rV   uidsreal)rW   Zuid_psZ
uid_psutilr'   r'   r(   test_uid   s    zTestProcess.test_uidc                 C   s.   t d| j}t| j j}||ks*J d S )NZrgid)r   r"   rU   rV   gidsr[   )rW   Zgid_psZ
gid_psutilr'   r'   r(   test_gid   s    zTestProcess.test_gidc                 C   s,   t d| j}t| j }||ks(J d S )Nuser)r   r"   rU   rV   username)rW   Zusername_psZusername_psutilr'   r'   r(   test_username   s    zTestProcess.test_usernamec                 C   s^   t  }tjdtd4}| t| jks2J |j	s<J W d    n1 sP0    Y  d S )Nzpsutil.pwd.getpwuidZside_effect)
rU   rV   r   patchKeyErrorr`   r   rZ   r[   called)rW   pZfunr'   r'   r(   test_username_no_resolution   s    z'TestProcess.test_username_no_resolutionc                 C   s<   t d t| j}t| j d d }||ks8J d S )N皙?r   r8   )timesleepr5   r"   rU   rV   memory_info)rW   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 }||ks8J d S )Nrh   r   r8   )ri   rj   r6   r"   rU   rV   rk   )rW   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|}||ksrJ d S )Nz\d.\dr.   z\d)r,   r"   ospathbasenamer>   rU   rV   namer/   r0   )rW   Zname_psZname_psutilr'   r'   r(   	test_name   s    
zTestProcess.test_namec              	   C   s   d}g d}t jd|dV t jd|d( t }| dksDJ W d    n1 sX0    Y  W d    n1 sv0    Y  d S )Nlong-program-name)long-program-name-extendedZfoobarpsutil._psplatform.Process.nameZreturn_value"psutil._psplatform.Process.cmdlinert   )r   rc   rU   rV   rq   )rW   rq   cmdlinerf   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ksDJ W d    n1 sX0    Y  W d    n1 sv0    Y  d S Nrs   rv   rw   rx   r   r.   rb   )r   rc   rU   ZAccessDeniedrV   rq   rW   rq   rf   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L t }ttj |  W d    n1 s^0    Y  W d    n1 s|0    Y  W d    n1 s0    Y  d S r{   )r   rc   rU   ZNoSuchProcessrV   r   raisesrq   r|   r'   r'   r(   test_name_long_cmdline_nsp_exc   s    
z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablerI   c                 C   s\   t d| j}t| j }tj|d}t|}tj|d}|||hv sXJ d S )Nr   z%H:%M:%S)	r   r"   rU   rV   Zcreate_timedatetimefromtimestampstrftimeround)rW   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||ks(J W n. tyX   |d t| }||ksTJ Y n0 d S rR   )r,   r"   rU   rV   exeAssertionErrorlen)rW   Zps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer'   r'   r(   test_exe  s    
zTestProcess.test_exec                 C   sT   t | j}dt| j }trDt|t|k rD||sPJ n||ksPJ d S )N )	r2   r"   joinrU   rV   ry   r
   r   
startswith)rW   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  }||ks$J d S )Nnice)r   r"   rU   rV   r   )rW   Zps_niceZpsutil_nicer'   r'   r(   	test_nice9  s    zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodrQ   rS   rX   r\   r^   ra   rg   r   r   rl   rm   rr   rz   r}   r   r   markskipifr   r   r   r   r   r	   r   r   r'   r'   r'   r(   rK      s8   

	

rK   c                   @   s   e Zd ZdZe dd Zejje	ddejje
d ddejje d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jjedde dd ZdS )TestSystemAPIszTest some system APIs.c                    s~   t td t ts$tr0d v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 | ]}| vr|qS r'   r'   .0x)pids_psr'   r(   
<listcomp>R      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    s   g | ]}| vr|qS r'   r'   r   )pids_psutilr'   r(   r   R  s   zdifference: )
sortedr   rU   Zpidsr   r   insertr   failr   )rW   
differencer'   )r   r   r(   	test_pidsE  s    zTestSystemAPIs.test_pidszunreliable on SUNOSrI   ifconfigzno ifconfig cmdznot supportedc                 C   sP   t d}tjddD ]6}| D ]}||r  qq | d| d| qd S )Nzifconfig -aT)Zperniczcouldn't find z nic in 'ifconfig -a' output
)r   rU   Znet_io_countersr*   r   r   )rW   r$   Znicr&   r'   r'   r(   test_nic_namesY  s    
zTestSystemAPIs.test_nic_namesc                 C   s   t d}| std|d}dd |D }dd |D }t|tt ksXJ | jt |d` t	t D ]B\}}|j
|| ksJ |j|| ksJ |jd urxt|j qxW d    n1 s0    Y  d S )Nwho -uno users on this systemr7   c                 S   s   g | ]}|  d  qS )r   r*   r   r'   r'   r(   r   p  r   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  d  qS )r   r   r   r'   r'   r(   r   q  r   rU   Zwho)r   r   r   r?   r*   r   rU   userssubTest	enumeraterq   Zterminalr"   rV   )rW   r1   linesr   Z	terminalsidxur'   r'   r(   
test_usersj  s    


zTestSystemAPIs.test_usersc                 C   s  t d}| stdd }td|}|r4d}nNtd|}|rJd}n8td|}|r`d}n"td	|}|rd}d
d |D }|std| | jt |dJ t	t D ],\}}t
j
|j|}||| ksJ qW d    n1 s0    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     r   z5TestSystemAPIs.test_users_started.<locals>.<listcomp>z&cannot interpret tstamp in who output
r   )r   r   r   r?   r/   findallr   rU   r   r   r   r   startedr   )rW   r1   Ztstampr   r   r   Zpsutil_valuer'   r'   r(   test_users_startedz  s6    
z!TestSystemAPIs.test_users_startedc              	   C   s~   t jdttjddT}tt  tj	t
  W d    n1 sH0    Y  |js\J W d    n1 sp0    Y  d S )Nzpsutil._psposix.os.killr.   rb   )r   rc   OSErrorerrnoEBADFr   r~   rU   _psposixZ
pid_existsrn   getpidre   rW   mr'   r'   r(   test_pid_exists_let_raise  s    .z(TestSystemAPIs.test_pid_exists_let_raisec              	   C   s~   t jdttjddT}tt  tj	t
  W d    n1 sH0    Y  |js\J W d    n1 sp0    Y  d S )Npsutil._psposix.os.waitpidr.   rb   )r   rc   r   r   r   r   r~   rU   r   wait_pidrn   r   re   r   r'   r'   r(   test_os_waitpid_let_raise  s    .z(TestSystemAPIs.test_os_waitpid_let_raisec              	   C   s   t jdttjdd\}ttjj	$ tjj
t dd W d    n1 sP0    Y  |jsdJ W d    n1 sx0    Y  d S )Nr   r.   rb   g{Gz?)timeout)r   rc   r   r   ZEINTRr   r~   rU   r   TimeoutExpiredr   rn   r   re   r   r'   r'   r(   test_os_waitpid_eintr  s    2z$TestSystemAPIs.test_os_waitpid_eintrc              	   C   sv   t jdddT}tt  tjt	  W d    n1 s@0    Y  |j
sTJ W d    n1 sh0    Y  d S )Nr   )r   rw   )r   rc   r   r~   r    rU   r   r   rn   r   re   r   r'   r'   r(   test_os_waitpid_bad_ret_status  s    .z-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc           	      C   s   d}t jddD ]}t |j}zt|j\}}}}W nV ty } z>t| }d|v sjd|v sjd|v rvW Y d }~q W Y d }~qd }~0 0 t	|j
| |k sJ t	|j| |k sJ t	|j| |k sJ t	|j| dksJ qd S )Ni  @ F)allzno such file or directoryzraw devices not supportedzpermission deniedr   )rU   Zdisk_partitions
disk_usageZ
mountpointrH   rA   r=   r   r>   abstotalusedfreepercent)	rW   Z	tolerancepartusagerD   rE   rF   rG   rB   r'   r'   r(   test_disk_usage  s&    zTestSystemAPIs.test_disk_usageN)r   r   r   r   r   r   r   r   r   r	   shutilwhichr   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   r   A  s$   


$
	
r   c                   @   s   e Zd Zdd ZdS )TestMiscc                 C   s4   t  }|dksJ |t  ks"J |tjks0J d S )Nr   )r   resourcemmapPAGESIZE)rW   Zpagesizer'   r'   r(   test_getpagesize  s    zTestMisc.test_getpagesizeN)r   r   r   r   r'   r'   r'   r(   r     s   r   )N),r   r   r   rn   r/   r   rM   ri   Zunittestr   rU   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   r6   rH   r   r   rK   r   r   r'   r'   r'   r(   <module>   sX   
7
 - !