HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //opt/osm/venv/lib64/python3.10/site-packages/psutil/tests/__pycache__/test_linux.cpython-310.pyc
o

=i�Y�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZddlZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%er�ddl&m'Z'ddl&m(Z(ddl&m)Z)ddl&m*Z*ej+�,ej+�-e.��Z/dZ0dZ1dZ2dZ3er�d Z4d!d"�Z5d#d$�Z6d%d&�Z7d'd(�Z8d)d*�Z9d+d,�Z:d-d.�Z;d/d0�Z<d1d2�Z=ej>d3d4��Z?ej>d5d6��Z@e jAjBed7d8�Gd9d:�d:e��ZCe jAjBed7d8�Gd;d<�d<e��ZDe jAjBed7d8�Gd=d>�d>e��ZEe jAjBed7d8�Gd?d@�d@e��ZFe jAjBed7d8�GdAdB�dBe��ZGe jAjBed7d8�GdCdD�dDe��ZHe jAjBed7d8�GdEdF�dFe��ZIe jAjBed7d8�GdGdH�dHe��ZJe jAjBed7d8�GdIdJ�dJe��ZKe jAjBed7d8�GdKdL�dLe��ZLe jAjBed7d8�GdMdN�dNe��ZMe jAjBed7d8�GdOdP�dPe��ZNe jAjBed7d8�GdQdR�dRe��ZOe jAjBed7d8�GdSdT�dTe��ZPe jAjBed7d8�GdUdV�dVe��ZQe jAjBed7d8�GdWdX�dXe��ZRe jAjBed7d8�GdYdZ�dZe��ZSe jAjBed7d8�Gd[d\�d\e��ZTe jAjBed7d8�e jAjBed]d8�Gd^d_�d_e���ZUe jAjBed7d8�Gd`da�dae��ZVe jAjBed7d8�Gdbdc�dce��ZWe jAjBed7d8�Gddde�dee��ZXe jAjBed7d8�Gdfdg�dge��ZYe jAjBed7d8�Gdhdi�die��ZZe jAjBed7d8�Gdjdk�dke��Z[dS)lzLinux specific tests.�N)�mock)�LINUX)�AARCH64)�GITHUB_ACTIONS)�GLOBAL_TIMEOUT)�HAS_BATTERY)�HAS_CPU_FREQ)�HAS_GETLOADAVG)�
HAS_RLIMIT)�RISCV64)�TOLERANCE_DISK_USAGE)�TOLERANCE_SYS_MEM)�PsutilTestCase)�
ThreadTask)�
call_until)�pytest)�
reload_module)�retry_on_failure)�safe_rmpath)�sh)�skip_on_not_implemented)�CLOCK_TICKS)�RootFsDeviceFinder)�calculate_avail_vmem)�open_binaryi�i'�i�i�icC�vddl}t|dd�d�}t�tjtj��}t�|�|��tt	�
d|��dd��Wd�S1s4wYdS�Nr��ascii�256s��)�fcntl�bytes�socket�AF_INET�
SOCK_DGRAM�	inet_ntoa�ioctl�fileno�SIOCGIFADDR�struct�pack��ifnamer"�s�r0�E/opt/osm/venv/lib/python3.10/site-packages/psutil/tests/test_linux.py�get_ipv4_addressBs��$�r2cCrr)r"r#r$r%r&r'r(r)�SIOCGIFNETMASKr+r,r-r0r0r1�get_ipv4_netmaskN����$�r4cCrr)r"r#r$r%r&r'r(r)�SIOCGIFBRDADDRr+r,r-r0r0r1�get_ipv4_broadcastZr5r7c	s�td��+}g}|D]}|��}|d|kr|�|�q	t|�dkr(td|����Wd�n1s2wYtt|��D],}||d��fdd�tdt��d�D�}d�|�}t�tj	|�}t�
tj	|�||<q=|S)	Nz/proc/net/if_inet6���rzcould not find interface csg|]
}�||d��qS)�r0)�.0�j�Zunformattedr0r1�
<listcomp>ss�z&get_ipv6_addresses.<locals>.<listcomp>r9�:)�open�split�append�len�
ValueError�range�joinr$�	inet_pton�AF_INET6�	inet_ntop)	r.�fZ
all_fields�line�fields�i�groups�	formatted�packedr0r<r1�get_ipv6_addressesfs(

���

�
rPc	Cs�ddl}t|dd�d�}t�tjtj��'}|�|��tt�	d|��}d�
dd�|dd	�D��dd
�Wd�S1s?wYdS)Nrrrr�cSsg|]}|d�d��qS)�02xr>r0)r:�charr0r0r1r=�sz#get_mac_address.<locals>.<listcomp>�r!r8)r"r#r$r%r&r(r)�
SIOCGIFHWADDRr+r,rE)r.r"r/�infor0r0r1�get_mac_address|s�"$�rWcCsxtddgddid�}|�d�}|D]#}|�d�r4|��\}}}}t�dd�}|t|�t|�t|��Sqtd	|����)
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:
)rr@�
startswith�collections�
namedtuple�intrC)�out�linesrJ�_�total�usedrX�ntr0r0r1�	free_swap�s

�ricCs�tddgddid�}|�d�}|D](}|�d�r9dd	�|��d
d�D�\}}}}t�dd�}||||||�Sqtd
|����)zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rXrYrZr[r\r^ZMemcss�|]}t|�VqdS�N)rb�r:�xr0r0r1�	<genexpr>�s�zfree_physmem.<locals>.<genexpr>��ztotal used free shared outputz#can't find 'Mem' in 'free' output:
)rr@r_r`rarC)rcrdrJrfrgrX�sharedrhr0r0r1�free_physmem�s

"��rqcCsZtddgddid�}|�d�D]}|��}||vr$t|�d�d�Sqtd	|�d
���)N�vmstatz-srZr[r\r^� r�can't find z in 'vmstat' output)rr@�striprbrC)�statrcrJr0r0r1rr�s�rrcCs@tddg���}d|vrt�d�Stttt�d|�	�d���S)NrXz-V�UNKNOWNzcan't determine free versionz\d+r8)
rrur�skip�tuple�maprb�re�findallr@)rcr0r0r1�get_free_version_info�s
r}c#sP���fdd�}t�tjdd|d��}|VWd�dS1s!wYdS)z�Mock open() builtin and forces it to return a certain content
    for a given path. `pairs` is a {"path": "content", ...} dict.
    csD|�vr�|}t|t�rt�|�St�|�S�|g|�Ri|��Srj)�
isinstance�str�io�StringIO�BytesIO)�name�args�kwargs�content��	orig_open�pairsr0r1�	open_mock�s


z$mock_open_content.<locals>.open_mock�
builtins.openT��create�side_effectN�r?r�patch)r�r��mr0r�r1�mock_open_content�s�
"�r�c#sR����fdd�}t�tjdd|d��}|VWd�dS1s"wYdS)zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    cs"|�kr���|g|�Ri|��Srjr0�r�r�r���exc�for_pathr�r0r1r��sz&mock_open_exception.<locals>.open_mockr�Tr�Nr�)r�r�r�r�r0r�r1�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�dSrj)rqrf�psutil�virtual_memory��selfZ	cli_value�psutil_valuer0r0r1�
test_total�s
z-TestSystemVirtualMemoryAgainstFree.test_totalcCs>t�dkr
t�d�St�j}t��j}t||�tksJ�dS)N�r9rrn�free version too old)	r}rrxrqrgr�r��absr
r�r0r0r1�	test_used�s




z,TestSystemVirtualMemoryAgainstFree.test_usedcC�*t�j}t��j}t||�tksJ�dSrj)rqrXr�r�r�r
r�r0r0r1�	test_free��
z,TestSystemVirtualMemoryAgainstFree.test_freecCsVt�}|j}|dkrt�d�St��j}t||�tks)J|�d|�d|j����dS)Nrz%free does not support 'shared' columnrsz 
)	rqrprrxr�r�r�r
�output)r�rX�
free_valuer�r0r0r1�test_shareds

�z.TestSystemVirtualMemoryAgainstFree.test_sharedcCsbtddg�}|�d�}d|dvrt�d�St|d��d�}t��j}t||�t	ks/J�dS)	NrXrYr^�	availablerz(free does not support 'available' columnrnr8)
rr@rrxrbr�r�r�r�r
)r�rcrdr�r�r0r0r1�test_availables


z1TestSystemVirtualMemoryAgainstFree.test_availableN)	�__name__�
__module__�__qualname__r�rr�r�r�r�r0r0r0r1r��s



r�c@sZeZdZdd�Ze�dd��Ze�dd��Ze�dd��Ze�d	d
��Ze�dd��Z	d
S)�$TestSystemVirtualMemoryAgainstVmstatcC�.td�d}t��j}t||�tksJ�dS)Nztotal memory�)rrr�r�rfr�r
�r�Zvmstat_valuer�r0r0r1r�s
z/TestSystemVirtualMemoryAgainstVmstat.test_totalcCsBt�dkr
t�d�Std�d}t��j}t||�tksJ�dS)Nr�r�zused memoryr�)	r}rrxrrr�r�rgr�r
r�r0r0r1r�s




z.TestSystemVirtualMemoryAgainstVmstat.test_usedcCr�)Nzfree memoryr�)rrr�r�rXr�r
r�r0r0r1r�/�
z.TestSystemVirtualMemoryAgainstVmstat.test_freecCr�)Nz
buffer memoryr�)rrr�r��buffersr�r
r�r0r0r1�test_buffers5r�z1TestSystemVirtualMemoryAgainstVmstat.test_bufferscCr�)Nz
active memoryr�)rrr�r��activer�r
r�r0r0r1�test_active;r�z0TestSystemVirtualMemoryAgainstVmstat.test_activecCr�)Nzinactive memoryr�)rrr�r��inactiver�r
r�r0r0r1�
test_inactiveAr�z2TestSystemVirtualMemoryAgainstVmstat.test_inactiveN)
r�r�r�r�rr�r�r�r�r�r0r0r0r1r�s



r�c@sBeZdZdd�Ze�dd��Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSystemVirtualMemoryMocksc	Cs�t�d���}td|i���}tjdd���}t�d�t��}|j	s#J�t
|�dks+J�|d}dt|j�vs8J�d	t|j�vsAJ�d
t|j�vsJJ�dt|j�vsSJ�dt|j�vs\J�d
t|j�vseJ�dt|j�vsnJ�|j
dksuJ�|jdks|J�|jdks�J�|jdks�J�|jdks�J�|jdks�J�|jdks�J�Wd�n1s�wYWd�dSWd�dS1s�wYdS)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�alwaysrnrz#memory stats couldn't be determined�cachedrpr�r�r�r�)�textwrap�dedent�encoder��warnings�catch_warnings�simplefilterr�r��calledrBr�messager�r�r�rpr�r��slab�r�r�r��ws�ret�wr0r0r1�test_warnings_on_missesJs8	�


��"�z4TestSystemVirtualMemoryMocks.test_warnings_on_missescCs�i}td��}|D]}|��}t|d�d||d<q	Wd�n1s&wYt|�}d|vrG|d}t||�|d}|dksIJ�dSdS)Nr�rnr�rs
MemAvailable:�dr)rr@rbrr�)r�ZmemsrIrJrK�a�bZdiff_percentr0r0r1�test_avail_old_percentns
���z3TestSystemVirtualMemoryMocks.test_avail_old_percentc	C�t�d���}td|i��<}tjdd��}t��}Wd�n1s#wY|js-J�|j	dks4J�|d}dt
|j�vsAJ�Wd�dS1sLwYdS)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�rr�r�r0r0r1� test_avail_old_comes_from_kernel~s�
�
�"�z=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernelc	Cr�)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�r0r0r1�test_avail_old_missing_fields�s
�
�
�"�z:TestSystemVirtualMemoryMocks.test_avail_old_missing_fieldsc
Cs�t�d���}td|i��Ttdt��6tjdd�� }t�	�}|j
dks&J�|d}dt|j�vs3J�Wd�n1s=wYWd�n1sLwYWd�dSWd�dS1sdwYdS)	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/zoneinfoTr�r�rr�)
r�r�r�r�r��FileNotFoundErrorr�r�r�r�r�rr�)r�r�r�r�r�r0r0r1�test_avail_old_missing_zoneinfo�s$
�
�����"�z<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfocCs�t�d���}td|i��Q}t��}|jsJ�|jdksJ�|jdks%J�|j	dks,J�|j
dks3J�|jdks:J�|jdksAJ�|j
d	ksHJ�|jd
ksOJ�|jdksVJ�Wd�dS1sawYdS)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�rfrXr�r�rpr�r�r�r�)r�r�r�Zmemr0r0r1�test_virtual_memory_mocked�s 1�2
"�z7TestSystemVirtualMemoryMocks.test_virtual_memory_mockedN)
r�r�r�r�rr�r�r�r�r�r0r0r0r1r�Hs$
r�c@s\eZdZedd��Zdd�Ze�dd��Ze�dd��Zd	d
�Z	dd�Z
d
d�Zdd�ZdS)�TestSystemSwapMemorycCs@td��}|��}Wd�n1swYd|vod|vS)z3Return True if /proc/meminfo provides swap metrics.r�Nz
SwapTotal:z	SwapFree:)r?�read)rI�datar0r0r1�meminfo_has_swap_infos

�z*TestSystemSwapMemory.meminfo_has_swap_infocCr�rj)rirfr��swap_memoryr�r
�r�r�r�r0r0r1r� �
zTestSystemSwapMemory.test_totalcCr�rj)rirgr�r�r�r
r�r0r0r1r�%r�zTestSystemSwapMemory.test_usedcCr�rj)rirXr�r�r�r
r�r0r0r1r�+r�zTestSystemSwapMemory.test_freec	Cs�tjddd��X}tjdd��9}t�d�t��}|jsJ�t|�dks%J�|d}dt	|j
�vs2J�|jdks9J�|jdks@J�Wd�n1sJwYWd�dSWd�dS1sbwYdS)	N�psutil._common.openT�r�r�r�rnrz9'sin' and 'sout' swap memory stats couldn't be determined)
rr�r�r�r�r�r�r�rBrr��sin�sout�r�r�r�r�r�r0r0r1�test_missing_sin_sout1s 

���"�z*TestSystemSwapMemory.test_missing_sin_soutc	Cs�tdt��X}tjdd��9}t�d�t��}|jsJ�t|�dks#J�|d}dt	|j
�vs0J�|jdks7J�|jdks>J�Wd�n1sHwYWd�dSWd�dS1s`wYdS)Nz/proc/vmstatTr�r�rnrzK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)
r�r�r�r�r�r�r�r�rBrr�r�r�r�r0r0r1�test_no_vmstat_mocked@s 

���"�z*TestSystemSwapMemory.test_no_vmstat_mockedcCs�|��s	t�d�St�d��}t��}Wd�n1swY|jr'J�ddlm	}|�
�\}}}}}}}||9}||9}|j|ksGJ�t|j
|�tksRJ�dS)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor)r�rrxrr�r�r�r�Zpsutil._psutil_linuxZ
_psutil_linuxZ
linux_sysinforfr�rXr
)r�r��swapZcextrerfrXZunit_multiplierr0r0r1�test_meminfo_against_sysinfoQs

�
z1TestSystemSwapMemory.test_meminfo_against_sysinfocCsDtddi��}t��|jsJ�Wd�dS1swYdS)Nr��)r�r�r�r��r�r�r0r0r1�#test_emulate_meminfo_has_no_metricsbs"�z8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)
r�r�r��staticmethodr�r�rr�r�r�r�r�r�r0r0r0r1r�s


r�c@�eZdZdd�ZdS)�TestSystemCPUTimescCs�t��j}t�dt��d�d}ttt	|�
d���}|dkr&d|vs%J�nd|vs,J�|dkr7d|vs6J�nd|vs=J�|d	krId
|vsGJ�dSd
|vsOJ�dS)Nz
\d+\.\d+\.\d+�r�.)r����steal)r�r�r!Zguest)�r�rZ
guest_nice)r��	cpu_times�_fieldsr{r|�os�unameryrzrbr@)r�rKZ
kernel_verZkernel_ver_infor0r0r1�test_fieldsrs
zTestSystemCPUTimes.test_fieldsN)r�r�r�r�r0r0r0r1r�p�r�c@s�eZdZejjej�d�dd�dd��Z	ejjej�d�dd�dd	��Z
ejje�d
�dd�dd
��Z
ejje�d�dd�dd��Zdd�ZdS)�TestSystemCPUCountLogical�/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr�cCsntd��}|����}Wd�n1swYdt|�vr3t|�d�d�d}t��|ks5J�dSdS)Nr�-rn)r?r�rurrbr@r��	cpu_count)r�rI�valuer0r0r1�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��|ksJ�dS)NrcSs g|]}t�d|�dur|�qS)zcpu\d+$N)r{�searchrkr0r0r1r=�s zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r��listdirrBr�r)r�Zls�countr0r0r1�test_against_sysdev_cpu_num�s
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablecCs$ttd��}tjdd�|ksJ�dS)Nznproc --allT�Zlogical)rbrr�r)r��numr0r0r1�test_against_nproc�sz,TestSystemCPUCountLogical.test_against_nproc�lscpu�lscpu utility not availablecCs8td�}tdd�|�d�D��}tjdd�|ksJ�dS)N�lscpu -pcSsg|]	}|�d�s|�qS)�#�r_rkr0r0r1r=�sz@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>r^Tr)rrBr@r�r)r�rcrr0r0r1�test_against_lscpu�sz,TestSystemCPUCountLogical.test_against_lscpuc	Cs�ddl}|j��}tjdtd���}|j��|ksJ�|jsJ�tjddd��#}|j��dus0J�|jdks7J�|jdddksBJ�Wd�n1sLwYt	d	d
��}|�
�}Wd�n1sewYt�|�}tjd|dd��}|j��|ks�J�Wd�n1s�wYt
d	di��}|j��|ks�J�|js�J�Wd�n1s�wYWd�dSWd�dS1s�wYdS)
Nrzpsutil._pslinux.os.sysconf�r�r�Tr�r��
/proc/stat�
/proc/cpuinfo�rb��return_valuer�r�)�psutil._pslinux�_pslinuxZcpu_count_logicalrr�rCr�Z
call_countZ	call_argsr?r�r�r�r�)r�r��originalr�rIZcpuinfo_data�	fake_filer0r0r1�test_emulate_fallbacks�s<
�
�
�
����"�z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r�r�r�r�mark�skipifr��path�existsrr
�shutil�whichr
rrr0r0r0r1r�s(�
�
�
�
rc@sTeZdZejje�d�dd�dd��Zejje	�
�dvdd�dd	��Zd
d�ZdS)
�TestSystemCPUCountCoresrrr�cCs\td�}t�}|�d�D]}|�d�s|�d�}|�|d�qtjdd�t|�ks,J�dS)Nrr^r�,rnFr)r�setr@r_�addr�rrB)r�rcZcore_idsrJrKr0r0r1r�s

�z*TestSystemCPUCountCores.test_against_lscpu>�x86_64�i686zx86_64/i686 onlycCshtj��}tjdgd��}tj��}|jsJ�Wd�n1s!wY|dur0||ks2J�dSdS)N�	glob.glob�r)r�r�cpu_count_coresrr�r�)r�Zmeth_1r�Zmeth_2r0r0r1�
test_method_2�s

��z%TestSystemCPUCountCores.test_method_2c	Cs�tjdgd��(}tjddd��}tj��dusJ�Wd�n1s#wYWd�n1s2wY|js<J�|jsAJ�dS)Nr+r,r�Tr�)rr�r�rr-r�)r��m1�m2r0r0r1�test_emulate_none�s���
z)TestSystemCPUCountCores.test_emulate_noneN)
r�r�r�rrr r#r$r�platform�machiner.r1r0r0r0r1r%�s�
	�
r%c@s�eZdZejjedd�ejjedd�dd���Zejjedd�ejjep'e	e
���d�d�dd���Zejjedd�d	d
��Z
ejjedd�dd��Zejjedd�d
d��ZdS)�TestSystemCPUFrequency�
not supportedr�z(aarch64 does not always expose frequencycsV�fdd�}tjj�tjd|dd��t��sJ�Wd�dS1s$wYdS)Nc�|�d�rdS�|�S)N�&/sys/devices/system/cpu/cpufreq/policyFr�r!�Zorig_existsr0r1�path_exists_mock��
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock�os.path.existsT)r�r�)r�r!r"rr�r��cpu_freq)r�r:r0r9r1�test_emulate_use_second_file�s�"�z3TestSystemCPUFrequency.test_emulate_use_second_filez% does not report mhz in /proc/cpuinfocs��fdd�}tjj�zctjd|d��<ttj�t��}|s"J|��|j	dks)J�|j
dks0J�tjdd�D]}|j	dks?J�|j
dksFJ�q6Wd�n1sQwYWttj�tt�dSWttj�tt�dSttj�tt�w)Ncr6)Nz/sys/devices/system/cpu/Frr8�Zos_path_existsr0r1r:r;zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr<r�T�Zpercpu)r�r!r"rr�rr�rr=�max�min)r�r:r��freqr0r?r1�test_emulate_use_cpuinfos*
��

�


�
z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc	s��fdd�}t�tjd|d��Ktjddd��+t��}|jdks#J�|jd	kr/|jd
ks/J�|jd	kr;|jdks;J�Wd�n1sEwYWd�dSWd�dS1s]wYdS)Ncs�|�d�r|�d�rt�d�S|�d�r|�d�rt�d�S|�d�r-|�d�r-t�d�S|dkr6t�d	�S�|g|�Ri|��S)
N�/scaling_cur_freqr7�500000�/scaling_min_freq�600000�/scaling_max_freqs700000rscpu MHz     : 500��endswithr_r�r�r��r�r0r1r�"s�
�
�

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr�rr<Tr,�@@r@���@g�@�r?rr�r�r=�currentrCrB�r�r�rDr0rMr1�test_emulate_data s

���"�z(TestSystemCPUFrequency.test_emulate_datac
s`�fdd�}t�tjd|d���tjddd��wtjdd	d��`tjdd
�}|djdks/J�|djd
kr?|djdks?J�|djd
krO|djdksOJ�|djdksXJ�|djd
krh|djdkshJ�|djd
krx|djdksxJ�Wd�n1s�wYWd�n1s�wYWd�dSWd�dS1s�wYdS)Ncs�|}|�d�r|�d�rt�d�S|�d�r |�d�r t�d�S|�d�r/|�d�r/t�d�S|�d�r>|�d�r>t�d	�S|�d�rM|�d�rMt�d
�S|�d�r\|�d�r\t�d�S|dkret�d
�S�|g|�Ri|��S)NrFz'/sys/devices/system/cpu/cpufreq/policy0s100000rH�200000rJs300000z'/sys/devices/system/cpu/cpufreq/policy1s400000rGrIrs#cpu MHz     : 100
cpu MHz     : 400rK)r�r�r��nrMr0r1r�Bs8�
�
�
�
�
�

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr�rr<Tr,�!psutil._pslinux.cpu_count_logicalr�rAr�Y@r@gi@g�r@rngy@rNrOrPrRr0rMr1�test_emulate_multi_cpu@s2������"�z-TestSystemCPUFrequency.test_emulate_multi_cpuc
s��fdd�}t�tjd|d��Jtjddd��*tjdd	d��t��}|jd
ks+J�Wd�n1s5wYWd�n1sDwYWd�dSWd�dS1s\wYdS)NcsJ|�d�rt�|�d�rt�d�S|dkrt�d�S�|g|�Ri|��S)NrFz/cpuinfo_cur_freqrTrscpu MHz     : 200)rLr�r�r�r�rMr0r1r�vs



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr�rr<Tr,rVrn��)r?rr�r�r=rQrRr0rMr1�%test_emulate_no_scaling_cur_freq_filess
�����"�z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r�r�r�rrr rrr>rr2r3rErSrXrZr0r0r0r1r4�s$��

2r4c@r�)�TestSystemCPUStatscCs*td�}t��j}t||�dksJ�dS)N�
interruptsi�)rrr�Z	cpu_statsr\r�r�r0r0r1�test_interrupts�r�z"TestSystemCPUStats.test_interruptsN)r�r�r�r]r0r0r0r1r[�s	r[c@s&eZdZejjedd�dd��ZdS)�TestLoadAvgr5r�cCs�t��}td��}|����}Wd�n1swYtt|d�|d�dks.J�tt|d�|d�dks>J�tt|d�|d�dksNJ�dS)Nz
/proc/loadavgrrnr�)r��
getloadavgr?r�r@r��float)r�r�rIZ
proc_valuer0r0r1�test_getloadavg�s
�  $zTestLoadAvg.test_getloadavgN)r�r�r�rrr r	rar0r0r0r1r^�sr^c@r�)�TestSystemNetIfAddrscCs�t����D]_\}}|D]X}|jtjkr|jt|�ksJ�q|jtjkrN|jt	|�ks-J�|j
t|�ks6J�|jdurE|jt
|�ksDJ�qt
|�dksMJ�q|jtjkrd|j�d�d}|t|�vsdJ�qqdS)Nz0.0.0.0�%r)r�Znet_if_addrs�items�familyZAF_LINK�addressrWr$r%r2�netmaskr4�	broadcastr7rGr@rP)r�r��addrs�addrrfr0r0r1�test_ips�s 
���zTestSystemNetIfAddrs.test_ipsN)r�r�r�rkr0r0r0r1rb�r�rbc@sTeZdZejje�d�dd�dd��Zdd�Z	ejje�d�dd�dd	��Z
d
S)�TestSystemNetIfStats�ifconfig�ifconfig utility not availabler�c	Cstt����D]1\}}z	td|���}Wn	tyYqw|jd|vks(J|��|jtt�	d|�d�ks7J�qdS)N�	ifconfig ZRUNNINGz(?i)MTU[: ](\d+)r)
r��net_if_statsrdr�RuntimeErrorZisup�mturbr{r|)r�r��statsrcr0r0r1�test_against_ifconfig�s���z*TestSystemNetIfStats.test_against_ifconfigc	Csdt����D])\}}td|�d���}|jt|�����ks J�Wd�n1s*wYqdS)Nz/sys/class/net/z/mtu)r�rprdr?rrrbr�ru)r�r�rsrIr0r0r1�test_mtu�s���zTestSystemNetIfStats.test_mtuc	Cs
d}t����D]s\}}z	td|���}Wn	tyYqwt�d|�}|rNt|���dkrN|d7}t	|�
d����d��}t	|j
�d��}||ksMJ�qt�d|�}|r{t|���dkr{|d7}t	|�
d������}t	|j
�d��}||ks{J�q|s�t�d	�SdS)
Nrrozflags=(\d+)?<(.*?)>r�rnr&z(.*)  MTU:(\d+)  Metric:(\d+)r�zno matches were found)r�rprdrrqr{rrBrMr'�group�lowerr@�flagsrZfail)r�Z
matches_foundr�rsrc�matchZifconfig_flagsZpsutil_flagsr0r0r1�
test_flags�s.��
�zTestSystemNetIfStats.test_flagsN)r�r�r�rrr r#r$rtrurzr0r0r0r1rl�s�
�rlc@s2eZdZejje�d�dd�e�dd���Z	dS)�TestSystemNetIOCountersrmrnr�c	Csdd�}tjddd�}|��D]|\}}z||�}Wn	ty"Yqwt|j|d�dks0J�t|j|d�dks=J�t|j|d	�d
ksJJ�t|j|d�d
ksWJ�t|j	|d�d
ksdJ�t|j
|d�d
ksqJ�t|j|d�d
ks~J�t|j|d�d
ks�J�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)NrozRX packets[: ](\d+)r�packets_recvzTX packets[: ](\d+)�packets_sentzerrors[: ](\d+)�errinrn�erroutzdropped[: ](\d+)�dropin�dropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_sent)rrbr{r|)Znicr�rcr0r0r1rms&����z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernic�nowrapr�i(r�r|r�r}r~�
rr�r�)
r��net_io_countersrdrqr�r�r�r|r}r~rr�r�)r�rmZnior�rsZifconfig_retr0r0r1rts"��z-TestSystemNetIOCounters.test_against_ifconfigN)
r�r�r�rrr r#r$rrtr0r0r0r1r{
s�r{c@s8eZdZejded�ejddd�dd���Zdd	�Zd
S)�TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntoprzpsutil._pslinux.supports_ipv6Fr,c	Csdt�tjtj�� }z|�d�Wn	tyYnwtjdd�Wd�dS1s+wYdS)N)z::1rZinet6��kind)r$rG�SOCK_STREAM�bind�OSErrorr��net_connections)r�Z
supports_ipv6rHr/r0r0r1�test_emulate_ipv6_unsupported@s�"�z6TestSystemNetConnections.test_emulate_ipv6_unsupportedcCsRt�d�}td|i��}tjdd�|jsJ�Wd�dS1s"wYdS)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�r0r0r1�test_emulate_unixKs

"�z*TestSystemNetConnections.test_emulate_unixN)r�r�r�rr�rCr�r�r0r0r0r1r�>s
	r�c@sBeZdZejjeed�dd�e�dd���Z	dd�Z
dd	�Zd
S)�TestSystemDiskPartitions�statvfszos.statvfs() not availabler�cCsvdd�}tjdd�D].}t�|j�}||j�\}}}}|j|ks"J�t|j|�tks-J�t|j|�tks8J�q
dS)NcSs~td|�d����}|�d�}|�d�|�d�}|��dd�\}}}}|dkr+d}t|�t|�t|�}}}||||fS)Nzdf -P -B 1 "�"r^rr9�nonerQ)rrur@�poprb)r!rcrdrJ�devrfrgrXr0r0r1�dfes


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)�all)	r��disk_partitions�
disk_usageZ
mountpointrfr�rXrrg)r�r��part�usagererfrgrXr0r0r1�test_against_df^s�z(TestSystemDiskPartitions.test_against_dfc	Cstd��}|��}Wd�n1swYd|vr+t��D]
}|jdkr*dSq t�d�}tjd|dd��D}tjddgd	��#}t��}|j	sKJ�|j	sPJ�|sTJ�|d
jdks]J�Wd�n1sgwYWd�dSWd�dS1swYdS)Nz/proc/filesystems�zfsz
nodev	zfs
r�Tr�$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3�/r��rwr,r)
r?r�r�r�Zfstyper�r�rr�r�)r�rIr�r�rr/r0r�r0r0r1�test_zfs_fsws6

�
�
��

��"�z$TestSystemDiskPartitions.test_zfs_fsc	Cs�zAtjddd��&}t�t��t��Wd�n1swY|js'J�Wd�n1s1wYWdt_dSWdt_dSdt_w)Nzos.path.realpathz
/non/existentr,�/proc)	rr�r�raisesr�r�r�r��PROCFS_PATHr�r0r0r1�test_emulate_realpath_fail�s�
��
�z3TestSystemDiskPartitions.test_emulate_realpath_failN)r�r�r�rrr �hasattrr�rr�r�r�r0r0r0r1r�\s�r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestSystemDiskIoCountersc	C�d}td|i��qtjddd��Qtjdd�}|jdksJ�|jd	ks%J�|jd
tks.J�|j	dks5J�|j
dks<J�|jd
ksCJ�|jdtksLJ�|j
dksSJ�|jdksZJ�Wd�n1sdwYWd�dSWd�dS1s|wYdS)Nz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12�/proc/diskstats�!psutil._pslinux.is_storage_deviceTr,F�r�rnr�r�r9ror���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�r0r0r1�test_emulate_kernel_2_4�s&���"�z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c	Cr�)Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r�r�Tr,Fr�rnr�r�r9ror�r�r�r�r�r�r0r0r1�test_emulate_kernel_2_6_full�s&���"�z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc	Cstddi��qtjddd��Qtjdd�}|jdksJ�|jd	tks%J�|jd
ks,J�|j	dtks5J�|j
dks<J�|jdksCJ�|jdksJJ�|j
dksQJ�|jdksXJ�Wd�n1sbwYWd�dSWd�dS1szwYdS)
Nr�z   3    1   hda 1 2 3 4r�Tr,Fr�rnr�r�r9r)r�rr�r�r�r�r�r�r�r�r�r�r�r�r�)r�r�r0r0r1�test_emulate_kernel_2_6_limited�s$���"�z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc	Cs�t�d�}td|i��[tjddd��;tjddd�}t|�dks#J�|d	jd
ks,J�|djd
ks5J�|d	j	dks>J�|dj	dksGJ�Wd�n1sQwYWd�dSWd�dS1siwYdS)
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�Fr,T��perdiskr�r��nvme0n1rnZ	nvme0n1p1ro)
r�r�r�rr�r�r�rBr�r�r�r0r0r1�test_emulate_include_partitions�s
���"�z8TestSystemDiskIoCounters.test_emulate_include_partitionsc	Cs,t�d�}td|i��,tjddd��tjddd�}|dus!J�Wd�n1s+wYWd�n1s:wYdd�}t�d�}td|i��>tjdd	|d
��tjddd�}|jdksfJ�|jdksmJ�Wd�n1swwYWd�dSWd�dS1s�wYdS)
Nr�r�r�Fr,r�cS�|dkS)Nr�r0�r�r0r0r1�is_storage_device��zSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr�rnro)	r�r�r�rr�r�r�r�r�)r�r�r�r�r0r0r1�test_emulate_exclude_partitions�s2
����
���"�z8TestSystemDiskIoCounters.test_emulate_exclude_partitionscCshdd�}tjdd�}tjdd|d��tjdd�}Wd�n1s#wYt|�t|�ks2J�dS)NcSr�)Nr�r0r8r0r0r1r"r�z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r��psutil._pslinux.os.path.existsr�)r�r�rr�rB)r�r"ZwprocfsZwsysfsr0r0r1�test_emulate_use_sysfss��z/TestSystemDiskIoCounters.test_emulate_use_sysfsc	Cs�dd�}tjdd|d��*t�t��t��Wd�n1s!wYWd�dSWd�dS1s9wYdS)NcSsdS)NFr0r8r0r0r1r"sz>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr�Tr�)rr�rr��NotImplementedErrorr�r�)r�r"r0r0r1�test_emulate_not_impls�
��"�z.TestSystemDiskIoCounters.test_emulate_not_implN)
r�r�r�r�r�r�r�r�r�r�r0r0r0r1r��s r�c@sleZdZdd�Zdd�Zejjedd�dd��Z	ejje
�d	�d
d�ejjedd�dd���Zd
d�Z
dS)�TestRootFsDeviceFindercCs(t�d�j}t�|�|_t�|�|_dS)Nr�)r�rv�st_dev�major�minor)r�r�r0r0r1�setUp&szTestRootFsDeviceFinder.setUpcCs�t�}tj�d�r|��nt�t��|��Wd�n1s"wYtj�d|j�d|j	�d��r;|�
�nt�t��|�
�Wd�n1sOwY|��dS�Nz/proc/partitionsz/sys/dev/block/r>z/uevent)rr�r!r"�ask_proc_partitionsrr�r�r�r��ask_sys_dev_block�ask_sys_class_block)r��finderr0r0r1�test_call_methods+s

�

�z(TestRootFsDeviceFinder.test_call_methodszunsupported on GITHUB_ACTIONSr�cCs�t�}|��dusJ�d}}}tj�d�r|��}tj�d|j�d|j�d��r.|��}|�	�}|p7|p7|}|rB|rB||ksBJ�|rL|rL||ksLJ�|rV|rX||ksZJ�dSdSdSr�)
r�findr�r!r"r�r�r�r�r�)r�r�r�r��c�baser0r0r1�test_comparisons9s"�z'TestRootFsDeviceFinder.test_comparisonsZfindmntzfindmnt utility not availablecCs"t���}td�}||ksJ�dS)Nzfindmnt -o SOURCE -rn /)rr�r)r�r�Z
findmnt_valuer0r0r1�test_against_findmntMs
z+TestRootFsDeviceFinder.test_against_findmntcCs�tjddgd��7}t��d}|jsJ�ts(|jdksJ�|jt���ks'J�n|jdks/J�Wd�dSWd�dS1sBwYdS)Nr�)�	/dev/rootr�Zext4r�r,rr�)	rr�r�r�r�rZdevicerr�)r�r�r�r0r0r1�test_disk_partitions_mockedVs�
�"�z2TestRootFsDeviceFinder.test_disk_partitions_mockedN)r�r�r�r�r�rrr rr�r#r$r�r�r0r0r0r1r�$s
�r�c@s`eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	�e
jjd
d�dd���Z
dd�ZdS)�TestMisccCs(td�}t��}t|�t|�ksJ�dS)Nz	boot time)rrr��	boot_timerbr�r0r0r1�test_boot_timekszTestMisc.test_boot_timec	sJ|��}t�|�ttj�|d�d��}|�d�|�d�|�d�Wd�n1s-wY�z]t��fdd�}tjd|d	���9t	t
�t�t
��t
��Wd�n1s]wYt�t
��t
jd
d�Wd�n1sxwYt�t
��t
��Wd�n1s�wYt�t
��t
jd
d�Wd�n1s�wYt�t
��t
��Wd�n1s�wYt�t
��t
jd
d�Wd�n1s�wY|t
_t
��dks�J�tt
���dks�J�t
jd
d�}t|�dk�s	J�t
jd
d�}ttt|��dk�sJ�ttj�|d�d��}|�d
�|�d�|�d�Wd�n	1�s@wYt
��dk�sNJ�tt
jd
d��dk�s[J�tt
���dk�sfJ�tttt
jd
d���dk�svJ�Wd�n	1�s�wYWt�|�t	t
�n
t�|�t	t
�wt
jdk�s�J�dS)Nrvr�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�rt��|g|�Ri|��S)Nr�)r_r�r�rMr0r1r�|s
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr�rTrArzcpu   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��mkdirr?r!rE�writerr�rr�rr�r�r��cpu_percent�cpu_times_percentr��sumrzr#�rmtree)r�Z	my_procfsrIr�Zper_cpu_percentZper_cpu_times_percentr0rMr1�test_no_procfs_on_importpsj


�
��
��
��

�"��
+

�
z!TestMisc.test_no_procfs_on_importcCsbt�d���}td|i��!}t��|jsJ�tjdd�t��tjdd�Wd�n1s1wYt�d���}td|i��dt��}|jsMJ�tjdd�}t��}tjdd�}|dkscJ�t|�dkskJ�t|�dkssJ�t|�dks{J�tt	t|��dks�J�tt	t|��dks�J�|j
dks�J�|jdks�J�Wd�dS1s�wYdS)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
            rTrAz~            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
            rrW)r�r�r�r�r�r�r�r�r�rzr��user)r�r�r�r�Zcpu_percent_percpur�Zcpu_times_percent_percpur0r0r1�test_cpu_steal_decrease�s8�
�
�
"�z TestMisc.test_cpu_steal_decreasec	Csrtjddd��(}t�t��
tj��Wd�n1swY|js'J�Wd�dS1s2wYdS)Nr�Tr�)	rr�rr�rqr�rr�r�r�r0r0r1�test_boot_time_mocked�s�"�zTestMisc.test_boot_time_mockedcCs t��D]	}|jdvs
J�qdS)N>z:0z:0.0)r�Zusers�host)r�r�r0r0r1�
test_users�s�zTestMisc.test_userscCs|��}t�|�z�|t_t�t��t��Wd�n1s!wYt�t��t�	�Wd�n1s:wYt�t��tj	dd�Wd�n1sUwYt�t��t�
�Wd�n1snwYt�t��t��Wd�n1s�wYt�t��t��Wd�n1s�wYt�t��t�
�Wd�n1s�wYt�t��t��Wd�n1s�wYt�tj��t��Wd�n1s�wYWdt_dSWdt_dSdt_w)NTrAr�)r�r�r�r�r�rr�r�r�r�r�r�r�rpr��
NoSuchProcess�Process)r�Ztdirr0r0r1�test_procfs_path�sD

�
��
�
�
�
�
�
�
�zTestMisc.test_procfs_path�serialr�cCs�t��}t|���}t��:|��}t|�|dksJ�t|dd�d�dj}|j|ks.J�t�|�}|��|t�	�vs?J�Wd�dS1sJwYdS)NrncSs|jSrj)�id)rlr0r0r1�<lambda>sz)TestMisc.test_issue_687.<locals>.<lambda>)�key)
r�r�rB�threadsr�sortedr��pid�as_dictZpids)r��pZnthreadsr��tid�ptr0r0r1�test_issue_687�s	
"�zTestMisc.test_issue_687cCsNtddi��}t�t���sJ�|jsJ�Wd�dS1s wYdS)Nz/proc/%s/statusrQ)r�r�Z
pid_existsr��getpidr�r�r0r0r1�test_pid_exists_no_proc_statuss"�z'TestMisc.test_pid_exists_no_proc_statusN)r�r�r�r�r�r�r�r�r�rrrZxdist_groupr�r�r0r0r0r1r�isA'r�z
no batteryc@sleZdZejje�d�dd�dd��Zdd�Z	dd	�Z
d
d�Zdd
�Zdd�Z
dd�Zdd�Zdd�ZdS)�TestSensorsBatteryZacpizacpi utility not availabler�cCsHtd�}t|�d�d���dd��}t��j}t||�dks"J�dS)Nzacpi -br&rnrcrQ)	rrbr@ru�replacer��sensors_battery�percentr�)r�rcZ
acpi_valuer�r0r0r1�test_percent#s
zTestSensorsBattery.test_percentcst�fdd�}t�tjd|d��!}t��jdusJ�t��jtjks#J�|js(J�Wd�dS1s3wYdS)Nc�*|�d�r
t�d�S�|g|�Ri|��S)N�z
AC0/onlinez	AC/online�1�rLr�r�r�rMr0r1r�.�

z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr�rT)	r?rr�r�r�
power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDr��r�r�r�r0rMr1�test_emulate_power_plugged,s�"�z-TestSensorsBattery.test_emulate_power_pluggedc�`�fdd�}t�tjd|d��}t��jdusJ�|jsJ�Wd�dS1s)wYdS)Nc�8|�d�rt�|�d�rt�d�S�|g|�Ri|��S)Nr�/statusZcharging�rLr�r�r�r�rMr0r1r�@�



zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr�rT�r?rr�r�rr
r�rr0rMr1�test_emulate_power_plugged_2=�"�z/TestSensorsBattery.test_emulate_power_plugged_2cr
)Ncr)Nr�0rr�rMr0r1r�Or	zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr�rFrrr0rMr1�test_emulate_power_not_pluggedMs"�z1TestSensorsBattery.test_emulate_power_not_pluggedcr
)Ncr)NrrZdischargingrr�rMr0r1r�]rzFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr�rFrrr0rMr1� test_emulate_power_not_plugged_2Zrz3TestSensorsBattery.test_emulate_power_not_plugged_2cs`�fdd�}t�tjd|d��}t��jdusJ�|jsJ�Wd�dS1s)wYdS)Ncr)N)�"/sys/class/power_supply/AC0/online�!/sys/class/power_supply/AC/online�#/sys/class/power_supply/BAT0/statuss???)r_r�r�r�r�rMr0r1r�ms



zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr�rrrr0rMr1�test_emulate_power_undeterminedjs"�z2TestSensorsBattery.test_emulate_power_undeterminedcCsNtddi��}t��jdksJ�|jsJ�Wd�dS1s wYdS)N�(/sys/class/power_supply/BAT0/energy_fullrr)r�r�rrr�r�r0r0r1�test_emulate_energy_full_0}s�"�z-TestSensorsBattery.test_emulate_energy_full_0c
Cs�tdt��Etdt��'tddi��t��jdksJ�Wd�n1s&wYWd�n1s5wYWd�dSWd�dS1sMwYdS)Nrz(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys88�X)r�r�r�r�rr�r�r0r0r1�"test_emulate_energy_full_not_avail�s$�������"�z5TestSensorsBattery.test_emulate_energy_full_not_availc
Cs�tdt��Dtdt��&tdt��t��jdusJ�Wd�n1s%wYWd�n1s4wYWd�dSWd�dS1sLwYdS)Nrrr)r�r�r�rr
rr0r0r1�test_emulate_no_power�s"�������"�z(TestSensorsBattery.test_emulate_no_powerN)r�r�r�rrr r#r$rrrrrrrr r!r0r0r0r1r s�

rc@r�)�TestSensorsBatteryEmulatedc	s��fdd�}t�tjddgd��'}tjd|d��}t��dus!J�Wd�n1s+wYWd�n1s:wY|jsDJ�|jsIJ�dS)Nc�R|�d�r
t�d�S|�d�rt�d�S|�d�rt�d�S�|g|�Ri|��S)Nz/energy_nowZ60000000z
/power_now�0z/energy_fullZ60000001�rLr�r�r�rMr0r1r���





z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockz
os.listdirZBAT0r,r�r)r?rr�r�rr�)r�r�ZmlistdirZmopenr0rMr1�test_it�s
���
z"TestSensorsBatteryEmulated.test_itN)r�r�r�r'r0r0r0r1r"�r�r"c@seZdZdd�Zdd�ZdS)�TestSensorsTemperaturesc	s��fdd�}t�tjd|d��Mtjddgd��,t��dd	}|jd
ks(J�|jdks/J�|jdks6J�|jd
ks=J�Wd�n1sGwYWd�dSWd�dS1s_wYdS)Ncsz|�d�r
t�d�S|�d�rt�d�S|�d�rt�d�S|�d�r(t�d�S|�d	�r2t�d
�S�|g|�Ri|��S)N�/namer�z/temp1_label�labelz/temp1_input�30000z
/temp1_maxs40000z/temp1_crit�50000)rLr�r�r�r�rMr0r1r��s









zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr�rr+z/sys/class/hwmon/hwmon0/temp1r,r�rr*�>@gD@�I@�	r?rr�r�Zsensors_temperaturesr*rQ�high�critical)r�r��tempr0rMr1�test_emulate_class_hwmon�s���"�z0TestSensorsTemperatures.test_emulate_class_hwmonc	s��fdd�}dd�}t�tjd|d��Mtjdd|d	��,t��d
d}|jdks,J�|jd
ks3J�|jdks:J�|jdksAJ�Wd�n1sKwYWd�dSWd�dS1scwYdS)Ncsf|�d�r
t�d�S|�d�rt�d�S|�d�rt�d�S|�d�r(t�d�S�|g|�Ri|��S)	NZ0_tempr,r2r+Z0_typer1�typer�)rLr�r�r�r�rMr0r1r��s







zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockcSs.|dvrgS|dkr
dgS|dkrddgSgS)N>z/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_tempr0r8r0r0r1�	glob_mock�s�zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr�rr+Tr�r�rrQr-r.r/)r�r�r5r2r0rMr1�test_emulate_class_thermal�s��"�z2TestSensorsTemperatures.test_emulate_class_thermalN)r�r�r�r3r6r0r0r0r1r(�sr(c@r�)�TestSensorsFansc	s��fdd�}t�tjd|d��?tjddgd��t��dd	}|jd
ks(J�|jdks/J�Wd�n1s9wYWd�dSWd�dS1sQwYdS)Ncr#)Nr)r�z/fan1_labelr*z/fan1_input�2000r%r�rMr0r1r��r&z4TestSensorsFans.test_emulate_data.<locals>.open_mockr�rr+z/sys/class/hwmon/hwmon2/fan1r,r�rr*i�)r?rr�r�Zsensors_fansr*rQ)r�r��fanr0rMr1rS�s
���"�z!TestSensorsFans.test_emulate_dataN)r�r�r�rSr0r0r0r1r7�r�r7c@s�eZdZe�dd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zejjed!d"�d#d$��Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-S).�TestProcesscCs�|��}tj�|j���\}}}t�|j�jdd�}t|tdd�|D���dks+J�t|tdd�|D���dks<J�t|tdd�|D���dksMJ�dS)NF)�groupedcss�|]	}|j|jVqdSrj)Z
private_dirtyZ
private_cleanrkr0r0r1rm s�z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>r�cs��|]}|jVqdSrj)�pssrkr0r0r1rm#��csr<rj)r�rkr0r0r1rm$r>)	Z
spawn_subprocr�rr�r��_parse_smaps�memory_mapsr�r�)r�Zsproc�ussr=r��mapsr0r0r1�test_parse_smaps_vs_memory_mapss�"&z+TestProcess.test_parse_smaps_vs_memory_mapscCs�t�d���}tdt���d�|i��/}tj�t���}|�	�\}}}|j
s(J�|dks.J�|dks4J�|dks:J�Wd�dS1sEwYdS)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/�/smapsilr�i<)r�r�r�r�r�r�r�rr�r?r�)r�r�r�r�rAr=r�r0r0r1�test_parse_smaps_mocked&s�
"�z#TestProcess.test_parse_smaps_mockedcCsdd�}|��}t|d��||�jdksJ�Wd�n1s!wYt|��||�jdks4J�Wd�n1s>wYt|d��||�jdksRJ�Wd�n1s\wYt|d��||�jdkspJ�Wd�n1szwYt|d��||�jdks�J�Wd�n1s�wYt|d��||�jdks�J�Wd�n1s�wYt|�t|d	��||�jdks�J�Wd�n1s�wYt|�t|d
��||�jdks�J�Wd�dS1s�wYdS)NcSsPt��}t��t}	|��D]}|jtj�|�kr|St��|kr&nqqrj)	r�r��timer�
open_filesr!r��abspathrq)�fnamer�Z	giveup_at�filer0r0r1�
get_test_fileHs��z7TestProcess.test_open_files_mode.<locals>.get_test_filer��rr�zr+zw+za+rlzx+)r�r?�moder)r�rLZtestfnr0r0r1�test_open_files_modeGs8�
������"�z TestProcess.test_open_files_modec	s�t�������t|��d��ft��fdd��tjdtd��}���gks)J�|j	s.J�Wd�n1s8wYtjdt
tjd�d��}���gksQJ�|j	sVJ�Wd�n1s`wYWd�dSWd�dS1sxwYdS)Nr�c�t����t��kSrj�rBrHr0��filesr�r0r1r�o�z7TestProcess.test_open_files_file_gone.<locals>.<lambda>�psutil._pslinux.os.readlinkrrQ)
r�r�rHr?r�rrr�r�r�r��errno�EINVALr�r0rRr1�test_open_files_file_gonehs.��
���"�z%TestProcess.test_open_files_file_gonec	s�t�������t|��d��>t��fdd��tjdtd��}���gks)J�|j	s.J�Wd�n1s8wYWd�dSWd�dS1sPwYdS)Nr�crPrjrQr0rRr0r1r��rTz5TestProcess.test_open_files_fd_gone.<locals>.<lambda>r�r)
r�r�rHr?r�rrr�r�r�r�r0rRr1�test_open_files_fd_gones���"�z#TestProcess.test_open_files_fd_gonec
s�t�������t|��d��Yt��fdd��d}tj|tt	j
d�d��*}t�d�����gks5J�|js:J�Wd�n1sDwYWd�n1sSwYWd�dSWd�dS1skwYdS)Nr�crPrjrQr0rRr0r1r��rTz:TestProcess.test_open_files_enametoolong.<locals>.<lambda>rUrQr�psutil._pslinux.debug)r�r�rHr?r�rrr�r�rV�ENAMETOOLONGr�)r�Zpatch_pointr�r0rRr1�test_open_files_enametoolong�s$�����"�z(TestProcess.test_open_files_enametoolongcCsZtjdid��}tj�t�����dusJ�|jsJ�Wd�dS1s&wYdS)Nz)psutil._pslinux._psposix.get_terminal_mapr,)	rr�r�rr�r�r�Zterminalr�r�r0r0r1�test_terminal_mocked�s�"�z TestProcess.test_terminal_mockedcC�t��}t�d�}tjd|dd��}|��ddgksJ�|js!J�Wd�n1s+wYt�d�}tjd|dd��}|��gd�ksHJ�|jsMJ�Wd�dS1sXwYdS)	Nzfoobarr�Tr�foo�barz	foobar�r_r`rQ�r�r�r�r�rr�Zcmdliner��r�r�rr�r0r0r1�test_cmdline_mocked��"
��
�"�zTestProcess.test_cmdline_mockedcCr^)	Nzfoo bar r�Trr_r`z	foo bar  rarbrcr0r0r1�test_cmdline_spaces_mocked�rez&TestProcess.test_cmdline_spaces_mockedcCsft��}t�d�}tjd|dd��}|��ddgksJ�|js!J�Wd�dS1s,wYdS)Nzfoo barr�Trr_r`rbrcr0r0r1�test_cmdline_mixed_separators�s
�"�z)TestProcess.test_cmdline_mixed_separatorscCs\tjddd��t����dksJ�t����dksJ�Wd�dS1s'wYdS)NrUz/home/foo (deleted)r,z	/home/foo)rr�r�r��exe�cwdrr0r0r1�!test_readlink_path_deleted_mocked�s�"�z-TestProcess.test_readlink_path_deleted_mockedc	s��fdd�}t�tjd|d��}t����}|jsJ�|gks!J�Wd�n1s+wY�fdd�}tjd|d��-t�tj	��t����Wd�n1sUwYWd�dSWd�dS1smwYdS)Nc�0|�dt���d��r
t��|g|�Ri|��S�NrDz/task)r_r�r�r�r�rMr0r1�open_mock_1��z4TestProcess.test_threads_mocked.<locals>.open_mock_1r�rcrkrl)r_r�r��PermissionErrorr�rMr0r1�open_mock_2�rnz4TestProcess.test_threads_mocked.<locals>.open_mock_2)
r?rr�r�r�r�r�rr�ZAccessDenied)r�rmr�r�rpr0rMr1�test_threads_mocked�s
���"�zTestProcess.test_threads_mockedc	Cs�tjdtd��9}tjdgd��t����}|jsJ�|dks!J�Wd�n1s+wYWd�dSWd�dS1sCwYdS)N�psutil._pslinux.readlinkrzpsutil._pslinux.Process.cmdliner,rQ)rr�r�r�r�rhr��r�r�r�r0r0r1�test_exe_mocked�s��
��"�zTestProcess.test_exe_mockedcCsVtjdtd��}t����}|jsJ�|dksJ�Wd�dS1s$wYdS)NrrrrQ)rr�r�r�r�rir�rsr0r0r1�test_cwd_mockeds�
"�zTestProcess.test_cwd_mockedc	Cs�tdt���d�t��+}t��}t�t��|��Wd�n1s$wY|j	s.J�Wd�dS1s9wYdS)NrDrE)
r�r�r�r�r�r�rr�r@r��r�r�r�r0r0r1�test_issue_1014
s�
�"�zTestProcess.test_issue_1014c
Cs�t��}tdt���d�t��Btjddd��"t�	tj
��|��Wd�n1s-wYWd�n1s<wYWd�dSWd�dS1sTwYdS)NrDz/statmr<Fr,)r�r�r�r�r�r�rr�rr�r�Zmemory_info�r�r�r0r0r1�test_issue_2418s�
����"�zTestProcess.test_issue_2418r5r�c
Cs�tjdttjd�d��C}tjddd��,}t��}|��t�	tj
��}|�tj�Wd�n1s3wYWd�n1sBwYWd�n1sQwY|j
s[J�|j
s`J�|jj|jksiJ�|jj|��kssJ�dS)Nzresource.prlimitrQrz"psutil._pslinux.Process._is_zombieTr,)rr�r�rVZENOSYSr�r�r�rr�Z
ZombieProcessZrlimitZ
RLIMIT_NOFILEr�rr�)r�r/r0r��cmr0r0r1�test_rlimit_zombies*�������


zTestProcess.test_rlimit_zombiecCsgd�}d�|���}tdt���d�|i��mt��}|��dks$J�|��tj	ks-J�|�
�dks5J�|��dtt�
�ksCJ�|��}|jdtksPJ�|jd	tksYJ�|jd
tksbJ�|jdtkskJ�|jdtkstJ�|��dks|J�Wd�dS1s�wYdS)
N)*r$z(cat)�Z�1r$r$r$r$r$r$r$r$r$�2�3�4�5r$r$r$r$�6r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r�r$r$�7rsrDz/stat�catrnr�r�r�r9ror�)rEr�r�r�r�r�r�r��statusZ
STATUS_ZOMBIE�ppid�create_timerr�r�r��system�
children_user�children_systemZiowaitZcpu_num)r�r�r�r��cpur0r0r1�test_stat_file_parsing2s ,"�z"TestProcess.test_stat_file_parsingcCst�d���}tdt���d�|i��ft��}|��j	dks!J�|��j
dks*J�|��dks2J�|��}|j
dks=J�|jdksDJ�|jd	ksKJ�|��}|j
d
ksVJ�|jdks]J�|jdksdJ�|j��ttd
��ksqJ�Wd�dS1s|wYdS)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:	13rDr��
�Bi�i�i�i�i�i�r�)r�r�r�r�r�r�r�r��num_ctx_switches�	voluntary�involuntary�num_threads�uids�realZ	effective�saved�gids�_proc�_get_eligible_cpus�listrD)r�r�r�r�r�r0r0r1�test_status_file_parsingns$�"�z$TestProcess.test_status_file_parsingc	Cs�tjdttjd�d��7}t��}t�d��|��gksJ�|js#J�Wd�n1s-wYWd�dSWd�dS1sEwYdS)NrUrQrrZ)	rr�r�rVr[r�r�r�r�rvr0r0r1�!test_net_connections_enametoolong�s
���"�z-TestProcess.test_net_connections_enametoolongcCsFt��}|j��|jjdd�ksJ�|��d|jjdd�ks!J�dS)NT)�	monotonicrn)r�r�r�r�Z
_get_identrxr0r0r1�test_create_time_monotonic�s"z&TestProcess.test_create_time_monotonicN)r�r�r�rrCrFrOrXrYr\r]rdrfrgrjrqrtrurwryrrr r
r{r�r�r�r�r0r0r0r1r:s0
!!		
<
r:c@sreZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Ze
�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��|_dSrj)r�r��proc)�clsr0r0r1�
setUpClass�sz#TestProcessAgainstStatus.setUpClassc
Cs�tj�d|jj�d���@}|D]5}|��}|�|�rD|�d�d}zt|�WWd�St	yC|YWd�Swqt	d|����1sOwYdS)NrDr�	r�rt)
r��_psplatform�	open_textr�r�rur_�	partitionrbrC)r�Z	linestartrIrJrr0r0r1�read_status_file�s$�
�	
�	��z)TestProcessAgainstStatus.read_status_filecC� |�d�}|j��|ksJ�dS)NzName:)r�r�r��r�rr0r0r1�	test_name��
z"TestProcessAgainstStatus.test_namecCsH|�d�}||�d�d|�d��}|�dd�}|j��|ks"J�dS)NzState:�(rn�)rsr)r�r��rfindrr�r�r�r0r0r1�test_status�s
z$TestProcessAgainstStatus.test_statuscCr�)NzPPid:)r�r�r�r�r0r0r1�	test_ppid�r�z"TestProcessAgainstStatus.test_ppidcCr�)NzThreads:)r�r�r�r�r0r0r1�test_num_threads�r�z)TestProcessAgainstStatus.test_num_threadscC�:|�d�}ttt|��dd���}|j��|ksJ�dS)NzUid:rnr9)r�ryrzrbr@r�r�r�r0r0r1�	test_uids��
z"TestProcessAgainstStatus.test_uidscCr�)NzGid:rnr9)r�ryrzrbr@r�r�r�r0r0r1�	test_gids�r�z"TestProcessAgainstStatus.test_gidscCs@|�d�}|j��j|ksJ�|�d�}|j��j|ksJ�dS)Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r�r�r�r�r�r�r0r0r1�test_num_ctx_switches�s

z.TestProcessAgainstStatus.test_num_ctx_switchescCsR|�d�}dt|�vr%tt|�d��\}}|j��tt||d��ks'J�dSdS)N�Cpus_allowed_list:rrn)	r�rrzrbr@r�Zcpu_affinityr�rD)r�rZmin_Zmax_r0r0r1�test_cpu_affinity�s
 �z*TestProcessAgainstStatus.test_cpu_affinitycCsh|�d�}t�d��}|jj��Wd�n1swYdt|�vr-|jr+J�dS|js2J�dS)Nr�zpsutil._pslinux.per_cpu_timesr)r�rr�r�r�r�rr�)r�rr�r0r0r1�test_cpu_affinity_eligible_cpus�s
�z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)r�r�r��__doc__�classmethodr�r�r�r�r�r�r�r�rr�r�r�r0r0r0r1r��s

r�c@r�)�	TestUtilscCsRtjddd��}tj�d�dksJ�|jsJ�Wd�dS1s"wYdS)Nzos.readlinkz
foo (deleted)r,r`r_)rr�r�r��readlinkr�r�r0r0r1�
test_readlink�s"�zTestUtils.test_readlinkN)r�r�r�r�r0r0r0r1r��r�r�)\r�r`�
contextlibrVr�r�r2r{r#r$r+r�rGr�Zunittestrr�rZpsutil.testsrrrrrr	r
rrr
rrrrrrrrrrrrrrr!rI�dirname�__file__ZHEREr*rUr3r6r�r2r4r7rPrWrirqrrr}�contextmanagerr�r�rr r�r�r�r�r�rr%r4r[r^rbrlr{r�r�r�r�r�rr"r(r7r:r�r�r0r0r0r1�<module>s�	

4/OXI '63?D7BR