a
    áªlc‰<  ã                   @   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ur0| dt|ƒg¡ nts8trD| d¡ n
| d¡ trft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 )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Ú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*   úS/var/www/html/django/DPS/env/lib/python3.9/site-packages/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    r1   c                 C   s   d}t rd}t|| ƒS )NZrssZrssize©r   r   r-   r*   r*   r+   Úps_rssx   s    r3   c                 C   s   d}t rd}t|| ƒS )NZvszZvsizer2   r-   r*   r*   r+   Úps_vsz   s    r4   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%   r9   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ÚrealrA   )rB   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@   ÚgidsrF   rA   )rB   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@   ÚusernamerA   )rB   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	ƒ¡ |j
s<J ‚W d   ƒ n1 sP0    Y  d S )Nzpsutil.pwd.getpwuid©Zside_effect)r?   r@   r   ÚpatchÚKeyErrorrA   rK   r   rE   rF   Úcalled)rB   Ú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Úsleepr3   r%   r?   r@   Úmemory_inforA   )rB   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 )NrS   r   rT   )rU   rV   r4   r%   r?   r@   rW   rA   )rB   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ÚsubrA   )rB   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¡ 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.cmdlinerd   )r   rN   r?   r@   rA   r_   )rB   r_   ÚcmdlinerQ   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 d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S ©Nrc   rf   rg   rh   r   rZ   rM   )r   rN   r?   ZAccessDeniedr@   rA   r_   ©rB   r_   rQ   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 d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S rk   )r   rN   r?   ZNoSuchProcessr@   ÚassertRaisesr_   rl   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)rB   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 n. tyX   |d t|ƒ… }|  ||¡ Y n0 d S r<   )r/   r%   r?   r@   ÚexerA   ÚAssertionErrorÚlen)rB   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ú )r1   r%   Újoinr?   r@   ri   rA   )rB   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@   r}   rA   )rB   Zps_niceZpsutil_nicer*   r*   r+   Ú	test_nice"  s    zTestProcess.test_niceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr;   r=   rC   rG   rI   rL   rR   r   r   rX   rY   rb   rj   rm   ro   ÚunittestÚskipIfr   r   ru   ry   r|   r   r   r~   r*   r*   r*   r+   r5   †   s8   

	




r5   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ˆ 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>;  ó    z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    s   g | ]}|ˆ vr|‘qS r*   r*   r‡   )Úpids_psutilr*   r+   r‹   <  rŒ   zdifference: )
Úsortedr   r?   Zpidsr   r   Úinsertrx   Úfailr   )rB   Ú
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 ]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   )rB   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  rŒ   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ d  ‘qS )r   r˜   r‡   r*   r*   r+   r‹   W  rŒ   )r   r!   ZskipTestr,   rA   rx   r?   Úusersrt   r_   Zterminal)rB   ÚoutÚlinesr™   Z	terminalsÚur*   r*   r+   Ú
test_usersO  s    

zTestSystemAPIs.test_usersc                 C   sZ   t jdttjdƒd0}|  ttjjt	 
¡ ¡ |js8J ‚W d   ƒ n1 sL0    Y  d S )Nzpsutil._psposix.os.killrZ   rM   )r   rN   ÚOSErrorÚerrnoÚEBADFrn   r?   Ú_psposixZ
pid_existsr[   ÚgetpidrP   ©rB   Úmr*   r*   r+   Útest_pid_exists_let_raise]  s    
ÿz(TestSystemAPIs.test_pid_exists_let_raisec                 C   sZ   t jdttjdƒd0}|  ttjjt	 
¡ ¡ |js8J ‚W d   ƒ n1 sL0    Y  d S )Núpsutil._psposix.os.waitpidrZ   rM   )r   rN   rž   rŸ   r    rn   r?   r¡   Úwait_pidr[   r¢   rP   r£   r*   r*   r+   Útest_os_waitpid_let_raisef  s    
ÿz(TestSystemAPIs.test_os_waitpid_let_raisec                 C   sb   t jdttjdƒd8}| jtjjtjj	t
 ¡ dd |js@J ‚W d   ƒ n1 sT0    Y  d S )Nr¦   rZ   rM   g{®Gáz„?)Útimeout)r   rN   rž   rŸ   ZEINTRrn   r?   r¡   ÚTimeoutExpiredr§   r[   r¢   rP   r£   r*   r*   r+   Útest_os_waitpid_eintrn  s    
ÿþz$TestSystemAPIs.test_os_waitpid_eintrc                 C   sR   t jddd0}|  ttjjt ¡ ¡ |j	s0J ‚W d   ƒ n1 sD0    Y  d S )Nr¦   )r   éÿÿÿÿrg   )
r   rN   rn   r#   r?   r¡   r§   r[   r¢   rP   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 nX ty– }	 z@t|	ƒ ¡ }	d|	v srd|	v srd|	v r€W Y d }	~	qn‚ W Y d }	~	qd }	~	0 0 | 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   rT   é   é   é   ú%rZ   )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¹   )
rB   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assertGreaterrA   ÚresourceÚmmapÚPAGESIZE)rB   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‚   rp   rŸ   r[   r`   r7   rU   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/   r1   r3   r4   r…   r5   r†   rÃ   r   Zpsutil.tests.runnerrÉ   Ú__file__r*   r*   r*   r+   Ú<module>   sZ   
< $y	
