HEX
Server: LiteSpeed
System: Linux atali.colombiahosting.com.co 5.14.0-570.12.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 13 06:11:55 EDT 2025 x86_64
User: coopserp (1713)
PHP: 8.2.29
Disabled: dl,exec,passthru,proc_open,proc_close,shell_exec,memory_limit,system,popen,curl_multi_exec,show_source,symlink,link,leak,listen,diskfreespace,tmpfile,ignore_user_abord,highlight_file,source,show_source,fpaththru,virtual,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setid,posix_times,posix_ttyname,posix_uname,proc_get_status,proc_nice,proc_terminate
Upload Files
File: //usr/local/lib64/python3.9/site-packages/psutil/tests/__pycache__/test_linux.cpython-39.pyc
a

��?h[d�@sdZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ddlm+Z+ddlm,Z,ddlm-Z-e�r�ddl.m/Z/dd l.m0Z0dd!l.m1Z1dd"l.m2Z2ej3�4ej3�5e6��Z7d#Z8d$Z9d%Z:d&Z;d'Z<e�r,d(Z=e�d)�Z>d*d+�Z?d,d-�Z@d.d/�ZAd0d1�ZBd2d3�ZCd4d5�ZDd6d7�ZEd8d9�ZFd:d;�ZGejHd<d=��ZIejHd>d?��ZJe'jKjLed@dA�GdBdC�dCe#��ZMe'jKjLed@dA�GdDdE�dEe#��ZNe'jKjLed@dA�GdFdG�dGe#��ZOe'jKjLed@dA�GdHdI�dIe#��ZPe'jKjLed@dA�GdJdK�dKe#��ZQe'jKjLed@dA�GdLdM�dMe#��ZRe'jKjLed@dA�GdNdO�dOe#��ZSe'jKjLed@dA�GdPdQ�dQe#��ZTe'jKjLed@dA�GdRdS�dSe#��ZUe'jKjLed@dA�GdTdU�dUe#��ZVe'jKjLed@dA�GdVdW�dWe#��ZWe'jKjLed@dA�e'jKjLe dXdA�GdYdZ�dZe#���ZXe'jKjLed@dA�Gd[d\�d\e#��ZYe'jKjLed@dA�Gd]d^�d^e#��ZZe'jKjLed@dA�Gd_d`�d`e#��Z[e'jKjLed@dA�Gdadb�dbe#��Z\e'jKjLed@dA�Gdcdd�dde#��Z]e'jKjLed@dA�Gdedf�dfe#��Z^e'jKjLed@dA�e'jKjLedgdA�Gdhdi�die#���Z_e'jKjLed@dA�Gdjdk�dke#��Z`e'jKjLed@dA�Gdldm�dme#��Zae'jKjLed@dA�Gdndo�doe#��Zbe'jKjLed@dA�Gdpdq�dqe#��Zce'jKjLed@dA�Gdrds�dse#��Zde'jKjLed@dA�Gdtdu�due#��ZedS)vzLinux specific tests.�)�divisionN)�LINUX)�PY3)�FileNotFoundError)�
basestring)�AARCH64)�GITHUB_ACTIONS)�GLOBAL_TIMEOUT)�HAS_BATTERY)�HAS_CPU_FREQ)�HAS_GETLOADAVG)�
HAS_RLIMIT)�PYPY)�PYTEST_PARALLEL)�	QEMU_USER)�TOLERANCE_DISK_USAGE)�TOLERANCE_SYS_MEM)�PsutilTestCase)�
ThreadTask)�
call_until)�mock)�pytest)�
reload_module)�retry_on_failure)�safe_rmpath)�sh)�skip_on_not_implemented)�which)�CLOCK_TICKS)�RootFsDeviceFinder)�calculate_avail_vmem)�open_binaryi�i�i'�i�i�iz/sys/class/hwmon/hwmon*cCs�ddl}|dd�}tr"t|d�}t�tjtj�}t�|��8t�|�	|�
�tt�
d|��dd��Wd�S1sz0YdS�Nr��ascii�256s��)�fcntlr�bytes�socket�AF_INET�
SOCK_DGRAM�
contextlib�closing�	inet_ntoa�ioctl�fileno�SIOCGIFADDR�struct�pack��ifnamer(�s�r8�C/usr/local/lib64/python3.9/site-packages/psutil/tests/test_linux.py�get_ipv4_addressNs
��r:cCs�ddl}|dd�}tr"t|d�}t�tjtj�}t�|��8t�|�	|�
�tt�
d|��dd��Wd�S1sz0YdSr")r(rr)r*r+r,r-r.r/r0r1�SIOCGIFNETMASKr3r4r5r8r8r9�get_ipv4_netmask]s
���r<cCs�ddl}|dd�}tr"t|d�}t�tjtj�}t�|��8t�|�	|�
�tt�
d|��dd��Wd�S1sz0YdSr")r(rr)r*r+r,r-r.r/r0r1�SIOCGIFBRDADDRr3r4r5r8r8r9�get_ipv4_broadcastls
���r>cCs�td��T}g}|D]"}|��}|d|kr|�|�qt|�dkrNtd|��Wd�n1sb0Ytt|��D]j}||d}g}tdt|�d�D]}|�|||d��q�d�|�}	t�tj	|	�}
t�
tj	|
�||<qx|S)Nz/proc/net/if_inet6���rzcould not find interface %r��:)�open�split�append�len�
ValueError�range�joinr*�	inet_pton�AF_INET6�	inet_ntop)r6�fZ
all_fields�line�fields�iZunformatted�groups�j�	formatted�packedr8r8r9�get_ipv6_addresses{s"
*
rTc	s�ddl}|dd�}tr"t|d�}t�tjtj�}t�|��n|�|�	�t
t�d|��}trfdd��nddl
}|j�d��fdd	�|d
d�D��dd�Wd�S1s�0YdS)
Nrr#r$r%cSs|S�Nr8��xr8r8r9�ord�szget_mac_address.<locals>.ord�csg|]}d�|��qS)z%02x:r8)�.0�char�rXr8r9�
<listcomp>��z#get_mac_address.<locals>.<listcomp>�r'r?)r(rr)r*r+r,r-r.r0r1�
SIOCGIFHWADDRr3r4�__builtin__rXrH)r6r(r7�inforar8r\r9�get_mac_address�s
�
rccCs�tddgddid�}|�d�}|D]F}|�d�r"|��\}}}}t�dd�}|t|�t|�t|��Sq"td	d�|���d
S)zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    �free�-b�LANG�C.UTF-8��env�
ZSwapztotal used freez&can't find 'Swap' in 'free' output:
%sN)rrC�
startswith�collections�
namedtuple�intrFrH)�out�linesrM�_�total�usedrd�ntr8r8r9�	free_swap�s

�rucCs�tddgddid�}|�d�}|D]P}|�d�r"dd	�|��d
d�D�\}}}}t�dd�}||||||�Sq"td
d�|���dS)zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rdrerfrgrhrjZMemcss|]}t|�VqdSrU)rn�rZrWr8r8r9�	<genexpr>�r^zfree_physmem.<locals>.<genexpr>��ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)rrCrkrlrmrFrH)rorprMrrrsrd�sharedrtr8r8r9�free_physmem�s

"��r{cCsZtddgddid�}|�d�D]*}|��}||vrt|�d�d�Sqtd	|��dS)
N�vmstatz-srfrgrhrj� rz can't find %r in 'vmstat' output)rrC�striprnrF)�statrorMr8r8r9r|�sr|cCs@tddg���}d|vr"t�d��tttt�d|�	�d���S)Nrdz-V�UNKNOWNzcan't determine free versionz\d+r?)
rr~r�skip�tuple�maprn�re�findallrC)ror8r8r9�get_free_version_info�s
r�c#sX��fdd�}t�trdnd}tj|d|d��}|VWd�n1sJ0YdS)z�Mock open() builtin and forces it to return a certain content
    for a given path. `pairs` is a {"path": "content", ...} dict.
    csZ|�vr@�|}tr4t|t�r(t�|�St�|�SqVt�|�Sn�|g|�Ri|��SdSrU)r�
isinstancer�io�StringIO�BytesIO)�name�args�kwargs�content��	orig_open�pairsr8r9�	open_mock�s

z$mock_open_content.<locals>.open_mock�
builtins.open�__builtin__.openT��create�side_effectN�rBrr�patch)r�r��patch_point�mr8r�r9�mock_open_content�s

r�c#sZ���fdd�}t�trdnd}tj|d|d��}|VWd�n1sL0YdS)zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    cs(|�kr��n�|g|�Ri|��SdSrUr8�r�r�r���exc�for_pathr�r8r9r��sz&mock_open_exception.<locals>.open_mockr�r�Tr�Nr�)r�r�r�r�r�r8r�r9�mock_open_exception�s
r�z
LINUX only��reasonc@sLeZdZdd�Ze�dd��Ze�dd��Ze�dd��Ze�d	d
��ZdS)�"TestSystemVirtualMemoryAgainstFreecCs"t�j}t��j}||ksJ�dSrU)r{rr�psutil�virtual_memory��selfZ	cli_value�psutil_valuer8r8r9�
test_totals
z-TestSystemVirtualMemoryAgainstFree.test_totalcCsRt�dkrt�d��t�dkr(t�d��t�j}t��j}t||�tksNJ�dS)N��r���free version too old�r@rr�free version too recent)	r�rr�r{rsr�r��absrr�r8r8r9�	test_useds





z,TestSystemVirtualMemoryAgainstFree.test_usedcCs*t�j}t��j}t||�tks&J�dSrU)r{rdr�r�r�rr�r8r8r9�	test_free's
z,TestSystemVirtualMemoryAgainstFree.test_freecCsPt�}|j}|dkrt�d��t��j}t||�tksLJd|||jf��dS)Nrz%free does not support 'shared' column�	%s %s 
%s)	r{rzrr�r�r�r�r�output)r�rd�
free_valuer�r8r8r9�test_shared-s

��z.TestSystemVirtualMemoryAgainstFree.test_sharedcCsrtddg�}|�d�}d|dvr.t�d��n@t|d��d�}t��j}t||�t	ksnJd	|||f��dS)
Nrdrerj�	availablerz(free does not support 'available' columnrxr?r�)
rrCrr�rnr�r�r�r�r)r�rorpr�r�r8r8r9�test_available8s

��z1TestSystemVirtualMemoryAgainstFree.test_availableN)	�__name__�
__module__�__qualname__r�rr�r�r�r�r8r8r8r9r�s



r�c@sZeZdZdd�Ze�dd��Ze�dd��Ze�dd��Ze�d	d
��Ze�dd��Z	d
S)�$TestSystemVirtualMemoryAgainstVmstatcCs.td�d}t��j}t||�tks*J�dS)Nztotal memory�)r|r�r�rrr�r�r�Zvmstat_valuer�r8r8r9r�Js
z/TestSystemVirtualMemoryAgainstVmstat.test_totalcCsVt�dkrt�d��t�dkr(t�d��td�d}t��j}t||�tksRJ�dS)Nr�r�r�r�zused memoryr�)	r�rr�r|r�r�rsr�rr�r8r8r9r�Os





z.TestSystemVirtualMemoryAgainstVmstat.test_usedcCs.td�d}t��j}t||�tks*J�dS)Nzfree memoryr�)r|r�r�rdr�rr�r8r8r9r�as
z.TestSystemVirtualMemoryAgainstVmstat.test_freecCs.td�d}t��j}t||�tks*J�dS)Nz
buffer memoryr�)r|r�r��buffersr�rr�r8r8r9�test_buffersgs
z1TestSystemVirtualMemoryAgainstVmstat.test_bufferscCs.td�d}t��j}t||�tks*J�dS)Nz
active memoryr�)r|r�r��activer�rr�r8r8r9�test_activems
z0TestSystemVirtualMemoryAgainstVmstat.test_activecCs.td�d}t��j}t||�tks*J�dS)Nzinactive memoryr�)r|r�r��inactiver�rr�r8r8r9�
test_inactivess
z2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
r�r�r�r�rr�r�r�r�r�r8r8r8r9r�Hs



r�c@sBeZdZdd�Ze�dd��Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSystemVirtualMemoryMocksc	Cs�t�d���}td|i���^}tjdd���.}t�d�t��}|j	sJJ�t
|�dksZJ�|d}dt|j�vstJ�d	t|j�vs�J�d
t|j�vs�J�dt|j�vs�J�dt|j�vs�J�d
t|j�vs�J�dt|j�vs�J�|j
dks�J�|jdks�J�|jdk�sJ�|jdk�sJ�|jdk�s,J�|jdk�s<J�|jdk�sLJ�Wd�n1�sb0YWd�n1�s�0YdS)NaL            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:         -1 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            SReclaimable:     346648 kB
            �
/proc/meminfoT��record�alwaysrxrz#memory stats couldn't be determined�cachedrzr�r�r�r�)�textwrap�dedent�encoder��warnings�catch_warnings�simplefilterr�r��calledrE�str�messager�r�r�rzr�r��slab�r�r�r��ws�ret�wr8r8r9�test_warnings_on_misses|s,


z4TestSystemVirtualMemoryMocks.test_warnings_on_missescCs�i}td��:}|D]$}|��}t|d�d||d<qWd�n1sL0Yt|�}d|vr�|d}t||�|d}|dks�J�dS)Nr�rxr�rs
MemAvailable:�dr#)r!rCrnr r�)r�ZmemsrLrMrN�a�bZdiff_percentr8r8r9�test_avail_old_percent�s
8z3TestSystemVirtualMemoryMocks.test_avail_old_percentc	Cs�t�d���}td|i��v}tjdd��}t��}Wd�n1sF0Y|jsZJ�|j	dkshJ�|d}dt
|j�vs�J�Wd�n1s�0YdS)Na            Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:    6574984 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r�Tr�l �"r�,inactive memory stats couldn't be determined�r�r�r�r�r�r�r�r�r�r�r�r�r�r8r8r9� test_avail_old_comes_from_kernel�s&
�z=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc	Cs�t�d���}td|i��v}tjdd��}t��}Wd�n1sF0Y|jsZJ�|j	dkshJ�|d}dt
|j�vs�J�Wd�n1s�0YdS)Nat            Active:          9444728 kB
            Active(anon):    6145416 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            r�Tr��`LGrr�r�r�r8r8r9�test_avail_old_missing_fields�s&
�z:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc
Cs�t�d���}td|i���tdttjd���ltj	dd��@}t
��}|jdksTJ�|d}d	t
|j�vsnJ�Wd�n1s�0YWd�n1s�0YWd�n1s�0YdS)
Na�            Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r�z/proc/zoneinfo�no such file or directoryTr�r�rr�)r�r�r�r�r��IOError�errno�ENOENTr�r�r�r�r�r�r�)r�r�r�r�r�r8r8r9�test_avail_old_missing_zoneinfo�s
���z<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfocCs�t�d���}td|i���}t��}|js.J�|jdks<J�|jdksJJ�|j	dksXJ�|j
dksfJ�|jdkstJ�|jdks�J�|j
d	ks�J�|jd
ks�J�|jdks�J�Wd�n1s�0YdS)Na�            MemTotal:              100 kB
            MemFree:               2 kB
            MemAvailable:          3 kB
            Buffers:               4 kB
            Cached:                5 kB
            SwapCached:            6 kB
            Active:                7 kB
            Inactive:              8 kB
            Active(anon):          9 kB
            Inactive(anon):        10 kB
            Active(file):          11 kB
            Inactive(file):        12 kB
            Unevictable:           13 kB
            Mlocked:               14 kB
            SwapTotal:             15 kB
            SwapFree:              16 kB
            Dirty:                 17 kB
            Writeback:             18 kB
            AnonPages:             19 kB
            Mapped:                20 kB
            Shmem:                 21 kB
            Slab:                  22 kB
            SReclaimable:          23 kB
            SUnreclaim:            24 kB
            KernelStack:           25 kB
            PageTables:            26 kB
            NFS_Unstable:          27 kB
            Bounce:                28 kB
            WritebackTmp:          29 kB
            CommitLimit:           30 kB
            Committed_AS:          31 kB
            VmallocTotal:          32 kB
            VmallocUsed:           33 kB
            VmallocChunk:          34 kB
            HardwareCorrupted:     35 kB
            AnonHugePages:         36 kB
            ShmemHugePages:        37 kB
            ShmemPmdMapped:        38 kB
            CmaTotal:              39 kB
            CmaFree:               40 kB
            HugePages_Total:       41 kB
            HugePages_Free:        42 kB
            HugePages_Rsvd:        43 kB
            HugePages_Surp:        44 kB
            Hugepagesize:          45 kB
            DirectMap46k:          46 kB
            DirectMap47M:          47 kB
            DirectMap48G:          48 kB
            r�i�i�ipiTii iX�)r�r�r�r�r�r�r�rrrdr�r�rzr�r�r�r�)r�r�r�Zmemr8r8r9�test_virtual_memory_mockeds2
z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r�r�r�r�rr�r�r�r�r�r8r8r8r9r�zs$
r�c@s\eZdZedd��Zdd�Ze�dd��Ze�dd��Zd	d
�Z	dd�Z
d
d�Zdd�ZdS)�TestSystemSwapMemorycCs@td��}|��}Wd�n1s&0Yd|vo>d|vS)z3Return True if /proc/meminfo provides swap metrics.r�Nz
SwapTotal:z	SwapFree:)rB�read)rL�datar8r8r9�meminfo_has_swap_infoNs
&z*TestSystemSwapMemory.meminfo_has_swap_infocCs*t�j}t��j}t||�tks&J�dSrU)rurrr��swap_memoryr�r�r�r�r�r8r8r9r�Us
zTestSystemSwapMemory.test_totalcCs*t�j}t��j}t||�tks&J�dSrU)rursr�r�r�rr�r8r8r9r�Zs
zTestSystemSwapMemory.test_usedcCs*t�j}t��j}t||�tks&J�dSrU)rurdr�r�r�rr�r8r8r9r�`s
zTestSystemSwapMemory.test_freec	Cs�tjddd���}tjdd��r}t�d�t��}|js:J�t|�dksJJ�|d}dt	|j
�vsdJ�|jdksrJ�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)	N�psutil._common.openT�r�r�r�rxrz9'sin' and 'sout' swap memory stats couldn't be determined)
rr�r�r�r�r�r�r�rEr�r��sin�sout�r�r�r�r�r�r8r8r9�test_missing_sin_soutfs

��z*TestSystemSwapMemory.test_missing_sin_soutc	Cs�tdttjd����}tjdd��r}t�d�t��}|j	s>J�t
|�dksNJ�|d}dt|j�vshJ�|j
dksvJ�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)	Nz/proc/vmstatr�Tr�r�rxrzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r�r�r�r�r�r�r�r�r�r�rEr�r�r�r�r�r8r8r9�test_no_vmstat_mockedus �

��z*TestSystemSwapMemory.test_no_vmstat_mockedcCs�|��st�d��t�d��}t��}Wd�n1s:0Y|jrNJ�ddlm	}|�
�\}}}}}}}||9}||9}|j|ks�J�t|j
|�tks�J�dS)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor)r�rr�rr�r�r�r�Zpsutil._psutil_linuxZ
_psutil_linuxZ
linux_sysinforrr�rdr)r�r��swapZcextrqrrrdZunit_multiplierr8r8r9�test_meminfo_against_sysinfo�s
&
z1TestSystemSwapMemory.test_meminfo_against_sysinfocCsBtddi��"}t��|js J�Wd�n1s40YdS)Nr�r^)r�r�r�r��r�r�r8r8r9�#test_emulate_meminfo_has_no_metrics�sz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)
r�r�r��staticmethodr�r�rr�r�r�r�r�r�r8r8r8r9r�Ls


r�c@seZdZdd�ZdS)�TestSystemCPUTimescCs�t��j}t�dt��d�d}ttt	|�
d���}|dkrLd|vsXJ�nd|vsXJ�|dkrnd|vszJ�nd|vszJ�|d	kr�d
|vs�J�nd
|vs�J�dS)Nz
\d+\.\d+\.\d+�r�.)r����steal)r�rr'Zguest)r�r�rZ
guest_nice)r��	cpu_times�_fieldsr�r��os�unamer�r�rnrC)r�rNZ
kernel_verZkernel_ver_infor8r8r9�test_fields�s
zTestSystemCPUTimes.test_fieldsN)r�r�r�rr8r8r8r9r��sr�c@s�eZdZejjej�d�dd�dd��Z	ejjej�d�dd�dd	��Z
ejjed
�dd�dd
��Zejjed�dd�dd��Z
dd�ZdS)�TestSystemCPUCountLogical�/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr�cCsjtd��}|����}Wd�n1s*0Ydt|�vrft|�d�d�d}t��|ksfJ�dS)Nr
�-rx)rBr�r~r�rnrCr��	cpu_count)r�rL�valuer8r8r9�test_against_sysdev_cpu_online�s

*z8TestSystemCPUCountLogical.test_against_sysdev_cpu_online�/sys/devices/system/cpuz&/sys/devices/system/cpu does not existcCs0t�d�}tdd�|D��}t��|ks,J�dS)NrcSs g|]}t�d|�dur|�qS)zcpu\d+$N)r��searchrvr8r8r9r]�r^zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r�listdirrEr�r)r�Zls�countr8r8r9�test_against_sysdev_cpu_num�s
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablecCs$ttd��}tjdd�|ks J�dS)Nznproc --allT��logical)rnrr�r)r��numr8r8r9�test_against_nproc�sz,TestSystemCPUCountLogical.test_against_nproc�lscpu�lscpu utility not availablecCs8td�}tdd�|�d�D��}tjdd�|ks4J�dS)N�lscpu -pcSsg|]}|�d�s|�qS)�#�rkrvr8r8r9r]�r^z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>rjTr)rrErCr�r)r�rorr8r8r9�test_against_lscpu�sz,TestSystemCPUCountLogical.test_against_lscpuc	Cs�ddl}|j��}tjdtd���`}|j��|ks6J�|js@J�tjddd��F}|j��dusbJ�|jdkspJ�|jdddks�J�Wd�n1s�0Yt	d	d
��}|�
�}Wd�n1s�0Yt�|�}tjd|dd��$}|j��|k�sJ�Wd�n1�s0Yt
d	di��0}|j��|k�sHJ�|j�sTJ�Wd�n1�sj0YWd�n1�s�0YdS)
Nrzpsutil._pslinux.os.sysconf�r�r�Tr�r��
/proc/stat�
/proc/cpuinfo�rb��return_valuer�r^)�psutil._pslinux�_pslinuxZcpu_count_logicalrr�rFr�Z
call_countZ	call_argsrBr�r�r�r�)r�r��originalr�rLZcpuinfo_data�	fake_filer8r8r9�test_emulate_fallbacks�s.
�
4&
�4z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r�r�r�r�mark�skipifr�path�existsrrrrrr(r8r8r8r9r	�s&�
�

�

�
r	c@s:eZdZejjed�dd�dd��Zdd�Zdd	�Z	d
S)�TestSystemCPUCountCoresrrr�cCs\td�}t�}|�d�D]&}|�d�s|�d�}|�|d�qtjdd�t|�ksXJ�dS)Nrrjr�,rxFr)r�setrCrk�addr�rrE)r�roZcore_idsrMrNr8r8r9rs

z*TestSystemCPUCountCores.test_against_lscpucCsdtj��}tjdgd��$}tj��}|js.J�Wd�n1sB0Y|dur`||ks`J�dS)N�	glob.glob�r#)r�r%�cpu_count_coresrr�r�)r�Zmeth_1r�Zmeth_2r8r8r9�
test_method_2s

(z%TestSystemCPUCountCores.test_method_2c	Cs�tjdgd��P}tjddd��"}tj��dus2J�Wd�n1sF0YWd�n1sd0Y|jsxJ�|js�J�dS)Nr1r2r�Tr�)rr�r�r%r3r�)r��m1�m2r8r8r9�test_emulate_nones
N
z)TestSystemCPUCountCores.test_emulate_noneN)
r�r�r�rr)r*rrr4r7r8r8r8r9r-s
�
	r-c@s�eZdZejjedd�dd��Zejjedd�ejjedd�dd���Z	ejjedd�dd	��Z
ejjedd�d
d��Zejjedd�dd
��ZdS)�TestSystemCPUFrequency�
not supportedr�csT�fdd�}tjj�tjd|dd��t��s2J�Wd�n1sF0YdS)Ncs|�d�rdS�|�SdS)N�&/sys/devices/system/cpu/cpufreq/policyFr�r+�Zorig_existsr8r9�path_exists_mock(s
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock�os.path.existsT)r�r�)rr+r,rr�r��cpu_freq)r�r=r8r<r9�test_emulate_use_second_file%s�z3TestSystemCPUFrequency.test_emulate_use_second_filez,aarch64 does not report mhz in /proc/cpuinfocs��fdd�}tjj�z�tjd|d��xttj�t��}|sDJ|��|j	dksRJ�|j
dks`J�tjdd�D] }|j	dks~J�|j
dkslJ�qlWd�n1s�0YWttj�tt�nttj�tt�0dS)Ncs|�d�rdS�|�SdS)Nz/sys/devices/system/cpu/Frr;�Zos_path_existsr8r9r=;s
zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr>r�T�Zpercpu)rr+r,rr�rr�r%r?�max�min)r�r=r��freqr8rAr9�test_emulate_use_cpuinfo4s 
0

�
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc	s��fdd�}t�trdnd}tj||d���tjddd��Vt��}|jd	ksRJ�|jd
krj|jdksjJ�|jd
kr�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)
Ncs�|�d�r|�d�rt�d�S|�d�r<|�d�r<t�d�S|�d�rZ|�d�rZt�d�S|dkrlt�d	�S�|g|�Ri|��SdS)
N�/scaling_cur_freqr:�500000�/scaling_min_freq�600000�/scaling_max_freqs700000r scpu MHz     : 500��endswithrkr�r�r��r�r8r9r�Rs�
�
�

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr�r�rr>Tr2�@@rB���@g�@�	rBrrr�r�r?�currentrErD�r�r�r�rFr8rOr9�test_emulate_dataPs

z(TestSystemCPUFrequency.test_emulate_datac
sb�fdd�}t�trdnd}tj||d��� tjddd���tjd	d
d���tjdd�}|djd
kslJ�|djdkr�|djdks�J�|djdkr�|djdks�J�|djdks�J�|djdkr�|djdks�J�|djdkr�|djdks�J�Wd�n1�s0YWd�n1�s40YWd�n1�sT0YdS)Ncs�|}|�d�r"|�d�r"t�d�S|�d�r@|�d�r@t�d�S|�d�r^|�d�r^t�d�S|�d�r||�d�r|t�d	�S|�d�r�|�d�r�t�d
�S|�d�r�|�d�r�t�d�S|dkr�t�d
�S�|g|�Ri|��SdS)NrHz'/sys/devices/system/cpu/cpufreq/policy0s100000rJ�200000rLs300000z'/sys/devices/system/cpu/cpufreq/policy1s400000rIrKr s#cpu MHz     : 100
cpu MHz     : 400rM)r�r�r��nrOr8r9r�ss8�
�
�
�
�
�

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr�r�rr>Tr2�!psutil._pslinux.cpu_count_logicalr�rCr�Y@rBgi@g�r@rxgy@rPrQrRrTr8rOr9�test_emulate_multi_cpuqs&�z-TestSystemCPUFrequency.test_emulate_multi_cpuc
s��fdd�}t�trdnd}tj||d���tjddd��Ttjd	d
d��&t��}|jdksbJ�Wd�n1sv0YWd�n1s�0YWd�n1s�0YdS)NcsX|�d�rttjd��n<|�d�r,t�d�S|dkr>t�d�S�|g|�Ri|��SdS)NrHrYz/cpuinfo_cur_freqrVr scpu MHz     : 200)rNr�r�r�r�r�r�rOr8r9r��s



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr�r�rr>Tr2rXrx��)rBrrr�r�r?rSrTr8rOr9�%test_emulate_no_scaling_cur_freq_file�s
�z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)
r�r�r�rr)r*rr@rrGrUrZr\r8r8r8r9r8#s
�
 
3r8c@seZdZdd�ZdS)�TestSystemCPUStatscCs*td�}t��j}t||�dks&J�dS)N�
interruptsi�)r|r�Z	cpu_statsr^r�r�r8r8r9�test_interrupts�s
z"TestSystemCPUStats.test_interruptsN)r�r�r�r_r8r8r8r9r]�s	r]c@s&eZdZejjedd�dd��ZdS)�TestLoadAvgr9r�cCs�t��}td��}|����}Wd�n1s20Ytt|d�|d�dks\J�tt|d�|d�dks|J�tt|d�|d�dks�J�dS)Nz
/proc/loadavgrrxr�)r��
getloadavgrBr�rCr��float)r�r�rLZ
proc_valuer8r8r9�test_getloadavg�s
*  zTestLoadAvg.test_getloadavgN)r�r�r�rr)r*rrcr8r8r8r9r`�sr`c@seZdZdd�ZdS)�TestSystemNetIfAddrscCs�t����D]�\}}|D]�}|jtjkr<|jt|�ks�J�q|jtjkr�|jt	|�ksZJ�|j
t|�kslJ�|jdur�|jt
|�ks�J�q�t
|�dks�J�q|jtjkr|j�d�d}|t|�vsJ�qqdS)Nz0.0.0.0�%r)r�Znet_if_addrs�items�familyZAF_LINK�addressrcr*r+r:�netmaskr<�	broadcastr>rJrCrT)r�r��addrs�addrrhr8r8r9�test_ips�s
zTestSystemNetIfAddrs.test_ipsN)r�r�r�rmr8r8r8r9rd�srd�QEMU user not supportedc@sPeZdZejjed�dd�dd��Zdd�Zejjed�dd�dd	��Z	d
S)�TestSystemNetIfStats�ifconfig�ifconfig utility not availabler�c	Csrt����D]`\}}ztd|�}Wnty6Yq0|jd|vksNJ|��|jtt�	d|�d�ksJ�qdS)N�ifconfig %s�RUNNINGz(?i)MTU[: ](\d+)r)
r��net_if_statsrfr�RuntimeErrorZisup�mturnr�r�)r�r��statsror8r8r9�test_against_ifconfig	s�z*TestSystemNetIfStats.test_against_ifconfigc	Cs`t����D]N\}}td|��*}|jt|�����ks<J�Wd�q1sP0YqdS)Nz/sys/class/net/%s/mtu)r�rtrfrBrvrnr�r~)r�r�rwrLr8r8r9�test_mtuszTestSystemNetIfStats.test_mtuc	Cs
d}t����D]�\}}ztd|�}Wnty:Yq0t�d|�}|r�t|���dkr�|d7}t	|�
d����d��}t	|j
�d��}||ks�J�qt�d|�}|rt|���dkr|d7}t	|�
d������}t	|j
�d��}||ksJ�q|�s|�d	��dS)
Nrrrzflags=(\d+)?<(.*?)>r�rxr.z(.*)  MTU:(\d+)  Metric:(\d+)r�zno matches were found)r�rtrfrrur�rrErPr/�group�lowerrC�flags�fail)r�Z
matches_foundr�rwro�matchZifconfig_flagsZpsutil_flagsr8r8r9�
test_flagss(zTestSystemNetIfStats.test_flagsN)
r�r�r�rr)r*rrxryrr8r8r8r9ros
�

�roc@s0eZdZejjed�dd�e�dd���ZdS)�TestSystemNetIOCountersrprqr�c	Cs$dd�}tjddd�}|��D�]�\}}z||�}WntyJYqYn0t|j|d�dksfJ�t|j|d�dks�J�t|j|d	�d
ks�J�t|j|d�d
ks�J�t|j	|d�d
ks�J�t|j
|d�d
ks�J�t|j|d�d
k�sJ�t|j|d�d
ksJ�qdS)NcSs�i}td|�}tt�d|�d�|d<tt�d|�d�|d<tt�d|�d�|d<tt�d|�d	�|d
<tt�d|�d�|d<tt�d|�d	�|d
<tt�d|�d�|d<tt�d|�d�|d<|S)NrrzRX packets[: ](\d+)r�packets_recvzTX packets[: ](\d+)�packets_sentzerrors[: ](\d+)�errinrx�erroutzdropped[: ](\d+)�dropin�dropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_sent)rrnr�r�)Znicr�ror8r8r9rpEs&����z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernic�nowrapr�i(r�r�r�r�r��
r�r�r�)
r��net_io_countersrfrur�r�r�r�r�r�r�r�r�)r�rpZnior�rwZifconfig_retr8r8r9rx@s&
����z-TestSystemNetIOCounters.test_against_ifconfigN)	r�r�r�rr)r*rrrxr8r8r8r9r�>s

�r�c@s8eZdZejded�ejddd�dd���Zdd	�Zd
S)�TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntoprzpsutil._pslinux.supports_ipv6Fr2cCsPz*t�tjtj�}|�|j�|�d�Wntjy>Yn0tjdd�dS)N)z::1rZinet6��kind)	r*rJ�SOCK_STREAMZ
addCleanup�close�bind�errorr��net_connections)r�Z
supports_ipv6rKr7r8r8r9�test_emulate_ipv6_unsupportedtsz6TestSystemNetConnections.test_emulate_ipv6_unsupportedcCsPt�d�}td|i��&}tjdd�|js.J�Wd�n1sB0YdS)Na            0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
            0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
            0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
            000000000000000000000000000000000000000000000000000000
            z/proc/net/unix�unixr�)r�r�r�r�r�r�)r�r�r�r8r8r9�test_emulate_unix�s
z*TestSystemNetConnections.test_emulate_unixN)r�r�r�rr�rFr�r�r8r8r8r9r�rs
r�c@sBeZdZejjeed�dd�e�dd���Z	dd�Z
dd	�Zd
S)�TestSystemDiskPartitions�statvfszos.statvfs() not availabler�cCsvdd�}tjdd�D]\}t�|j�}||j�\}}}}|j|ksDJ�t|j|�tksZJ�t|j|�tksJ�qdS)NcSsztd|���}|�d�}|�d�|�d�}|��dd�\}}}}|dkrRd}t|�t|�t|�}}}||||fS)Nzdf -P -B 1 "%s"rjrr@�nonerY)rr~rC�poprn)r+rorprM�devrrrsrdr8r8r9�df�s


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)�all)	r��disk_partitions�
disk_usageZ
mountpointrrr�rdrrs)r�r��part�usagerqrrrsrdr8r8r9�test_against_df�sz(TestSystemDiskPartitions.test_against_dfc	Cstd��}|��}Wd�n1s&0Yd|vr`t��D]}|jdkr@q^q@|�d��n�t�d�}tj	d|dd��v}tj	dd	gd
��F}t��}|j
s�J�|j
s�J�|s�J�|djdks�J�Wd�n1s�0YWd�n1s�0YdS)Nz/proc/filesystems�zfszcouldn't find any ZFS partitionz
nodev	zfs
r�Tr"�$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3�/r��rwr2r)rBr�r�r�Zfstyper}r�r�rr�r�)r�rLr�r�r'r5r6r�r8r8r9�test_zfs_fs�s,
&

��

z$TestSystemDiskPartitions.test_zfs_fsc	Cs�zttjddd��L}t�t��t��Wd�n1s:0Y|jsNJ�Wd�n1sb0YWdt_ndt_0dS)Nzos.path.realpathz
/non/existentr2�/proc)	rr�r�raisesrr�r�r��PROCFS_PATHr�r8r8r9�test_emulate_realpath_fail�s�&*z3TestSystemDiskPartitions.test_emulate_realpath_failN)r�r�r�rr)r*�hasattrrrr�r�r�r8r8r8r9r��s�r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestSystemDiskIoCountersc	Cs�d}td|i���tjddd���tjdd�}|jdks<J�|jd	ksJJ�|jd
tks\J�|j	dksjJ�|j
dksxJ�|jd
ks�J�|jdtks�J�|j
dks�J�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)Nz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12�/proc/diskstats�!psutil._pslinux.is_storage_deviceTr2F�r�rxr�r�r@ryr��r��r�rr�r��disk_io_counters�
read_count�read_merged_count�
read_bytes�SECTOR_SIZE�	read_time�write_count�write_merged_count�write_bytes�
write_time�	busy_time�r�r�r�r8r8r9�test_emulate_kernel_2_4�s�z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c	Cs�d}td|i���tjddd���tjdd�}|jdks<J�|jd	ksJJ�|jd
tks\J�|j	dksjJ�|j
dksxJ�|jd
ks�J�|jdtks�J�|j
dks�J�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r�r�Tr2Fr�rxr�r�r@ryrr�r�r�r�r�r8r8r9�test_emulate_kernel_2_6_full�s�z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc	Cs�tddi���tjddd���tjdd�}|jdks8J�|jd	tksJJ�|jd
ksXJ�|j	dtksjJ�|j
dksxJ�|jdks�J�|jdks�J�|j
dks�J�|jdks�J�Wd�n1s�0YWd�n1s�0YdS)
Nr�z   3    1   hda 1 2 3 4r�Tr2Fr�rxr�r�r@r)r�rr�r�r�r�r�r�r�r�r�r�r�r�r�)r�r�r8r8r9�test_emulate_kernel_2_6_limited�s�z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc	Cs�t�d�}td|i���tjddd��vtjddd�}t|�dksFJ�|d	jd
ksXJ�|djd
ksjJ�|d	j	dks|J�|dj	dks�J�Wd�n1s�0YWd�n1s�0YdS)
N�x            3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
            3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
            r�r�Fr2T��perdiskr�r��nvme0n1rxZ	nvme0n1p1ry)
r�r�r�rr�r�r�rEr�r�r�r8r8r9�test_emulate_include_partitionss
�z8TestSystemDiskIoCounters.test_emulate_include_partitionsc	Cst�d�}td|i��Xtjddd��*tjddd�}|dusBJ�Wd�n1sV0YWd�n1st0Ydd�}t�d�}td|i��jtjdd	|d
��:tjddd�}|jdks�J�|jdks�J�Wd�n1s�0YWd�n1�s0YdS)
Nr�r�r�Fr2r�cSs|dkS)Nr�r8)r�r8r8r9�is_storage_device4szSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr�rxry)	r�r�r�rr�r�r�r�r�)r�r�r�r�r8r8r9�test_emulate_exclude_partitions%s$
�H
�z8TestSystemDiskIoCounters.test_emulate_exclude_partitionscCshdd�}tjdd�}tjdd|d��tjdd�}Wd�n1sF0Yt|�t|�ksdJ�dS)NcSs|dkS)Nr�r8r;r8r8r9r,Fsz?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r��psutil._pslinux.os.path.existsr�)r�r�rr�rE)r�r,ZwprocfsZwsysfsr8r8r9�test_emulate_use_sysfsEs�*z/TestSystemDiskIoCounters.test_emulate_use_sysfsc	Csndd�}tjdd|d��Bt�t��t��Wd�n1sB0YWd�n1s`0YdS)NcSsdS)NFr8r;r8r8r9r,Qsz>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr�Tr�)rr�rr��NotImplementedErrorr�r�)r�r,r8r8r9�test_emulate_not_implPs�z.TestSystemDiskIoCounters.test_emulate_not_implN)
r�r�r�r�r�r�r�r�r�r�r8r8r8r9r��s r�c@sjeZdZdd�Zdd�Zejjedd�dd��Z	ejje
d	�d
d�ejjedd�dd���Zd
d�ZdS)�TestRootFsDeviceFindercCs(t�d�j}t�|�|_t�|�|_dS)Nr�)rr�st_dev�major�minor)r�r�r8r8r9�setUp]szTestRootFsDeviceFinder.setUpcCs�t�}tj�d�r|��n2t�t��|��Wd�n1sD0Ytj�d|j|j	f�rp|�
�n2t�t��|�
�Wd�n1s�0Y|��dS�Nz/proc/partitionsz/sys/dev/block/%s:%s/uevent)rrr+r,�ask_proc_partitionsrr�rr�r��ask_sys_dev_block�ask_sys_class_block)r��finderr8r8r9�test_call_methodsbs
&�
&z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSr�cCs�t�}|��dusJ�d}}}tj�d�r6|��}tj�d|j|jf�rV|��}|�	�}|ph|ph|}|r~|r~||ks~J�|r�|r�||ks�J�|r�|r�||ks�J�dSr�)
r�findrr+r,r�r�r�r�r�)r�r�r�r��c�baser8r8r9�test_comparisonsrs"�z'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablecCs"t���}td�}||ksJ�dS)Nzfindmnt -o SOURCE -rn /)rr�r)r�r�Z
findmnt_valuer8r8r9�test_against_findmnt�s
z+TestRootFsDeviceFinder.test_against_findmntcCs�tjddgd��\}t��d}|js(J�tsP|jdks:J�|jt���ks^J�n|jdks^J�Wd�n1sr0YdS)Nr�)�	/dev/rootr�Zext4r�r2rr�)	rr�r�r�r�rZdevicerr�)r�r�r�r8r8r9�test_disk_partitions_mocked�s�
z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)
r�r�r�r�r�rr)r*rr�rr�r�r8r8r8r9r�[s

�r�c@sbeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	�e
jje
d
d�dd���Zdd�ZdS)�TestMisccCs(td�}t��}t|�t|�ks$J�dS)Nz	boot time)r|r��	boot_timernr�r8r8r9�test_boot_time�szTestMisc.test_boot_timec	sb|��}t�|�ttj�|d�d��.}|�d�|�d�|�d�Wd�n1sZ0Y�z�t��fdd�}tr�dnd	}tj	||d
���~t
t�t�
t��t��Wd�n1s�0Yt�
t��tjdd�Wd�n1s�0Yt�
t��t��Wd�n1�s00Yt�
t��tjdd�Wd�n1�sh0Yt�
t��t��Wd�n1�s�0Yt�
t��tjdd�Wd�n1�s�0Y|t_t��d
k�s�J�tt���d
k�sJ�tjdd�}t|�d
k�s*J�tjdd�}ttt|��d
k�sNJ�ttj�|d�d��.}|�d�|�d�|�d�Wd�n1�s�0Yt��d
k�s�J�ttjdd��d
k�s�J�tt���d
k�s�J�ttttjdd���d
k�sJ�Wd�n1�s0YWt�|�t
t�nt�|�t
t�0tjdk�s^J�dS)Nrr�zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
cs,|�d�rttjd���|g|�Ri|��S)Nr�zrejecting access for test)rkr�r�r�r�rOr8r9r��s
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr�r�rTrCrzcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r�)�
get_testfnr�mkdirrBr+rH�writerrr�rr�rr�r�r�cpu_percent�cpu_times_percentr��sumr��shutil�rmtree)r�Z	my_procfsrLr�r�Zper_cpu_percentZper_cpu_times_percentr8rOr9�test_no_procfs_on_import�sZ


(&*(,(,

*�*

�

z!TestMisc.test_no_procfs_on_importcCsjt�d���}td|i��B}t��|js.J�tjdd�t��tjdd�Wd�n1sb0Yt�d���}td|i���t��}|js�J�tjdd�}t��}tjdd�}|dks�J�t|�dks�J�t|�dks�J�t|�dks�J�tt	t|��dk�sJ�tt	t|��dk�s&J�|j
dk�s6J�|jdk�sFJ�Wd�n1�s\0YdS)Nz~            cpu   0 0 0 0 0 0 0 1 0 0
            cpu0  0 0 0 0 0 0 0 1 0 0
            cpu1  0 0 0 0 0 0 0 1 0 0
            rTrCz~            cpu   1 0 0 0 0 0 0 0 0 0
            cpu0  1 0 0 0 0 0 0 0 0 0
            cpu1  1 0 0 0 0 0 0 0 0 0
            rrY)r�r�r�r�r�r�r�r�r�r�r�user)r�r�r�r�Zcpu_percent_percpur�Zcpu_times_percent_percpur8r8r9�test_cpu_steal_decrease�s,
*
z TestMisc.test_cpu_steal_decreasec	Csptjddd��N}t�t��tj��Wd�n1s:0Y|jsNJ�Wd�n1sb0YdS)Nr�Tr�)	rr�rr�rur�r%r�r�r�r8r8r9�test_boot_time_mockeds(zTestMisc.test_boot_time_mockedcCs t��D]}|jdvsJ�qdS)N)z:0z:0.0)r�Zusers�host)r�r�r8r8r9�
test_usersszTestMisc.test_userscCs|��}t�|��z�|t_t�t��t��Wd�n1sD0Yt�t��t�	�Wd�n1sv0Yt�t��tj	dd�Wd�n1s�0Yt�t��t�
�Wd�n1s�0Yt�t��t��Wd�n1�s0Yt�t��t��Wd�n1�sF0Yt�t��t�
�Wd�n1�sz0Yt�t��t��Wd�n1�s�0Yt�tj��t��Wd�n1�s�0YWdt_ndt_0dS)NTrCr�)r�rr�r�r�rr�r�r�rr�r�r�rtr�Z
NoSuchProcess�Process)r�Ztdirr8r8r9�test_procfs_path s.
&&*&((((*zTestMisc.test_procfs_pathzskip if pytest-parallelr�cCs�t��~t��}|��}t|�tr&dndks0J�t|dd�d�dj}|j|ksTJ�t�|�}|�	�|t�
�vsvJ�Wd�n1s�0YdS)Nr�r�cSs|jSrU)�idrVr8r8r9�<lambda>Hr^z)TestMisc.test_issue_687.<locals>.<lambda>)�keyrx)rr�r��threadsrEr�sortedr��pidZas_dictZpids)r��pr��tid�ptr8r8r9�test_issue_687<s
zTestMisc.test_issue_687cCsLtddi��,}t�t���s J�|js*J�Wd�n1s>0YdS)N�/proc/%s/statusrY)r�r�Z
pid_existsr�getpidr�r�r8r8r9�test_pid_exists_no_proc_statusNsz'TestMisc.test_pid_exists_no_proc_statusN)r�r�r�r�r�r�r�r�r�rrr)r*rr�r�r8r8r8r9r��sB'r�z
no batteryc@sjeZdZejjed�dd�dd��Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�ZdS)�TestSensorsBatteryZacpizacpi utility not availabler�cCsHtd�}t|�d�d���dd��}t��j}t||�dksDJ�dS)Nzacpi -br.rxrerY)	rrnrCr~�replacer��sensors_battery�percentr�)r�roZ
acpi_valuer�r8r8r9�test_percent_s
zTestSensorsBattery.test_percentcs~�fdd�}t�trdnd}tj||d��@}t��jdus>J�t��jtjksRJ�|j	s\J�Wd�n1sp0YdS)Ncs.|�d�rt�d�S�|g|�Ri|��SdS)N�z
AC0/onlinez	AC/online�1�rNr�r�r�rOr8r9r�hs

z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr�r�rT)
rBrrr�r�r�
power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDr��r�r�r�r�r8rOr9�test_emulate_power_pluggedfs��z-TestSensorsBattery.test_emulate_power_pluggedcsj�fdd�}t�trdnd}tj||d��,}t��jdus>J�|jsHJ�Wd�n1s\0YdS)NcsF|�d�rttjd��n*|�d�r,t�d�S�|g|�Ri|��SdS)NrrY�/statusZcharging�rNr�r�r�r�r�r�rOr8r9r�{s



zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr�r�rT�rBrrr�r�rrr�r	r8rOr9�test_emulate_power_plugged_2xsz/TestSensorsBattery.test_emulate_power_plugged_2csj�fdd�}t�trdnd}tj||d��,}t��jdus>J�|jsHJ�Wd�n1s\0YdS)Ncs.|�d�rt�d�S�|g|�Ri|��SdS)Nr�0rr�rOr8r9r��s

zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr�r�rFr
r	r8rOr9�test_emulate_power_not_plugged�sz1TestSensorsBattery.test_emulate_power_not_pluggedcsj�fdd�}t�trdnd}tj||d��,}t��jdus>J�|jsHJ�Wd�n1s\0YdS)NcsF|�d�rttjd��n*|�d�r,t�d�S�|g|�Ri|��SdS)NrrYrZdischargingrr�rOr8r9r��s



zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr�r�rFr
r	r8rOr9� test_emulate_power_not_plugged_2�sz3TestSensorsBattery.test_emulate_power_not_plugged_2csj�fdd�}t�trdnd}tj||d��,}t��jdus>J�|jsHJ�Wd�n1s\0YdS)NcsF|�d�rttjd��n*|�d�r,t�d�S�|g|�Ri|��SdS)N)�"/sys/class/power_supply/AC0/online�!/sys/class/power_supply/AC/onlinerY�#/sys/class/power_supply/BAT0/statuss???)rkr�r�r�r�r�r�rOr8r9r��s



zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr�r�rr
r	r8rOr9�test_emulate_power_undetermined�sz2TestSensorsBattery.test_emulate_power_undeterminedcCsLtddi��,}t��jdks J�|js*J�Wd�n1s>0YdS)N�(/sys/class/power_supply/BAT0/energy_fullrr)r�r�rrr�r�r8r8r9�test_emulate_energy_full_0�s�z-TestSensorsBattery.test_emulate_energy_full_0c
Cs�tdttjd����tdttjd���Ntddi��"t��jdksHJ�Wd�n1s\0YWd�n1sz0YWd�n1s�0YdS)NrrYz(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys88�X)r�r�r�r�r�r�rr�r�r8r8r9�"test_emulate_energy_full_not_avail�s
�
��z5TestSensorsBattery.test_emulate_energy_full_not_availc
Cs�tdttjd����tdttjd���Ttdttjd���"t��jdusNJ�Wd�n1sb0YWd�n1s�0YWd�n1s�0YdS)NrrYrr)r�r�r�r�r�rrrr8r8r9�test_emulate_no_power�s��
�z(TestSensorsBattery.test_emulate_no_powerN)r�r�r�rr)r*rrr
rrrrrrrr8r8r8r9r\s
rc@seZdZdd�ZdS)�TestSensorsBatteryEmulatedc	s��fdd�}t�trdnd}tjddgd��N}tj||d�� }t��dusNJ�Wd�n1sb0YWd�n1s�0Y|js�J�|js�J�dS)	NcsV|�d�rt�d�S|�d�r(t�d�S|�d�r<t�d�S�|g|�Ri|��SdS)Nz/energy_nowZ60000000z
/power_now�0z/energy_fullZ60000001�rNr�r�r�rOr8r9r��s





z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr�r�z
os.listdirZBAT0r2r)rBrrr�r�rr�)r�r�r�ZmlistdirZmopenr8rOr9�test_it�s
L
z"TestSensorsBatteryEmulated.test_itN)r�r�r�rr8r8r8r9r�src@seZdZdd�Zdd�ZdS)�TestSensorsTemperaturesc	s��fdd�}t�trdnd}tj||d���tjddgd��Xt��d	d
}|jdks\J�|jdksjJ�|jd
ksxJ�|j	dks�J�Wd�n1s�0YWd�n1s�0YdS)Ncs~|�d�rt�d�S|�d�r(t�d�S|�d�r<t�d�S|�d�rPt�d�S|�d	�rdt�d
�S�|g|�Ri|��SdS)N�/namer�z/temp1_label�labelz/temp1_input�30000z
/temp1_maxs40000z/temp1_crit�50000)rNr�r�r�r�rOr8r9r��s









zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr�r�rr1z/sys/class/hwmon/hwmon0/temp1r2r�rr"�>@gD@�I@�
rBrrr�r�Zsensors_temperaturesr"rS�high�critical)r�r�r��tempr8rOr9�test_emulate_class_hwmon�s�z0TestSensorsTemperatures.test_emulate_class_hwmonc	s��fdd�}dd�}t�tr dnd}tj||d���tjdd	|d
��Xt��dd}|jd
ksdJ�|jdksrJ�|jdks�J�|j	dks�J�Wd�n1s�0YWd�n1s�0YdS)Ncsj|�d�rt�d�S|�d�r(t�d�S|�d�r<t�d�S|�d�rPt�d�S�|g|�Ri|��SdS)	NZ0_tempr$r*r#Z0_typer)�typer�)rNr�r�r�r�rOr8r9r�s







zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockcSs:|dkrgS|dkrgS|dkr&dgS|dkr6ddgSgS)Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr8r;r8r8r9�	glob_mock$s�zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr�r�rr1Tr�r�rrYr%r&r')r�r�r-r�r*r8rOr9�test_emulate_class_thermalsz2TestSensorsTemperatures.test_emulate_class_thermalN)r�r�r�r+r.r8r8r8r9r �sr c@seZdZdd�ZdS)�TestSensorsFansc	s��fdd�}t�trdnd}tj||d��ltjddgd��<t��d	d
}|jdks\J�|jdksjJ�Wd�n1s~0YWd�n1s�0YdS)
NcsV|�d�rt�d�S|�d�r(t�d�S|�d�r<t�d�S�|g|�Ri|��SdS)Nr!r�z/fan1_labelr"z/fan1_input�2000rr�rOr8r9r�@s





z4TestSensorsFans.test_emulate_data.<locals>.open_mockr�r�rr1z/sys/class/hwmon/hwmon2/fan1r2r�rr"i�)rBrrr�r�Zsensors_fansr"rS)r�r�r�Zfanr8rOr9rU?s
�z!TestSensorsFans.test_emulate_dataN)r�r�r�rUr8r8r8r9r/=sr/c@s�eZdZe�dd��Zdd�Zejje	dd�dd��Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zejjedd�d d!��Zd"d#�Zd$d%�Zd&d'�Zd(S))�TestProcesscCs�|��}tj�|j���\}}}t�|j�jdd�}t|tdd�|D���dksVJ�t|tdd�|D���dksxJ�t|tdd�|D���dks�J�dS)NF)ZgroupedcSsg|]}|j|j�qSr8)Z
private_dirtyZ
private_cleanrvr8r8r9r]br^z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>r�cSsg|]
}|j�qSr8)�pssrvr8r8r9r]er^cSsg|]
}|j�qSr8)r�rvr8r8r9r]fr^)	Zspawn_testprocr�r%r�r��_parse_smaps�memory_mapsr�r�)r�Zsproc�ussr2r��mapsr8r8r9�test_parse_smaps_vs_memory_maps\s��"z+TestProcess.test_parse_smaps_vs_memory_mapscCs�t�d���}tdt��|i��\}tj�t���}|�	�\}}}|j
sLJ�|dksXJ�|dksdJ�|dkspJ�Wd�n1s�0YdS)Nan            fffff0 r-xp 00000000 00:00 0                  [vsyscall]
            Size:                  1 kB
            Rss:                   2 kB
            Pss:                   3 kB
            Shared_Clean:          4 kB
            Shared_Dirty:          5 kB
            Private_Clean:         6 kB
            Private_Dirty:         7 kB
            Referenced:            8 kB
            Anonymous:             9 kB
            LazyFree:              10 kB
            AnonHugePages:         11 kB
            ShmemPmdMapped:        12 kB
            Shared_Hugetlb:        13 kB
            Private_Hugetlb:       14 kB
            Swap:                  15 kB
            SwapPss:               16 kB
            KernelPageSize:        17 kB
            MMUPageSize:           18 kB
            Locked:                19 kB
            VmFlags: rd ex
            �/proc/%s/smapsilr�i<)r�r�r�r�rr�r�r%r�r3r�)r�r�r�r�r5r2r�r8r8r9�test_parse_smaps_mockedhs
z#TestProcess.test_parse_smaps_mockedzunreliable on PYPYr�cCsdd�}|��}t|d��"||�jdks.J�Wd�n1sB0Yt|��"||�jdkshJ�Wd�n1s|0Yt|d��"||�jdks�J�Wd�n1s�0Yt|d��"||�jdks�J�Wd�n1s�0Yt|d��$||�jdk�sJ�Wd�n1�s40Yt|d��$||�jdk�s^J�Wd�n1�st0Yt�rt|�t|d	��$||�jdk�s�J�Wd�n1�s�0Yt|�t|d
��$||�jdk�s�J�Wd�n1�s
0YdS)NcSsZt��}t��t}|��D].}|jtj�|�kr:|St��|krqqqtd��dS)Nztimeout looking for test file)	r�r��timer	�
open_filesr+r�abspathru)�fnamer�Z	giveup_at�filer8r8r9�
get_test_file�sz7TestProcess.test_open_files_mode.<locals>.get_test_filer��rr�zr+zw+za+rWzx+)r�rB�moderr)r�r?Ztestfnr8r8r9�test_open_files_mode�s*0
000444z TestProcess.test_open_files_modec	s�t�������t|��d���t��fdd��tjdtt	j
d�d��*}���gksZJ�|jsdJ�Wd�n1sx0Ytjdtt	jd�d��*}���gks�J�|js�J�Wd�n1s�0YWd�n1s�0YdS)Nr�cst����t��kSrU�rEr;r8��filesr�r8r9r��r^z7TestProcess.test_open_files_file_gone.<locals>.<lambda>�psutil._pslinux.os.readlinkrYr)
r�r�r;rBr�rrr��OSErrorr�r�r��EINVALr�r8rDr9�test_open_files_file_gone�s$
�(
�z%TestProcess.test_open_files_file_gonec	s�t�������t|��d��~t��fdd��tr:dnd}tj|t	t
jd�d��*}���gksfJ�|jspJ�Wd�n1s�0YWd�n1s�0YdS)Nr�cst����t��kSrUrCr8rDr8r9r��r^z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>r�r�rYr)
r�r�r;rBr�rrrr�r�r�r�r��r�r�r�r8rDr9�test_open_files_fd_gone�s�z#TestProcess.test_open_files_fd_gonec
s�t�������t|��d���t��fdd��d}tj|tt	j
d�d��T}t�d��*���gksjJ�|jstJ�Wd�n1s�0YWd�n1s�0YWd�n1s�0YdS)Nr�cst����t��kSrUrCr8rDr8r9r��r^z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>rFrYr�psutil._pslinux.debug)r�r�r;rBr�rrr�rGr��ENAMETOOLONGr�rJr8rDr9�test_open_files_enametoolong�s�z(TestProcess.test_open_files_enametoolongcCsXtjdid��6}tj�t�����dus,J�|js6J�Wd�n1sJ0YdS)Nz)psutil._pslinux._psposix.get_terminal_mapr2)	rr�r�r%r�rr�Zterminalr�r�r8r8r9�test_terminal_mocked�s�z TestProcess.test_terminal_mockedcCs�t��}t�d�}tjd|dd��.}|��ddgks8J�|jsBJ�Wd�n1sV0Yt�d�}tjd|dd��.}|��gd�ks�J�|js�J�Wd�n1s�0YdS)	Nzfoobarr�Tr"�foo�barz	foobar�rPrQrY�r�r�r�r�rr�Zcmdliner��r�r�r'r�r8r8r9�test_cmdline_mocked�s
�(
�zTestProcess.test_cmdline_mockedcCs�t��}t�d�}tjd|dd��.}|��ddgks8J�|jsBJ�Wd�n1sV0Yt�d�}tjd|dd��.}|��gd�ks�J�|js�J�Wd�n1s�0YdS)	Nzfoo bar r�Tr"rPrQz	foo bar  rRrSrTr8r8r9�test_cmdline_spaces_mockeds
�(
�z&TestProcess.test_cmdline_spaces_mockedcCsdt��}t�d�}tjd|dd��.}|��ddgks8J�|jsBJ�Wd�n1sV0YdS)Nzfoo barr�Tr"rPrQrSrTr8r8r9�test_cmdline_mixed_separatorss
�z)TestProcess.test_cmdline_mixed_separatorscCsZtjddd��8t����dks$J�t����dks8J�Wd�n1sL0YdS)NrFz/home/foo (deleted)r2z	/home/foo)rr�r�r��exe�cwdrr8r8r9�!test_readlink_path_deleted_mocked!s
�z-TestProcess.test_readlink_path_deleted_mockedc	s��fdd�}t�trdnd}tj||d��2}t����}|jsBJ�|gksNJ�Wd�n1sb0Y�fdd�}tj||d��Ht�	tj
��t����Wd�n1s�0YWd�n1s�0YdS)Ncs:|�dt���r ttjd��n�|g|�Ri|��SdS�Nz
/proc/%s/taskrY)rkrr�r�r�r�r�rOr8r9�open_mock_1-sz4TestProcess.test_threads_mocked.<locals>.open_mock_1r�r�rcs:|�dt���r ttjd��n�|g|�Ri|��SdSr[)rkrr�r�r��EPERMr�rOr8r9�open_mock_2<sz4TestProcess.test_threads_mocked.<locals>.open_mock_2)rBrrr�r�r�r�r�rr�ZAccessDenied)r�r\r�r�r�r^r8rOr9�test_threads_mocked(s
*zTestProcess.test_threads_mockedc	Cs�tjdttjd�d��`}tjdgd��2t����}|js>J�|dksJJ�Wd�n1s^0YWd�n1s|0YdS)Nzpsutil._pslinux.readlinkrYrzpsutil._pslinux.Process.cmdliner2)	rr�rGr�r�r�r�rXr�)r�r�r�r8r8r9�test_exe_mockedFs��
zTestProcess.test_exe_mockedc	Cs�tdt��ttjd���T}t��}t�	t
��|��Wd�n1sL0Y|js`J�Wd�n1st0YdS)Nr8rY)
r�rr�r�r�r�r�r�rr�rr4r��r�r�r�r8r8r9�test_issue_1014Rs�&zTestProcess.test_issue_1014r9c
Cs�tjdttjd�d���}tjddd��X}t��}|��t�	tj
��}|�tj�Wd�n1sf0YWd�n1s�0YWd�n1s�0Y|j
s�J�|j
s�J�|jj|jks�J�|jj|��ks�J�dS)Nzpsutil._pslinux.prlimitrYrz"psutil._pslinux.Process._is_zombieTr2)rr�rGr�ZENOSYSr�r�r�rr�Z
ZombieProcessZrlimitZ
RLIMIT_NOFILEr�r
r�)r�r5r6r��cmr8r8r9�test_rlimit_zombie]s ��f

zTestProcess.test_rlimit_zombiecCsgd�}d�|���}tdt��|i���t��}|��dksDJ�|��tj	ksVJ�|�
�dksfJ�|��dtt�
�ks�J�|��}|jdtks�J�|jdtks�J�|jd	tks�J�|jd
tks�J�|jdtks�J�|��dks�J�Wd�n1�s
0YdS)N)*rz(cat)�Z�1rrrrrrrrr�2�3�4�5rrrr�6rrrrrrrrrrrrrrrrrkrr�7r}z
/proc/%s/stat�catrxrr�r�r@ryr�)rHr�r�rr�r�r�r��statusZ
STATUS_ZOMBIE�ppidZcreate_timerr�rr��system�
children_user�children_systemZiowaitZcpu_num)r�r�r�r��cpur8r8r9�test_stat_file_parsingqs,z"TestProcess.test_stat_file_parsingcCst�d���}tdt��|i���t��}|��j	dks>J�|��j
dksPJ�|��dks`J�|��}|j
dksvJ�|jdks�J�|jdks�J�|��}|j
d	ks�J�|jd
ks�J�|jdks�J�|j��ttd��ks�J�Wd�n1s�0YdS)
Nz�            Uid:	1000	1001	1002	1003
            Gid:	1004	1005	1006	1007
            Threads:	66
            Cpus_allowed:	f
            Cpus_allowed_list:	0-7
            voluntary_ctxt_switches:	12
            nonvoluntary_ctxt_switches:	13r�r��
�Bi�i�i�i�i�i�r�)r�r�r�r�rr�r�r��num_ctx_switches�	voluntary�involuntary�num_threads�uids�realZ	effectiveZsaved�gids�_proc�_get_eligible_cpus�listrG)r�r�r�r{r}r8r8r9�test_status_file_parsing�sz$TestProcess.test_status_file_parsingc	Cs�tjdttjd�d��\}t��}t�d��*|��gks<J�|jsFJ�Wd�n1sZ0YWd�n1sx0YdS)NrFrYrrL)	rr�rGr�rMr�r�r�r�rar8r8r9�!test_net_connections_enametoolong�s
�z-TestProcess.test_net_connections_enametoolongN)r�r�r�rr7r9rr)r*rrBrIrKrNrOrUrVrWrZr_r`rbr
rdrtr�r�r8r8r8r9r1Zs*
"
"
<r1c@s�eZdZdZedd��Zdd�Zdd�Zej	j
edd	�d
d��Zdd
�Z
dd�Zdd�Zdd�Ze�dd��Zdd�Zdd�ZdS)�TestProcessAgainstStatusa/proc/pid/stat and /proc/pid/status have many values in common.
    Whenever possible, psutil uses /proc/pid/stat (it's faster).
    For all those cases we check that the value found in
    /proc/pid/stat (by psutil) matches the one found in
    /proc/pid/status.
    cCst��|_dSrU)r�r��proc)�clsr8r8r9�
setUpClass�sz#TestProcessAgainstStatus.setUpClassc
Cs�tj�d|jj���}|D]j}|��}|�|�r|�d�d}zt|�WWd�St	y�|YWd�S0qt	d|��Wd�n1s�0YdS)Nr��	r�z
can't find %r)
r��_psplatform�	open_textr�r�r~rk�	partitionrnrF)r�Z	linestartrLrMr
r8r8r9�read_status_file�s
�
z)TestProcessAgainstStatus.read_status_filecCs |�d�}|j��|ksJ�dS)NzName:)r�r�r��r�r
r8r8r9�	test_name�s
z"TestProcessAgainstStatus.test_namernr�cCsH|�d�}||�d�d|�d��}|�dd�}|j��|ksDJ�dS)NzState:�(rx�)r}r)r�r��rfindrr�rnr�r8r8r9�test_status�s
z$TestProcessAgainstStatus.test_statuscCs |�d�}|j��|ksJ�dS)NzPPid:)r�r�ror�r8r8r9�	test_ppid�s
z"TestProcessAgainstStatus.test_ppidcCs |�d�}|j��|ksJ�dS)NzThreads:)r�r�rzr�r8r8r9�test_num_threads�s
z)TestProcessAgainstStatus.test_num_threadscCs:|�d�}ttt|��dd���}|j��|ks6J�dS)NzUid:rxr@)r�r�r�rnrCr�r{r�r8r8r9�	test_uids	s
z"TestProcessAgainstStatus.test_uidscCs:|�d�}ttt|��dd���}|j��|ks6J�dS)NzGid:rxr@)r�r�r�rnrCr�r}r�r8r8r9�	test_gids	s
z"TestProcessAgainstStatus.test_gidscCs@|�d�}|j��j|ksJ�|�d�}|j��j|ks<J�dS)Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r�r�rwrxryr�r8r8r9�test_num_ctx_switches	s

z.TestProcessAgainstStatus.test_num_ctx_switchescCsN|�d�}dt|�vrJtt|�d��\}}|j��tt||d��ksJJ�dS)N�Cpus_allowed_list:rrx)	r�r�r�rnrCr�Zcpu_affinityr�rG)r�r
Zmin_Zmax_r8r8r9�test_cpu_affinity	s
z*TestProcessAgainstStatus.test_cpu_affinitycCsf|�d�}t�d��}|jj��Wd�n1s60Ydt|�vrX|jrbJ�n
|jsbJ�dS)Nr�zpsutil._pslinux.per_cpu_timesr)r�rr�r�r~rr�r�)r�r
r�r8r8r9�test_cpu_affinity_eligible_cpus	s
*z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)r�r�r��__doc__�classmethodr�r�r�rr)r*rr�r�r�r�r�rr�r�r�r8r8r8r9r��s


r�c@seZdZdd�ZdS)�	TestUtilscCsPtjddd��.}tj�d�dks$J�|js.J�Wd�n1sB0YdS)Nzos.readlinkz
foo (deleted)r2rQrP)rr�r�r��readlinkr�r�r8r8r9�
test_readlink)	szTestUtils.test_readlinkN)r�r�r�r�r8r8r8r9r�'	sr�)fr��
__future__rrlr-r��globr�rr�r�r*r3r�r:r�r�rZpsutil._compatrrrZpsutil.testsrrr	r
rrr
rrrrrrrrrrrrrrrrr$rrr r!r+r<�dirname�__file__ZHEREr2ZSIOCGIFCONFr`r;r=r�ZEMPTY_TEMPERATURESr:r<r>rTrcrur{r|r��contextmanagerr�r�r)r*r�r�r�r�r�r	r-r8r]r`rdror�r�r�r�r�r�rrr r/r1r�r�r8r8r8r9�<module>s	

91RZI'63AH8CzS