o
    F+ iC                     @   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rddlZddl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_subproc)	terminatec              	   C   s   dg}t r
|d |dur|dt|g ntstr"|d n|d tr/| dd} |d	| g t|}t r@| n| d
d }g }|D ]}|	 }zt
|}W n	 tya   Y nw || qL|du rn|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-AaxstartZstimez-o   r   )r   appendextendstrr	   r   replacer   
splitlinesstripint
ValueError)fmtpidcmdoutput
all_outputline r&   c/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/psutil/tests/test_posix.pyr   *   s2   

r   c                 C   s"   d}t rd}t||  }|d S )NcommandZcommr   )r	   r   split)r!   fieldr(   r&   r&   r'   ps_namea   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_argsi   s   
r1   c                 C      d}t rd}t|| S )NZrssZrssizer   r   r!   r*   r&   r&   r'   ps_rsss      
r5   c                 C   r2   )NZvszZvsizer3   r4   r&   r&   r'   ps_vszz   r6   r7   c           	   
   C   s   zt d|   }W n  ty+ } zdt| v r&tdW  Y d }~S  d }~ww |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   rI   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pPe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!   rP   r&   r&   r'   tearDownClass   s   zTestProcess.tearDownClassc                 C   ,   t d| j}t| j }||ksJ d S )Nppid)r   r!   psutilProcessrV   )selfZppid_psZppid_psutilr&   r&   r'   	test_ppid      zTestProcess.test_ppidc                 C   .   t d| j}t| j j}||ksJ d S )Nuid)r   r!   rW   rX   uidsreal)rY   Zuid_psZ
uid_psutilr&   r&   r'   test_uid      zTestProcess.test_uidc                 C   r\   )NZrgid)r   r!   rW   rX   gidsr_   )rY   Zgid_psZ
gid_psutilr&   r&   r'   test_gid   ra   zTestProcess.test_gidc                 C   rU   )Nuser)r   r!   rW   rX   username)rY   Zusername_psZusername_psutilr&   r&   r'   test_username   r[   zTestProcess.test_usernamec                 C   s`   t  }tjdtd}| t| jksJ |j	sJ W d    d S 1 s)w   Y  d S )Nzpsutil.pwd.getpwuidZside_effect)
rW   rX   r   patchKeyErrorre   r   r^   r_   called)rY   pZfunr&   r&   r'   test_username_no_resolution   s
   "z'TestProcess.test_username_no_resolutionc                 C   <   t d t| j}t| j d d }||ksJ d S )N皙?r   r9   )timesleepr5   r!   rW   rX   memory_info)rY   Zrss_psZ
rss_psutilr&   r&   r'   test_rss_memory      

zTestProcess.test_rss_memoryc                 C   rm   )Nrn   r   r9   )ro   rp   r7   r!   rW   rX   rq   )rY   Zvsz_psZ
vsz_psutilr&   r&   r'   test_vsz_memory   rs   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s9J d S )Nz\d.\dr-   z\d)r+   r!   ospathbasenamer?   rW   rX   namer.   r/   )rY   Zname_psZ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ks"J 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-extendedZfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdliner{   )r   rh   rW   rX   rx   )rY   rx   cmdlinerk   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ks"J W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S Nrz   r}   r~   r   r   r-   rg   )r   rh   rW   ZAccessDeniedrX   rx   rY   rx   rk   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J t jdtddd& t }ttj |  W d    n1 s/w   Y  W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S r   )r   rh   rW   ZNoSuchProcessrX   r   raisesrx   r   r&   r&   r'   test_name_long_cmdline_nsp_exc   s   

"z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablerJ   c                 C   s\   t d| j}t| j }tj|d}t|}tj|d}|||hv s,J d S )Nr   z%H:%M:%S)	r   r!   rW   rX   Zcreate_timedatetimefromtimestampstrftimeround)rY   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J W d S  ty.   |d t| }||ks+J Y d S w rS   )r+   r!   rW   rX   exeAssertionErrorlen)rY   Zps_pathnameZpsutil_pathnameZadjusted_ps_pathnamer&   r&   r'   test_exe  s   
zTestProcess.test_exec                 C   sV   t | j}dt| j }tr#t|t|k r#||s!J d S ||ks)J d S )N )	r1   r!   joinrW   rX   r   r
   r   
startswith)rY   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J d S )Nnice)r   r!   rW   rX   r   )rY   Zps_niceZpsutil_nicer&   r&   r'   	test_nice6  s   zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodrR   rT   rZ   r`   rc   rf   rl   r   r   rr   rt   ry   r   r   r   r   markskipifr   r   r   r   r   r	   r   r   r&   r&   r&   r'   rL      s:    

	

rL   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rd vr dd t t dkr= fddD fdd D  }t	dt
| S d S )Nr!   r   r   c                       g | ]}| vr|qS r&   r&   .0x)pids_psr&   r'   
<listcomp>O      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    r   r&   r&   r   )pids_psutilr&   r'   r   O  s    zdifference: )sortedr   rW   Zpidsr   r   insertr   r   failr   )rY   
differencer&   )r   r   r'   	test_pidsB  s   zTestSystemAPIs.test_pidszunreliable on SUNOSrJ   ifconfigzno ifconfig cmdznot supportedc                 C   sT   t d}tjddD ]}| D ]	}||r nqtd| d|   S q
d S )Nzifconfig -aT)Zperniczcouldn't find z nic in 'ifconfig -a' output
)r   rW   Znet_io_countersr)   r   r   r   )rY   r#   Znicr%   r&   r&   r'   test_nic_namesV  s   
zTestSystemAPIs.test_nic_namesc              	   C   s$  t d}| stdS g }| D ]>}| d }| d }ts%trJz
t| d }W n t	y@   t| d }Y nw |
|||f q|
||f qtsVtr`dd t D }n	d	d t D }t|t|kssJ t|t|ks}J t D ]}|jd ur|jdksJ qd S )
Nwho -uno users on this systemr   r   c                 S   s   g | ]
}|j |j|jfqS r&   )rx   terminalr!   r   ur&   r&   r'   r   y  s    z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   s   g | ]}|j |jfqS r&   )rx   r   r   r&   r&   r'   r   {  r   )r   r   r   r@   r   r)   r   r   r   r   r   rW   usersr   r   r!   )rY   r0   Zsusersr%   rd   r   r!   Zpusersr&   r&   r'   
test_userse  s2   

zTestSystemAPIs.test_usersc                 C   s  t d}| stdS d }td|}|rd}n'td|}|r%d}ntd|}|r0d}ntd	|}|rAd}d
d |D }|sKtd| S | jt |d& t	t D ]\}}t
j
|j|}||| ksqJ q[W d    d S 1 s}w   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[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
)rW   Zwho)r   r   r   r@   r.   findallZsubTestrW   r   	enumerater   r   startedr   )rY   r0   Ztstampr   idxr   Zpsutil_valuer&   r&   r'   test_users_started  s:   
"z!TestSystemAPIs.test_users_startedc              	   C      t jdttjdd+}tt tj	t
  W d    n1 s$w   Y  |js.J W d    d S 1 s9w   Y  d S )Nzpsutil._psposix.os.killr-   rg   )r   rh   OSErrorerrnoEBADFr   r   rW   _psposixZ
pid_existsru   getpidrj   rY   mr&   r&   r'   test_pid_exists_let_raise  s   "z(TestSystemAPIs.test_pid_exists_let_raisec              	   C   r   )Npsutil._psposix.os.waitpidr-   rg   )r   rh   r   r   r   r   r   rW   r   wait_pidru   r   rj   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 d    n1 s(w   Y  |js2J W d    d S 1 s=w   Y  d S )Nr   r-   rg   g{Gz?)timeout)r   rh   r   r   ZEINTRr   r   rW   r   TimeoutExpiredr   ru   r   rj   r   r&   r&   r'   test_os_waitpid_eintr  s   "z$TestSystemAPIs.test_os_waitpid_eintrc              	   C   sx   t jddd+}tt tjt	  W d    n1 s w   Y  |j
s*J W d    d S 1 s5w   Y  d S )Nr   )r   r   r~   )r   rh   r   r   r   rW   r   r   ru   r   rj   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 ]e}t |j}zt|j\}}}}W n% ty@ } zt| }d|v s5d|v s5d|v r;W Y d }~q d }~ww t	|j
| |k sLJ t	|j| |k sWJ t	|j| |k sbJ t	|j| dksmJ qd S )Ni  @ F)allzno such file or directoryzraw devices not supportedzpermission deniedr   )rW   Zdisk_partitions
disk_usageZ
mountpointrI   rB   r>   r   r?   abstotalusedfreepercent)	rY   Z	tolerancepartusagerE   rF   rG   rH   rC   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   >  s&    


$
	
r   c                   @   s   e Zd Zdd ZdS )TestMiscc                 C   s:   t jj }|dksJ |t ksJ |tjksJ d S )Nr   )rW   Z_psplatformZcextZgetpagesizeresourcemmapPAGESIZE)rY   Zpagesizer&   r&   r'   test_getpagesize  s   zTestMisc.test_getpagesizeN)r   r   r   r   r&   r&   r&   r'   r     s    r   rS   )*r   r   r   ru   r.   r   rN   ro   Zunittestr   rW   r   r   r   r   r   r   r	   Zpsutil.testsr
   r   r   r   r   r   r   r   r   r   r   r   r   r+   r1   r5   r7   rI   r   r   rL   r   r   r&   r&   r&   r'   <module>   sX   
7
 - .