a
    þd}B  ã                   @   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 er2d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)Ú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)   ú`/var/www/html/stable-diffusion-webui/venv/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_namek   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_argsr   s    
r4   c                 C   s   d}t rd}t|| ƒS )NZrssZrssize©r   r   r,   r)   r)   r*   Úps_rss|   s    r6   c                 C   s   d}t rd}t|| ƒS )NZvszZvsizer5   r,   r)   r)   r*   Úps_vszƒ   s    r7   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$   r<   r)   r)   r*   ÚtearDownClass“   s    zTestProcess.tearDownClassc                 C   s,   t d| jƒ}t | j¡ ¡ }|  ||¡ d S )NÚppid)r   r$   ÚpsutilÚProcessrA   Ú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$   rB   rC   ÚuidsÚrealrD   )rE   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$   rB   rC   ÚgidsrI   rD   )rE   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$   rB   rC   ÚusernamerD   )rE   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)rB   rC   r   ÚpatchÚKeyErrorrD   rN   r   rH   rI   Úcalled)rE   Ú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Úsleepr6   r$   rB   rC   Úmemory_inforD   )rE   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 )NrV   r   rW   )rX   rY   r7   r$   rB   rC   rZ   rD   )rE   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.\dr0   z\d)r.   r$   ÚosÚpathÚbasenameÚlowerrB   rC   Únamer1   r2   rD   )rE   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   rQ   rB   rC   rD   ra   )rE   ra   ÚcmdlinerT   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   r0   rP   )r   rQ   rB   ZAccessDeniedrC   rD   ra   ©rE   ra   rT   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   rQ   rB   ZNoSuchProcessrC   ÚassertRaisesra   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$   rB   rC   Zcreate_timeÚdatetimeÚfromtimestampÚstrftimeÚroundZassertIn)rE   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$   rB   rC   ZexerD   ÚAssertionErrorÚlen)rE   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ú )r4   r$   ÚjoinrB   rC   ri   rD   )rE   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$   rB   rC   r{   rD   )rE   Zps_niceZpsutil_nicer)   r)   r*   Ú	test_nice&  s    zTestProcess.test_niceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr>   r@   rF   rJ   rL   rO   rU   r   r   r[   r\   rb   rj   rm   ro   ÚunittestÚskipIfr   r   rt   rw   rz   r   r   r|   r)   r)   r)   r*   r8   Š   s8   

	




r8   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ƒ d
d„ ƒZ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   rB   Zpidsr   r   Úinsertrv   Úfailr   )rE   Ú
differencer)   )rˆ   r‹   r*   Ú	test_pids2  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   rB   Znet_io_countersÚkeysr+   Ú
startswithrŽ   )rE   r&   Znicr(   r)   r)   r*   Útest_nic_namesE  s    
ÿÿzTestSystemAPIs.test_nic_namesc                 C   sÞ   t dƒ}| ¡ s|  d¡‚| d¡}dd„ |D ƒ}dd„ |D ƒ}|  t|ƒtt ¡ ƒ¡ | jt ¡ |d` t	t ¡ ƒD ]B\}}|  |j
|| ¡ |  |j|| ¡ |jd urxt |j¡ qxW d   ƒ n1 sÐ0    Y  d S )Núwho -uúno users on this systemÚ
c                 S   s   g | ]}|  ¡ d  ‘qS )r   ©r+   r…   r)   r)   r*   r‰   Z  rŠ   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ d  ‘qS )r   r˜   r…   r)   r)   r*   r‰   [  rŠ   ©rB   Zwho)r   r    ÚskipTestr+   rD   rv   rB   ÚusersÚsubTestÚ	enumeratera   Zterminalr$   rC   )rE   r3   Úlinesr›   Z	terminalsÚidxÚur)   r)   r*   Ú
test_usersT  s    


zTestSystemAPIs.test_usersc                 C   sÂ   t dƒ}| ¡ s|  d¡‚t d|¡}|r0d}n"t d|¡}|rFd}ntd| ƒ‚| jt ¡ |dJ t	t ¡ ƒD ],\}}t
j
 |j¡ |¡}|  ||| ¡ qrW d   ƒ n1 s´0    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(cannot interpret tstamp in who output
%sr™   )r   r    rš   r1   Úfindallr"   rœ   rB   r›   r   rp   rq   Ústartedrr   rD   )rE   r3   r£   ZtstamprŸ   r    Zpsutil_valuer)   r)   r*   Útest_users_startedd  s(    
ÿÿÿz!TestSystemAPIs.test_users_startedc                 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.killr0   rP   )r   rQ   ÚOSErrorÚerrnoÚEBADFrn   rB   Ú_psposixZ
pid_existsr]   ÚgetpidrS   ©rE   Ú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.waitpidr0   rP   )r   rQ   r¥   r¦   r§   rn   rB   r¨   Úwait_pidr]   r©   rS   rª   r)   r)   r*   Útest_os_waitpid_let_raise„  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­   r0   rP   g{®Gáz„?)Útimeout)r   rQ   r¥   r¦   ZEINTRrn   rB   r¨   ÚTimeoutExpiredr®   r]   r©   rS   rª   r)   r)   r*   Útest_os_waitpid_eintrŒ  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   rQ   rn   r"   rB   r¨   r®   r]   r©   rS   rª   r)   r)   r*   Útest_os_waitpid_bad_ret_status•  s    ÿÿz-TestSystemAPIs.test_os_waitpid_bad_ret_statuszunreliable on AIXc           
         sè   ‡ fdd„}d}t jddD ]Æ}t  |j¡}z||jƒ\}}}}W nV ty˜ }	 z>t|	ƒ ¡ }	d|	v svd|	v svd|	v r‚W Y d }	~	q‚ 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¼   zt d|  ƒ ¡ }W n@ tyT } z(dt|ƒ ¡ v r>ˆ  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 %szdevice busyzdf returned EBUSYr—   r   rW   é   é   é   ú%r0   )
r   r    ÚRuntimeErrorr   r`   rš   r+   r!   ÚfloatÚreplace)	Údevicer3   Úerrr(   ÚfieldsÚtotalÚusedÚfreeÚpercent©rE   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   )rB   Zdisk_partitionsÚ
disk_usageZ
mountpointr¼   r¹   r   r`   ZassertAlmostEqualr¿   rÀ   rÁ   rÂ   )
rE   rÄ   Z	toleranceÚpartÚusager¿   rÀ   rÁ   rÂ   r½   r)   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„   .  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assertGreaterrD   ÚresourceÚmmapZPAGESIZE)rE   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]   r1   r:   rX   r‚   rB   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.   r4   r6   r7   rƒ   r8   r„   rË   r}   Zpsutil.tests.runnerrÐ   Ú__file__r)   r)   r)   r*   Ú<module>   sZ   
>
 $ 	
