U
    (Û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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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$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ràdd(l*m+Z+ e+e,ƒ dS )*zPOSIX specific tests.é    N)ÚAIX)ÚBSD)ÚLINUX)ÚMACOS)ÚOPENBSD)ÚPOSIX)ÚSUNOS)Ú
CI_TESTING)Ú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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ÚoutputÚ
all_outputÚline© r)   ú;/tmp/pip-unpacked-wheel-l83rk7k5/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_namej   s    r.   c                 C   s   d}t strd}t|| ƒS )Nr   Úargs)r   r   r   r,   r)   r)   r*   Úps_argsq   s    r0   c                 C   s   d}t rd}t|| ƒS )NZrssZrssize©r   r   r,   r)   r)   r*   Úps_rssx   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pže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$   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©Zside_effect)r>   r?   r   ÚpatchÚKeyErrorr@   rI   r   rD   rE   ÚcalledÚAssertionError)rA   Ú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 }|  ||¡ 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 )NrR   r   rS   )rT   rU   r3   r$   r>   r?   rV   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fooÚbarúpsutil._psplatform.Process.name©Zreturn_valueú"psutil._psplatform.Process.cmdline)r   rL   r>   r?   r@   r^   )rA   r^   ÚcmdlinerP   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 ©Nrb   rd   re   rf   r   rY   rK   )r   rL   r>   ZAccessDeniedr?   r@   r^   ©rA   r^   rP   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 ri   )r   rL   r>   ZNoSuchProcessr?   ÚassertRaisesr^   rj   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@   rO   Ú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?   rg   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?   ry   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   rQ   r   r   rW   rX   ra   rh   rk   rm   ÚunittestÚskipIfr   r   rs   ru   rx   r   r   rz   r)   r)   r)   r*   r4   †   s8   

	




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>;  s      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r)   r)   rƒ   )Úpids_psutilr)   r*   r‡   <  s      zdifference: )
Úsortedr   r>   Zpidsr   r   Úinsertrt   Úfailr   )rA   Ú
differencer)   )r†   rˆ   r*   Ú	test_pids.  s    ÿzTestSystemAPIs.test_pidszunreliable on SUNOSZ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_namesA  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 )NZwhozno users on this systemÚ
c                 S   s   g | ]}|  ¡ d  ‘qS )r   ©r+   rƒ   r)   r)   r*   r‡   V  s     z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ d  ‘qS )r   r’   rƒ   r)   r)   r*   r‡   W  s     )r   r    ZskipTestr+   r@   rt   r>   Úusersrr   r^   Zterminal)rA   ÚoutÚlinesr“   Z	terminalsÚur)   r)   r*   Ú
test_usersO  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.killrY   rK   )r   rL   ÚOSErrorÚerrnoÚEBADFrl   r>   Ú_psposixZ
pid_existsrZ   ÚgetpidrN   rO   ©rA   Ú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&}|  ttjjt	 
¡ ¡ |js8t‚W 5 Q R X d S )Núpsutil._psposix.os.waitpidrY   rK   )r   rL   r˜   r™   rš   rl   r>   r›   Úwait_pidrZ   rœ   rN   rO   r   r)   r)   r*   Útest_os_waitpid_let_raisef  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    rY   rK   g{®Gáz„?)Útimeout)r   rL   r˜   r™   ZEINTRrl   r>   r›   ÚTimeoutExpiredr¡   rZ   rœ   rN   rO   r   r)   r)   r*   Útest_os_waitpid_eintrn  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   éÿÿÿÿre   )r   rL   rl   r"   r>   r›   r¡   rZ   rœ   rN   rO   r   r)   r)   r*   Útest_os_waitpid_bad_ret_statusw  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   rS   é   é   é   ú%rY   )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_usageZ
mountpointr®   ÚRuntimeErrorr   r]   ZassertAlmostEqualr°   r±   r²   r³   )
rA   r´   Z	toleranceÚpartÚusager°   r±   r²   r³   Úerrr)   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)   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~   rn   r™   rZ   r_   r6   rT   r€   r>   r   r   r   r   r   r   r   Zpsutil.testsr	   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	
