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__/__init__.cpython-36.pyc
3

�[g��b@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZyddlZWnek
�rdZYnXddl Z ddl m!Z!ddl m"Z"dd	l m#Z#dd
l m$Z$ddl m%Z%ddl m&Z&dd
l m'Z'ddl m(Z(ddl)m*Z*ddl)m+Z+ddl)m,Z,ddl)m-Z-ddl)m.Z.ddl/m0Z0ddl/m1Z1ddl/m2Z2ddl/m3Z3ddl/m4Z4ddl/m5Z5ddl/m6Z6yddlm7Z7Wn<ek
�r`ej8��ej9d�ddl7Z7WdQRXYnXe0�rrddl:Z:nddl;ZdZ:e&�r�ddl<m=Z=ddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjgMZ>dkej?kZ@de	jAkZBdle	jAk�pVdme	jAkZCeB�p`eCZDdne	jAkZEdoe	jAkZFe"�r�eC�r�eGdp��ZHdqeHjI�kZJWdQRXndrZJejKd�kZLe
jM�dukZNe,dvdw��ZOe#�r�eO�d�kZPeO�d�kZQndrZPdrZQdxZRd�ZSd�ZTd{ZUeD�r$eRd}9ZReUd}9ZUeSd~9ZSeTd}9ZTe	jVdk�r>d�e	jW�ZXnd�e	jW�ZXd�ZYe0�rbd�jZd�d��Z[nd�Z[ej\�j]�d�kZ^e	j_j`e	j_jae	j_jbec�d�d���Zde	jAjed�e	j_jaedd���Zfe	j_j`e	j_jbec��Zgehe jid��Zjehe d��Zkehe jid��Zlehe d��Zmehe jid��Znehe jid��Zoe&�oe'Zpehe d��Zqehe jid��Zrehe jid��Zsehe jid��Ztehe d��Zuyeu�o\eve jw��ZxWneyk
�rzdrZxYnXehe d��Zzehe d��Z{ehe jid��Z|e#�s�e!�o�e	j}�dkZ~d�d��Ze�\Z�Z�eGe	j�d��Z�ej�e�j��d�d��e�e �D�Z�e�ed�e���Z�e��Z�e��Z�Gd�dH�dHej��Z�d�d��Z�e�d�d�dE��Z�e�d�dG��Z�d�dF�Z�e�d�dB��Z�e�d�d���Z�ej�eUfd�dC�Z�d�d�dD�Z�d�dZ�Z�d�dY�Z�Gd�d��d��Z�e�e j�deUd�d��d�d\��Z�e�e2e�fdeUd�d��d�d�d]��Z�e�e�deUd�d��d�d[��Z�d�dU�Z�d�d��Z�ej�d�dT��Z�d�dV�Z�d�d�dW�Z�d�d�dX�Z�Gd�dS�dS�Z�edk�r<e�ZGd�d��d�ej��Z�e�e_�Gd�dN�dNe��Z�ej�j�e@d�dGd�dM�dMe���Z�d�dQ�Z�d�dR�Z�d�dDŽZ�Gd�dO�dO�Z�Gd�dP�dP�Z�eRfd�dL�Z�d�d�dJ�Z�d�d�dK�Z�d�d�d`�Z�eedfd�da�Z�ejfd�db�Z�d�d�dc�Z�d�dd�Z�ej�d�de��Z�d�d^�Z�d�dքZ�d�d_�Z�d�df�Z�d�dg�Z�d�dh�Z�d�dj�Z�e&�rpej�d�d�di��Z�nej�d�d�di��Z�ej�d�d߄�Z�e&�r�ejej�d�d��dS)�zTest utilities.�)�print_functionN)�AF_INET)�AF_INET6)�SOCK_STREAM)�AIX)�LINUX)�MACOS)�NETBSD)�OPENBSD)�POSIX)�SUNOS)�WINDOWS)�bytes2human)�debug)�memoize)�print_color)�
supports_ipv6)�PY3)�FileExistsError)�FileNotFoundError)�range)�super)�unicode)�which)�mock�ignore)�wait_pid�APPVEYOR�DEVNULL�GLOBAL_TIMEOUT�TOLERANCE_SYS_MEM�
NO_RETRIES�PYPY�
PYTHON_EXE�PYTHON_EXE_ENV�ROOT_DIR�SCRIPTS_DIR�
TESTFN_PREFIX�UNICODE_SUFFIX�INVALID_UNICODE_SUFFIX�
CI_TESTING�VALID_PROC_STATUSES�TOLERANCE_DISK_USAGE�IS_64BIT�HAS_CPU_AFFINITY�HAS_CPU_FREQ�HAS_ENVIRON�HAS_PROC_IO_COUNTERS�
HAS_IONICE�HAS_MEMORY_MAPS�HAS_PROC_CPU_NUM�
HAS_RLIMIT�HAS_SENSORS_BATTERY�HAS_BATTERY�HAS_SENSORS_FANS�HAS_SENSORS_TEMPERATURES�HAS_NET_CONNECTIONS_UNIX�MACOS_11PLUS�MACOS_12PLUS�COVERAGE�AARCH64�	QEMU_USER�PYTEST_PARALLEL�pyrun�	terminate�
reap_children�spawn_testproc�spawn_zombie�spawn_children_pair�
ThreadTask�unittest�skip_on_access_denied�skip_on_not_implemented�retry_on_failure�TestMemoryLeak�PsutilTestCase�process_namespace�system_namespace�
print_sysinfo�is_win_secure_system_proc�fake_pytest�chdir�safe_rmpath�
create_py_exe�create_c_exe�
get_testfn�
get_winver�kernel_version�
call_until�wait_for_pid�
wait_for_file�check_net_address�filter_proc_net_connections�
get_free_port�bind_socket�bind_unix_socket�tcp_socketpair�unix_socketpair�create_sockets�
reload_module�import_module_by_path�warn�copyload_shared_lib�
is_namedtuple�__pypy__�GITHUB_ACTIONS�CIBUILDWHEELZCOVERAGE_RUNZPYTEST_XDIST_WORKERz/proc/1/cmdlinez
/bin/qemu-F�� Zaarch64cCsntj�d}ttt|jd�dd���}|d
krjtjtj	dddgd	d
idd�}ttt|jd�dd���}|S)Nr�.rm�
�z-sSz-cz-import platform; print(platform.mac_ver()[0])ZSYSTEM_VERSION_COMPAT�0T)�env�universal_newlines)rprq)
�platform�mac_ver�tuple�map�int�split�
subprocess�check_output�sys�
executable)Zversion_str�version�r��A/usr/local/lib64/python3.6/site-packages/psutil/tests/__init__.py�
macos_version�sr�rp���i���javaz$psutil-%s-z@psutil-%s-u-ƒőősf���utf8�surrogateescapeufÀ€�ascii�us-asciiz..ZPSUTIL_SCRIPTS_DIR�scripts�cpu_affinity�cpu_freq�environ�
getloadavg�ionice�memory_maps�net_io_counters�cpu_num�io_counters�rlimit�sensors_battery�sensors_fans�sensors_temperatures�threadscCs�dd�}tjj�}ttdd�}trFtjd
krF|dk	rFtj|d<||fStrTtj|fSt	r�|tj�p�|tj
jtj��p�|tdtjdd���p�|t
j�j��}|s�td	��||fStj
jtj�}tj
j|�s�t|��||fSdS)NcSs<ytj|dgtjtjd�Wntjk
r2dSX|SdS)Nz-V)�stdout�stderr)r{�
check_call�PIPE�CalledProcessError)�exer�r�r��attempt�sz_get_py_exe.<locals>.attemptZ_base_executabler���__PYVENV_LAUNCHER__zpython%s.%srmz"can't find python exe real abspath)r�r�)�osr��copy�getattrr}r
�version_infor~rkr�path�realpathr�psutil�Processr��
ValueError�exists�AssertionError)r�rs�baser�r�r�r��_get_py_exe�s&




r�zr+cCs g|]}|jd�rtt|��qS)ZSTATUS_)�
startswithr�r�)�.0�xr�r�r��
<listcomp>%sr��AF_UNIXcsPeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
�ZS)rGz6A thread task which does nothing expect staying alive.cs$t�j�d|_d|_tj�|_dS)NFg����MbP?)r�__init__�_running�	_interval�	threading�Event�_flag)�self)�	__class__r�r�r�5s
zThreadTask.__init__cCs|jj}d||jt|�fS)Nz<%s running=%s at %#x>)r��__name__r��id)r��namer�r�r��__repr__;szThreadTask.__repr__cCs|j�|S)N)�start)r�r�r�r��	__enter__?szThreadTask.__enter__cOs|j�dS)N)�stop)r��args�kwargsr�r�r��__exit__CszThreadTask.__exit__cCs(|jrtd��tjj|�|jj�dS)zStart thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        zalready startedN)r�r�r��Threadr�r��wait)r�r�r�r�r�FszThreadTask.startcCs,d|_|jj�x|jr&tj|j�qWdS)NT)r�r��set�time�sleepr�)r�r�r�r��runOs
zThreadTask.runcCs |jstd��d|_|j�dS)z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)r�r��join)r�r�r�r�r�UszThreadTask.stop)r��
__module__�__qualname__�__doc__r�r�r�r�r�r�r��
__classcell__r�r�)r�r�rG2s	cstj���fdd��}|S)Ncs,y
�||�Stk
r&t��YnXdS)N)�	ExceptionrC)r�r�)�funr�r��wrappercs

z&_reap_children_on_err.<locals>.wrapper)�	functools�wraps)r�r�r�)r�r��_reap_children_on_errbsr�cKs�|jdt�|jdt�|jdtj��|jdt�trHd}|jd|�|dkr�ttj�d�}zLt|�d	d
|d}td|g}t	j
|f|�}tj|�t
|d
d
d�Wdt|�Xn"t	j
|f|�}tj|�t|j�|S)aCreate a python subprocess which does nothing for some secs and
    return it as a subprocess.Popen instance.
    If "cmd" is specified that is used instead of python.
    By default stdin and stdout are redirected to /dev/null.
    It also attempts to make sure the process is in a reasonably
    initialized state.
    The process is registered for cleanup on reap_children().
    �stdinr��cwdrsi�
creationflagsN)�dirzimport time;zopen(r'%s', 'w').close();z&[time.sleep(0.1) for x in range(100)];z-cT)�delete�empty)�
setdefaultrr��getcwdr$r
rWrTr#r{�Popen�_subprocesses_started�addr\r[�pid)�cmd�kwdsZCREATE_NO_WINDOW�testfnZpyline�sprocr�r�r�rDns*




cCs�d}ttj�d�}zvtjdtjj|�tf�}trDt	|dd�\}}nt	|�\}}t
j|j�}t
t|ddd��}tj|�t
j|�}||fSt|�|dk	r�t|�XdS)	aCreate a subprocess which creates another one as in:
    A (us) -> B (child) -> C (grandchild).
    Return a (child, grandchild) tuple.
    The 2 processes are fully initialized and will live for 60 secs
    and are registered for cleanup on reap_children().
    N)r�aV            import subprocess, os, sys, time
            s = "import os, time;"
            s += "f = open('%s', 'w');"
            s += "f.write(str(os.getpid()));"
            s += "f.close();"
            s += "[time.sleep(0.1) for x in range(100 * 6)];"
            p = subprocess.Popen([r'%s', '-c', s])
            p.wait()
            r)r�TF)r�r�)rWr�r��textwrap�dedentr��basenamer#r
rAr�r�r�ryr\�
_pids_startedr�rT)�tfiler��s�subp�childZgrandchild_pidZ
grandchildr�r�r�rF�s 	

cs�tjs
t�t�}tjd|�}d}t|�}z�|jt�t	|�\}}|j
�\}}zPtj|j�gggt�t
|jd��}tj|�tj|��t�fdd��|�fS|j�XWd|j�t|�|dk	r�t|�XdS)z�Create a zombie process and return a (parent, zombie) process tuple.
    In order to kill the zombie parent must be terminate()d first, then
    zombie must be wait()ed on.
    a        import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            s = socket.socket(socket.AF_UNIX)
            with contextlib.closing(s):
                s.connect('%s')
                if sys.version_info < (3, ):
                    pid = str(os.getpid())
                else:
                    pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        Nics�j�tjkS)N)�statusr��
STATUS_ZOMBIEr�)�zombier�r��<lambda>�szspawn_zombie.<locals>.<lambda>)r�rr�rWr�r�ra�
settimeoutrrA�accept�select�filenory�recvr�r�r�rZ�closerT)Z	unix_file�srcr��sock�parent�conn�_Zzpidr�)r�r�rE�s,




cKs�|jdd�|jdd�t�}yDt|d��}|j|�WdQRXtt|jgf|�}t|j�||fSt	k
r�t
|��YnXdS)z�Run python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance and the test file where the source
    code was written.
    r�Nr��w)r�rW�open�writerDr#r�r[r�r�rT)r�r��srcfile�fr�r�r�r�rA�s
cKs�trdnd}|jdtj�|jdtj�|jdd�|jd|�t|t�rTtj|�}tj|f|�}t	j
|�tr�|jt
d�\}}n|j�\}}|jdkr�t||��|r�t|�|jd	�r�|d
d�}|S)
zURun cmd in a subprocess and return its output.
    raises RuntimeError on error.
    irr�r�rtTr�)�timeout�
N����)r
r�r{r��
isinstance�str�shlexrzr�r�r�r�communicater�
returncode�RuntimeErrorrg�endswith)r�r��flags�pr�r�r�r�r��shs&




rc
s�dd��dd�����fdd�}���fdd���fd	d
�}dd�}|}zVt|t�r^|||�St|tjtjf�rz�||�St|tj�r�|||�Std
|��Wdt|tjtjf�r�||�t|t�r�|n|j}tj|�s�t	|��XdS)a�Terminate a process and wait() for it.
    Process can be a PID or an instance of psutil.Process(),
    subprocess.Popen() or psutil.Popen().
    If it's a subprocess.Popen() or psutil.Popen() instance also closes
    its stdin / stdout / stderr fds.
    PID is wait()ed even if the process is already gone (kills zombies).
    Does nothing if the process does not exist.
    Return process exit status.
    cSsdt|tj�rtr|j�n
|j|�tr`t|tj�r`ytj|j�j|�Stj	k
r^YnXdS)N)
r
r{r�rr�r
r�r�r��
NoSuchProcess)�procrr�r�r�r�'s

zterminate.<locals>.waitcSs6trtrtj}tr(|tjkr(|jtj�|j|�dS)N)rrk�signal�SIGKILLr�send_signal�SIGCONT)r�sigr�r�r��sendsig3s
zterminate.<locals>.sendsigcsZy�|��Wn@tk
rN}z$tr0|jdkr0n|jtjkr>�WYdd}~XnX�||�S)N�)�OSErrorr
�winerror�errnoZESRCH)rr�err)rrr�r�r��term_subprocess_proc=sz'terminate.<locals>.term_subprocess_proccs0y�|��Wntjk
r$YnX�||�S)N)r�r)rr)rrr�r�r��term_psutil_procGs
z#terminate.<locals>.term_psutil_proccsBytj|�}Wn$tjk
r2tr.t||�SYnX�||�SdS)N)r�r�rrr)r�rr)r"r�r��term_pidNszterminate.<locals>.term_pidcSs4|jr|jj�|jr |jj�|jr0|jj�dS)N)r�r�r�r�)rr�r�r��flush_popenXs

zterminate.<locals>.flush_popenz
wrong type %rN)
r
ryr�r�r�r{�	TypeErrorr��
pid_existsr�)Zproc_or_pidr�wait_timeoutr!r#r$rr�r�)rrr"r�r�rBs&


	



cCs�tj�j|d�}xtr(tj�}t|�qWxtrBtj�}t|�q,W|r�x|D]}t|dd�qNWtj|td�\}}x&|D]}t	d|�t|t
jd�qzWdS)aTerminate and wait() any subprocess started by this test suite
    and any children currently running, ensuring that no processes stick
    around to hog resources.
    If recursive is True it also tries to terminate and wait()
    all grandchildren started by this process.
    )�	recursiveN)r')rz0couldn't terminate process %r; attempting kill())r)r�r��childrenr��poprBr��
wait_procsrrgrr)r(r)r�r�rr�aliver�r�r�rCrs


cCs�tstd��d}tj�d}x(|D] }|j�s6|dkr@||7}q"Pq"W|sVtd|��d}d}|jd�}t|d�}t|�dkr�t|d�}t|�dkr�t|d�}|||fS)	z"Return a tuple such as (2, 6, 36).z	not POSIX�rmrozcan't parse %rrrr�)	r�NotImplementedErrorr��uname�isdigitr�rzry�len)r�r/�c�minor�micro�nums�majorr�r�r�rY�s&


cCsbtstd��tj�}t|d�r*|jp&d}n&tjd|d�}|rLt|j	d��nd}|d|d|fS)Nznot WINDOWS�service_pack_majorrz\s\d$r�r)
r
r.r}�getwindowsversion�hasattrr7�re�searchry�group)Zwv�sp�rr�r�r�rX�s
c@s<eZdZdZeddddfdd�Zdd�Zdd	�Zd
d�ZdS)�retryzA retry decorator.Ng����MbP?cCs2|r|rtd��||_||_||_||_||_dS)Nz/timeout and retries args are mutually exclusive)r��	exceptionr�retries�interval�logfun)r�r@rrArBrCr�r�r�r��szretry.__init__ccs`|jr.tj�|j}xFtj�|kr*dVqWn.|jrPx&t|j�D]
}dVq@Wnx
dVqRWdS)N)rr�rAr)r��stop_atrr�r�r��__iter__�szretry.__iter__cCs|jdk	rtj|j�dS)N)rBr�r�)r�r�r�r�r��s
zretry.sleepcs"tj����fdd��}�|_|S)Ncstd}x^�D]V}y
�||�S�jk
r^}z(|}�jdk	rD�j|��j�w
WYdd}~Xq
Xq
Wtrn|�n�dS)N)r@rCr�r)r�r��excr)r�r�r�r�r��s



zretry.__call__.<locals>.wrapper)r�r��	decorator)r�r�r�r�)r�r�r��__call__�szretry.__call__)	r�r�r�r�r�r�rEr�rHr�r�r�r�r?�s
r?g����MbP?)r@rCrrBcCs$|tj�krtj|��tj|�dS)z�Wait for pid to show up in the process list then return.
    Used in the test suite to give time the sub process to initialize.
    N)r��pidsrr�)r�r�r�r�r[�s

Tc	Cs:t|d��}|j�}WdQRX|s*|s*t�|r6t|�|S)z8Wait for a file to be written on disk with some content.�rbN)r�readr�rT)�fnamer�r�r�datar�r�r�r\
scCs|�}|st�|S)z1Keep calling function until it evaluates to True.)r�)r��retr�r�r�rZscCsndd�}yLtj|�}tj|j�r0tjtj|�}ntjtj|�}t	rJ|�n||�Wnt
k
rhYnXdS)z?Convenience function for removing temporary test files or dirs.cSs�tj�t}xjtj�|krvy|�Stk
r4Yn6tk
rh}z|}tdt|��WYdd}~XnXtjd�qW|�dS)Nzignoring %sg{�G�z�?)r�rrZWindowsErrorrgrr�)r�rDrr r�r�r��	retry_fun0s"zsafe_rmpath.<locals>.retry_funN)r��stat�S_ISDIR�st_moder��partial�shutil�rmtree�removerr)r�rO�str�r�r�r�rT-s
cCs(ytj|�Wntk
r"YnXdS)z.Convenience function for creating a directory.N)r��mkdirr)r�r�r�r��
safe_mkdirOsrYccs.tj�}ztj|�dVWdtj|�XdS)z@Context manager which temporarily changes the current directory.N)r�r�rS)�dirname�curdirr�r�r�rSWs


cCsTtjj|�st|��tjt|�tjt	|�t
rPtj|�}tj||j
tjB�|S)z6Create a Python executable file in the given location.)r�r�r�r��atexit�registerrTrT�copyfiler#rrP�chmodrR�S_IEXEC)r�rWr�r�r�rUbs
cCs�tjj|�st|��td�s(tjd��|dkr<tjd�}nt	|t
�sNt|��tjt
|�ttdd�d��}|j|�WdQRXztjd|jd|g�Wdt
|j�X|S)	z5Create a compiled C executable in the given location.�gcczgcc is not installedNz�
            #include <unistd.h>
            int main() {
                pause();
                return 1;
            }
            z.c)�suffixrz-o)r�r�r�r�r�pytest�skipr�r�r
rr\r]rTrrWrr{r�r�)r��c_coderr�r�r�rVms
r-cCsBx<tjt||d�}tjj|�stjj|�}tjt	|�|SqWdS)z�Return an absolute pathname of a file or dir that did not
    exist at the time this call is made. Also schedule it for safe
    deletion at interpreter exit. It's technically racy but probably
    not really due to the time variant.
    )�prefixrbr�N)
�tempfile�mktempr'r�r�r�r�r\r]rT)rbr�r�r�r�r�r�rW�sc@sTeZdZdZedd��Zeddd��Zeddd��Zedd
d��ZGdd
�d
�Z	dS)rRz�A class that mimics some basic pytest APIs. This is meant for
    when unit tests are run in production, where pytest may not be
    installed. Still, the user can test psutil installation via:

        $ python3 -m psutil.tests
    cOs4tj�jt�}tjdd�j|�tjdtdd�|S)z�Mimics pytest.main(). It has the same effect as running
        `python3 -m unittest -v` from the project root directory.
        rm)�	verbosityz<Fake pytest module was used. Test results may be inaccurate.r)�
stacklevel)	rHZ
TestLoaderZdiscover�HEREZTextTestRunnerr��warningsrg�UserWarning)r��kw�suiter�r�r��main�szfake_pytest.mainNcs.Gdd�d��tjd�fdd�	�}|||d�S)zMimics `pytest.raises`.c@seZdZdZedd��ZdS)z)fake_pytest.raises.<locals>.ExceptionInfoNcSs|jS)N)�_exc)r�r�r�r��value�sz/fake_pytest.raises.<locals>.ExceptionInfo.value)r�r�r�rq�propertyrrr�r�r�r��
ExceptionInfo�srtNc3sx��}y
|VWnV|k
rf}z:|rPtj|t|��rPdj|t|��}t|��||_WYdd}~XnXtd|��dS)Nz"{}" does not match "{}"z
%r not raised)r:r;r�formatr�rq)rF�matchZeinfor �msg)rtr�r��context�s
z#fake_pytest.raises.<locals>.context)rv)N)�
contextlib�contextmanager)rFrvrxr�)rtr��raises�szfake_pytest.raisescCs"|rtj�j||�Stj�j|�S)zMimics `pytest.warns`.)rH�TestCaseZassertWarnsRegexZassertWarns)�warningrvr�r�r��warns�szfake_pytest.warnsr-cCstj|��dS)zMimics `unittest.SkipTest`.N)rHZSkipTest)�reasonr�r�r�rd�szfake_pytest.skipc@s(eZdZeddd��ZGdd�d�ZdS)zfake_pytest.markr-cCstj||�S)z'Mimics `@pytest.mark.skipif` decorator.)rHZskipIf)Z	conditionrr�r�r��skipif�szfake_pytest.mark.skipifc@s"eZdZdZddd�Zdd�ZdS)zfake_pytest.mark.xdist_groupz4Mimics `@pytest.mark.xdist_group` decorator (no-op).NcCsdS)Nr�)r�r�r�r�r�r��sz%fake_pytest.mark.xdist_group.__init__cCs|S)Nr�)r�Zcls_or_methr�r�r�rH�sz%fake_pytest.mark.xdist_group.__call__)N)r�r�r�r�r�rHr�r�r�r��xdist_group�s
r�N)r-)r�r�r��staticmethodr�r�r�r�r�r��mark�sr�)N)N)r-)
r�r�r�r�r�rpr{r~rdr�r�r�r�r�rR�sc@s&eZdZes"dd�Zejdd��ZdS)r|cCsdS)Nr�)r�r�r�r��runTest�szTestCase.runTestcos
dVdS)Nr�)r�r�rnr�r�r��subTest�szTestCase.subTestN)r�r�r�rr�ryrzr�r�r�r�r�r|�sr|c@sZeZdZdZddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�ZdS)rMz�Test class providing auto-cleanup wrappers on top of process
    test utilities. All test classes should derive from this one, even
    if we use pytest.
    r-NcCst||d�}|jt|�|S)N)rbr�)rW�
addCleanuprT)r�rbr�rLr�r�r�rWszPsutilTestCase.get_testfncOst||�}|jt|�|S)N)rDr�rB)r�r�r�r�r�r�r�rDs
zPsutilTestCase.spawn_testproccCs*t�\}}|jt|�|jt|�||fS)N)rFr�rB)r�Zchild1Zchild2r�r�r�rFs
z"PsutilTestCase.spawn_children_paircCs*t�\}}|jt|�|jt|�||fS)N)rEr�rB)r�r�r�r�r�r�rEs
zPsutilTestCase.spawn_zombiecOs*t||�\}}|jt|�|jt|�|S)N)rAr�rTrB)r�r�r�r�rr�r�r�rAszPsutilTestCase.pyruncCs�t|tj�st�|j|jks t�|j|jks0t�|jr@|js@t�t|tj�rt|j|j	ks\t�|jdk	rt|jdkstt�t
|�t|�dS)Nr)r
r��Errorr�r�r��_name�
ZombieProcess�ppidZ_ppidr�repr)r�rrFr�r�r��_check_proc_excs

zPsutilTestCase._check_proc_exccCs�tjtj��4}ytj|�Wntjk
r:td��YnXWdQRX|jj|ksVt�|jj	dksft�tj
|�szt|��|tj�ks�t�|dd�tj�D�ks�t�dS)Nz&wasn't supposed to raise ZombieProcesscSsg|]
}|j�qSr�)r�)r�r�r�r�r�r�5sz0PsutilTestCase.assertPidGone.<locals>.<listcomp>)
rcr{r�rr�r�r�rrr�r�r&rI�process_iter)r�r��cmr�r�r��
assertPidGone+szPsutilTestCase.assertPidGonecCs�|j|j�t|�}x�|j|jdd�D]�\}}|j||d��ly
|�}WnFtjk
r`�YnDtjk
r�}z|j	||�WYdd}~XnXd||f}t
|��WdQRXq&W|jdd�dS)NT)�clear_cache)rr�z-Process.%s() didn't raise NSP and returned %rr)r)r�r�rN�iter�allr�r�r�rr�r�r�)r�r�nsr�r�rNrFrwr�r�r��assertProcessGone7s
z PsutilTestCase.assertProcessGonecCshtj|j�}||kst�tpts4t|�t|�ks4t�|j�tjksFt�|j	�sRt�tj
|j�sbt�|j�|jtj�ks|t�|jdd�tj
�D�ks�t�it_|jdd�tj
�D�ks�t�t|�}xz|j|jdd�D]f\}}|j||d��Jy
|�Wn8tjtjfk
�r.}z|j||�WYdd}~XnXWdQRXq�Wt�r�tjtj��}|j�WdQRX|j||j�tjtj��}|j�WdQRX|j||j�tjtj��}|j�WdQRX|j||j�|j�|j�|j�|j �|j	��s�t�tj
|j��st�|jtj�k�s"t�|jdd�tj
�D�k�s@t�it_|jdd�tj
�D�k�sdt�dS)	NcSsg|]
}|j�qSr�)r�)r�r�r�r�r�r�[sz6PsutilTestCase.assertProcessZombie.<locals>.<listcomp>cSsg|]
}|j�qSr�)r�)r�r�r�r�r�r�]sT)r�)rr�cSsg|]
}|j�qSr�)r�)r�r�r�r�r�r�yscSsg|]
}|j�qSr�)r�)r�r�r�r�r�r�{s)!r�r�r�r�r
r	�hashr�r��
is_runningr&�as_dictrIr�Z_pmaprNr�r�r�r��AccessDeniedr�rrcr{�cmdlinerrr�r��suspend�resumerB�kill)r�r�cloner�r�r�rFr�r�r�r��assertProcessZombieJsN
,z"PsutilTestCase.assertProcessZombie)r-N)
r�r�r�r�rWrDrFrErAr�r�r�r�r�r�r�r�rM�s

zunreliable on PYPY)rc@s�eZdZdZdZdZdZer dndZdZ	e
j�Ze
ejd��Zedd	��Zed
d��Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zddd�Zdd�ZdS) rLa�Test framework class for detecting function memory leaks,
    typically functions implemented in C which forgot to free() memory
    from the heap. It does so by checking whether the process memory
    usage increased before and after calling the function many times.

    Note that this is hard (probably impossible) to do reliably, due
    to how the OS handles memory, the GC and so on (memory can even
    decrease!). In order to avoid false positives, in case of failure
    (mem > 0) we retry the test for up to 5 times, increasing call
    repetitions each time. If the memory keeps increasing then it's a
    failure.

    If available (Linux, OSX, Windows), USS memory is used for comparison,
    since it's supposed to be more precise, see:
    https://gmpy.dev/blog/2016/real-process-memory-and-environ-in-python
    If not, RSS memory is used. mallinfo() on Linux and _heapwalk() on
    Windows may give even more precision, but at the moment are not
    implemented.

    PyPy appears to be completely unstable for this framework, probably
    because of its JIT, so tests on PYPY are skipped.

    Usage:

        class TestLeaks(psutil.tests.TestMemoryLeak):

            def test_fun(self):
                self.execute(some_function)
    ��rprr�T�PSUTIL_DEBUGcCstjd�dS)NF)r��
_set_debug)�clsr�r�r��
setUpClass�szTestMemoryLeak.setUpClasscCstj|j�dS)N)r�r��_psutil_debug_orig)r�r�r�r��
tearDownClass�szTestMemoryLeak.tearDownClasscCs|jj�}t|d|j�S)NZuss)�	_thisproc�memory_full_infor�Zrss)r��memr�r�r��_get_mem�s
zTestMemoryLeak._get_memcCstr|jj�S|jj�SdS)N)rr��num_fds�num_handles)r�r�r�r��_get_num_fds�s
zTestMemoryLeak._get_num_fdscCs|jrt|dtjd�dS)N�yellow)�color�file)�verboserr}r�)r�rwr�r�r��_log�szTestMemoryLeak._logcCsx|j�}|j|�|j�}||}|dkr8|jd|��|dkrttrHdnd}|dkr\|d7}d|||f}|j|��dS)	z�Makes sure num_fds() (POSIX) or num_handles() (Windows) does
        not increase after calling a function.  Used to discover forgotten
        close(2) and CloseHandle syscalls.
        rzHnegative diff %r (gc probably collected a resource from a previous test)�fd�handlerr�z%s unclosed %s after calling %rN)r��call�failr)r�r��before�after�diff�type_rwr�r�r��
_check_fds�s
zTestMemoryLeak._check_fdscCsbtjdd�|j�}xt|�D]}|j|�}~~qWtjdd�|j�}tjgksVt�||}|S)z�Get 2 distinct memory samples, before and after having
        called fun repeatedly, and return the memory difference.
        r)Z
generation)�gcZcollectr�rr�Zgarbager�)r�r��timesZmem1r�rNZmem2r�r�r�r��_call_ntimes�s
zTestMemoryLeak._call_ntimescCs�g}d}|}x�td|d�D]�}|j||�}	d|t|	�t|	|�|f}
|j|
�|	|kp`|	|k}|r||dkrx|j|
�dS|dkr�t�|j|
�||7}|	}qW|jdj|���dS)Nrrz,Run #%s: extra-mem=%s, per-call=%s, calls=%sz. )rr�r�appendr��printr�r�)r�r�r�rA�	tolerance�messagesZprev_memZincrease�idxr�rw�successr�r�r��
_check_mem�s,



zTestMemoryLeak._check_memcCs|�S)Nr�)r�r�r�r�r�r�
szTestMemoryLeak.callNcCs�|dk	r|n|j}|dk	r|n|j}|dk	r0|n|j}|dk	rB|n|j}yD|dksZtd��|dksjtd��|dksztd��|dks�td��Wn.tk
r�}ztt|���WYdd}~XnX|j||�|j|�|j	||||d�dS)	zTest a callable.Nrztimes must be >= 1rzwarmup_times must be >= 0zretries must be >= 0ztolerance must be >= 0)r�rAr�)
r��warmup_timesrAr�r�r�rr�r�r�)r�r�r�r�rAr�r r�r�r��executes
zTestMemoryLeak.executecs"���fdd�}�j|f|�dS)znConvenience method to test a callable while making sure it
        raises an exception on every call.
        cs�j���dS)N)ZassertRaisesr�)rFr�r�r�r�r�+sz*TestMemoryLeak.execute_w_exc.<locals>.callN)r�)r�rFr�r�r�r�)rFr�r�r��
execute_w_exc&szTestMemoryLeak.execute_w_exc)NNNN)r�r�r�r�r�r�r�r*rAr�r�r�r��boolr��getenvr��classmethodr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rL�s&
cCs�ddl}ddl}ddl}ddl}ddl}yddl}Wntk
rLd}YnXyddl}Wntk
rrd}YnX|j�}t	j
r�td�r�td�|d<nzt	j
r�dtj�d|d<n^t	jr�ddjtttj���|d<ttd�r�|dd	tj�7<nd
tj�tj�f|d<d	jttj��tj�g�|d<t	j�rJtj�d|d
<d	jtj�tj�tj �g�|d<t!|dd�|d<|dk	�r�|dd|j"7<t	j�r�td��r�tddg�}t|�j#d�d|d<nd|d<tj$�d}	|	�r�|	|d<t%j&�|d<|j'�}
d|
d|
df|d<|jj(t	j)��j*d�|d<|jj+�j*d�|d<|j,�|d<t-j.j/d�|d <t-j0�|d!<t1|d"<tj2�|d#<t-j3�|d$<t	j4�|d%<d&t5d'd(�t	j6�D��|d)<t	j7�}d*t8|j9�t:|j;�t:|j<�f|d+<t	j=�}d*t8|j9�t:|j;�t:|j<�f|d,<t>t	j?��|d-<t	j@�jA�}
|
jBd.d�|jC|
�|d/<tDd0d1t%jEd2�x0|jF�D]$\}}tDd3|d4|ft%jEd2��qhWtDd0d1t%jEd2�t%jGjH�t%jGjH�dS)5NrZlsb_releasezlsb_release -d -sZOSz	Darwin %szWindows � �
win32_editionz, z%s %s�archrm�kernel�python�__version__z
not installed�pipz (wheel=%s)raz	--versionrr�glibczfs-encodingz%s, %s�langz%Y-%m-%d %H:%M:%Sz	boot-timer��user�~�homer�Zpyexe�hostnameZPIDZcpusz%.1f%%, %.1f%%, %.1f%%cSsg|]}|tj�d�qS)�d)r��	cpu_count)r�r�r�r�r�r�{sz!print_sysinfo.<locals>.<listcomp>Zloadavgz%s%%, used=%s, total=%sZmemory�swaprIr�r�=�F)r�z%-17s %s�:)I�collections�datetime�getpass�locale�pprintr��ImportError�wheel�OrderedDictr�rrr�OSXrurvr
r�rxr�	win32_verr9r��systemr�list�architecture�machinerr/�python_implementation�python_version�python_compilerr�r�rz�libc_verr}�getfilesystemencoding�	getlocale�
fromtimestamp�	boot_time�strftime�nowZgetuserr�r��
expanduserr�r#�node�getpidr�rwr��virtual_memoryry�percentr�used�total�swap_memoryr1rIr�r�r*�pformatr�r��itemsr��flush)r�r�r�r�r�r�r��info�outr�r�r�r�Zpinfo�k�vr�r�r�rP1s�






 
cCs4tdd��}y|�|dkStk
r.dSXdS)NcSs\i}td�}xJ|j�dd�D]6}dd�|jd�D�}|dt|d�}}|||<qW|S)Nztasklist.exe /NH /FO csvrcSsg|]}|jdd��qS)�"r-)�replace)r�r�r�r�r�r��sz@is_win_secure_system_proc.<locals>.get_procs.<locals>.<listcomp>�,r)r�
splitlinesrzry)rNr�line�bitsr�r�r�r�r��	get_procs�sz,is_win_secure_system_proc.<locals>.get_procsz
Secure SystemF)r�KeyError)r�rr�r�r�rQ�s

cCs6tj�}t|d�r|j�St|d�r2tj|j��SdS)Nr�r�r)r�r�r9r��random�choicer�)rr�r�r��_get_eligible_cpu�s

rc@sJeZdZdZdfifdfifgZdfifdfddifdfifd	fifd
fifdfifdfifd
fifdfifddDifg
Zdfifdfifdfifdfifdfifdfifdfifdfifdfddifdfifdfifdfifdfifd fifd!fifd"fifd#fifgZe�rNed$fifg7Zed%fifg7Zed&fifg7Zed'fifg7Ze�rded(fifg7Ze	�rzed)fifg7Ze
�r�ed*ejfifg7Ze
�r�ed+fifg7Ze�r�ed,fifg7Ze�r�ed-fifg7Ze�r�ed.fifg7Ze�red/fd0d1ifg7ZgZe�r"eddEifg7Znedejfifg7Ze
�rRed*ejdFfifg7Ze	�r�e�rved)ejdfifg7Zned)ejfifg7Ze
�r�ed+e�gfifg7Zd4ejfifd5fifd6fifd7fifd8fifgZe�red4ejfifg7Zed4ejfifg7ZeeeeZd9d:�ZdGd;d<�Zd=d>�Z e!d?d@��Z"e!dAdB��Z#dCS)HrNaA container that lists all Process class method names + some
    reasonable parameters to be called with. Utility methods (parent(),
    children(), ...) are excluded.

    >>> ns = process_namespace(psutil.Process())
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    �cpu_percentZmemory_percentr�r)r(TZconnectionsr�Zmemory_info_exZoneshotr��parentsr�r�rr��	cpu_timesZcreate_timer�r�r�Zmemory_infor��net_connections�kindr��niceZnum_ctx_switchesZnum_threadsZ
open_filesr�r�r��usernameZuidsZgids�terminalr�r�r�r�r�r�r�r�r�ZgroupedF��rr�r�rBr�cCs
||_dS)N)�_proc)r�rr�r�r�r�szprocess_namespace.__init__ccs^t|�}tj|�xF|D]>\}}}|r.|j�t|j|�}tj|f|�|�}||fVqWdS)z_Given a list of tuples yields a set of (fun, fun_name) tuples
        in random order.
        N)r�r
�shuffler�r�rr�rS)r��lsr��fun_namer�r�r�r�r�r�r�s
zprocess_namespace.itercCs|jj|jjdd�dS)z&Clear the cache of a Process instance.T)Z_ignore_nspN)r�_initr�)r�r�r�r�r�&szprocess_namespace.clear_cachecCsBx<|D]4\}}}d|}t||�sd|jj|f}t|��qWdS)z}Given a TestCase instance and a list of tuples checks that
        the class defines the required test method names.
        Ztest_z$%r class should define a '%s' methodN)r9r�r��AttributeError)r�Z
test_classrrrZ	meth_namerwr�r�r��test_class_coverage*s
z%process_namespace.test_class_coveragecCs`tdd�|jD��}tdd�|jD��}tdd�ttj�D��}||B|A}|r\td|��dS)NcSsg|]}|d�qS)rr�)r�r�r�r�r�r�:sz*process_namespace.test.<locals>.<listcomp>cSsg|]}|d�qS)rr�)r�r�r�r�r�r�;scSsg|]}|ddkr|�qS)rrr�)r�r�r�r�r�r�<sz!uncovered Process class names: %r)r�r��ignoredr�r�r�r�)r��thisr!�klassZleftoutr�r�r��test8szprocess_namespace.testN)r)r)rr)T)$r�r�r�r��utilsr!�gettersrr1r2r5r�Z
RLIMIT_NOFILEr.r4r0r
r3ZsettersZNORMAL_PRIORITY_CLASSrZIOPRIO_CLASS_NONEZ
IOPRIO_NORMALrr�SIGTERMZkillersZCTRL_C_EVENTZCTRL_BREAK_EVENTr�r�r�r�r�r r$r�r�r�r�rN�s�

c@s�eZdZdZdfifdfddifdfddifdfifdfd	difdfd	difd
fddifdfd
difdej�fifdfdd
ifdfifdfifdfddifdej�fifdfifdfifdfifdfifgZer�e	r�e
j�dkr�nedfd	difg7Ze�redfifg7Ze
�r"edfifg7Ze�r8edfifg7Ze�rNedfifg7Ze�rted fifg7Zed!d*ifg7Zd#fifd$ej�gfifd%fifd&fifgZeZed'd(��ZejZd)S)+rOz�A container that lists all the module-level, system-related APIs.
    Utilities such as cpu_percent() are excluded. Usage:

    >>> ns = system_namespace
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    r�r�ZlogicalFTZ	cpu_statsrZpercpuZdisk_io_countersZperdiskZdisk_partitionsr��
disk_usagerrZnet_if_addrsZnet_if_statsr�Zpernicr&rIr�Zusersr�Zarm64r�r�r�r�r�Zwin_service_iterZwin_service_get�algr�r+rZcpu_times_percentccsPt|�}tj|�x8|D]0\}}}tt|�}tj|f|�|�}||fVqWdS)z_Given a list of tuples yields a set of (fun, fun_name) tuples
        in random order.
        N)r�r
rr�r�r�rS)rrr�r�r�r�r�r�r�ys

zsystem_namespace.iterN)r))r�r�r�r�r�r�r�r&r/rrur��HAS_GETLOADAVGr9r8r6r
r�r�r!r�r�r�rNr r�r�r�r�rOBsRcCsdd�}ttd||d�S)zZDecorator which runs a test function and retries N times before
    actually failing.
    cSstd|tjd�dS)Nz%r, retrying)r�)r�r}r�)rFr�r�r�rC�sz retry_on_failure.<locals>.logfunN)r@rrArC)r?r�)rArCr�r�r�rK�scs�fdd�}|S)z,Decorator to Ignore AccessDenied exceptions.cstj����fdd��}|S)Ncs>y
�||�Stjk
r8�dk	r*�s*�tjd��YnXdS)Nzraises AccessDenied)r�r�rcrd)r�r�)r��only_ifr�r�r��s
z9skip_on_access_denied.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)r+)r�r�rG�s
z(skip_on_access_denied.<locals>.decoratorr�)r+rGr�)r+r�rI�s
cs�fdd�}|S)z3Decorator to Ignore NotImplementedError exceptions.cstj����fdd��}|S)NcsFy
�||�Stk
r@�dk	r(�s(�d�j}tj|��YnXdS)Nz4%r was skipped because it raised NotImplementedError)r.r�rcrd)r�r�rw)r�r+r�r�r��s
z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)r+)r�r�rG�sz*skip_on_not_implemented.<locals>.decoratorr�)r+rGr�)r+r�rJ�s�	127.0.0.1c
Cs4tjtj���}|j|df�|j�dSQRXdS)z6Return an unused TCP port. Subject to race conditions.rrN)ry�closing�socket�bind�getsockname)�hostr�r�r�r�r_�scCs�|dkr|ttfkrd}tj||�}y>tjd	krB|jtjtjd�|j|�|tj	kr`|j
d�|Stk
r�|j��YnXdS)
zBinds a generic socket.Nr-r�nt�cygwinrr�)r-r)r2r3)
rrr.r�r��
setsockopt�
SOL_SOCKET�SO_REUSEADDRr/r�listenr�r�)�family�type�addrr�r�r�r�r`�s



cCsttjs
t�tjj|�s t|��tjtj|�}y"|j|�|tj	krN|j
d�Wntk
rn|j��YnX|S)zBind a UNIX socket.r�)
r�rr�r�r�r�r.r�r/rr7r�r�)r�r9r�r�r�r�ra�s


cCs�tjtj|t����}|j|�|jd�|j�}tj|t�}y@|j|�|j�}x(|j�\}}||krn||fS|j	�qRWWnt
k
r�|j	��YnXWdQRXdS)z^Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    r�N)ryr-r.rr/r7r0�connectr�r�r)r8r:Zllr2Zcaddr�ar�r�r�rb�s 


cCs�tjs
t�d}}y@t|tjd�}|jd�tjtjtj�}|jd�|j|�Wn6t	k
r�|dk	rr|j
�|dk	r�|j
��YnX||fS)z�Build a pair of UNIX sockets connected to each other through
    the same UNIX file name.
    Return a (server, client) tuple.
    N)r9r)r�rr�rar.r�setblockingr�r;r�r�)r��serverZclientr�r�r�rcs


ccs�g}d}}z�|jttjtj��|jttjtj��t�rd|jttjtj��|jttjtj��tr�t	r�t
�}t
�}t|�\}}t|tjd�}x|||fD]}|j|�q�W|VWdx|D]}|j
�q�Wx ||fD]}|dk	r�t|�q�WXdS)z1Open as many socket families / types as possible.N)r9)r�r`r.rr�
SOCK_DGRAMrrrr:rWrcrar�rT)ZsocksZfname1Zfname2�s1�s2Zs3r�rLr�r�r�rds*

cCs
ddl}tr*tr*tr*t|tj�s*t|��|tjkr�dd�|j	d�D�}t
|�dks\t|��x,|D]$}d|koxdknsbt|��qbWts�t|�}|j|�nd|tj
kr�t|t�s�t|��ts�t|�}|j|�n0|tjkr�tjd|�dk	s�t|��ntd	|��dS)
z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    rNcSsg|]}t|��qSr�)ry)r�r�r�r�r�r�>sz%check_net_address.<locals>.<listcomp>ror��z([a-fA-F0-9]{2}[:|\-]?){6}zunknown family %r)�	ipaddress�enumrr"r
�IntEnumr�r.rrzr1r�IPv4Addressrr�IPv6Addressr�ZAF_LINKr:rvr�)r:r8rCZocts�numr�r�r�r]5s&

$

cCsTdd�}dd�}dd�}dd�}d	d
�}||�||�||�||�||�dS)z*Check validity of a connection namedtuple.cSs�t|�dk}t|�d	ks$tt|���|d|jks<t|j��|d|jksTt|j��|d|jkslt|j��|d|jks�t|j��|d|jks�t|j��|d|jks�t|j��|r�|d|jks�t|j��dS)
Nr�rrrrmr�r�r�)rr�)	r1r�r�r8r9�laddr�raddrr�r�)r�Zhas_pidr�r�r��check_ntupleSsz-check_connection_ntuple.<locals>.check_ntuplecSs�|jtttfkst|j��tdk	r:t|jtj�sNt|��nt|jt�sNt|��|jtkr�t	j	|j|j
�}tj|��Ry|j
|jddf�Wn2t	jk
r�}z|jtjkr��WYdd}~XnXWdQRXn |jtkr�|jtjks�t|j��dS)Nr)r8rrr�r�rDr
rEryr.r9ryr-r/rI�errorrZ
EADDRNOTAVAILr�r��	CONN_NONE)r�r�r r�r�r��check_family_s
 
z-check_connection_ntuple.<locals>.check_familycSs�ttdt��}|jtjtj|fks,t|j��tdk	rLt|jtj	�s`t|��nt|jt
�s`t|��|jtjkr�|jtj
ks�t|j��dS)N�SOCK_SEQPACKET)r�r.�objectr9rr?r�rDr
rEryr�r�rM)r�rOr�r�r��
check_typets
z+check_connection_ntuple.<locals>.check_typecSs�x�|j|jfD]�}|jttfkr�t|t�s6tt|���|s<qt|j	t
�sVtt|j	���d|j	kojdknszt|j	��t|j|j�q|jt
krt|t�stt|���qWdS)Nri��)rIrJr8rrr
rwr�r9�portryr]�ipr�r)r�r:r�r�r��check_addrs�s$
z,check_connection_ntuple.<locals>.check_addrscSs�t|jt�st|j��dd�tt�D�}|j|ks<t|j��|jttfkrl|j	t
krl|jtjks�t|j��n|jtjks�t|j��dS)NcSs g|]}|jd�rtt|��qS)ZCONN_)r�r�r�)r�r�r�r�r�r��szAcheck_connection_ntuple.<locals>.check_status.<locals>.<listcomp>)r
r�rr�r�r�r8rrr9rrM)r�Zvalidsr�r�r��check_status�sz-check_connection_ntuple.<locals>.check_statusNr�)r�rKrNrQrTrUr�r�r��check_connection_ntuplePs
rVcCsPg}xF|D]>}tr>|jtjkr>tr>d|jkr>tdt|��q
|j|�q
W|S)ztOur process may start with some open UNIX sockets which are not
    initialized by us, invalidating unit tests.
    z/syslogzskipping %s)	rr8r.r�rrJrrr�)Zcons�newr�r�r�r�r^�s
cCsLyddl}t|d�st�Wn"tk
r<ddl}|j|�SX|j|�SdS)z,Backport of importlib.reload of Python 3.3+.rN�reload)�	importlibr9r��imprX)�modulerYrZr�r�r�re�s
cCsptjjtjj|��d}tjddkr:ddl}|j||�Sddl}|j	j
||�}|j	j|�}|jj
|�|SdS)Nrr�)r�r��splitextr�r}r�rZ�load_source�importlib.util�util�spec_from_file_location�module_from_spec�loader�exec_module)r�r�rZrY�spec�modr�r�r�rf�scCstj|tdd�dS)zRaise a warning msg.rm)rjN)rlrgrm)rwr�r�r�rg�scCsVt|�}|j}t|�dks&|dtk	r*dSt|dd�}t|t�sDdStdd�|D��S)z-Check if object is an instance of namedtuple.rrF�_fieldsNcss|]}t|t�VqdS)N)r
r)r��nr�r�r��	<genexpr>�sz is_namedtuple.<locals>.<genexpr>)r9�	__bases__r1rwr�r
r�)r��t�brr�r�r�ri�s
c#sttrdnd�d�t|�d�}��fdd�tj�j�D�}tj|�}tj||�zt	j
|�|VWdt|�XdS)z�Ctx manager which picks up a random shared CO lib used
        by this process, copies it in another location and loads it
        in memory via ctypes. Return the new absolutized path.
        �pypyr�z.so)rbcs6g|].}tjj|j�d�kr�|jj�kr|j�qS)r)r�r�r\�lower)r�r�)r��extr�r�r��sz'copyload_shared_lib.<locals>.<listcomp>N)r"rWr�r�r�r
rrTr^�ctypes�CDLLrT)rb�dst�libsr�r�)r�rnr�rh�s


c	#s�ddlm}ddlm}d�t|�d�}�fdd�tj�j�D�}trd|rddd�tj�j�D�}tj	|�}t
j||�d	}ztj|�}|VWd	|d	k	r�tj
jj}|jg|_||j�}|dkr�|�t|�Xd	S)
z�Ctx manager which picks up a random shared DLL lib used
        by this process, copies it in another location and loads it
        in memory via ctypes.
        Return the new absolutized, normcased path.
        r)�WinError)�wintypesz.dll)rbcsFg|]>}|jj�j��rdtjj|j�j�krd|jj�kr|j�qS)r�Zwow64)r�rmrr�r�)r�r�)rnr�r�r�sz'copyload_shared_lib.<locals>.<listcomp>cSs(g|] }dtjj|j�j�kr|j�qS)rl)r�r�r�rm)r�r�r�r�r�r�sN)rorsrtrWr�r�r�r"r
rrTr^ZWinDLL�windll�kernel32�FreeLibraryZHMODULE�argtypes�_handlerT)	rbrsrtrqrrr��cfilerwrNr�)rnr�rhs,







cCstdd�dS)NT)r()rCr�r�r�r��cleanup_test_procs7sr{cCs
tj|�S)N)r}�exit)rrr�r�r�r�Asr�l)rpr�)r�riiPi(i�)r�r�)N)F)TF)N)r-N)N)N)r,�r-r)r})r-)r-)�r��
__future__rr\ryrorr�r�r�rur
r:r�rrTrr.rPr{r}rgr�r�r�rHrlrrrrcr�r�rrrr	r
rrr
Zpsutil._commonrrrrrZpsutil._compatrrrrrrrr�catch_warnings�simplefilterrD�	unittest2Zpsutil._psposixr�__all__�builtin_module_namesr"r�rrkr*r=r@rrrKr?�maxsizer-r�r>r�r;r<r!r r,rr�r�r'r(�decoder)r�rmZASCII_FSr�r�r�rZ�__file__r%�getr&rkr9r�r.r/r0r*r2r3r:ZHAS_NET_IO_COUNTERSr4r1r5r6r�r�r7r�r8r9ZHAS_THREADS�getuidZSKIP_SYSCONSr�r#r$�devnullrr]r�r�r+r�rPr�r�r�r�r�rGr�rDrFrErArr'rBrCrYrXr?rr[r�r\rZrTrYrzrSrUrVrWrRr|rMr�r�rLrPrQrrNrOrKrIrJr_r`rarbrcrdr]rVr^rerfrgrirhr{r�r�r�r��<module>s�
























*
0)'-V
%;"

M
%l	F



R3