o
    h#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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lm 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_testproc)	terminate)getpagesizec              	   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startstimez-o   r   )r   appendextendstrr	   r   replacer   
splitlinesstripint
ValueError)fmtpidcmdoutput
all_outputline r(   K/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/tests/test_posix.pyr   -   s2   

r   c                 C   s"   d}t rd}t||  }|d S )Ncommandcommr   )r	   r   split)r#   fieldr*   r(   r(   r)   ps_named   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_argsl   s   
r4   c                 C      d}t rd}t|| S )Nrssrssizer   r   r#   r-   r(   r(   r)   ps_rssv      
r:   c                 C   r5   )Nvszvsizer8   r9   r(   r(   r)   ps_vsz}   r;   r>   c           	   
   C   s   zt d|   }W n ty% } zdt| v r td 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               %r0   )r   r   RuntimeErrorr   lowerr   skipr,   r    floatr   )	devicer3   errr'   fields	sys_totalsys_usedsys_freesys_percentr(   r(   r)   df   s   
rP   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#   rW   r(   r(   r)   tearDownClass   s   zTestProcess.tearDownClassc                 C   ,   t d| j}t| j }||ksJ d S )Nppid)r   r#   psutilProcessr]   )selfppid_ps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#   r^   r_   uidsreal)r`   uid_ps
uid_psutilr(   r(   r)   test_uid      zTestProcess.test_uidc                 C   re   )Nrgid)r   r#   r^   r_   gidsrh   )r`   gid_ps
gid_psutilr(   r(   r)   test_gid   rl   zTestProcess.test_gidc                 C   r\   )Nuser)r   r#   r^   r_   username)r`   username_psusername_psutilr(   r(   r)   test_username   rd   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side_effect)
r^   r_   r   patchKeyErrorrs   r   rg   rh   called)r`   p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   r@   )timesleepr:   r#   r^   r_   memory_info)r`   rss_ps
rss_psutilr(   r(   r)   test_rss_memory      

zTestProcess.test_rss_memoryc                 C   r   )Nr   r   r@   )r   r   r>   r#   r^   r_   r   )r`   vsz_ps
vsz_psutilr(   r(   r)   test_vsz_memory   r   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.\dr0   z\d)r.   r#   ospathbasenamerF   r^   r_   namer1   r2   )r`   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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-extendedfoobarpsutil._psplatform.Process.namereturn_value"psutil._psplatform.Process.cmdliner   )r   ry   r^   r_   r   )r`   r   cmdliner|   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 Nr   r   r   r   r   r0   rw   )r   ry   r^   AccessDeniedr_   r   r`   r   r|   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   ry   r^   NoSuchProcessr_   r   raisesr   r   r(   r(   r)   test_name_long_cmdline_nsp_exc   s   

"z*TestProcess.test_name_long_cmdline_nsp_exczps -o start not availablerQ   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#   r^   r_   create_timedatetimefromtimestampstrftimeround)r`   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	||ksJ W d S  ty.   |d t| }||ks+J Y d S w rZ   )r.   r#   r^   r_   exeAssertionErrorlen)r`   ps_pathnamepsutil_pathname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 )	r4   r#   joinr^   r_   r   r
   r   
startswith)r`   
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  }||ksJ d S )Nnice)r   r#   r^   r_   r   )r`   ps_nicepsutil_nicer(   r(   r)   	test_nice9  s   zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodrY   r[   rc   rk   rq   rv   r~   r   r   r   r   r   r   r   r   r   markskipifr   r   r   r   r   r	   r   r   r(   r(   r(   r)   rS      s:    

	

rS   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  }| dt	| d S )Nr#   r   r   c                       g | ]}| vr|qS r(   r(   .0x)pids_psr(   r)   
<listcomp>R      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    r   r(   r(   r   )pids_psutilr(   r)   r   R  s    zdifference: )
sortedr   r^   pidsr   r   insertr   failr   )r`   
differencer(   )r   r   r)   	test_pidsE  s   zTestSystemAPIs.test_pidszunreliable on SUNOSrQ   ifconfigzno ifconfig cmdznot supportedc                 C   sP   t d}tjddD ]}| D ]	}||r nq| d| d| q
d S )Nzifconfig -aT)perniczcouldn't find z nic in 'ifconfig -a' output
)r   r^   net_io_countersr,   r   r   )r`   r%   nicr'   r(   r(   r)   test_nic_namesY  s   
zTestSystemAPIs.test_nic_namesc                 C   s   t d}| std|d}dd |D }dd |D }t|tt ks,J | jt |d1 t	t D ]!\}}|j
|| ksIJ |j|| ksRJ |jd ur]t|j q<W d    d S 1 siw   Y  d S )Nwho -uno users on this systemr?   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^   who)r   r   r   rG   r,   r   r^   userssubTest	enumerater   terminalr#   r_   )r`   r3   linesr   	terminalsidxur(   r(   r)   
test_usersj  s    


"zTestSystemAPIs.test_usersc                 C   s  t d}| stdd }td|}|rd}n'td|}|r%d}ntd|}|r0d}ntd	|}|rAd}d
d |D }|sKtd| | 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
r   )r   r   r   rG   r1   findallr   r^   r   r   r   r   startedr   )r`   r3   tstampr   r   r   psutil_valuer(   r(   r)   test_users_startedz  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.killr0   rw   )r   ry   OSErrorerrnoEBADFr   r   r^   _psposix
pid_existsr   getpidr{   r`   mr(   r(   r)   test_pid_exists_let_raise  s   "z(TestSystemAPIs.test_pid_exists_let_raisec              	   C   r   )Npsutil._psposix.os.waitpidr0   rw   )r   ry   r   r   r   r   r   r^   r   wait_pidr   r   r{   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   r0   rw   g{Gz?)timeout)r   ry   r   r   EINTRr   r   r^   r   TimeoutExpiredr   r   r   r{   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   ry   r   r   r!   r^   r   r   r   r   r{   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   )r^   disk_partitions
disk_usage
mountpointrP   rI   rE   r   rF   abstotalusedfreepercent)	r`   	tolerancepartusagerL   rM   rN   rO   rJ   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   A  s&    


$
	
r   c                   @   s   e Zd Zdd ZdS )TestMiscc                 C   s4   t  }|dks	J |t  ksJ |tjksJ d S )Nr   )r   resourcemmapPAGESIZE)r`   pagesizer(   r(   r)   test_getpagesize  s   zTestMisc.test_getpagesizeN)r   r   r   r  r(   r(   r(   r)   r    s    r  rZ   ),r   r   r   r   r1   r  rU   r   unittestr   r^   r   r   r   r   r   r   r	   psutil.testsr
   r   r   r   r   r   r   r   r   r   r  r  psutil._psutil_posixr   r   r.   r4   r:   r>   rP   r   r   rS   r   r  r(   r(   r(   r)   <module>   sZ   
7
 - !