o
    h}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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#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rdd'l)m*Z* e*e+ dS 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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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)   n/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-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_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      d}t rd}t|| S )NZrssZrssizer   r   r,   r)   r)   r*   ps_rss|      
r7   c                 C   r5   )NZvszZvsizer6   r,   r)   r)   r*   ps_vsz   r8   r9   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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   ,   t d| j}t| j }| || d S )Nppid)r   r$   psutilProcessrD   assertEqual)selfZppid_psZppid_psutilr)   r)   r*   	test_ppid      zTestProcess.test_ppidc                 C   .   t d| j}t| j j}| || d S )Nuid)r   r$   rE   rF   uidsrealrG   )rH   Zuid_psZ
uid_psutilr)   r)   r*   test_uid      zTestProcess.test_uidc                 C   rK   )NZrgid)r   r$   rE   rF   gidsrN   rG   )rH   Zgid_psZ
gid_psutilr)   r)   r*   test_gid   rP   zTestProcess.test_gidc                 C   rC   )Nuser)r   r$   rE   rF   usernamerG   )rH   Zusername_psZusername_psutilr)   r)   r*   test_username   rJ   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Zside_effect)rE   rF   r   patchKeyErrorrG   rT   r   rM   rN   called)rH   pZ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sleepr7   r$   rE   rF   memory_inforG   )rH   Zrss_psZ
rss_psutilr)   r)   r*   test_rss_memory      

zTestProcess.test_rss_memoryc                 C   r\   )Nr]   r   r^   )r_   r`   r9   r$   rE   rF   ra   rG   )rH   Zvsz_psZ
vsz_psutilr)   r)   r*   test_vsz_memory   rc   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lowerrE   rF   namer1   r2   rG   )rH   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 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.cmdlinerl   )r   rW   rE   rF   rG   ri   )rH   ri   cmdlinerZ   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 Nrk   rn   ro   rq   r   r0   rV   )r   rW   rE   ZAccessDeniedrF   rG   ri   rH   ri   rZ   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 rt   )r   rW   rE   ZNoSuchProcessrF   assertRaisesri   ru   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$   rE   rF   Zcreate_timedatetimefromtimestampstrftimeroundZassertIn)rH   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 d S  ty.   |d t| }| || Y d S w rA   )r.   r$   rE   rF   exerG   AssertionErrorlen)rH   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$   joinrE   rF   rr   rG   )rH   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$   rE   rF   r   rG   )rH   Zps_niceZpsutil_nicer)   r)   r*   	test_nice&  s   zTestProcess.test_niceN)__name__
__module____qualname____doc__classmethodr@   rB   rI   rO   rR   rU   r[   r   r   rb   rd   rj   rs   rv   rx   unittestskipIfr   r   r}   r   r   r   r   r   r)   r)   r)   r*   r:      s:    

	




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 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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>?      z,TestSystemAPIs.test_pids.<locals>.<listcomp>c                    r   r)   r)   r   )pids_psutilr)   r*   r   @  r   zdifference: )
sortedr   rE   Zpidsr   r   insertr   failr   )rH   
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 ]}| D ]	}||r n
q| d||f qd S )Nzifconfig -aT)Zpernicz/couldn't find %s nic in 'ifconfig -a' output
%s)r   rE   Znet_io_counterskeysr+   
startswithr   )rH   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1 t	t D ]!\}}| |j
||  | |j||  |jd ur]t|j q<W d    d S 1 siw   Y  d S )Nwho -uno users on this system
c                 S      g | ]}|  d  qS )r   r+   r   r)   r)   r*   r   Z  r   z-TestSystemAPIs.test_users.<locals>.<listcomp>c                 S   r   )r   r   r   r)   r)   r*   r   [  r   rE   Zwho)r   r    skipTestr+   rG   r   rE   userssubTest	enumerateri   Zterminalr$   rF   )rH   r3   linesr   Z	terminalsidxur)   r)   r*   
test_usersT  s    


"zTestSystemAPIs.test_usersc                 C   s   t d}| s| dtd|}|rd}ntd|}|r#d}ntd| | jt |d& t	t D ]\}}t
j
|j|}| |||  q9W 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(cannot interpret tstamp in who output
%sr   )r   r    r   r1   findallr"   r   rE   r   r   ry   rz   startedr{   rG   )rH   r3   r   Ztstampr   r   Zpsutil_valuer)   r)   r*   test_users_startedd  s,   
"z!TestSystemAPIs.test_users_startedc                 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.killr0   rV   )r   rW   OSErrorerrnoEBADFrw   rE   _psposixZ
pid_existsre   getpidrY   rH   mr)   r)   r*   test_pid_exists_let_raise{  s   
"z(TestSystemAPIs.test_pid_exists_let_raisec                 C   r   )Npsutil._psposix.os.waitpidr0   rV   )r   rW   r   r   r   rw   rE   r   wait_pidre   r   rY   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   r0   rV   g{Gz?)timeout)r   rW   r   r   ZEINTRrw   rE   r   TimeoutExpiredr   re   r   rY   r   r)   r)   r*   test_os_waitpid_eintr  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   ro   )
r   rW   rw   r"   rE   r   r   re   r   rY   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 n% tyF }	 zt|	 }	d|	v s;d|	v s;d|	v rAW Y d }	~	q d }	~	ww  j|j	||d	  j|j
||d	  j|j||d	  j|j|d
d	 qd S )Nc           	   
      s   z
t d|   }W n ty$ } zdt| v r d d }~ww |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   r^            %r0   )
r   r    RuntimeErrorr   rh   r   r+   r!   floatreplace)	devicer3   errr(   fieldstotalusedfreepercentrH   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   )rE   Zdisk_partitions
disk_usageZ
mountpointr   r   r   rh   ZassertAlmostEqualr   r   r   r   )
rH   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assertGreaterrG   resourcemmapPAGESIZE)rH   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_namerA   ),r   ry   r   re   r1   r<   r_   r   rE   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   r7   r9   r   r:   r   r   r   Zpsutil.tests.runnerr   __file__r)   r)   r)   r*   <module>   s^   
>
 $ 	