o
    ˆ¶¹a(;  ã                   @   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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 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)Úunittest)Úwhich)Úgetpagesizec              	   C   sî   dg}t r
| d¡ |dur| dt|ƒg¡ ntstr"| d¡ n| d¡ tr3tdƒ}| | | ¡} | d| g¡ t|ƒ}t rE| 	¡ }n| 	¡ d	d… }g }|D ]}| 
¡ }zt|ƒ}W n	 tyf   Y nw | |¡ qQ|du rs|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-AÚax)ÚcommandÚcommÚstartÚstimez-oé   r   )r   ÚappendÚextendÚstrr   r   ÚsetÚgetr   Ú
splitlinesÚstripÚintÚ
ValueError)ÚfmtÚpidÚcmdÚfmt_mapÚoutputÚ
all_outputÚline© r-   ú9/usr/lib/python3/dist-packages/psutil/tests/test_posix.pyr   .   s8   


ÿr   c                 C   s   d}t rd}t|| ƒ ¡ d S )Nr   r   r   )r   r   Úsplit©r'   Úfieldr-   r-   r.   Úps_namej   s   r2   c                 C   s   d}t strd}t|| ƒS )Nr   Úargs)r   r   r   r0   r-   r-   r.   Úps_argsq   s   
r4   c                 C   ó   d}t rd}t|| ƒS )NÚrssÚrssize©r   r   r0   r-   r-   r.   Úps_rssx   ó   
r9   c                 C   r5   )NÚvszÚvsizer8   r0   r-   r-   r.   Úps_vsz   r:   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 epOe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'   rB   r-   r-   r.   ÚtearDownClass�   s   zTestProcess.tearDownClassc                 C   ó,   t d| jƒ}t | j¡ ¡ }|  ||¡ d S )NÚppid)r   r'   ÚpsutilÚProcessrH   ÚassertEqual)ÚselfÚppid_psÚppid_psutilr-   r-   r.   Ú	test_ppid“   ó   zTestProcess.test_ppidc                 C   ó.   t d| jƒ}t | j¡ ¡ j}|  ||¡ d S )NÚuid)r   r'   rI   rJ   ÚuidsÚrealrK   )rL   Úuid_psÚ
uid_psutilr-   r-   r.   Útest_uid˜   ó   zTestProcess.test_uidc                 C   rQ   )NÚrgid)r   r'   rI   rJ   ÚgidsrT   rK   )rL   Úgid_psÚ
gid_psutilr-   r-   r.   Útest_gid�   rX   zTestProcess.test_gidc                 C   rG   )NÚuser)r   r'   rI   rJ   ÚusernamerK   )rL   Úusername_psÚusername_psutilr-   r-   r.   Útest_username¢   rP   zTestProcess.test_usernamec                 C   s`   t  ¡ }tjdtd��}|  | ¡ t| ¡ j	ƒ¡ |j
sJ ‚W d   ƒ d S 1 s)w   Y  d S )Nzpsutil.pwd.getpwuid©Úside_effect)rI   rJ   r   ÚpatchÚKeyErrorrK   r_   r   rS   rT   Úcalled)rL   ÚpÚfunr-   r-   r.   Útest_username_no_resolution§   s
   "þz'TestProcess.test_username_no_resolutionc                 C   ó<   t  d¡ t| jƒ}t | j¡ ¡ d d }|  ||¡ d S )Nçš™™™™™¹?r   é   )ÚtimeÚsleepr9   r'   rI   rJ   Úmemory_inforK   )rL   Úrss_psÚ
rss_psutilr-   r-   r.   Útest_rss_memory°   ó   

zTestProcess.test_rss_memoryc                 C   rk   )Nrl   r   rm   )rn   ro   r=   r'   rI   rJ   rp   rK   )rL   Úvsz_psÚ
vsz_psutilr-   r-   r.   Útest_vsz_memoryº   rt   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)r2   r'   ÚosÚpathÚbasenameÚlowerrI   rJ   ÚnameÚreÚsubrK   )rL   Úname_psÚname_psutilr-   r-   r.   Ú	test_nameÄ   s   
zTestProcess.test_namec              	   C   s–   d}g d¢}t jd|d��4 t jd|d�� t ¡ }|  | ¡ d¡ W d   ƒ n1 s,w   Y  W d   ƒ d S W d   ƒ d S 1 sDw   Y  d S )Núlong-program-name)úlong-program-name-extendedÚfooÚbarúpsutil._psplatform.Process.name©Úreturn_valueú"psutil._psplatform.Process.cmdliner„   )r   re   rI   rJ   rK   r}   )rL   r}   Úcmdlinerh   r-   r-   r.   Útest_name_longÒ   s   ÿÿýþ"þzTestProcess.test_name_longc              	   C   s–   d}t jd|d��8 t jdt dd¡d�� t ¡ }|  | ¡ d¡ W d   ƒ n1 s,w   Y  W d   ƒ d S W d   ƒ d S 1 sDw   Y  d S ©Nrƒ   r‡   rˆ   rŠ   r   rx   rc   )r   re   rI   ÚAccessDeniedrJ   rK   r}   ©rL   r}   rh   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��8 t jdt dd¡d�� t ¡ }|  tj|j¡ W d   ƒ n1 s,w   Y  W d   ƒ d S W d   ƒ d S 1 sDw   Y  d S r�   )r   re   rI   ÚNoSuchProcessrJ   ÚassertRaisesr}   r�   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'   rI   rJ   Úcreate_timeÚdatetimeÚfromtimestampÚstrftimeÚroundÚassertIn)rL   Útime_psÚtime_psutilÚtime_psutil_tstampÚround_time_psutilÚround_time_psutil_tstampr-   r-   r.   Útest_create_timeö   s   ÿÿÿÿzTestProcess.test_create_timec                 C   s^   t | jƒ}t | j¡ ¡ }z	|  ||¡ W d S  ty.   |d t|ƒ… }|  ||¡ Y d S w rE   )r2   r'   rI   rJ   ÚexerK   ÚAssertionErrorÚlen)rL   Úps_pathnameÚpsutil_pathnameÚadjusted_ps_pathnamer-   r-   r.   Útest_exe  s   
øzTestProcess.test_exec                 C   s0   t | jƒ}d t | j¡ ¡ ¡}|  ||¡ d S )Nú )r4   r'   ÚjoinrI   rJ   r‹   rK   )rL   Ú
ps_cmdlineÚ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'   rI   rJ   r¬   rK   )rL   Úps_niceÚpsutil_nicer-   r-   r.   Ú	test_nice  s   zTestProcess.test_niceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodrD   rF   rO   rW   r]   rb   rj   r   r   rs   rw   r‚   rŒ   r�   r“   r   ÚskipIfr   r   rŸ   r¦   r«   r   r   r¯   r-   r-   r-   r.   r>   †   s8    

	



r>   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rdˆ vrˆ  dd¡ tˆ ƒtˆƒ dkr?‡ fdd„ˆD ƒ‡fdd„ˆ D ƒ }|  dt	|ƒ ¡ d S d S )Nr'   r   r   c                    ó   g | ]}|ˆ vr|‘qS r-   r-   ©Ú.0Úx)Úpids_psr-   r.   Ú
<listcomp>5  ó    z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    r·   r-   r-   r¸   )Úpids_psutilr-   r.   r¼   6  r½   zdifference: )
Úsortedr   rI   Úpidsr   r   Úinsertr¢   Úfailr   )rL   Ú
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 ]}| ¡ D ]	}| |¡r n
q|  d||f ¡ qd S )Nzifconfig -aT)Úpernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   rI   Únet_io_countersÚkeysr/   Ú
startswithrÂ   )rL   r*   Ú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
|¡ q0d S )NÚwhozno users on this systemÚ
c                 S   ó   g | ]}|  ¡ d  ‘qS )r   ©r/   r¸   r-   r-   r.   r¼   P  r½   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   rÎ   )r   rÏ   r¸   r-   r-   r.   r¼   Q  r½   )r   r#   ÚskipTestr/   rK   r¢   rI   Úusersr™   r}   Úterminal)rL   ÚoutÚlinesrÑ   Ú	terminalsÚur-   r-   r.   Ú
test_usersI  s   

þzTestSystemAPIs.test_usersc                 C   ó\   t jdttjdƒd��}|  ttjjt	 
¡ ¡ |jsJ ‚W d   ƒ d S 1 s'w   Y  d S )Nzpsutil._psposix.os.killrx   rc   )r   re   ÚOSErrorÚerrnoÚEBADFr’   rI   Ú_psposixÚ
pid_existsry   Úgetpidrg   ©rL   Úmr-   r-   r.   Útest_pid_exists_let_raiseW  s   
ÿ"ýz(TestSystemAPIs.test_pid_exists_let_raisec                 C   rØ   )Núpsutil._psposix.os.waitpidrx   rc   )r   re   rÙ   rÚ   rÛ   r’   rI   rÜ   Úwait_pidry   rÞ   rg   rß   r-   r-   r.   Útest_os_waitpid_let_raise`  s   
ÿ"ýz(TestSystemAPIs.test_os_waitpid_let_raisec                 C   sd   t jdttjdƒd��}| jtjjtjj	t
 ¡ dd� |js J ‚W d   ƒ d S 1 s+w   Y  d S )Nrâ   rx   rc   g{®Gáz„?)Útimeout)r   re   rÙ   rÚ   ÚEINTRr’   rI   rÜ   ÚTimeoutExpiredrã   ry   rÞ   rg   rß   r-   r-   r.   Útest_os_waitpid_eintrh  s   
ÿþ"ûz$TestSystemAPIs.test_os_waitpid_eintrc                 C   sT   t jddd��}|  ttjjt ¡ ¡ |j	sJ ‚W d   ƒ d S 1 s#w   Y  d S )Nrâ   )r   éÿÿÿÿrˆ   )
r   re   r’   r%   rI   rÜ   rã   ry   rÞ   rg   rß   r-   r-   r.   Útest_os_waitpid_bad_ret_statusq  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 n% tyD }	 zt|	ƒ ¡ }	d|	v s9d|	v s9d|	v r?W Y d }	~	q‚ d }	~	ww | 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   rm   é   é   é   ú%rx   )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   )rI   Údisk_partitionsÚ
disk_usageÚ
mountpointrñ   ÚRuntimeErrorr   r|   ÚassertAlmostEqualró   rô   rõ   rö   )
rL   r÷   Ú	toleranceÚpartÚusageró   rô   rõ   rö   Úerrr-   r-   r.   Útest_disk_usagez  s(   
€öízTestSystemAPIs.test_disk_usageN)r°   r±   r²   r³   r   rÄ   r   rµ   r   r   r
   rË   r	   rI   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   ÚassertGreaterrK   ÚresourceÚmmapÚPAGESIZE)rL   Úpagesizer-   r-   r.   Útest_getpagesize¡  s   zTestMisc.test_getpagesizeN)r°   r±   r²   r
  r-   r-   r-   r.   r  ž  s    r  Ú__main__)Úrun_from_namerE   )-r³   r•   rÚ   ry   r~   r@   rn   rI   r   r   r   r   r   r   r   Úpsutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r   r  r  Úpsutil._psutil_posixr   r   r2   r4   r9   r=   rµ   r>   r¶   r  r°   Úpsutil.tests.runnerr  Ú__file__r-   r-   r-   r.   Ú<module>   s^   
< y	þ