U
    ;g#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k	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 ]8}|	 }zt
|}W n tk
r   Y nX || q|dk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-AZaxstartZstimez-o   r   )r   appendextendstrr	   r   replacer   
splitlinesstripint
ValueError)fmtpidcmdoutput
all_outputline r&   W/opt/bot/vods_filmes/script/venv/lib/python3.8/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    
r1   c                 C   s   d}t rd}t|| S )NZrssZrssizer   r   r!   r*   r&   r&   r'   ps_rssv   s    r4   c                 C   s   d}t rd}t|| S )NZvszZvsizer2   r3   r&   r&   r'   ps_vsz}   s    r5   c           	   
   C   s   zt d|   }W n> tk
rT } z dt| krBtd W 5 d }~X Y nX |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   )	devicer0   errr%   fields	sys_totalsys_usedsys_freesys_percentr&   r&   r'   df   s    
rG   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!   rN   r&   r&   r'   tearDownClass   s    zTestProcess.tearDownClassc                 C   s,   t d| j}t| j }||ks(td S )Nppid)r   r!   psutilProcessrS   AssertionError)selfZppid_psZppid_psutilr&   r&   r'   	test_ppid   s    zTestProcess.test_ppidc                 C   s.   t d| j}t| j j}||ks*td S )Nuid)r   r!   rT   rU   uidsrealrV   )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*td S )NZrgid)r   r!   rT   rU   Zgidsr[   rV   )rW   Zgid_psZ
gid_psutilr&   r&   r'   test_gid   s    zTestProcess.test_gidc                 C   s,   t d| j}t| j }||ks(td S )Nuser)r   r!   rT   rU   usernamerV   )rW   Zusername_psZusername_psutilr&   r&   r'   test_username   s    zTestProcess.test_usernamec              	   C   sJ   t  }tjdtd*}| t| jks2t	|j
s<t	W 5 Q R X d S )Nzpsutil.pwd.getpwuidZside_effect)rT   rU   r   patchKeyErrorr_   r   rZ   r[   rV   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s8td S )N皙?r   r7   )timesleepr4   r!   rT   rU   memory_inforV   )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s8td S )Nrg   r   r7   )rh   ri   r5   r!   rT   rU   rj   rV   )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srtd S )Nz\d.\dr-   z\d)r+   r!   ospathbasenamer=   rT   rU   namer.   r/   rV   )rW   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ksFtW 5 Q R X W 5 Q R X d S )Nlong-program-namezlong-program-name-extendedZfoobarpsutil._psplatform.Process.nameZreturn_value"psutil._psplatform.Process.cmdline)r   rb   rT   rU   rp   rV   )rW   rp   cmdlinere   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sDtW 5 Q R X W 5 Q R X d S Nrr   rt   ru   rv   r   r-   ra   )r   rb   rT   ZAccessDeniedrU   rp   rV   rW   rp   re   r&   r&   r'   test_name_long_cmdline_ad_exc   s    
z)TestProcess.test_name_long_cmdline_ad_excc                 C   sl   d}t jd|dP t jdtddd. t }ttj |  W 5 Q R X W 5 Q R X W 5 Q R X d S ry   )r   rb   rT   ZNoSuchProcessrU   r   raisesrp   rz   r&   r&   r'   test_name_long_cmdline_nsp_exc   s    
z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablerH   c                 C   s\   t d| j}t| j }tj|d}t|}tj|d}|||hksXt	d S )Nr   z%H:%M:%S)
r   r!   rT   rU   Zcreate_timedatetimefromtimestampstrftimeroundrV   )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(tW n0 tk
rZ   |d t| }||ksVtY nX d S rQ   )r+   r!   rT   rU   exerV   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||sPt	n||ksPt	d S )N )
r1   r!   joinrT   rU   rw   r
   r   
startswithrV   )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$td S )Nnice)r   r!   rT   rU   r   rV   )rW   Zps_niceZpsutil_nicer&   r&   r'   	test_nice9  s    zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodrP   rR   rX   r\   r]   r`   rf   r   r   rk   rl   rq   rx   r{   r}   r   markskipifr   r   r   r   r   r	   r   r   r&   r&   r&   r'   rJ      s8   

	

rJ   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 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>R  s      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    s   g | ]}| kr|qS r&   r&   r   )pids_psutilr&   r'   r   R  s     zdifference: )
sortedr   rT   Zpidsr   r   insertr   failr   )rW   
differencer&   )r   r   r'   	test_pidsE  s    zTestSystemAPIs.test_pidszunreliable on SUNOSrH   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   rT   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sXt| j	t |dV t
t D ]B\}}|j|| kst|j|| kst|jd k	rxt|j qxW 5 Q R X d S )Nwho -uno users on this systemr6   c                 S   s   g | ]}|  d  qS )r   r)   r   r&   r&   r'   r   p  s     z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  d  qS )r   r   r   r&   r&   r'   r   q  s     rT   Zwho)r   r   r   r>   r)   r   rT   usersrV   subTest	enumeraterp   Zterminalr!   rU   )rW   r0   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@ t	t D ],\}}t
j
|j|}||| kstqW 5 Q R X 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
r   )r   r   r   r>   r.   findallr   rT   r   r   r~   r   startedr   rV   )rW   r0   Ztstampr   r   r   Zpsutil_valuer&   r&   r'   test_users_startedz  s6    
z!TestSystemAPIs.test_users_startedc              
   C   sV   t jdttjdd6}tt tj	t
  W 5 Q R X |jsHtW 5 Q R X d S )Nzpsutil._psposix.os.killr-   ra   )r   rb   OSErrorerrnoEBADFr   r|   rT   _psposixZ
pid_existsrm   getpidrd   rV   rW   mr&   r&   r'   test_pid_exists_let_raise  s     
z(TestSystemAPIs.test_pid_exists_let_raisec              
   C   sV   t jdttjdd6}tt tj	t
  W 5 Q R X |jsHtW 5 Q R X d S )Npsutil._psposix.os.waitpidr-   ra   )r   rb   r   r   r   r   r|   rT   r   wait_pidrm   r   rd   rV   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 5 Q R X |jsPtW 5 Q R X d S )Nr   r-   ra   g{Gz?)timeout)r   rb   r   r   ZEINTRr   r|   rT   r   TimeoutExpiredr   rm   r   rd   rV   r   r&   r&   r'   test_os_waitpid_eintr  s     
z$TestSystemAPIs.test_os_waitpid_eintrc              
   C   sN   t jddd6}tt tjt	  W 5 Q R X |j
s@tW 5 Q R X d S )Nr   )r   ru   )r   rb   r   r|   r   rT   r   r   rm   r   rd   rV   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 nP tk
r } z2t| }d|ksld|ksld|krtW Y q W 5 d }~X Y qX t	|j
| |k stt	|j| |k stt	|j| |k stt	|j| dkstqd S )Ni  @ F)allzno such file or directoryzraw devices not supportedzpermission deniedr   )rT   Zdisk_partitions
disk_usageZ
mountpointrG   r@   r<   r   r=   abstotalrV   usedfreepercent)	rW   Z	tolerancepartusagerC   rD   rE   rF   rA   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t|t  ks"t|tjks0td S )Nr   )r   rV   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   rm   r.   r   rL   rh   Zunittestr   rT   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+   r1   r4   r5   rG   r   r   rJ   r   r   r&   r&   r&   r'   <module>   sX   
7
 - !