HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/psutil/tests/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/psutil/tests/__pycache__/test_process.cpython-36.pyc
3

�^gn��@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%ddl"m&Z&ddl"m'Z'ddl"m(Z(ddl"m)Z)ddl"m*Z*ddl"m+Z+ddl"m,Z,ddl"m-Z-ddl"m.Z.ddl"m/Z/dd l"m0Z0dd!l"m1Z1dd"l"m2Z2dd#l"m3Z3dd$l"m4Z4dd%l"m5Z5dd&l"m6Z6dd'l"m7Z7dd(l"m8Z8dd)l"m9Z9dd*l"m:Z:dd+l"m;Z;dd,l"m<Z<dd-l"m=Z=dd.l"m>Z>dd/l"m?Z?dd0l"m@Z@dd1l"mAZAdd2l"mBZBGd3d4�d4e4�ZCe�r�ejD�dk�r�Gd5d6�d6eC�ZEGd7d8�d8e4�ZFdS)9zTests for psutil.Process class.�N)�AIX)�BSD)�LINUX)�MACOS)�NETBSD)�OPENBSD)�OSX)�POSIX)�SUNOS)�WINDOWS)�	open_text)�PY3)�FileNotFoundError)�long)�redirect_stderr)�super)�APPVEYOR)�
CI_TESTING)�GITHUB_ACTIONS)�GLOBAL_TIMEOUT)�HAS_CPU_AFFINITY)�HAS_ENVIRON)�
HAS_IONICE)�HAS_MEMORY_MAPS)�HAS_PROC_CPU_NUM)�HAS_PROC_IO_COUNTERS)�
HAS_RLIMIT)�HAS_THREADS)�MACOS_11PLUS)�PYPY)�
PYTHON_EXE)�PYTHON_EXE_ENV)�	QEMU_USER)�PsutilTestCase)�
ThreadTask)�
call_until)�copyload_shared_lib)�create_c_exe)�
create_py_exe)�mock)�process_namespace)�pytest)�
reap_children)�retry_on_failure)�sh)�skip_on_access_denied)�skip_on_not_implemented)�wait_for_pidc@seZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	j
jedd
�dd��Z
dd�Ze	j
jedd
�dd��Zdd�Zdd�Zdd�Zdd�Zdd�Ze	j
jedd
�d d!��Ze	j
jedd
�d"d#��Ze	j
jed$d
�d%d&��Zd'd(�Ze	j
jed)d
�d*d+��Ze	j
jed$d
�eed,�d-d.���Z e	j
je!d$d
�e	j
jed/d
�d0d1���Z"e	j
je!d$d
�e	j
je#d2d
�d3d4���Z$e	j
je%d$d
�d5d6��Z&e	j
je%d$d
�d7d8��Z'e	j
je%d$d
�d9d:��Z(e	j
je%d$d
�d;d<��Z)e	j
je%d$d
�d=d>��Z*d?d@�Z+e	j
je#dAd
�dBdC��Z,e	j
je-d$d
�dDdE��Z.e/�e0e1d,�e	j
je-d$d
�dFdG����Z2e/�dHdI��Z3dJdK�Z4e	j
je5d$d
�dLdM��Z6e	j
je5d$d
�dNdO��Z7dPdQ�Z8dRdS�Z9e	j
jedd
�dTdU��Z:dVdW�Z;e	j
je<dXd
�dYdZ��Z=d[d\�Z>e	j
je<�ped]d
�e	j
jed^d
�d_d`���Z?e	j
je@dad
�e	j
jeAdbd
�e	j
je<dXd
�e	j
jedcd
�ddde�����ZBe	j
jed)d
�dfdg��ZCe	j
jed)d
�dhdi��ZDdjdk�ZEe	j
jedd
�dldm��ZFdndo�ZGdpdq�ZHdrds�ZIe	j
jeJd$d
�dtdu��ZKe	j
jeJd$d
�dvdw��ZLe	j
jeJd$d
�dxdy��ZMe	j
jeNdzd
�e	j
jeOd{d
�d|d}���ZPe	j
jeNdzd
�e	j
jeOd{d
�d~d���ZQe	j
jed)d
�d�d���ZReed,�e	j
jeS�p�ed�d
�d�d����ZTd�d��ZUd�d��ZVd�d��ZWe	j
jedd
�e/�d�d����ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zce	j
jed)d
�d�d���Zde	j
jed)d
�d�d���Zee	j
jed)d
�d�d���Zfd�d��Zgd�d��Zhe	j
jeid$d
�d�d���Zje	j
jeid$d
�e	j
jed)d
�e	j
jekd�d
�e	j
jed�d
�d�d������Zld�S)��TestProcesszTests for psutil.Process class.cOsB|j||�}ytj|j�Stjk
r<|j|j��YnXdS)N)�spawn_testproc�psutil�Process�pid�
NoSuchProcessZ
assertPidGone)�self�args�kwargs�sproc�r<�E/usr/local/lib64/python3.6/site-packages/psutil/tests/test_process.py�spawn_psprocSszTestProcess.spawn_psprocc	Cs:tj�}|jtj�kst�tjt��d|_WdQRXdS)N�!)	r4r5r6�os�getpid�AssertionErrorr+�raises�AttributeError)r8�pr<r<r=�test_pid]szTestProcess.test_pidcCsJ|j�}|j�|j�}tr,|tjks<t�n|tjks<t�|j|�dS)N)	r>�kill�waitr�signal�SIGTERMrB�SIGKILL�assertProcessGone)r8rE�coder<r<r=�	test_killcszTestProcess.test_killcCsJ|j�}|j�|j�}tr,|tjks<t�n|tjks<t�|j|�dS)N)r>�	terminaterHrrIrJrBrL)r8rErMr<r<r=�test_terminatemszTestProcess.test_terminatecCsXtr
tjntj}|j�}|j|�|j�}tr<||ksJt�n||ksJt�|j	|�dS)N)
r	rIrKrJr>�send_signalrHrrBrL)r8�sigrErMr<r<r=�test_send_signalws
zTestProcess.test_send_signalz	not POSIX)�reasoncCs�tj}|j�}tjdttjd�d��(tj	t
j��|j|�WdQRXWdQRX|j�}tjdttj
d�d��(tj	t
j��|j|�WdQRXWdQRXdS)Nzpsutil.os.kill�)�side_effect)rIrJr>r)�patch�OSError�errnoZESRCHr+rCr4r7rQ�EPERM�AccessDenied)r8rRrEr<r<r=�test_send_signal_mocked�sz#TestProcess.test_send_signal_mockedcCs�tddg}|j|�}|j�}|dks(t�|j|�tddg}|j|tjd�}|j�}|dks`t�|j|�tddg}|j|�}|j�}|dks�t�|j|�tdd	g}|j|�}|j�}|dks�t�|j|�dS)
Nz-c�passrz1 / 0)�stderr�zimport sys; sys.exit(5);�zimport os; os._exit(5);)r r>rHrBrL�
subprocess�PIPE)r8�cmdrErMr<r<r=�test_wait_exited�s(









zTestProcess.test_wait_exitedzfails on NETBSDcCs.|j�}tr�|jtj�tjtj��|j	dd�WdQRX|jtj
�tjtj��|j	dd�WdQRX|jtj�|j	�tjks�t�|j	�tjks�t�n�|j
�tjtj��|j	dd�WdQRX|j�tjtj��|j	dd�WdQRX|j�|j	�tjk�st�|j	�tjk�s*t�dS)Ng����MbP?)�timeout)r>r	rQrI�SIGSTOPr+rCr4�TimeoutExpiredrH�SIGCONTrJrB�suspend�resumerO)r8rEr<r<r=�test_wait_stopped�s(zTestProcess.test_wait_stoppedcCs�|j�\}}tjtj��|jd�WdQRXtjtj��|jd�WdQRX|j�|j�|j�}|j�}tr�|tj	ks�t
�|dks�t
�n|tj	ks�t
�|tj	ks�t
�dS)Ng{�G�z�?)�spawn_children_pairr+rCr4rgrHrOr	rIrJrB)r8�child�
grandchildZ	child_retZgrandchild_retr<r<r=�test_wait_non_children�sz"TestProcess.test_wait_non_childrencCsx|j�}|j�tjtj��|jd�WdQRXtjtj��|jd�WdQRXtjt��|jd�WdQRXdS)Ng{�G�z�?rr_���)r>�namer+rCr4rgrH�
ValueError)r8rEr<r<r=�test_wait_timeout�szTestProcess.test_wait_timeoutcCs�|j�}tjtj��|jd�WdQRX|j�tj�t}xBtj�|krvy|jd�}PWq@tjk
rrYq@Xq@W|j	d��t
r�|tjks�t
�n|tjks�t
�|j|�dS)Nrre)r>r+rCr4rgrHrG�timer�failr	rIrKrBrJrL)r8rEZstop_atrMr<r<r=�test_wait_timeout_nonblocking�s 


z)TestProcess.test_wait_timeout_nonblockingc
Cs~tj�}|jdd�|jdd�x6td�D]*}|jdd�}t|t�sHt�|dks*t�q*Wtjt	��|jdd�WdQRXdS)Ng����MbP?)�interval�dgr_rp)
r4r5�cpu_percent�range�
isinstance�floatrBr+rCrr)r8rE�_�percentr<r<r=�test_cpu_percent�szTestProcess.test_cpu_percentc	Cs4tjddd��}tj�j�|js&t�WdQRXdS)Nzpsutil.cpu_count)Zreturn_value)r)rWr4r5ry�calledrB)r8�mr<r<r=�test_cpu_percent_numcpus_nonesz)TestProcess.test_cpu_percent_numcpus_nonezQEMU user not supportedcCs�tj�j�}|jdkst|��|jdks0t|��|jdksBt|��|jdksTt|��trj|j	dksjt|��x&|j
D]}tjdtj
t||���qrWdS)Ngz%H:%M:%S)r4r5�	cpu_times�userrB�system�
children_user�children_systemrZiowait�_fieldsrt�strftime�	localtime�getattr)r8�timesrqr<r<r=�test_cpu_timesszTestProcess.test_cpu_timescCs�tj�j�dd�\}}tj�dd�\}}t||g�t||g�dkrZ|jd||f��t||g�t||g�dkr�|jd||f��dS)N�g�������?zexpected: %s, found: %s)r4r5r�r@r��max�minru)r8�	user_timeZkernel_time�utimeZktimer<r<r=�test_cpu_times_2szTestProcess.test_cpu_times_2z
not supportedcCsPtj�}|j�}|dkst�tj�dkr4|dks4t�|j�ttj��ksLt�dS)Nrr_)r4r5Zcpu_numrB�	cpu_countrz)r8rE�numr<r<r=�test_cpu_num)szTestProcess.test_cpu_numcCsZ|j�}tj�}|j�}t||�}|dkr@|jd|||f��tjdtj|j���dS)Nr�z'expected: %s, found: %s, difference: %sz%Y %m %d %H:%M:%S)r>rt�create_time�absrur�r�)r8rE�nowr��
differencer<r<r=�test_create_time2szTestProcess.test_create_timez
POSIX onlycCsXtj�j�}|dk	rTytjjtd��}Wntk
rFtj	d��YnX||ksTt
�dS)N�ttyzcan't rely on `tty` CLI)r4r5�terminalr@�path�realpathr.�RuntimeErrorr+�skiprB)r8r�r�r<r<r=�
test_terminalDszTestProcess.test_terminal)Zonly_ifcCs�tj�}|j�}ttd��}|j�WdQRX|j�}tr�tr�|j|jksRt	�|j
|j
ksbt	�tr�|j|jksvt	�|j
|j
ks�t	�n |j|jks�t	�|j|jks�t	�|j�}t|j�d��.}tr�|jtddd��n|jdd�WdQRX|j�}|j
|j
k�st	�|j|jk�st	�|j|jk�s0t	�|j|jk�sBt	�t�rl|j
|j
k�sZt	�|j|jk�slt	�xNtt|��D]>}t�r�|dk�r��qz||dk�s�t	�||dk�szt	��qzWdS)N�rb�wb�xi@B�asciir�r)r4r5Zio_counters�openr �readrr�
read_countrB�write_countrZ
read_charsZwrite_chars�
read_bytes�write_bytes�
get_testfnr
�write�bytesrz�len)r8rEZio1�fZio2�ir<r<r=�test_io_countersPs>zTestProcess.test_io_countersz
linux onlyc.s��fdd�}tj��ts.�j�dtjks.t�tjdks<t�tjdksJt�tjdksXt�tjdksft��j�}|j	||��jtj�t
�j��tjdfks�t�tjt
���jtjdd�WdQRX�jtj�t
�j��tjdfks�t��jtjdd�t
�j��tjdfk�st�tjt
���jtjd	d�WdQRXy�jtjdd�Wntjk
�rjYnXtjt
d
d���jtjd�WdQRXtjt
d
d���jtjd�WdQRXtjt
dd���jdd�WdQRXdS)
Ncs&|\}}|tjkrd}�j||�dS)Nr)r4�IOPRIO_CLASS_NONE�ionice)�init�ioclass�value)rEr<r=�cleanup~s
z.TestProcess.test_ionice_linux.<locals>.cleanuprr_r���)r��zioclass accepts no value)�matchz$'ioclass' argument must be specified)r4r5rr�r�rBZIOPRIO_CLASS_RTZIOPRIO_CLASS_BEZIOPRIO_CLASS_IDLE�
addCleanup�tupler+rCrrr[)r8r�r�r<)rEr=�test_ionice_linux{s>zTestProcess.test_ionice_linuxz!not supported on this win versioncCstj�}ts|j�tjkst�|j�}|j|j|�|jtj�|j�tjksRt�|jtj�|j�tjkspt�y|jtj	�Wntj
k
r�YnX|j�tj	ks�t�tjt
dd��|jtjdd�WdQRXtjtdd��|jtj	d�WdQRXdS)Nz&value argument not accepted on Windows)r�r_)r�zis not a valid priority)r4r5rr�Z
IOPRIO_NORMALrBr�ZIOPRIO_VERYLOWZ
IOPRIO_LOWZIOPRIO_HIGHr[r+rC�	TypeErrorrr)r8rEr�r<r<r=�test_ionice_win�s&zTestProcess.test_ionice_wincCs�ddl}tjtj��}dd�tt�D�}|s4t|��x�|D]�}tt|�}|dksTt�|t|�kr�|t||�ksrt�trxq:|j	|�|j
|�ks�t�q:|j	|�}t|�dks�t�|ddks�t�|ddks:t�q:WdS)NrcSsg|]}|jd�r|�qS)ZRLIMIT)�
startswith)�.0r�r<r<r=�
<listcomp>�sz/TestProcess.test_rlimit_get.<locals>.<listcomp>r�r_rprp)�resourcer4r5r@rA�dirrBr�r�rlimitZ	getrlimitr�)r8r�rE�namesrqr��retr<r<r=�test_rlimit_get�s 


zTestProcess.test_rlimit_getcCs�|j�}|jtjd�|jtj�dks*t�trZtjtdd��tj	j
d�jd�WdQRXtjt��|jtjd�WdQRXdS)Nr`zcan't use prlimit)r�r)r`r`)r`r`)r`r`r`)r>r�r4Z
RLIMIT_NOFILErBrr+rCrrZ_psplatformr5)r8rEr<r<r=�test_rlimit_set�szTestProcess.test_rlimit_setc Cs�tj�}|j�}|jtj�\}}z�|jtjd|f�t|d��}|jdd�WdQRXtjt	��*}t|d��}|jdd�WdQRXWdQRXt
r�|jjn|jdtj
ks�t�Wd|jtj||f�|jtj�||fks�t�XdS)Nir��Xir)r4r5r�r��RLIMIT_FSIZEr�r�r+rC�IOErrorr
r�rYZEFBIGrB)r8rE�testfn�soft�hardr��excr<r<r=�test_rlimit�s"$zTestProcess.test_rlimitcCs�tj�}|jtj�\}}zR|jtjd|f�|jtjtj|f�t|j�d��}|jdd�WdQRXWd|jtj||f�|jtj�||fks�t�XdS)Nir�r�i)	r4r5r�r��
RLIM_INFINITYr�r�r�rB)r8rEr�r�r�r<r<r=�test_rlimit_infinity�sz TestProcess.test_rlimit_infinitycCs<tj�}|jtj�\}}|tjks&t�|jtj||f�dS)N)r4r5r�r�r�rB)r8rEr�r�r<r<r=�test_rlimit_infinity_value
sz&TestProcess.test_rlimit_infinity_valuecCsrtj�}tr<y|j�}WqDtjk
r8tjd��YqDXn|j�}t��|j�}||dksdt�WdQRXdS)Nz$on OpenBSD this requires root accessr_)	r4r5r�num_threadsr[r+r�r$rB)r8rE�step1�step2r<r<r=�test_num_threadsszTestProcess.test_num_threadszWINDOWS onlycCstj�}|j�dkst�dS)Nr)r4r5Znum_handlesrB)r8rEr<r<r=�test_num_handles*szTestProcess.test_num_handlescCs�tj�}tr<y|j�}WqDtjk
r8tjd��YqDXn|j�}t��d|j�}t|�t|�dkslt	�|d}|j
|dks�t	�|j|dks�t	�|j|dks�t	�WdQRXdS)Nz$on OpenBSD this requires root accessr_rr�)
r4r5r�threadsr[r+r�r$r�rB�idr��system_time)r8rEr�r�Zathreadr<r<r=�test_threads0szTestProcess.test_threadsc
Cs�|j�}tr:y|j�Wn tjk
r8tjd��YnXt|j�j	t
dd�|j�D���dksft�t|j�jt
dd�|j�D���dks�t�dS)Nz$on OpenBSD this requires root accesscSsg|]
}|j�qSr<)r�)r�r�r<r<r=r�Osz.TestProcess.test_threads_2.<locals>.<listcomp>g�������?cSsg|]
}|j�qSr<)r�)r�r�r<r<r=r�Us)
r>rr�r4r[r+r�r�r�r��sumrBr�)r8rEr<r<r=�test_threads_2Ds"
zTestProcess.test_threads_2cCs�tj�}|j�dd�\}}|j�}|dks0t�|dks<t�dgd}|j�dd�\}}|j�}||ksnt�||kszt�||ks�t�~tr�|j�}	|	j|	jks�t�|	j|	j	ks�t�|j�}	x |	j
D]}
t|	|
�dks�t�q�WdS)Nr�ri`�)r4r5Zmemory_info�memory_percentrBrZrssZwset�vmsZpagefiler�r�)r8rEZrss1Zvms1Zpercent1ZmemarrZrss2Zvms2Zpercent2�memrqr<r<r=�test_memory_infoZs&
zTestProcess.test_memory_infocCs�tj�}tj�j}|j�}xB|jD]8}t||�}|dks<t�|dkrHts"t	rNq"||ks"t�q"Wt	sjt
sjtrx|jdksxt�t	r�|j
dks�t�|jdks�t�dS)Nrr�)r4r5Zvirtual_memory�totalZmemory_full_infor�r�rBrrrr�ussZpssZswap)r8rEr�r�rqr�r<r<r=�test_memory_full_infoys

z!TestProcess.test_memory_full_infoc
Cs�tj�}|j�}t|�tt|��ks(t�|jdd�}�x|D�]}|jjd�s<tr^d|jkr^q<t	jj
|j�svt|j��tr�y*t	jj|j�s�t	jj
|j�s�t|j��WnHtk
r�ts��n,td��}|j�}WdQRXd|j|kr�YnXq<dt	jj|j�kr<yt	j|j�}Wntk
�r(Yq<Xtj|j�s<t|j��q<Wxx|D]p}xh|jD]^}t||�}	|dk�rr�qV|dk�r�|	�s�t|	��n&t|	ttf��s�t�|	dk�sVt|	���qVW�qJWdS)
NF)Zgrouped�[z
/bin/qemu-z/proc/self/smapsz%s (deleted)Z64r��addr�permsr)r�r�)r4r5�memory_mapsr��setrBr�r�r"r@�isabsr	�exists�islinkrrr��basename�statr�S_ISREG�st_moder�r�r{�intr)
r8rE�mapsZext_maps�ntr��data�st�fnamer�r<r<r=�test_memory_maps�sH






zTestProcess.test_memory_mapsc
sLtj�}t��4}dd���fdd�|j�D�}�|�|ks>t�WdQRXdS)NcSstjjtjj|��S)N)r@r�r��normcase)rEr<r<r=�normpath�sz8TestProcess.test_memory_maps_lists_lib.<locals>.normpathcsg|]}�|j��qSr<)r�)r�r�)r�r<r=r��sz:TestProcess.test_memory_maps_lists_lib.<locals>.<listcomp>)r4r5r&r�rB)r8rEr�Zlibpathsr<)r�r=�test_memory_maps_lists_lib�s
z&TestProcess.test_memory_maps_lists_libc
CsNtj�}|j�tjt��|jdd�WdQRXts>ts>trJ|jdd�dS)Nz?!?)Zmemtyper�)	r4r5r�r+rCrrrrr)r8rEr<r<r=�test_memory_percent�szTestProcess.test_memory_percentcCsP|j�}|j�st�|j�s t�|j�|j�|j�s>t�|j�sLt�dS)N)r>�
is_runningrBrGrH)r8rEr<r<r=�test_is_running�szTestProcess.test_is_runningcCs�|j�}|j�}y|tkst�Wn�tk
r�trbt|�tt�krbtjj}||�|t�ks�t�nNdt	j
dt	j
df}y |j|d�tj|d�ks�t�Wntk
r�YnXYnXt|ddg�}|dks�t�dS)Nz%s.%srr_rUz-czimport os; print('hey')Zhey)
r>�exer rBrr�r@r�r��sys�version_info�replacer.)r8rErr��ver�outr<r<r=�test_exe�s zTestProcess.test_execCs�tddg}|j|�}tr.|j�gkr.tjd��ts:ts:trP|j�dtks�t�n�t	r�t
r�|j�d}|tkr�dj|j�dd��dj|dd��ks�t�dStr�dj|j�dd��dj|�ks�t�dSdj|j��dj|�ks�t�dS)Nz-cz2import time; [time.sleep(0.1) for x in range(100)]zOPENBSD: returned EBUSYr� r_r�)
r r>r�cmdliner+r�rrrBrr�joinr")r8rrE�pyexer<r<r=�test_cmdline�s"

,$zTestProcess.test_cmdlinezbroken on PYPYcCs�tg}|jdgd�|jddg�|j|�}trjy|j�|ksDt�Wq�tjk
rftj	d��Yq�XnHt
r�|j�dd�|ks�t�n*|j�}tr�|gkr�tj	d��||ks�t�dS)Nz-v�2z-cz2import time; [time.sleep(0.1) for x in range(100)]z#OPENBSD: process turned into zombier�zOPENBSD: returned EBUSY)r �extendr>rrrBr4�
ZombieProcessr+r�r"r)r8rrEr�r<r<r=�test_long_cmdlines 


zTestProcess.test_long_cmdlinecCsH|j�}|j�j�}tjjtjjtj��j�}|j	|�sDt
||f��dS)N)r>rq�lowerr@r�r�r�r�
executabler�rB)r8rErqr
r<r<r=�	test_name(szTestProcess.test_namezunreliable on PYPYzunreliable on QEMU usercCs�t|jtjdd��}|ddg}|j|�}tr�y|j�tjj	|�ksHt
�Wq�t
k
r�|j�tj
kr�tjj	|�j|j��s�t
�n�Yq�Xn|j�tjj	|�ks�t
�dS)Nr�)�suffixz-cz2import time; [time.sleep(0.1) for x in range(100)])r(r��string�digitsr>rrqr@r�r�rB�statusr4�
STATUS_ZOMBIEr�)r8r
rrEr<r<r=�test_long_name.s

zTestProcess.test_long_namezbroken on SUNOSz
broken on AIXzbroken on QEMU usercCspt|jdd��}|ddg}|j|�}|j�|ks4t�|j�tjj|�ksLt�tjj	|j
��tjj	|�kslt�dS)Nz	foo bar ))rz-cz2import time; [time.sleep(0.1) for x in range(100)])r(r�r>rrBrqr@r�r�r�r)r8r
rrEr<r<r=�test_prog_w_funky_nameKs
z"TestProcess.test_prog_w_funky_namecCsXtj�}|j�\}}}|tj�ks&t�|tj�ks6t�ttd�rTtj�|j�ksTt�dS)N�	getresuid)	r4r5�uidsr@�getuidrB�geteuid�hasattrr)r8rE�real�	effective�_savedr<r<r=�	test_uids^s
zTestProcess.test_uidscCsXtj�}|j�\}}}|tj�ks&t�|tj�ks6t�ttd�rTtj�|j�ksTt�dS)Nr)	r4r5�gidsr@�getgidrB�getegidr!�	getresgid)r8rEr"r#r$r<r<r=�	test_gidsls
zTestProcess.test_gidscs��fdd�}tj��tjt���jd�WdQRX�j�}|j||�t�rd}x�tjtj	tj
tjtjtj
gD]�}|j|d��vy�j|�Wntjk
r�YnLX�j�}|tjtjtj
fkr�||ks�|dkr�|}||ks�t�n||ks�t�WdQRXqpWn�y�ttd��r0tjtjtj���j�k�s0t��jd��j�dk�sLt�ttd��rxtjtjtj���j�k�sxt�t�s��jd��j�dk�s�t�Wntjk
�r�YnXdS)Ncs*y�j|�Wntjk
r$YnXdS)N)�nicer4r[)r�)rEr<r=r�{sz&TestProcess.test_nice.<locals>.cleanup�str)�prio�getpriorityr_r)r4r5r+rCr�r+r�rZIDLE_PRIORITY_CLASSZBELOW_NORMAL_PRIORITY_CLASSZNORMAL_PRIORITY_CLASSZABOVE_NORMAL_PRIORITY_CLASSZHIGH_PRIORITY_CLASSZREALTIME_PRIORITY_CLASS�subTestr[rBr!r@r.�PRIO_PROCESSrAr)r8r�r�Zhighest_prior-Znew_prior<)rEr=�	test_nicezsV


zTestProcess.test_nicecCstj�}|j�tjkst�dS)N)r4r5r�STATUS_RUNNINGrB)r8rEr<r<r=�test_status�szTestProcess.test_statuscCs||j�}|j�}trh|jd�\}}tj�}|jd�r>tjd��||ksJt	�dt
jkrx|t
jdksxt	�n|tj�ksxt	�dS)N�\�$zrunning as service accountZ
USERDOMAIN)r>�usernamer�split�getpassZgetuser�endswithr+r�rBr@�environ)r8rEr6�domainZgetpass_userr<r<r=�
test_username�s


zTestProcess.test_usernamecCs |j�}|j�tj�kst�dS)N)r>�cwdr@�getcwdrB)r8rEr<r<r=�test_cwd�szTestProcess.test_cwdcs(tddg}|j|��t�fdd��dS)Nz-czFimport os, time; os.chdir('..'); [time.sleep(0.1) for x in range(100)]cs�j�tjjtj��kS)N)r=r@r��dirnamer>r<)rEr<r=�<lambda>�sz(TestProcess.test_cwd_2.<locals>.<lambda>)r r>r%)r8rcr<)rEr=�
test_cwd_2�s

zTestProcess.test_cwd_2c
Cs�tj�}|j�}|st|��|j|j|�ttd�rL|ttj|j	��ksLt�t
|�t
t|��ksdt�ttt
tj
dd����}xr|D]j}|j|g�|j�|gks�t�ttd�r�|j�ttj|j	��ks�t�t|d�r�|j�d|j�ks�t�q�W|jg�t�r|j�|jj�k�s,t�n|j�|k�s,t�ttd��rV|j�ttj|j	��k�sVt�tjt��|jd�WdQRX|j|�|jt|��|jt|��dS)N�sched_getaffinityT)�percpu�num_cpurr_)r4r5�cpu_affinityrBr�r!r@�listrCr6r�r�rzryrEr�_procZ_get_eligible_cpusr+rCr�r�)r8rE�initialZall_cpus�nr<r<r=�test_cpu_affinity�s4





zTestProcess.test_cpu_affinitycCs�|j�}ttjdd��dg}tjt��|j|�WdQRXtjt��|jtdd��WdQRXtjt	��|jddg�WdQRXtjt��|jdd	g�WdQRXdS)
NT)rD�
i'i�*r�1r_rp)
r>r�r4r�r+rCrrrFrzr�)r8rEZinvalid_cpur<r<r=�test_cpu_affinity_errs	sz"TestProcess.test_cpu_affinity_errscCs�tj�}|j�}|st|��|j|j|�t|�dkrB|dd�}g}x@tt|�d�D],}x&tj||�D]}|rj|j	t
|��qjWqXWx.|D]&}|j|�t|j��t|�ks�t�q�WdS)N�r_)r4r5rFrBr�r�rz�	itertools�combinations�appendrG�sorted)r8rErIZcombosr�ZsubsetZcombor<r<r=�"test_cpu_affinity_all_combinationss

z.TestProcess.test_cpu_affinity_all_combinationsz
broken on BSDzunreliable on APPVEYORcsltj��|j�}�j��|�ks$t�t|d���}|jdd�|j�t��fdd���j��dd��D�}t	j
j|�|ks�t�tr�x$�D]}|j
|kr�|j
dks�t�q�WWdQRXx"�D]}t	j
j|j
�s�t|��q�Wd|}|jtd	|g��xNtd
�D],}dd��j�D�}||k�rPtjd�q�Wt	j
j|�|k�sBt�x$|D]}t	j
j|��sHt|���qHWdS)
Nr��xicst�j��t��kS)N)r��
open_filesr<)�filesrEr<r=rA7sz-TestProcess.test_open_files.<locals>.<lambda>cSsg|]}tjj|j��qSr<)r@r�r�)r�r�r<r<r=r�9sz/TestProcess.test_open_files.<locals>.<listcomp>zIimport time; f = open(r'%s', 'r'); [time.sleep(0.1) for x in range(100)];z-crxcSsg|]}tjj|j��qSr<)r@r�r�)r�r�r<r<r=r�Jsg{�G�z�?)r4r5r�rVrBr�r��flushr%r@r�r�r�position�isfiler>r rzrt�sleep)r8r�r��	filenames�filerr�r<)rWrEr=�test_open_files+s8




zTestProcess.test_open_filescCs�tj�}tjj}|j�}t|d���}xJ|j�D](}||j�||j�ksT|j	|j
�kr.Pq.W|jdt|j����||j�||j�ks�t
�tr�|j	dks�t
�n|j	|j
�ks�t
�|j�d}|d|jks�t
�|d|j	ks�t
�|j|j�ks�t
�WdQRXdS)N�wzno file found; files=%sr_rrp)r4r5r@r�r�r�r�rVrq�fd�filenoru�reprrBr)r8rEr�r��fileobjr]Zntupler<r<r=�test_open_files_2Ts$zTestProcess.test_open_files_2cCs�tj�}|j�}|j�}t|d�}|j|j�|j�|dksBt�tj�}|j|j�|j�|dksjt�|j�|j�|j�|ks�t�dS)Nr_r_r�)	r4r5r�Znum_fdsr�r��closerB�socket)r8rEr��startr]�sockr<r<r=�test_num_fdsss
zTestProcess.test_num_fdsz not reliable on OPENBSD & NETBSDcCsVtj�}t|j��}x2td�D]&}tjd�t|j��}||krdSqW|jd��dS)Nr�g�������?z2num ctx switches still the same after 2 iterations)r4r5r�Znum_ctx_switchesrzrtr[ru)r8rE�beforer}�afterr<r<r=�test_num_ctx_switches�s
z!TestProcess.test_num_ctx_switchescCsFtj�}ttd�r&|j�tj�ks&t�|j�}|j�tj�ksBt�dS)N�getppid)	r4r5r!r@�ppidrmrBr>rA)r8rEr<r<r=�	test_ppid�s

zTestProcess.test_ppidcCsD|j�}|j�jtj�kst�tj�d}tj|�j�dks@t�dS)Nr)	r>�parentr6r@rArBr4�pidsr5)r8rEZ
lowest_pidr<r<r=�test_parent�szTestProcess.test_parentcCs8tj�}|j�\}}|j�|ks$t�|j�|ks4t�dS)N)r4r5rlrprB)r8rprmrnr<r<r=�test_parent_multi�szTestProcess.test_parent_multicCs`tj�}|j�st�|j�\}}|j�d|ks4t�|j�d|ksHt�|j�d|ks\t�dS)Nrr_)r4r5�parentsrBrl)r8rprmrnr<r<r=�test_parents�szTestProcess.test_parentscCs�tj�}|j�gkst�|jdd�gks,t�|jdd�}|j�}|jdd�}xJ||fD]>}t|�dksjt�|dj|jks~t�|dj�|jksVt�qVWdS)NT)�	recursiver)�
creationflagsr_)r4r5�childrenrBr>r�r6rn)r8rprmZ	children1Z	children2rxr<r<r=�
test_children�szTestProcess.test_childrencCsftj�}|j�\}}|j�|gks&t�|jdd�||gks>t�|j�|j�|jdd�gksbt�dS)NT)rv)r4r5rlrxrBrOrH)r8rprmrnr<r<r=�test_children_recursive�sz#TestProcess.test_children_recursivecCs�tjt�}x@tj�D]4}y||j�d7<Wqtjk
rFYqXqWt|j�dd�d�d	d}t	r~|dkr~t
jd��tj|�}y|j
dd�}Wntjk
r�YnXt|�tt|��ks�t�dS)
Nr_cSs|dS)Nr_r<)r�r<r<r=rA�sz6TestProcess.test_children_duplicates.<locals>.<lambda>)�keyrzPID 0T)rvrp)�collections�defaultdictr�r4�process_iterrn�ErrorrS�itemsrr+r�r5rxr[r�r�rB)r8�tablerEr6�cr<r<r=�test_children_duplicates�s



z$TestProcess.test_children_duplicatescCs|tj�}|j�\}}|jdd�}t|�dks0t�|d|ks@t�|d|ksPt�|j�}|d|ksht�|d|ksxt�dS)NT)rvr�rr_)r4r5rlrxr�rBrt)r8rprmrnrxrtr<r<r=�test_parents_and_children�sz%TestProcess.test_parents_and_childrencCsZ|j�}|j�x*td�D]}|j�tjkr.Ptjd�qW|j�|j�tjksVt	�dS)Nrxg{�G�z�?)
r>rirzrr4�STATUS_STOPPEDrtr[rjrB)r8rEr}r<r<r=�test_suspend_resume�szTestProcess.test_suspend_resumecCsDtjt��tjd�WdQRXtjt��tjd�WdQRXdS)NrMr_rp)r+rCr�r4r5rr)r8r<r<r=�test_invalid_pid�szTestProcess.test_invalid_pidcBCstj�}|jddgd�}t|j��ddgks0t�tjttj���}|jdgdd�}t|dt	�sp|ddkspt�t
jddtjd	��"|jd
gdd�d
diks�t�WdQRXt
jddtj
|jd�d	��,tjtj
��|jd
gd�WdQRXWdQRXt
jddtj|jd�d	��$|jd
gdd�d
dik�s0t�WdQRXt
jddtd	��H|j�}d
t	|j��k�sjt�tjt��|jd
gd�WdQRXWdQRXtjt��|jd�WdQRXtjt��|jdg�WdQRXtjt��|jddg�WdQRXdS)
Nrrq)�attrsZnet_connections�foo)r�Zad_valuezpsutil.Process.niceT)�createrVr+r_Zbar)r4r5Zas_dictrS�keysrBr�rqr{rGr)rWr[r7r6r+rCr�NotImplementedErrorr�rr)r8rE�dr<r<r=�test_as_dict�sB&"("zTestProcess.test_as_dictcCs�tj�}tjd��8}|j��|j�|j�WdQRX|jdksFt�WdQRXtjd��}|j�|j�WdQRX|jdks�t�dS)Nz$psutil._psplatform.Process.cpu_timesr_r�)r4r5r)rW�oneshotr��
call_countrB)r8rEr�r<r<r=�test_oneshot/s
zTestProcess.test_oneshotc%Cs�tj�}tjd���}tjd��j}|j��:|j�|j�|j��|j�|j�WdQRXWdQRX|jdksvt�|jdks�t�WdQRXWdQRXtjd��}|j�|j�WdQRX|jdks�t�dS)Nz$psutil._psplatform.Process.cpu_timesz(psutil._psplatform.Process.oneshot_enterr_r�)r4r5r)rWr�r�r�rB)r8rE�m1�m2r�r<r<r=�test_oneshot_twice<s

"zTestProcess.test_oneshot_twicecCs�|j�\}}|j�}|j�}||ks(t�|j��&|j�|ksBt�|j�|ksRt�WdQRX|j��&|j�|ksvt�|j�|ks�t�WdQRXdS)N)rlrnrBr�)r8�p1�p2Zp1_ppidZp2_ppidr<r<r=�test_oneshot_cachePs

zTestProcess.test_oneshot_cachecsr�fdd�}�j���j��j�tr8t�fdd���j��t��}x"|j|j�D]\}}|||�qXWdS)Ncs�y
|�}WnRtjk
r"�Yn^tjk
r6YnJtjk
r\trV|dkrVdS�Yn$Xtrn|dkrndS�jd||f��dS)Nr�r�rrqz+%r didn't raise NSP and returned %r instead)r�r�)rrq)r4rr7r[rrru)�funZfun_namer�)r8r<r=�assert_raises_nspgs
zFTestProcess.test_halfway_terminated_process.<locals>.assert_raises_nspcs�jtj�kS)N)r6r4rqr<)rEr<r=rA~sz=TestProcess.test_halfway_terminated_process.<locals>.<lambda>)	r>rOrHrr%rLr*�iter�all)r8r��nsr�rqr<)rEr8r=�test_halfway_terminated_process_s
z+TestProcess.test_halfway_terminated_processcCs|j�\}}|j|�dS)N)Zspawn_zombieZassertProcessZombie)r8Z_parent�zombier<r<r=�test_zombie_process�szTestProcess.test_zombie_processc	CsBtj�}tjdtjd�d��}|j�s*t�|js4t�WdQRXdS)Nzpsutil.Processr)rV)r4r5r)rWrrrBr�)r8rEr�r<r<r=�$test_zombie_process_is_running_w_exc�sz0TestProcess.test_zombie_process_is_running_w_excc	CsHtj�}tjdtjd�d��"}|j�tjks0t�|js:t�WdQRXdS)Nz!psutil._psplatform.Process.statusr)rV)	r4r5r)rWrrrrBr�)r8rEr�r<r<r=� test_zombie_process_status_w_exc�sz,TestProcess.test_zombie_process_status_w_excc	,Cstrddlm}nddlm}|j�}tj|j�}|j|j�df|_t	tj
��|jtjksbt�|j
�spt�tjjtjdd��(t|���}t	tj
��WdQRXWdQRXd|j|j�ks�t�|jtjks�t�|tj|j�ks�t�d}t|�}x^|j|j|jdd	�D]D\}}|j|d
��(tjtj|d��|�WdQRXWdQRX�qWdt|�k�sht�dt|�k�szt�tjtj|d��|j�WdQRXtjtj|d��|j�WdQRXtjtj|d��|j �WdQRXtjtj|d��|j!�WdQRXdS)
Nr)�StringIOrx�PSUTIL_DEBUGTz-refreshing Process instance for reused PID %sz4process no longer exists and its PID has been reusedF)�clear_cache)rq)r�zterminated + PID reused)"r
�ior�r3r4r5r6r��_identrGr~Z_pmaprBrr)rW�object�_commonr�getvaluer*r��settersZkillersr/r+rCr7r,rbrnrprtrx)	r8r��subprEr��msgr�r�rqr<r<r=�test_reused_pid�s@   zTestProcess.test_reused_pidc=Csdtj�krXtjtj��tjd�WdQRXtjd�s>t�tjd�j�dksTt�dStjd�}t	rltj
nt}tj|��|j�WdQRXtj|��|j
�WdQRXtj|��|j�WdQRXtj|��|j�WdQRXtj|��|j�WdQRXtj|��|jtj�WdQRXt|�}x�|j|j|j�D]�\}}y
|�}Wntj
k
�rnYnbX|d	k�r�|jdk�s�t�nD|dk�r�t	�r�dnd}|j�|k�s�t�n|dk�rD|�sDt|���qDWt�s�dtj�k�s�t�tjd��s�t�dS)
Nrr_rr&r6zNT AUTHORITY\SYSTEM�rootrq)rr&)r4rqr+rCr7r5Z
pid_existsrBrnrr[rrrHrOrirjrGrQrIrJr*r�Zgettersr�r"r6r)r8rEr�r�r�rqr�r�r<r<r=�
test_pid_0�sH




zTestProcess.test_pid_0cCsJdd�}d|_tj�}||j��}|tjj��}trFtrF||ksFt�dS)NcSsRddddg}tr"|jddddg�x|D]}|j|d�q(Wtdd	�|j�D��S)
N�PLAT�HOMEZPYTEST_CURRENT_TESTZPYTEST_VERSIONZ__CF_USER_TEXT_ENCODINGZVERSIONER_PYTHON_PREFER_32_BITZVERSIONER_PYTHON_VERSIONcSs8g|]0\}}|jdd�jdd�|jdd�jdd�f�qS)�
rU�
)r)r��k�vr<r<r=r�sz@TestProcess.test_environ.<locals>.clean_dict.<locals>.<listcomp>)rr�pop�dictr�)r��excluderqr<r<r=�
clean_dict�s
z,TestProcess.test_environ.<locals>.clean_dict)	ZmaxDiffr4r5r:r@�copyrrrB)r8r�rEZd1Zd2r<r<r=�test_environ�s
zTestProcess.test_environz<macOS 11+ can't get another process environment, issue #2084z(sometimes fails on `assert is_running()`cCs�tjd�}t|j�|d�}|j|gtjtjd�}tj|j	�}t
|j	�|j�sRt�|j
j�dksdt�tr�tr�y|j�}Wq�tjk
r�dSXn|j�}|ddd�ks�t�|j�|jdks�t�dS)	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);
            }
            )�c_code)�stdinr^�rM�3)�A�Cr)�textwrap�dedentr'r�r3rarbr4r5r6r1rrBr^r�rrr:r[�communicate�
returncode)r8rMZcexer;rE�envr<r<r=�test_weird_environs$
zTestProcess.test_weird_environN)m�__name__�
__module__�__qualname__�__doc__r>rFrNrPrSr+�mark�skipifr	r\rdrrkrorsrvrr�r"r�r�rr�r�r�rr0rr�rr�rr�rr�r�r�r�r�r�r�rr�r-r/rr�r�r�rr�r�rrr	rrrrrr
rrr%r*r1r3r<r?rBrrKrNrTrrr^rdrirrlrorrrsruryrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�rr�r<r<r<r=r2Ps�




	*,
0	B'
'	


4
&..r2csreZdZdZeed�r&ej�Zej�Z	�fdd�Z
�fdd�Z�fdd�Zd	d
�Z
ejjddd
�dd��Z�ZS)�LimitedUserTestCasez�Repeat the previous tests by using a limited user.
        Executed only on UNIX and only if the user who run the test script
        is root.
        rcsXt�j||�xDdd�t|�D�D].}t||���fdd�}t||tj||��q"WdS)NcSsg|]}|jd�r|�qS)�test)r�)r�r�r<r<r=r�`sz0LimitedUserTestCase.__init__.<locals>.<listcomp>cs&y
��Wntjk
r YnXdS)N)r4r[)r8)�methr<r=�test_cs
z+LimitedUserTestCase.__init__.<locals>.test_)r�__init__r�r��setattr�types�
MethodType)r8r9r:�attrr�)�	__class__)r�r=r�\s

zLimitedUserTestCase.__init__cs"t�j�tjd�tjd�dS)Ni�)r�setUpr@�setegid�seteuid)r8)r�r<r=r�ks

zLimitedUserTestCase.setUpcs&tj|j�tj|j�t�j�dS)N)r@r��PROCESS_UIDr��PROCESS_GIDr�tearDown)r8)r�r<r=r�pszLimitedUserTestCase.tearDowncCs8ytj�jd�Wntjk
r(YnX|jd��dS)Nr_zexception not raisedrp)r4r5r+r[ru)r8r<r<r=r1us
zLimitedUserTestCase.test_niceTzcauses problem as root)rTcCsdS)Nr<)r8r<r<r=r�}sz'LimitedUserTestCase.test_zombie_process)r�r�r�r�r!r@rr�r'r�r�r�r�r1r+r�r�r��
__classcell__r<r<)r�r=r�Qs
r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�	TestPopenzTests for psutil.Popen class.cCs
t�dS)N)r,)�clsr<r<r=�
tearDownClass�szTestPopen.tearDownClasscCs�tddg}tj|tjtjtd��L}|j�|j�|jt	|�sDt
�tjt
��|jWdQRX|j�WdQRXtr�|jd�tjks�t
�n|jd�tjks�t
�dS)Nz-cz3import time; [time.sleep(0.1) for x in range(100)];)�stdoutr^r�r`)r r4�Popenrarbr!rqr�r�r�rBr+rCrDr�rOr	rHrIrJ)r8rc�procr<r<r=�	test_misc�s&zTestPopen.test_miscc	Cshtjtdgtjtjtjtd��}|j�WdQRX|jjs>t	�|j
jsJt	�|jjsVt	�|jdksdt	�dS)Nz-V)r�r^r�r�r)
r4r�r rarbr!r�r��closedrBr^r�r�)r8r�r<r<r=�test_ctx_manager�szTestPopen.test_ctx_managerc,Cs�tddg}tj|tjtjtd���}|j�|j�tj	tj
��|j�WdQRXtj	tj
��|j�WdQRXtj	tj
��|jt
j�WdQRXtr�tj	tj
��|jt
j�WdQRXtj	tj
��|jt
j�WdQRXWdQRXdS)Nz-cz3import time; [time.sleep(0.1) for x in range(100)];)r�r^r�)r r4r�rarbr!rOrHr+rCr7rGrQrIrJrZCTRL_C_EVENTZCTRL_BREAK_EVENT)r8rcr�r<r<r=�test_kill_terminate�s,zTestPopen.test_kill_terminateN)	r�r�r�r��classmethodr�r�r�r�r<r<r<r=r��s
r�)Gr�r|rYr8rPr@rIrfr�rrarr�rtr�r4rrrrrrrr	r
rZpsutil._commonrZpsutil._compatr
rrrrZpsutil.testsrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2rr�r�r<r<r<r=�<module>s�6