<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ9                 @   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	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" 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m0Z0 dd#lm1Z1 dd$lm2Z2 dd%lm3Z3 dd&lm4Z4 dd'lm5Z5 dd(lm6Z6 dd)lm7Z7 dd*lm8Z8 dd+lm9Z9 dd,lm:Z: dd-lm;Z; dd.lm<Z< dd/lm=Z= G d0d1 d1e;j>Z?erej@ dkrG d2d3 d3e?ZAG d4d5 d5e;j>ZBeCd6kre2eD dS )7zTests for psutil.Process class.    N)AIX)BSD)LINUX)NETBSD)OPENBSD)OSX)POSIX)SUNOS)WINDOWS)long)PY3)APPVEYOR)
call_until)copyload_shared_lib)
create_exe)create_proc_children_pair)create_zombie_proc)enum)get_test_subprocess)
get_winver)HAS_CPU_AFFINITY)HAS_ENVIRON)
HAS_IONICE)HAS_MEMORY_MAPS)HAS_PROC_CPU_NUM)HAS_PROC_IO_COUNTERS)
HAS_RLIMIT)HAS_THREADS)mock)PYPY)
PYTHON_EXE)reap_children)retry_before_failing)run_test_module_by_name)safe_rmpath)sh)skip_on_access_denied)skip_on_not_implemented)TESTFILE_PREFIX)TESTFN)
ThreadTask)TRAVIS)unittest)wait_for_pid)	WIN_VISTAc               @   sr  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zeje ddd Zdd  Zeje d!ejed"d#d$ Zeje deed%d&d' Zeje dejeoe e k dd(d) Z!eje dejeoe e k dd*d+ Z"eje# dd,d- Z$eje# dd.d/ Z%eje# dd0d1 Z&eje# dd2d3 Z'eje# dd4d5 Z(d6d7 Z)eje d8d9d: Z*eje+ dd;d< Z,e- e.e/d%eje+ dd=d> Z0d?d@ Z1dAdB Z2eje3 ddCdD Z4eje3 ddEdF Z5dGdH Z6dIdJ Z7dKdL Z8dMdN Z9dOdP Z:eje;dQeje<dRdSdT Z=eje d!dUdV Z>eje d!dWdX Z?dYdZ Z@d[d\ ZAd]d^ ZBd_d` ZCdadb ZDejeE ddcdd ZFejeE ddedf ZGejeE ddgdh ZHejeIdiejeJdjdkdl ZKejeIdiejeJdjdmdn ZLeje d!dodp ZMeed%ejeNpzeOdqdrds ZPdtdu ZQdvdw ZRdxdy ZSdzd{ ZTd|d} ZUd~d ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\eje d!dd Z]eje d!dd Z^eje d!dd Z_dd Z`ejea ddd Zbejea deje d!dd ZcdS )TestProcesszTests for psutil.Process class.c             C   s   t t d S )N)r$   r)   )self r1   $/usr/lib64/python3.6/test_process.pysetUpN   s    zTestProcess.setUpc             C   s
   t   d S )N)r!   )r0   r1   r1   r2   tearDownQ   s    zTestProcess.tearDownc          	   C   sX   t j }| j|jtj  t }| jt j|jj|j | jt d|_W d Q R X d S )N!   )	psutilProcessassertEqualpidosgetpidr   assertRaisesAttributeError)r0   psprocr1   r1   r2   test_pidT   s    zTestProcess.test_pidc             C   sN   t  }|j}tj|}|j  |j }| jtj| trJ| j	|t
j  d S )N)r   r9   r6   r7   killwaitassertFalse
pid_existsr   r8   signalSIGKILL)r0   r?   r@   r>   sigr1   r1   r2   	test_kill\   s    
zTestProcess.test_killc             C   sN   t  }|j}tj|}|j  |j }| jtj| trJ| j	|t
j  d S )N)r   r9   r6   r7   	terminaterB   rC   rD   r   r8   rE   SIGTERM)r0   r?   r@   r>   rG   r1   r1   r2   test_terminatef   s    
zTestProcess.test_terminatec              C   sL  t r
tjntj}t }tj|j}|j| |j	 }| j
tj|j t rH| j||  t }tj|j}|j| tjdttjdd( | jtj |j| W d Q R X W d Q R X t }tj|j}|j| tjdttjdd, | jtj tj j| W d Q R X W d Q R X dtj krHtjd}| jt|jtj d S )Nzpsutil.os.kill )side_effectr   )r   rE   rF   rJ   r   r6   r7   r9   send_signalrB   rC   rD   r8   r   patchOSErrorerrnoZESRCHr<   NoSuchProcessZEPERMAccessDeniedpids
ValueError)r0   rG   r?   r>   Zexit_sigr1   r1   r2   test_send_signalp   s2    


"
zTestProcess.test_send_signalc             C   s^  t  }tj|j}|j  |j }tr8| j|tj	  n| j|tj
 | j|j  t  }tj|j}|j  |j }tr| j|tj
  n| j|tj
 | j|j  d}t td|g}tj|j}| j|j d | j|j  t td|g}tj|j}| j|j d | j|j d t  }tj|j}|j  | jtj|jd | jt|jd d S )Nz0import time, sys; time.sleep(0.01); sys.exit(5);z-c   g{Gz?   )rW   N)r   r6   r7   r9   rA   rB   r   r8   rE   rF   rJ   rC   
is_runningrI   r    assertInnamer<   TimeoutExpiredrU   )r0   r?   r>   coder1   r1   r2   	test_wait   s<    zTestProcess.test_waitc             C   s   t  \}}| jtj|jd | jtj|jd |j  |j  |j }|j }trp| j|tj	  | j|d  n| j|tj	 | j|tj	 d S )Ng{Gz?)
r   r<   r6   r]   rB   rI   r   r8   rE   rJ   )r0   p1p2Zret1Zret2r1   r1   r2   test_wait_non_children   s    
z"TestProcess.test_wait_non_childrenc             C   s   t  }tj|j}| jtj|jd |j  tj d }x:y|jd}W n$ tjk
rl   tj |krh Y q:X P q:W t	r| j
|tj  n| j
|tj | j|j  d S )Nr      )r   r6   r7   r9   r<   r]   rB   rA   timer   r8   rE   rF   rJ   rC   rZ   )r0   r?   r>   Zstop_atr^   r1   r1   r2   test_wait_timeout_0   s     zTestProcess.test_wait_timeout_0c          
   C   s   t j }|jdd |jdd xRtdD ]F}|jd d}| j|t | j|d tsd| j|d q*| j|d q*W | j	t
 |jdd W d Q R X d S )NgMbP?)Zintervald   g        g      Y@rX   rY   )r6   r7   cpu_percentrangeassertIsInstancefloatassertGreaterEqualr   assertLessEqualr<   rU   )r0   r>   xZpercentr1   r1   r2   test_cpu_percent   s    zTestProcess.test_cpu_percentc          	   C   s4   t jdd d}tj j  |js&tW d Q R X d S )Nzpsutil.cpu_count)Zreturn_value)r   rO   r6   r7   rg   calledAssertionError)r0   mr1   r1   r2   test_cpu_percent_numcpus_none   s    z)TestProcess.test_cpu_percent_numcpus_nonec             C   sx   t j j }|jdks(|jdks(t||jdks:t||jdksLt|x&|jD ]}t	j
dt	jt|| qTW d S )Ng        z%H:%M:%S)r6   r7   	cpu_timesusersystemrp   children_userchildren_system_fieldsrd   strftime	localtimegetattr)r0   timesr\   r1   r1   r2   test_cpu_times   s    zTestProcess.test_cpu_timesc             C   s   t j j d d \}}tj d d \}}t||gt||g dkrZ| jd||f  t||gt||g dkr| jd||f  d S )Nrc   g?zexpected: %s, found: %s)r6   r7   rs   r:   r|   maxminfail)r0   	user_timeZkernel_timeutimeZktimer1   r1   r2   test_cpu_times_2  s    zTestProcess.test_cpu_times_2znot supportedc             C   sP   t j }|j }| j|d t j dkr4| j|d | j|j tt j  d S )Nr   rX   )r6   r7   Zcpu_numrk   	cpu_countr8   r[   rh   )r0   r>   Znumr1   r1   r2   test_cpu_num  s    zTestProcess.test_cpu_numc             C   sd   t  }tj }tj|j}|j }t|| }|dkrJ| jd|||f  tjdtj	|j  d S )Nrc   z'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)
r   rd   r6   r7   r9   create_timeabsr   ry   rz   )r0   r?   Znowr>   r   
differencer1   r1   r2   test_create_time  s    zTestProcess.test_create_timez
POSIX onlyznot reliable on TRAVISc             C   sL   t j j }tjj s tjj r>tjj	t
d}| j|| n
| j| d S )Ntty)r6   r7   terminalsysstdinisattystdoutr:   pathrealpathr%   r8   assertIsNone)r0   r   r   r1   r1   r2   test_terminal-  s
    zTestProcess.test_terminal)Zonly_ifc             C   s  t j }|j }ttd}|j  W d Q R X |j }t rt r| j|j	|j	 | j
|j|j tr| j|j|j | j
|j|j n | j|j|j | j|j|j |j }tjtd.}tr|jtdd d n|jdd  W d Q R X |j }| j|j|j | j|j|j | j|j	|j	 | j|j|j tr^| j|j|j | j|j|j xJtt|D ]:}tr|dkrql| j|| d | j|| d qlW d S )Nrb)prefixrm   i@B asciirc   r   )r6   r7   Zio_countersopenr    readr   r   assertGreaterZ
read_countr8   Zwrite_countr   Z
read_charsZwrite_charsrk   Z
read_bytesZwrite_bytestempfileZTemporaryFiler(   r   writebytesrh   len)r0   r>   Zio1fZio2ir1   r1   r2   test_io_counters7  s>    zTestProcess.test_io_countersc       	      C   s  t r<ddlm}m}m}m} | j|d | j|d | j|d | j|d tj }z|jd |j \}}t	d k	r| j
|t	j | j|d | j|d |jd |j \}}| j|d | j|d |jdd |j \}}| j|d | j|d |jdd |j \}}| j|d | j|d W d |j| X nZtj }|j }| j
|t z0d}||krld}|j| | j|j | W d |j| X d S )Nr   )IOPRIO_CLASS_NONEIOPRIO_CLASS_RTIOPRIO_CLASS_BEIOPRIO_CLASS_IDLErX   rc            )r   r6   r   r   r   r   r8   r7   ionicer   ri   IntEnumint)	r0   r   r   r   r   r>   Zioclassvalueoriginalr1   r1   r2   test_ionicec  sJ    



zTestProcess.test_ionicec             C   s   t  }tj|j}tr| jt|jdd | jt|jdd | jt|jd | jt|jdd | j	td|jtj
d | j	td|jtjd | j	td|jdd	 n"| jt|jd
 | jt|jdd d S )Nrc   
   rX   r   fooz*can't specify value with IOPRIO_CLASS_NONEz*can't specify value with IOPRIO_CLASS_IDLEz$'ioclass' argument must be specified)r   r   rY   )r   r6   r7   r9   r   r<   rU   r   	TypeErrorZassertRaisesRegexr   r   )r0   r?   r>   r1   r1   r2   test_ionice_errs  s$    zTestProcess.test_ionice_errsc             C   s   dd l }tjtj }dd ttD }|s4t|x|D ]}tt|}| j|d |t|kr| j	|t|| t
rxq:| j	|j||j| q:|j|}| j	t|d | j|d d | j|d d q:W d S )Nr   c             S   s   g | ]}|j d r|qS )ZRLIMIT)
startswith).0rm   r1   r1   r2   
<listcomp>  s    z/TestProcess.test_rlimit_get.<locals>.<listcomp>rc   rX   rY   rY   )resourcer6   r7   r:   r;   dirrp   r{   rk   r8   r   rlimitZ	getrlimitr   )r0   r   r>   namesr\   r   retr1   r1   r2   test_rlimit_get  s     


zTestProcess.test_rlimit_getc             C   s   t  }tj|j}|jtjd | j|jtjd | jt tj	jdjd W d Q R X | jt |jtjd W d Q R X d S )NrW   r   )rW   rW   )rW   rW   )rW   rW   rW   )
r   r6   r7   r9   r   RLIMIT_NOFILEr8   r<   rU   Z_psplatform)r0   r?   r>   r1   r1   r2   test_rlimit_set  s    zTestProcess.test_rlimit_setc              C   s   t j }|jt j\}}z|jt jd|f ttd}|jdd  W d Q R X | jt*}ttd}|jdd  W d Q R X W d Q R X | j	t
r|jjn|jd tj W d |jt j||f | j	|jt j||f X d S )Ni   wb   Xi  r   )r6   r7   r   RLIMIT_FSIZEr   r)   r   r<   IOErrorr8   r   Z	exceptionrQ   ZEFBIG)r0   r>   softhardr   excr1   r1   r2   test_rlimit  s    "zTestProcess.test_rlimitc             C   s   t j }|jt j\}}zN|jt jd|f |jt jt j|f ttd}|jdd  W d Q R X W d |jt j||f | j|jt j||f X d S )Ni   r   r   i   )	r6   r7   r   r   RLIM_INFINITYr   r)   r   r8   )r0   r>   r   r   r   r1   r1   r2   test_rlimit_infinity  s    z TestProcess.test_rlimit_infinityc             C   s<   t j }|jt j\}}| jt j| |jt j||f d S )N)r6   r7   r   r   r8   r   )r0   r>   r   r   r1   r1   r2   test_rlimit_infinity_value  s    z&TestProcess.test_rlimit_infinity_valuec             C   sr   t j }tr<y|j }W qD t jk
r8   tjdY qDX n|j }t  |j }| j||d  W d Q R X d S )Nz$on OpenBSD this requires root accessrX   )	r6   r7   r   num_threadsrS   r,   SkipTestr*   r8   )r0   r>   step1step2r1   r1   r2   test_num_threads  s    zTestProcess.test_num_threadszWINDOWS onlyc             C   s   t j }| j|j d d S )Nr   )r6   r7   r   Znum_handles)r0   r>   r1   r1   r2   test_num_handles  s    zTestProcess.test_num_handlesc             C   s   t j }tr<y|j }W qD t jk
r8   tjdY qDX n|j }t ~ |j }| jt	|t	|d  t
r| j|d jtj  |d }| j|j|d  | j|j|d  | j|j|d  W d Q R X d S )Nz$on OpenBSD this requires root accessrX   r   rc   )r6   r7   r   threadsrS   r,   r   r*   r8   r   r   idr:   r;   r   system_time)r0   r>   r   r   Zathreadr1   r1   r2   test_threads  s     zTestProcess.test_threadsc             C   s   t  }tj|j}trDy|j  W n  tjk
rB   tjdY nX | j	|j
 jtdd |j D dd | j	|j
 jtdd |j D dd d S )Nz$on OpenBSD this requires root accessc             S   s   g | ]
}|j qS r1   )r   )r   rm   r1   r1   r2   r   7  s    z.TestProcess.test_threads_2.<locals>.<listcomp>g?)Zdeltac             S   s   g | ]
}|j qS r1   )r   )r   rm   r1   r1   r2   r   :  s    )r   r6   r7   r9   r   r   rS   r,   r   ZassertAlmostEqualrs   rt   sumru   )r0   r?   r>   r1   r1   r2   test_threads_2)  s    zTestProcess.test_threads_2c             C   s   t j }|j d d \}}|j }| j|d | j|d d gd }|j d d \}}|j }| j|| | j|| | j|| ~tr|j }	| j|	j|	j	 | j|	j
|	j |j }	x |	jD ]}
| jt|	|
d qW d S )Nrc   r   i` )r6   r7   Zmemory_infomemory_percentr   rk   r
   r8   ZrssZwsetvmsZpagefilerx   r{   )r0   r>   Zrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2memr\   r1   r1   r2   test_memory_info<  s&    
zTestProcess.test_memory_infoc             C   s   t j j}t j j }xB|jD ]8}t||}| j|d||fd | j|||||fd qW t	sft
sftrt| j|jd t	r| j|jd | j|jd d S )Nr   )msg)r6   Zvirtual_memorytotalr7   Zmemory_full_inforx   r{   rk   rl   r   r
   r   ussZpssZswap)r0   r   r   r\   r   r1   r1   r2   test_memory_full_infoZ  s    

z!TestProcess.test_memory_full_infoc       
      C   s  t j }|j }dd |D }| jt|tt| |jdd}x|D ]}|jjdsHtjj	|jspt
|jtry*tjj|jstjj|jst
|jW nH t
k
r   ts n,td}|j }W d Q R X d|j |kr Y nX qHdtjj|jkrHtjj|jsHt
|jqHW xv|D ]n}xf|jD ]\}t||}	|d	krHq*n<|dkrb|	st
|	n"| j|	ttf |	dks*t
|	q*W qW d S )Nc             S   s   g | ]}|qS r1   r1   )r   rm   r1   r1   r2   r   k  s    z0TestProcess.test_memory_maps.<locals>.<listcomp>F)Zgrouped[z/proc/self/smapsz%s (deleted)Z64r   addrpermsr   )r   r   )r6   r7   memory_mapsr8   r   setr   r   r:   isabsrp   r   existsislinkr   r   r   basenamerx   r{   ri   r   r   )
r0   r>   mapspathsZext_mapsntr   dataZfnamer   r1   r1   r2   test_memory_mapsg  s<    






zTestProcess.test_memory_mapsc          
      sH   t  8}dd   fddtj j D }| j || W d Q R X d S )Nc             S   s   t jjt jj| S )N)r:   r   r   normcase)r>   r1   r1   r2   normpath  s    z8TestProcess.test_memory_maps_lists_lib.<locals>.normpathc                s   g | ]} |j qS r1   )r   )r   rm   )r   r1   r2   r     s   z:TestProcess.test_memory_maps_lists_lib.<locals>.<listcomp>)r   r6   r7   r   r[   )r0   r   Zlibpathsr1   )r   r2   test_memory_maps_lists_lib  s
    
z&TestProcess.test_memory_maps_lists_libc             C   s   t j }|j }d|  ko"dkn  s0t||jdd}d|  koNdkn  s\t|d|  kondkn  s|t|| jt|jdd tststr|jdd}d|  kodkn  st|d|  kodkn  st|d S )Nr   rf   r   )Zmemtypez?!?r   )	r6   r7   r   rp   r<   rU   r   r   r
   )r0   r>   r   r1   r1   r2   test_memory_percent  s        zTestProcess.test_memory_percentc             C   sZ   t  }tj|j}|j st|j s*t|j  |j  |j  sHt|j  sVtd S )N)r   r6   r7   r9   rZ   rp   rA   rB   )r0   r?   r>   r1   r1   r2   test_is_running  s    zTestProcess.test_is_runningc             C   s   t  }tj|jj }y| j|t W n tk
r   trht	|t	tkrht
jj}| j|||t nNdtjd tjd f }y | j|j|dtj|d W n tk
r   Y nX Y nX t|ddg}| j|d d S )Nz%s.%sr   rX   rL   z-czimport os; print('hey')Zhey)r   r6   r7   r9   exer8   r    rp   r
   r   r:   r   r   r   version_inforeplacer%   )r0   r?   r   r   Zveroutr1   r1   r2   test_exe  s     zTestProcess.test_exec             C   s   t ddg}t|}y(| jdjtj|jj dj| W n@ tk
rz   t	sVt
sVtrt| jtj|jj d t  n Y nX d S )Nz-czimport time; time.sleep(60) r   )r    r   r8   joinr6   r7   r9   cmdlinerp   r   r   r   )r0   r   r?   r1   r1   r2   test_cmdline  s    
zTestProcess.test_cmdlinec             C   sP   t t}tj|jj j }tjj	tjj
tjj }|j|sLt||fd S )N)r   r    r6   r7   r9   r\   lowerr:   r   r   r   r   
executabler   rp   )r0   r?   r\   Zpyexer1   r1   r2   	test_name  s    zTestProcess.test_namezbroken on SUNOSzbroken on AIXc                s    fdd}t d  t  | j|  ddddddg}t|}tj|j}trZt|j | j	|j
 | | j	|j tjj  | j	tjj|j tjj  d S )	Nc                  s&   yt   W n tk
r    Y nX d S )N)r$   rP   r1   )
funky_pathr1   r2   rm  s    z.TestProcess.test_prog_w_funky_name.<locals>.rmz	foo bar )z-cz9import time; [time.sleep(0.01) for x in range(3000)];arg1Zarg2rL   Zarg3)r)   r   
addCleanupr   r6   r7   r9   r+   r-   r8   r   r\   r:   r   r   r   r   )r0   r   r   r?   r>   r1   )r   r2   test_prog_w_funky_name  s    	

z"TestProcess.test_prog_w_funky_namec             C   sX   t j }|j \}}}| j|tj  | j|tj  ttdrT| jtj |j  d S )N	getresuid)	r6   r7   uidsr8   r:   getuidgeteuidhasattrr   )r0   r>   real	effectivesavedr1   r1   r2   	test_uids  s    
zTestProcess.test_uidsc             C   sX   t j }|j \}}}| j|tj  | j|tj  ttdrT| jtj |j  d S )Nr   )	r6   r7   gidsr8   r:   getgidgetegidr  	getresgid)r0   r>   r  r  r  r1   r1   r2   	test_gids  s    
zTestProcess.test_gidsc             C   s  t j }| jt|jd trz||j }tjdkr@| j|t	j
 n| j|t | j|t j |jt j | j|j t j |jt j | j|j t j W d |jt j X n|j }zyttdr| jtjtjtj |j  |jd | j|j d ttdr"| jtjtjtj |j  tsB|jd | j|j d W n t jk
r\   Y nX W d y|j| W n t jk
r   Y nX X d S )Nstrr   r   getpriorityrX   r   )r   r   )r6   r7   r<   r   nicer
   r   r   ri   r   r   r   r8   NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSr  r:   r  PRIO_PROCESSr;   r   rS   )r0   r>   ZinitZ
first_nicer1   r1   r2   	test_nice"  sB    




zTestProcess.test_nicec             C   s   t j }| j|j t j d S )N)r6   r7   r8   statusZSTATUS_RUNNING)r0   r>   r1   r1   r2   test_statusK  s    zTestProcess.test_statusc             C   sn   t  }tj|j}|j }trZ|jd\}}| j|tj	  dt
jkrj| j|t
jd  n| j|tj	  d S )N\Z
USERDOMAIN)r   r6   r7   r9   usernamer
   splitr8   getpassZgetuserr:   environ)r0   r?   r>   r  Zdomainr1   r1   r2   test_usernameO  s    
zTestProcess.test_usernamec             C   s*   t  }tj|j}| j|j tj  d S )N)r   r6   r7   r9   r8   cwdr:   getcwd)r0   r?   r>   r1   r1   r2   test_cwd[  s    zTestProcess.test_cwdc             C   s.   t ddg}t|}tj|j}t|jd d S )Nz-cz/import os, time; os.chdir('..'); time.sleep(60)z#ret == os.path.dirname(os.getcwd()))r    r   r6   r7   r9   r   r  )r0   cmdr?   r>   r1   r1   r2   
test_cwd_2`  s
    zTestProcess.test_cwd_2c             C   s  t j }|j }|st|| j|j| ttdrL| j|ttj	|j
 | jt|tt| tttt jdd}xzts|n|D ]j}|j|g | j|j |g ttdr| j|j ttj	|j
 t|dr| j|j d |j  qW |jg  tr | j|j |jj  n| j|j | ttdrX| j|j ttj	|j
 | jt|jd |j| |jt| |jt| d S )Nsched_getaffinityT)percpunum_cpur   rX   )r6   r7   cpu_affinityrp   r   r  r:   r8   listr   r9   r   r   rh   rg   r+   r"  r   _procZ_get_eligible_cpusr<   r   tuple)r0   r>   initialZall_cpusnr1   r1   r2   test_cpu_affinityg  s6    






zTestProcess.test_cpu_affinityc             C   sz   t  }tj|j}ttjddd g}| jt|j| | jt|jt	dd | jt
|jddg | jt|jdd	g d S )
NT)r!  r   i'  i*  r   1rX   rY   )r   r6   r7   r9   r   rs   r<   rU   r#  rh   r   )r0   r?   r>   Zinvalid_cpur1   r1   r2   test_cpu_affinity_errs  s    z"TestProcess.test_cpu_affinity_errsc             C   s   t j }|j }|st|| j|j| g }xBtdt|d D ],}x&tj||D ]}|rT|j	t
| qTW qBW x&|D ]}|j| | j|j | qxW d S )Nr   rX   )r6   r7   r#  rp   r   rh   r   	itertoolscombinationsappendr$  r8   )r0   r>   r'  ZcomboslZsubsetZcombor1   r1   r2   "test_cpu_affinity_all_combinations  s    

z.TestProcess.test_cpu_affinity_all_combinationszbroken on BSDzunreliable on APPVEYORc       	      C   sR  t j }|j }| jt|k ttdn}|jdd  |j  t|jdt	| }x<|D ]"}|j
tkrZtrz| j|jd P qZW | jdt|  W d Q R X x"|D ]}tj
j|j
st|qW dt }ttd|g}t j|j}xDtdD ],}d	d
 |j D }t|krP tjd qW | jt| x$|D ]}tj
j|s.t|q.W d S )Nr      xi   zlen(ret) != %izno file found; files=%sz2import time; f = open(r'%s', 'r'); time.sleep(60);z-crf   c             S   s   g | ]
}|j qS r1   )r   )r   rm   r1   r1   r2   r     s    z/TestProcess.test_open_files.<locals>.<listcomp>g{Gz?)r6   r7   
open_filesrC   r)   r   r   flushr   r   r   r   r8   Zpositionr   reprr:   isfilerp   r   r    r9   rh   rd   sleepr[   )	r0   r>   filesr   filer   r?   rm   	filenamesr1   r1   r2   test_open_files  s4    




zTestProcess.test_open_filesc             C   s   t td}tj }xB|j D ] }|j|jks<|j|j krP qW | j	dt
|j   | j|j|j tr|| j|jd n| j|j|j  |j d }| j|d |j | j|d |j | j|j|j  W d Q R X d S )Nwzno file found; files=%srX   r   rY   )r   r)   r6   r7   r2  r   r\   fdfilenor   r4  r8   r
   assertNotIn)r0   Zfileobjr>   r8  Zntupler1   r1   r2   test_open_files_2  s    zTestProcess.test_open_files_2c             C   s   t j }|j }ttd}| j|j | j|j |d  tj }| j|j | j|j |d  |j  |j  | j|j | d S )Nr;  rX   rc   )	r6   r7   Znum_fdsr   r)   r   closer8   socket)r0   r>   startr8  Zsockr1   r1   r2   test_num_fds  s    
zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDc             C   sL   t j }t|j }x(tdD ]}t|j }||krd S qW | jd d S )Ni  z7num ctx switches still the same after 50.000 iterations)r6   r7   r   Znum_ctx_switchesrh   r   )r0   r>   Zbeforerm   afterr1   r1   r2   test_num_ctx_switches  s    z!TestProcess.test_num_ctx_switchesc             C   s   t tdr"| jtj j tj  tj }t }tj|j	}| j|j | t
dd tr^d S x2tj D ]&}|j	|j	krzqh| j|j ||d qhW d S )NgetppidT)	recursive)r   )r  r:   r8   r6   r7   ppidrF  r;   r   r9   r!   r   process_iterassertNotEqual)r0   this_parentr?   r>   r1   r1   r2   	test_ppid  s    

zTestProcess.test_ppidc             C   s0   t j }t }tj|j}| j|j j| d S )N)r:   r;   r   r6   r7   r9   r8   parent)r0   rK  r?   r>   r1   r1   r2   test_parent  s    zTestProcess.test_parentc          	   C   sF   t  }tj|j}tjdtjddd | j|j  W d Q R X d S )Nzpsutil.Processr   r   )rM   )	r   r6   r7   r9   r   rO   rR   r   rM  )r0   r?   r>   r1   r1   r2   test_parent_disappeared   s
    z#TestProcess.test_parent_disappearedc             C   s   t j }| j|j g  | j|jddg  tdd}|j }|jdd}xL||fD ]@}| jt|d | j|d j|j | j|d j tj	  qTW d S )NT)rG  r   )ZcreationflagsrX   )
r6   r7   r8   childrenr   r   r9   rH  r:   r;   )r0   r>   r?   Z	children1Z	children2rP  r1   r1   r2   test_children(  s    
zTestProcess.test_childrenc             C   sd   t  \}}tj }| j|j |g | j|jdd||g |j  |j  | j|jddg  d S )NT)rG  )r   r6   r7   r8   rP  rI   rB   )r0   r`   ra   r>   r1   r1   r2   test_children_recursive7  s    
z#TestProcess.test_children_recursivec             C   s   t jt}x@tj D ]4}y||j   d7  < W q tjk
rF   Y qX qW t|j dd dd d }tj	|}y|j
dd}W n tjk
r   Y nX | jt|tt| d S )	NrX   c             S   s   | d S )NrX   r1   )rm   r1   r1   r2   <lambda>M  s    z6TestProcess.test_children_duplicates.<locals>.<lambda>)keyr   T)rG  rY   )collectionsdefaultdictr   r6   rI  rH  Errorsorteditemsr7   rP  rS   r8   r   r   )r0   tabler>   r9   cr1   r1   r2   test_children_duplicatesD  s    


z$TestProcess.test_children_duplicatesc             C   sd   t  }tj|j}|j  x*tdD ]}|j tjkr8P tj	d q$W |j
  | j|j tj d S )Nrf   g{Gz?)r   r6   r7   r9   suspendrh   r  ZSTATUS_STOPPEDrd   r6  resumerJ  )r0   r?   r>   rm   r1   r1   r2   test_suspend_resumeV  s    zTestProcess.test_suspend_resumec             C   s$   | j ttjd | j ttjd d S )Nr*  rX   rY   )r<   r   r6   r7   rU   )r0   r1   r1   r2   test_invalid_pida  s    zTestProcess.test_invalid_pidc          ;   C   s  t j }|jddgd}| jt|j ddg t jtt j }|jdgdd}t|d t	sp| j|d d t
jddt jd	" | j|jd
gddd
di W d Q R X t
jddt j|jdd	 | jt j|jd
gd W d Q R X t
jddt j|jdd	" | j|jd
gddd
di W d Q R X t
jddtd	F |j }| jd
t	|j  | jt |jd
gd W d Q R X W d Q R X | jt |jd W d Q R X | jt |jdg W d Q R X | jt |jddg W d Q R X d S )Nr   r\   )attrsZconnectionsr   )ra  Zad_valuezpsutil.Process.niceT)ZcreaterM   r  rX   Zbar)r6   r7   as_dictr8   rX  keysr   rT   
isinstancer$  r   rO   rS   rR   r9   r<   ZombieProcessNotImplementedErrorr>  r   rU   )r0   r>   dr1   r1   r2   test_as_dicte  s>    ""
"zTestProcess.test_as_dictc             C   s   t jd@}tj }|j  |j  |j  W d Q R X | j|jd W d Q R X t jd}|j  |j  W d Q R X | j|jd d S )Nz$psutil._psplatform.Process.cpu_timesrX   rc   )r   rO   r6   r7   oneshotrs   r8   
call_count)r0   rq   r>   r1   r1   r2   test_oneshot  s    
zTestProcess.test_oneshotc          &   C   s   t jd}t jdr}tj }|j : |j  |j  |j  |j  |j  W d Q R X W d Q R X | j|jd | j|jd W d Q R X W d Q R X t jd}|j  |j  W d Q R X | j|jd d S )Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterrX   rc   )r   rO   r6   r7   ri  rs   r8   rj  )r0   m1m2r>   rq   r1   r1   r2   test_oneshot_twice  s    

"zTestProcess.test_oneshot_twicec             C   s  t  }tj|j}|j  |j  tr8ttjd|j  | j	|j
  ddddddg}trjt rj|jd xTt|D ]F}|jd	sv||krqvyt||}|d
krtr|d}n
|tj}np|dkr| }|d}nX|dkr|tj}|tjd}n8|dkr| }|dg}n|dkr(|tj}n| }W nz tjk
rV   | jd|  Y qv tjk
rl   Y qv tjk
r   tr|dkrn Y qv tk
r   Y qvX | jd||f  qvW d S )Nz%s not in retr9   rZ   rB   r   ri  Zmemory_info_exr   _r  rX   r   rc   rW   r#  r   rN   z/ZombieProcess for %r was not supposed to happenr   r   z4NoSuchProcess exception not raised for %r, retval=%s)rW   rW   )r   r   )r   r6   r7   r9   rI   rB   r
   r   rT   rC   rZ   r   r   r.  r   r   r{   r   r  r   rE   rJ   re  r   rR   rS   r   rf  )r0   r?   r>   Zexcluded_namesr\   methr   r1   r1   r2   test_halfway_terminated_process  s^    









z+TestProcess.test_halfway_terminated_processc             C   s  dd }t  }| jtdd tj|}| j|j tj | j|j	  |j
  ||j}|d k	rl| j|g  t|dr||jtj ||jtjd ||j t|dry||jdg W n: tk
r } ztrtrd	t|krn W Y d d }~X nX ||jd t|d
r0tr$||jdd n||jd t|drL||jtjd ||j ||j ||j ||j | jtj| t rtr| j|tj  | j|dd tj D  i t_| j|dd tj D  d S )Nc             _   s,   y
| ||S  t jt jfk
r&   Y nX d S )N)r6   re  rS   )Zfunargskwargsr1   r1   r2   succeed_or_zombie_p_exc  s    
z@TestProcess.test_zombie_process.<locals>.succeed_or_zombie_p_excT)rG  r   rW   r#  r   znot eligibler   rc   c             S   s   g | ]
}|j qS r1   )r9   )r   rm   r1   r1   r2   r   9  s    z3TestProcess.test_zombie_process.<locals>.<listcomp>c             S   s   g | ]
}|j qS r1   )r9   )r   rm   r1   r1   r2   r   ;  s    )rW   rW   )rW   rW   ) r   r   r!   r6   r7   r8   r  STATUS_ZOMBIE
assertTruerZ   rb  r]  r  r   r   rM  r#  rU   r+   r   r  r  r   r^  rI   rA   rD   r   r[   rT   rI  Z_pmap)r0   rt  ZzpidZzprocr   errr1   r1   r2   test_zombie_process  sP    










zTestProcess.test_zombie_processc          	   C   sB   t j }tjdt jdd}|j s*t|js4tW d Q R X d S )Nzpsutil.Processr   )rM   )r6   r7   r   rO   re  rZ   rp   ro   )r0   r>   rq   r1   r1   r2   $test_zombie_process_is_running_w_exc=  s
    z0TestProcess.test_zombie_process_is_running_w_excc          
   C   sH   t j }tjdt jdd"}| j|j t j |js:t	W d Q R X d S )Nz!psutil._psplatform.Process.statusr   )rM   )
r6   r7   r   rO   re  r8   r  ru  ro   rp   )r0   r>   rq   r1   r1   r2    test_zombie_process_status_w_excG  s
    z,TestProcess.test_zombie_process_status_w_excc             C   s:  dt j kr"| jt jt jd d S t jd}xt jD ]}|dkrBq4t||}y
| }W n t jk
rl   Y q4X |d
kr| j|j	d q4|dkrt
r| j|j d qtr| j|j d q4|dkr4|s4t|q4W t|d	ry|jt j W n t jk
r   Y nX |j  ts6| jdt j  | jt jd d S )Nr   r9   r   r  r  rootzNT AUTHORITY\SYSTEMr\   r   )r   r  )r6   rT   r<   rR   r7   Z_as_dict_attrnamesr{   rS   r8   r  r   r  r
   rp   r  r   r   rb  r   r[   rv  rD   )r0   r>   r\   rp  r   r1   r1   r2   
test_pid_0Q  s<    


zTestProcess.test_pid_0c             C   s@   dd }d | _ tj }||j }|tjj }| j|| d S )Nc             S   sb   | j dd  | j dd  | j dd  trL| j dd  | j dd  | j dd  tdd | j D S )	NZPSUTIL_TESTINGZPLATHOMEZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONc             S   s$   g | ]\}}|j d |j d fqS )z
)rstrip)r   kvr1   r1   r2   r     s    z@TestProcess.test_environ.<locals>.clean_dict.<locals>.<listcomp>)popr   dictrY  )rg  r1   r1   r2   
clean_dictz  s    z,TestProcess.test_environ.<locals>.clean_dict)ZmaxDiffr6   r7   r  r:   copyr8   )r0   r  r>   Zd1Zd2r1   r1   r2   test_environx  s    zTestProcess.test_environc             C   s   t jd}t}t||d | jt| t|gtjtjd}t	j
|j}t|j | j|j  | j|jj d | j|j ddd |j  | j|jd d S )	Na  
            #include <unistd.h>
            #include <fcntl.h>
            char * const argv[] = {"cat", 0};
            char * const envp[] = {"A=1", "X", "C=3", 0};
            int main(void) {
                /* Close stderr on exec so parent can wait for the execve to
                 * finish. */
                if (fcntl(2, F_SETFD, FD_CLOEXEC) != 0)
                    return 0;
                return execve("/bin/cat", argv, envp);
            }
            )Zc_code)r   stderr    r*  3)ACr   )textwrapdedentr)   r   r   r$   r   
subprocessPIPEr6   r7   r9   r-   rv  rZ   r8   r  r   r  communicate
returncode)r0   r^   r   r?   r>   r1   r1   r2   test_weird_environ  s    

zTestProcess.test_weird_environN)d__name__
__module____qualname____doc__r3   r4   r@   rH   rK   rV   r_   rb   re   rn   rr   r}   r   r,   ZskipIfr   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&   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+  r0  r   r   r:  r?  rC  r   r   rE  rL  rN  rO  rQ  rR  r\  r_  r`  rh  rk  rn  rq  rx  ry  rz  r|  r   r  r  r1   r1   r1   r2   r/   K   s   

 /			+ .")


)*

%

.@I

'r/   c               @   sR   e Zd ZdZeedr&ej Zej Z	dd Z
dd Zdd Zd	d
 Zdd ZdS )LimitedUserTestCasezRepeat the previous tests by using a limited user.
        Executed only on UNIX and only if the user who run the test script
        is root.
        r  c                s\   t j| f|| xDdd t| D D ].}t| |  fdd}t| |tj||  q&W d S )Nc             S   s   g | ]}|j d r|qS )Ztest)r   )r   rm   r1   r1   r2   r     s    z0LimitedUserTestCase.__init__.<locals>.<listcomp>c                s&   y
   W n t jk
r    Y nX d S )N)r6   rS   )r0   )rp  r1   r2   test_  s    
z+LimitedUserTestCase.__init__.<locals>.test_)r/   __init__r   r{   setattrtypes
MethodType)r0   rr  rs  attrr  r1   )rp  r2   r    s
    
zLimitedUserTestCase.__init__c             C   s*   t t tj|  tjd tjd d S )Ni  )r$   r)   r/   r3   r:   setegidseteuid)r0   r1   r1   r2   r3     s    

zLimitedUserTestCase.setUpc             C   s&   t j| j t j| j tj|  d S )N)r:   r  PROCESS_UIDr  PROCESS_GIDr/   r4   )r0   r1   r1   r2   r4     s    zLimitedUserTestCase.tearDownc             C   s8   yt j jd W n t jk
r(   Y nX | jd d S )NrX   zexception not raisedrY   )r6   r7   r  rS   r   )r0   r1   r1   r2   r    s
    zLimitedUserTestCase.test_nicec             C   s   d S )Nr1   )r0   r1   r1   r2   rx    s    z'LimitedUserTestCase.test_zombie_processN)r  r  r  r  r  r:   r  r  r	  r  r  r3   r4   r  rx  r1   r1   r1   r2   r    s   
r  c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )	TestPopenzTests for psutil.Popen class.c             C   s
   t   d S )N)r!   )r0   r1   r1   r2   r4     s    zTestPopen.tearDownc             C   sj   t ddg}tj|tjtjdB}|j  |j  |j | jt	| | j
tt|d |j  W d Q R X d S )Nz-czimport time; time.sleep(60);)r   r  r   )r    r6   Popenr  r  r\   rs   r   rv  r   r<   r=   r{   rI   )r0   r  procr1   r1   r2   	test_misc  s    

zTestPopen.test_miscc          
   C   sf   t jtdgtjtjtjd}|j  W d Q R X |jjs<t|j	jsHt|j
jsTt| j|jd d S )Nz-V)r   r  r   r   )r6   r  r    r  r  r  r   closedrp   r  r   r8   r  )r0   r  r1   r1   r2   test_ctx_manager  s    
zTestPopen.test_ctx_managerc             C   s   t ddg}tj|tjtjd}|j  |j  | jtj|j | jtj|j	 | jtj|j
tj trtjdkr| jtj|j
tj | jtj|j
tj W d Q R X d S )Nz-czimport time; time.sleep(60);)r   r  rc   r   )rc   r   )r    r6   r  r  r  rI   rB   r<   rR   rA   rN   rE   rJ   r
   r   r   ZCTRL_C_EVENTZCTRL_BREAK_EVENT)r0   r  r  r1   r1   r2   test_kill_terminate  s    

zTestPopen.test_kill_terminateN)r  r  r  r  r4   r  r  r  r1   r1   r1   r2   r    s
   r  __main__)Er  rU  rQ   r  r,  r:   rE   rA  r  r   r   r  rd   r  r6   r   r   r   r   r   r   r   r	   r
   Zpsutil._compatr   r   Zpsutil.testsr   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(   r)   r*   r+   r,   r-   r.   ZTestCaser/   r  r  r  r  __file__r1   r1   r1   r2   <module>   s             q53
