
    /h?[                       d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& erddl'm(Z( ddl'm)Z) ddl'm*Z* ddl'm+Z+ ej,        -                    ej,        .                    e/                    Z0dZ1dZ2dZ3d Z4erd!Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>ej?        d+             Z@ej?        d,             ZAe!jB        C                    e d-.           G d/ d0e                      ZDe!jB        C                    e d-.           G d1 d2e                      ZEe!jB        C                    e d-.           G d3 d4e                      ZFe!jB        C                    e d-.           G d5 d6e                      ZGe!jB        C                    e d-.           G d7 d8e                      ZHe!jB        C                    e d-.           G d9 d:e                      ZIe!jB        C                    e d-.           G d; d<e                      ZJe!jB        C                    e d-.           G d= d>e                      ZKe!jB        C                    e d-.           G d? d@e                      ZLe!jB        C                    e d-.           G dA dBe                      ZMe!jB        C                    e d-.           G dC dDe                      ZNe!jB        C                    e d-.           G dE dFe                      ZOe!jB        C                    e d-.           G dG dHe                      ZPe!jB        C                    e d-.           G dI dJe                      ZQe!jB        C                    e d-.           G dK dLe                      ZRe!jB        C                    e d-.           G dM dNe                      ZSe!jB        C                    e d-.           G dO dPe                      ZTe!jB        C                    e d-.           G dQ dRe                      ZUe!jB        C                    e d-.          e!jB        C                    e dS.           G dT dUe                                  ZVe!jB        C                    e d-.           G dV dWe                      ZWe!jB        C                    e d-.           G dX dYe                      ZXe!jB        C                    e d-.           G dZ d[e                      ZYe!jB        C                    e d-.           G d\ d]e                      ZZe!jB        C                    e d-.           G d^ d_e                      Z[e!jB        C                    e d-.           G d` dae                      Z\dS )bzLinux specific tests.    N)mock)LINUX)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)PYTEST_PARALLEL)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  i   c                 v   dd l }t          | d d         d          } t          j        t          j        t          j                  5 }t          j        |                    |                                t          t          j
        d|                     dd                   cd d d            S # 1 swxY w Y   d S Nr      ascii256s      )fcntlbytessocketAF_INET
SOCK_DGRAM	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer$   ss      J/var/www/html/venv/lib/python3.11/site-packages/psutil/tests/test_linux.pyget_ipv4_addressr3   D   s    LLL6#2#;((F	v~v'8	9	9 
QKK

KVV1L1LMM2
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   AB..B25B2c                 v   dd l }t          | d d         d          } t          j        t          j        t          j                  5 }t          j        |                    |                                t          t          j
        d|                     dd                   cd d d            S # 1 swxY w Y   d S r   )r$   r%   r&   r'   r(   r)   r*   r+   SIOCGIFNETMASKr-   r.   r/   s      r2   get_ipv4_netmaskr7   P       LLL6#2#;((F	v~v'8	9	9 
QKK

NFK,G,G e
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
r4   c                 v   dd l }t          | d d         d          } t          j        t          j        t          j                  5 }t          j        |                    |                                t          t          j
        d|                     dd                   cd d d            S # 1 swxY w Y   d S r   )r$   r%   r&   r'   r(   r)   r*   r+   SIOCGIFBRDADDRr-   r.   r/   s      r2   get_ipv4_broadcastr;   \   r8   r4   c                 t  	 t          d          5 }g }|D ]7}|                                }|d         | k    r|                    |           8t          |          dk    rt	          d|           	 d d d            n# 1 swxY w Y   t          t          |                    D ]}||         d         		fdt          dt          	          d          D             }d                    |          }t          j        t          j	        |          }t          j
        t          j	        |          ||<   |S )Nz/proc/net/if_inet6r   zcould not find interface c                 *    g | ]}||d z            S )    ).0junformatteds     r2   
<listcomp>z&get_ipv6_addresses.<locals>.<listcomp>u   s3     
 
 
'(KAE	"
 
 
    r?   :)opensplitappendlen
ValueErrorrangejoinr&   	inet_ptonAF_INET6	inet_ntop)
r0   f
all_fieldslinefieldsigroups	formattedpackedrC   s
            @r2   get_ipv6_addressesrY   h   s   	"	#	# Eq
 	* 	*DZZ\\FbzV##!!&)))z??aCCCDDD  E E E E E E E E E E E E E E E 3z??## B B mA&
 
 
 
,1!S5E5Eq,I,I
 
 
 HHV$$	!&/9==(&AA
1s   A"B  BBc           	         dd l }t          | d d         d          } t          j        t          j        t          j                  5 }|                    |                                t          t          j	        d|                     }d
                    d |dd         D                       d d	         cd d d            S # 1 swxY w Y   d S )
Nr   r   r    r!    c                     g | ]}|d d	S )02xrF   r@   )rA   chars     r2   rD   z#get_mac_address.<locals>.<listcomp>   s     ???44???rE      r#   r=   )r$   r%   r&   r'   r(   r*   r+   SIOCGIFHWADDRr-   r.   rM   )r0   r$   r1   infos       r2   get_mac_addressrb   ~   s   LLL6#2#;((F	v~v'8	9	9 FQ{{HHJJv{66'B'B
 
 ww??42;???@@"E	F F F F F F F F F F F F F F F F F Fs   A0CC
Cc                  v   t          ddgddi          } |                     d          }|D ]{}|                    d          rd|                                \  }}}}t          j        dd          } |t          |          t          |          t          |                    c S |t          d	|            )
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
Swapztotal used freez$can't find 'Swap' in 'free' output:
)r   rH   
startswithcollections
namedtupleintrK   )outlinesrS   _totalusedrd   nts           r2   	free_swaprv      s     fd^&)!4
5
5
5CIIdOOE 8 8??6"" 	8#'::<< AudD'0ABBB2c%jj#d))SYY77777	8 BSBB
C
CCrE   c                  P   t          ddgddi          } |                     d          }|D ]h}|                    d          rQd |                                d	d
         D             \  }}}}t          j        dd          } ||||||           c S it          d|            )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rd   re   rf   rg   rh   rj   Memc              3   4   K   | ]}t          |          V  d S N)ro   rA   xs     r2   	<genexpr>zfree_physmem.<locals>.<genexpr>   s(      (K(KAQ(K(K(K(K(K(KrE         ztotal used free shared outputz#can't find 'Mem' in 'free' output:
)r   rH   rl   rm   rn   rK   )rp   rq   rS   rs   rt   rd   sharedru   s           r2   free_physmemr      s     fd^&)!4
5
5
5CIIdOOE 6 6??5!! 	6(K(Kac9J(K(K(K%E4v'7 B 2eT455555	6 ACAA
B
BBrE   c                    t          ddgddi          }|                    d          D ]D}|                                }| |v r*t          |                    d          d                   c S Et	          d	| d
          )Nvmstatz-srf   rg   rh   rj    r   can't find z in 'vmstat' output)r   rH   stripro   rK   )statrp   rS   s      r2   r   r      s    
hFI#6
7
7
7C		$ + +zz||4<<tzz#q)***** 
>4>>>
?
??rE   c            
         t          ddg                                          } d| v rt          j        d          t	          t          t          t          j        d| 	                                d                                       S )Nrd   z-VUNKNOWNzcan't determine free versionz\d+r=   )
r   r   r   skiptuplemapro   refindallrH   )rp   s    r2   get_free_version_infor      sk    
fd^


"
"
$
$CCk8999S"*VSYY[[_==>>???rE   c              #       K    fd}t           t          j        dd|          5 }|V  ddd           dS # 1 swxY w Y   dS )zMock open() builtin and forces it to return a certain content
    for a given path. `pairs` is a {"path": "content", ...} dict.
    c                     | v rE|          }t          |t                    rt          j        |          S t          j        |          S  | g|R i |S rz   )
isinstancestrioStringIOBytesIO)nameargskwargscontent	orig_openpairss       r2   	open_mockz$mock_open_content.<locals>.open_mock   sg    5==DkG'3'' +{7+++z'***9T3D333F333rE   builtins.openTcreateside_effectNrG   r   patch)r   r   mr   s   `  @r2   mock_open_contentr      s      4 4 4 4 4 4 I	ODi	H	H	H A                 s   ;??c              #       K    fd}t           t          j        dd|          5 }|V  ddd           dS # 1 swxY w Y   dS )zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                 ,    | k    r | g|R i |S rz   r@   )r   r   r   excfor_pathr   s      r2   r   z&mock_open_exception.<locals>.open_mock   s3    8Iy///////rE   r   Tr   Nr   )r   r   r   r   r   s   ``  @r2   mock_open_exceptionr      s      0 0 0 0 0 0 0
 I	ODi	H	H	H A                 s   =AAz
LINUX onlyreasonc                       e Zd Zd Z e            d             Z e            d             Z e            d             Z e            d             ZdS )"TestSystemVirtualMemoryAgainstFreec                 l    t                      j        }t          j                    j        }||k    sJ d S rz   )r   rs   psutilvirtual_memoryself	cli_valuepsutil_values      r2   
test_totalz-TestSystemVirtualMemoryAgainstFree.test_total   s6     NN(	,..4L((((((rE   c                 .   t                      dk     rt          j        d          t                      dk    rt          j        d          t                      j        }t          j                    j        }t          ||z
            t          k     sJ d S )N   r      free version too oldr?   r   r   free version too recent)	r   r   r   r   rt   r   r   absr   r   s      r2   	test_usedz,TestSystemVirtualMemoryAgainstFree.test_used   s     !""Z//+4555 ""i//+7888 NN'	,..39|+,,/@@@@@@@rE   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S rz   )r   rd   r   r   r   r   r   s      r2   	test_freez,TestSystemVirtualMemoryAgainstFree.test_free   sD     NN'	,..39|+,,/@@@@@@@rE   c                     t                      }|j        }|dk    rt          j        d          t	          j                    j        }t          ||z
            t          k     sJ | d| d|j                     d S )Nr   z%free does not support 'shared' columnr   z 
)	r   r   r   r   r   r   r   r   output)r   rd   
free_valuer   s       r2   test_sharedz.TestSystemVirtualMemoryAgainstFree.test_shared  s    ~~[
??+EFFF,..5
\)**->>>>99<99DK99 ?>>>>rE   c                 R   t          ddg          }|                    d          }d|d         vrt          j        d          t	          |d                                         d                   }t          j                    j        }t          ||z
            t          k     sJ d S )	Nrd   re   rj   	availabler   z(free does not support 'available' columnr~   r=   )
r   rH   r   r   ro   r   r   r   r   r   )r   rp   rq   r   r   s        r2   test_availablez1TestSystemVirtualMemoryAgainstFree.test_available  s     &$  		$eAh&&+HIIIq))"-..
,..8:,--0AAAAAAArE   N)	__name__
__module____qualname__r   r   r   r   r   r   r@   rE   r2   r   r      s        ) ) )
 A A A" A A A
 : : : 	B 	B 	B 	B 	BrE   r   c                       e Zd Zd Z e            d             Z e            d             Z e            d             Z e            d             Z e            d             Z	dS )$TestSystemVirtualMemoryAgainstVmstatc                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nztotal memory   )r   r   r   rs   r   r   r   vmstat_valuer   s      r2   r   z/TestSystemVirtualMemoryAgainstVmstat.test_total  sJ    n--4,..4<,.//2CCCCCCCrE   c                 ,   t                      dk     rt          j        d          t                      dk    rt          j        d          t          d          dz  }t	          j                    j        }t          ||z
            t          k     sJ d S )Nr   r   r   r   zused memoryr   )	r   r   r   r   r   r   rt   r   r   r   s      r2   r   z.TestSystemVirtualMemoryAgainstVmstat.test_used#  s     !""Z//+4555 ""i//+7888m,,t3,..3<,.//2CCCCCCCrE   c                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nzfree memoryr   )r   r   r   rd   r   r   r   s      r2   r   z.TestSystemVirtualMemoryAgainstVmstat.test_free5  sJ    m,,t3,..3<,.//2CCCCCCCrE   c                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nzbuffer memoryr   )r   r   r   buffersr   r   r   s      r2   test_buffersz1TestSystemVirtualMemoryAgainstVmstat.test_buffers;  sJ    o..5,..6<,.//2CCCCCCCrE   c                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nzactive memoryr   )r   r   r   activer   r   r   s      r2   test_activez0TestSystemVirtualMemoryAgainstVmstat.test_activeA  sJ    o..5,..5<,.//2CCCCCCCrE   c                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nzinactive memoryr   )r   r   r   inactiver   r   r   s      r2   test_inactivez2TestSystemVirtualMemoryAgainstVmstat.test_inactiveG  sK    /0047,..7<,.//2CCCCCCCrE   N)
r   r   r   r   r   r   r   r   r   r   r@   rE   r2   r   r     s        D D D
 D D D" D D D
 D D D
 D D D
 D D D D DrE   r   c                   R    e Zd Zd Z e            d             Zd Zd Zd Zd Z	dS )TestSystemVirtualMemoryMocksc                    t          j        d                                          }t          d|i          5 }t	          j        d          5 }t	          j        d           t          j                    }|j	        sJ t          |          dk    sJ |d         }dt          |j                  v sJ d	t          |j                  v sJ d
t          |j                  v sJ dt          |j                  v sJ dt          |j                  v sJ dt          |j                  v sJ dt          |j                  v sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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alwaysr~   r   z#memory stats couldn't be determinedcachedr   r   r   r   r   )textwrapdedentencoder   warningscatch_warningssimplefilterr   r   calledrJ   r   messager   r   r   r   r   r   slabr   r   r   wsretws         r2   test_warnings_on_missesz4TestSystemVirtualMemoryMocks.test_warnings_on_missesP  sp    / 	# 	 	  	 9:: 	%a(555 %%h///+--x2ww!||||qE<AINNNN3qy>>11113qy>>11113qy>>1111!S^^3333 C	NN2222"c!)nn4444zQzQ|q((((zQ{a''''}))))x1}}}}}'% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s6   GEF, G,F0	0G3F0	4GGGc                 H   i }t          d          5 }|D ]7}|                                }t          |d                   dz  ||d         <   8	 d d d            n# 1 swxY w Y   t          |          }d|v r(|d         }t	          ||z
            |z  dz  }|dk     sJ d S d S )Nr   r~   r   r   s   MemAvailable:d   r   )r   rH   ro   r   r   )r   memsrQ   rS   rT   abdiff_percents           r2   test_avail_old_percentz3TestSystemVirtualMemoryMocks.test_avail_old_percentt  s    )) 	8Q 8 8"%fQi..4"7VAY8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8
 !&&t##%&Aq1u::>C/L"$$$$ $# %$s   ;AA!Ac                    t          j        d                                          }t          d|i          5 }t	          j        d          5 }t          j                    }d d d            n# 1 swxY w Y   |j        sJ |j	        dk    sJ |d         }dt          |j                  v sJ 	 d d d            d S # 1 swxY w Y   d S )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   s         r2    test_avail_old_comes_from_kernelz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernel  sh    / #    	 9:: 	a(555 .+--. . . . . . . . . . . . . . .8OOO=N22221AAS	F F     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	5   B=A."B=.A2	2B=5A2	69B==CCc                    t          j        d                                          }t          d|i          5 }t	          j        d          5 }t          j                    }d d d            n# 1 swxY w Y   |j        sJ |j	        dk    sJ |d         }dt          |j                  v sJ 	 d d d            d S # 1 swxY w Y   d S )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       `LG r   r   r   r   s         r2   test_avail_old_missing_fieldsz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fields  si    / 
# 
 
  	 9:: 	a(555 .+--. . . . . . . . . . . . . . .8OOO=$CCCCC1AAS	F F     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                    t          j        d                                          }t          d|i          5  t	          dt
                    5  t          j        d          5 }t          j	                    }|j
        dk    sJ |d         }dt          |j                  v sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	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   r   r   )r   r   r   r   r   FileNotFoundErrorr   r   r   r   r   r   r   )r   r   r   r   r   s        r2   test_avail_old_missing_zoneinfoz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfo  s    / #    	 9:: 		 		$%57HII  ,D999 R /11C=,KKKKK1AFqy>>* * * * *                            		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		sZ   C!C	$AB2&C	2B66C	9B6:C	=C!	C	C!C	C!!C%(C%c                    t          j        d                                          }t          d|i          5 }t	          j                    }|j        sJ |j        dk    sJ |j        dk    sJ |j	        dk    sJ |j
        dk    sJ |j        dk    sJ |j        dk    sJ |j        d	k    sJ |j        d
k    sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )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      i p  i T  i   i    i X     )r   r   r   r   r   r   r   rs   rd   r   r   r   r   r   r   r   )r   r   r   mems       r2   test_virtual_memory_mockedz7TestSystemVirtualMemoryMocks.test_virtual_memory_mocked  sf   / 1# 1 1b c 	d 9:: 	-a'))C8OOO9
****8x'''';(****:0000:****:))))<8++++8y((((=H,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   BCCCN)
r   r   r   r   r   r   r   r  r  r	  r@   rE   r2   r   r   N  s        "% "% "%H % % %  8  2  8@- @- @- @- @-rE   r   c                       e Zd Zed             Zd Z e            d             Z e            d             Zd Z	d Z
d Zd Zd	S )
TestSystemSwapMemoryc                      t          d          5 } |                                 }ddd           n# 1 swxY w Y   d|v od|v S )z3Return True if /proc/meminfo provides swap metrics.r   Nz
SwapTotal:z	SwapFree:)rG   read)rQ   datas     r2   meminfo_has_swap_infoz*TestSystemSwapMemory.meminfo_has_swap_info  s     /"" 	a6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	t#;t(;;s   155c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S rz   )rv   rs   r   swap_memoryr   r   r   r   r   s      r2   r   zTestSystemSwapMemory.test_total&  sD    [[&
)++1:,--0AAAAAAArE   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S rz   )rv   rt   r   r  r   r   r  s      r2   r   zTestSystemSwapMemory.test_used+  D    [[%
)++0:,--0AAAAAAArE   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S rz   )rv   rd   r   r  r   r   r  s      r2   r   zTestSystemSwapMemory.test_free1  r  rE   c                    t          j        dd          5 }t          j        d          5 }t          j        d           t          j                    }|j        sJ t          |          dk    sJ |d         }dt          |j
                  v sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Npsutil._common.openTr   r   r   r~   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r  r   rJ   r   r   sinsoutr   r   r   r   r   s        r2   test_missing_sin_soutz*TestSystemSwapMemory.test_missing_sin_sout7  si   Z-d;;; 	%q(555 %%h///(**x2ww!||||qEO19~~& & & & w!||||x1}}}}}% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s5   CB B:.C:B>	>CB>	CCCc                    t          dt                    5 }t          j        d          5 }t          j        d           t          j                    }|j        sJ t          |          dk    sJ |d         }dt          |j
                  v sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz/proc/vmstatTr   r   r~   r   zK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r   r  r   r   r   r   r  r   rJ   r   r   r  r  r  s        r2   test_no_vmstat_mockedz*TestSystemSwapMemory.test_no_vmstat_mockedF  sf    1BCC 	%q(555 %%h///(**x2ww!||||qE619~~& & & & w!||||x1}}}}}% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s5   CB B9-C9B=	=C B=	CCCc                    |                                  st          j        d          t          j        d          5 }t          j                    }d d d            n# 1 swxY w Y   |j        rJ dd lm	} |
                                \  }}}}}}}||z  }||z  }|j        |k    sJ t          |j        |z
            t          k     sJ d S )Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   )r  r   r   r   r   r   r  r   psutil._psutil_linux_psutil_linuxlinux_sysinfors   r   rd   r   )r   r   swapcextrr   rs   rd   unit_multipliers           r2   test_meminfo_against_sysinfoz1TestSystemSwapMemory.test_meminfo_against_sysinfoW  s)    ))++ 	C+ABBBZ<== 	(%''D	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(8++++++373E3E3G3G01aE4 zU""""49t#$$'8888888s   AA!$A!c                     t          ddi          5 }t          j                     |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rE   )r   r   r  r   r   r   s     r2   #test_emulate_meminfo_has_no_metricsz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsh  s     566 	!   8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =AAN)r   r   r   staticmethodr  r   r   r   r   r  r  r&  r)  r@   rE   r2   r  r    s        < < \<B B B
 B B B
 B B B
% % %% % %"9 9 9"    rE   r  c                       e Zd Zd ZdS )TestSystemCPUTimesc                 x   t          j                    j        }t          j        dt          j                    d                   d         }t          t          t          |
                    d                              }|dk    rd|v sJ nd|vsJ |dk    rd|v sJ nd|vsJ |d	k    rd
|v sJ d S d
|vsJ d S )Nz\d+\.\d+\.\d+   r   .)r.        steal)r.  r0  r#   guest)r   r.  r   
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   ro   rH   )r   rT   
kernel_verkernel_ver_infos       r2   test_fieldszTestSystemCPUTimes.test_fieldsx  s    !##+Z 0"(**Q-@@C
C)9)9#)>)> ? ?@@j((f$$$$$&((((j((f$$$$$&((((i''6))))))v------rE   N)r   r   r   r;  r@   rE   r2   r,  r,  v  s#        . . . . .rE   r,  c                      e Zd Zej                            ej                            d           d          d             Z	ej                            ej                            d           d          d             Z
ej                             ej        d           d	          d
             Zej                             ej        d           d          d             Zd ZdS )TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr   c                 N   t          d          5 }|                                                                }d d d            n# 1 swxY w Y   dt          |          v rDt	          |                    d          d                   dz   }t          j                    |k    sJ d S d S )Nr>  -r~   )rG   r  r   r   ro   rH   r   	cpu_count)r   rQ   values      r2   test_against_sysdev_cpu_onlinez8TestSystemCPUCountLogical.test_against_sysdev_cpu_online  s    
 233 	%qFFHHNN$$E	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%#e**C((+,,q0E#%%.... ..s   'AA
A/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc                     t          j        d          }t          d |D                       }t          j                    |k    sJ d S )NrD  c                 <    g | ]}t          j        d |          |S )zcpu\d+$)r   searchr{   s     r2   rD   zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>  s)    KKK1bi
A&>&>&JQ&J&J&JrE   )r7  listdirrJ   r   rA  )r   lscounts      r2   test_against_sysdev_cpu_numz5TestSystemCPUCountLogical.test_against_sysdev_cpu_num  sP    
 Z122KKKKKLL!!U******rE   nprocznproc utility not availablec                 t    t          t          d                    }t          j        d          |k    sJ d S )Nznproc --allTlogical)ro   r   r   rA  )r   nums     r2   test_against_nprocz,TestSystemCPUCountLogical.test_against_nproc  s>     "]##$$---444444rE   lscpulscpu utility not availablec                     t          d          }t          d |                    d          D                       }t          j        d          |k    sJ d S )Nlscpu -pc                 <    g | ]}|                     d           |S )#rl   r{   s     r2   rD   z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>  s)    GGGQ\\#5F5FG1GGGrE   rj   TrN  )r   rJ   rH   r   rA  )r   rp   rP  s      r2   test_against_lscpuz,TestSystemCPUCountLogical.test_against_lscpu  sZ     nnGGciiooGGGHH---444444rE   c                    dd l }|j                                        }t          j        dt
                    5 }|j                                        |k    sJ |j        sJ t          j        dd          5 }|j                                        J |j        dk    sJ |j        d         d         dk    sJ 	 d d d            n# 1 swxY w Y   t          d	d
          5 }|
                                }d d d            n# 1 swxY w Y   t          j        |          }t          j        d|d          5 }|j                                        |k    sJ 	 d d d            n# 1 swxY w Y   t          d	di          5 }|j                                        |k    sJ |j        sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   zpsutil._pslinux.os.sysconfr   r  Tr  r.  
/proc/stat/proc/cpuinforbreturn_valuer   rE   )psutil._pslinux_pslinuxcpu_count_logicalr   r   rK   r   
call_count	call_argsrG   r  r   r   r   )r   r   originalr   rQ   cpuinfo_data	fake_files          r2   test_emulate_fallbacksz0TestSystemCPUCountLogical.test_emulate_fallbacks  s7   ?4466 Z(j
 
 
 	 ?4466(BBBB8OOO 1$??? 9188::BBB|q(((({1~a(L88888	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ot,, ( vvxx( ( ( ( ( ( ( ( ( ( ( ( ( ( (
<00I%Id   G88::hFFFFFG G G G G G G G G G G G G G G #OS#9::  a88::hFFFFx                             5	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   ?G8AC;GC	GC	G"D7GD	G
D	.G9 E&G&E*	*G-E*	.G)F8,G8F<	<G?F<	 GGGN)r   r   r   r   markskipifr7  pathexistsrC  rK  shutilwhichrQ  rY  ri  r@   rE   r2   r=  r=    sO       [GNN;<<<>   / /	 / [GNN45557   + +	 +
 [FL!!!*G   5 5 5 [FL!!!*G   5 5 5
"  "  "  "  " rE   r=  c                       e Zd Zej                             ej        d           d          d             Zej                             e	j
                    dvd          d             Zd Zd	S )
TestSystemCPUCountCoresrR  rS  r   c                 J   t          d          }t                      }|                    d          D ]G}|                    d          s0|                    d          }|                    |d                    Ht          j        d          t          |          k    sJ d S )NrU  rj   rW  ,r~   FrN  )r   setrH   rl   addr   rA  rJ   )r   rp   core_idsrS   rT   s        r2   rY  z*TestSystemCPUCountCores.test_against_lscpu  s     nn55IIdOO 	( 	(D??3'' (CVAY'''...#h--??????rE   >   i686x86_64zx86_64/i686 onlyc                    t           j                                        }t          j        dg           5 }t           j                                        }|j        sJ 	 d d d            n# 1 swxY w Y   |||k    sJ d S d S )N	glob.globr`  )r   rb  cpu_count_coresr   r   r   )r   meth_1r   meth_2s       r2   test_method_2z%TestSystemCPUCountCores.test_method_2  s     0022Z"555 	_4466F8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 V#### ##s   (A**A.1A.c                 $   t          j        dg           5 }t          j        dd          5 }t          j                                        J 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        sJ |j        sJ d S )Nrz  r{  r  Tr  )r   r   r   rb  r|  r   )r   m1m2s      r2   test_emulate_nonez)TestSystemCPUCountCores.test_emulate_none  s2   Z"555 	A1$??? A26688@@@@A A A A A A A A A A A A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A yys4   A3!AA3A 	 A3#A 	$A33A7:A7N)r   r   r   r   rj  rk  rn  ro  rY  platformmachiner  r  r@   rE   r2   rq  rq    s        [FL!!!*G   @ @ @ ["44=O   $ $ $    rE   rq  c                      e Zd Zej                            e d          ej                            ed          d                         Zej                            e d          ej                            ed          d                         Z	ej                            e d          d             Z
ej                            e d          d             Zej                            e d          d	             Zd
S )TestSystemCPUFrequencynot supportedr   z(aarch64 does not always expose frequencyc                     fd}t           j        j        t          j        d|d          5  t          j                    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 H    |                      d          rdS  |           S )N&/sys/devices/system/cpu/cpufreq/policyFrX  )rl  orig_existss    r2   path_exists_mockzMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock  s-    GHH )u"{4(((rE   os.path.existsT)r   r   )r7  rl  rm  r   r   r   cpu_freq)r   r  r  s     @r2   test_emulate_use_second_filez3TestSystemCPUFrequency.test_emulate_use_second_file  s    	) 	) 	) 	) 	) gnZ*:4
 
 
 	% 	% ?$$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AAAz,aarch64 does not report mhz in /proc/cpuinfoc                 Z   fd}t           j        j        	 t          j        d|          5  t          t          j                   t          j                    }|s
J |            |j	        dk    sJ |j
        dk    sJ t          j        d          D ]}|j	        dk    sJ |j
        dk    sJ 	 d d d            n# 1 swxY w Y   t          t          j                   t          t                     d S # t          t          j                   t          t                     w xY w)Nc                 H    |                      d          rdS  |           S )Nz/sys/devices/system/cpu/FrX  )rl  os_path_existss    r2   r  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mock  s-    9:: ,u%~d+++rE   r  r[          Tpercpu)r7  rl  rm  r   r   r   r   rb  r  maxmin)r   r  r   freqr  s       @r2   test_emulate_use_cpuinfoz/TestSystemCPUFrequency.test_emulate_use_cpuinfo	  sp   	, 	, 	, 	, 	, 	",:JKKK + +fo...o''Cw#~~~~w#~~~~"O4888 + +D8s????8s?????++ + + + + + + + + + + + + + + &/***&!!!!! &/***&!!!!s/   C; BC5C; CC; C	C; ;/D*c                 z   fd}t           t          j        d|          5  t          j        dd          5  t          j                    }|j        dk    sJ |j        dk    r|j        d	k    sJ |j        dk    r|j        d
k    sJ d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                    |                      d          r)|                     d          rt          j        d          S |                      d          r)|                     d          rt          j        d          S |                      d          r)|                     d          rt          j        d          S | dk    rt          j        d	          S  | g|R i |S )
N/scaling_cur_freqr     500000/scaling_min_freq   600000/scaling_max_freqs   700000r]  s   cpu MHz     : 500endswithrl   r   r   r   r   r   r   s      r2   r   z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mock'  s    }}011 8doo87 7 8 z),,,233 889 9 8 z),,,233 889 9 8 z),,,((z"6777 y7777777rE   r   r[  r  Tr{       @@r       @g     @rG   r   r   r   r  currentr  r  r   r   r  r   s      @r2   test_emulate_dataz(TestSystemCPUFrequency.test_emulate_data%  se   	8 	8 	8 	8 	8$ 	ZY??? 		- 		-,4@@@ - -((|u,,,, 8s??8u,,,,8s??8u,,,,- - - - - - - - - - - - - - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s5   B0ABB0B	B0B	 B00B47B4c                    fd}t           t          j        d|          5  t          j        dd          5  t          j        dd          5  t          j        d	          }|d
         j        dk    sJ |d
         j        dk    r|d
         j        dk    sJ |d
         j        dk    r|d
         j        dk    sJ |d         j        dk    sJ |d         j        dk    r|d         j        dk    sJ |d         j        dk    r|d         j        dk    sJ d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                 <   | }|                     d          r)|                    d          rt          j        d          S |                     d          r)|                    d          rt          j        d          S |                     d          r)|                    d          rt          j        d          S |                     d          r)|                    d          rt          j        d	          S |                     d          r)|                    d          rt          j        d
          S |                     d          r)|                    d          rt          j        d          S | dk    rt          j        d          S  | g|R i |S )Nr  z'/sys/devices/system/cpu/cpufreq/policy0s   100000r     200000r  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000r  r  r]  s#   cpu MHz     : 100
cpu MHz     : 400r  )r   r   r   nr   s       r2   r   z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockG  s   Azz-.. 81<<94 4 8 z),,,/00 8Q\\96 6 8 z),,,/00 8Q\\96 6 8 z),,,/00 8Q\\96 6 8 z),,,/00 8Q\\96 6 8 z),,,/00 8Q\\96 6 8 z),,,((z"IJJJ y7777777rE   r   r[  r  Tr{  !psutil._pslinux.cpu_count_logicalr.  r  r         Y@r  g      i@g     r@r~   g      y@r  r  r  r  s      @r2   test_emulate_multi_cpuz-TestSystemCPUFrequency.test_emulate_multi_cpuE  sZ   	8 	8 	8 	8 	8> 	ZY??? 	4 	4,4@@@ 4 4Z7a   4 4 "?$777D7?e3333Aw{c))#Aw{e3333Aw{c))#Aw{e33337?e3333Aw{c))#Aw{e3333Aw{c))#Aw{e33334 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4sY   EECD*E*D..E1D.2E5EE	EE		EE Ec                 x   fd}t           t          j        d|          5  t          j        dd          5  t          j        dd          5  t          j                    }|j        d	k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nc                     |                      d          rt          |                      d          rt          j        d          S | dk    rt          j        d          S  | g|R i |S )Nr  z/cpuinfo_cur_freqr  r]  s   cpu MHz     : 200)r  r  r   r   r  s      r2   r   zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mock{  s    }}011 (''}}011 8z),,,((z"6777 y7777777rE   r   r[  r  Tr{  r  r~      )rG   r   r   r   r  r  r  s      @r2   %test_emulate_no_scaling_cur_freq_filez<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_filex  s   	8 	8 	8 	8 	8 	ZY??? 	/ 	/,4@@@ / /Z7a   / / "?,,D<3.....	/ / / / / / / / / / / / / / // / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/sX   B/B!B 4B BBBBB/B	B/B	B//B36B3N)r   r   r   r   rj  rk  r	   r   r  r  r  r  r  r@   rE   r2   r  r    sp       [L(AA[B   % %  BA% [L(AA[F   " "  BA"0 [L(AA- - BA-> [L(AA04 04 BA04d [L(AA/ / BA/ / /rE   r  c                       e Zd Zd ZdS )TestSystemCPUStatsc                     t          d          }t          j                    j        }t	          ||z
            dk     sJ d S )N
interruptsi  )r   r   	cpu_statsr  r   r   s      r2   test_interruptsz"TestSystemCPUStats.test_interrupts  sD    l++'))4<,.//#555555rE   N)r   r   r   r  r@   rE   r2   r  r    s#        6 6 6 6 6rE   r  c                   Z    e Zd Zej                            e d          d             ZdS )TestLoadAvgr  r   c                    t          j                    }t          d          5 }|                                                                }d d d            n# 1 swxY w Y   t          t          |d                   |d         z
            dk     sJ t          t          |d                   |d         z
            dk     sJ t          t          |d                   |d         z
            dk     sJ d S )Nz/proc/loadavgr   r~   r.  )r   
getloadavgrG   r  rH   r   float)r   r   rQ   
proc_values       r2   test_getloadavgzTestLoadAvg.test_getloadavg  s   (**/"" 	*a))J	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 5A'',q/9::Q>>>>5A'',q/9::Q>>>>5A'',q/9::Q>>>>>>s   'AAAN)r   r   r   r   rj  rk  r
   r  r@   rE   r2   r  r    sG        [N*?CC? ? DC? ? ?rE   r  c                       e Zd Zd ZdS )TestSystemNetIfAddrsc                 \   t          j                                                    D ]\  }}|D ]}|j        t           j        k    r|j        t          |          k    sJ 2|j        t          j        k    rl|j        t          |          k    sJ |j
        t          |          k    sJ |j        |j        t          |          k    sJ t          |          dk    sJ |j        t          j        k    r3|j                            d          d         }|t!          |          v sJ d S )Nz0.0.0.0%r   )r   net_if_addrsitemsfamilyAF_LINKaddressrb   r&   r'   r3   netmaskr7   	broadcastr;   rO   rH   rY   )r   r   addrsaddrr  s        r2   test_ipszTestSystemNetIfAddrs.test_ips  sE   !.006688 	? 	?KD% ? ?;&.00<?4+@+@@@@@@[FN22<+;D+A+AAAAA<+;D+A+AAAAA~1#~1CD1I1IIIIII1$779DDDDD[FO33 #l0055a8G"&8&>&>>>>>%?	? 	?rE   N)r   r   r   r  r@   rE   r2   r  r    s#        ? ? ? ? ?rE   r  c                       e Zd Zej                             ej        d           d          d             Zd Z	ej                             ej        d           d          d             Z
dS )TestSystemNetIfStatsifconfigifconfig utility not availabler   c                 6   t          j                                                    D ]r\  }}	 t          d|           }|j        d|v k    s
J |            |j        t          t          j        d|          d                   k    sJ c# t          $ r Y ow xY wd S )N	ifconfig RUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsr  r   isupmturo   r   r   RuntimeError)r   r   statsrp   s       r2   test_against_ifconfigz*TestSystemNetIfStats.test_against_ifconfig  s     ".006688 		 		KD%+T++,, zi3&6777777yCJ2C88;% %     	     		 		s   B		
BBc                 0   t          j                                                    D ]o\  }}t          d| d          5 }|j        t          |                                                                          k    sJ 	 d d d            n# 1 swxY w Y   pd S )Nz/sys/class/net/z/mtu)r   r  r  rG   r  ro   r  r   )r   r   r  rQ   s       r2   test_mtuzTestSystemNetIfStats.test_mtu  s    !.006688 	: 	:KD%222233 :qyC(8(8$9$999999: : : : : : : : : : : : : : :	: 	:s   ?B

B	B	c                    d}t          j                                                    D ]\  }}	 t          d|           }t	          j        d|          }|rt          |                                          dk    r||dz  }t          |	                    d          
                                                    d                    }t          |j                            d                    }||k    sJ t	          j        d|          }|rt          |                                          dk    rz|dz  }t          |	                    d          
                                                                          }t          |j                            d                    }||k    sJ # t          $ r Y w xY w|s|                     d	          d S )
Nr   r  zflags=(\d+)?<(.*?)>r.  r~   rs  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r  r   r   rG  rJ   rV   rt  grouplowerrH   flagsr  fail)r   matches_foundr   r  rp   matchifconfig_flagspsutil_flagss           r2   
test_flagszTestSystemNetIfStats.test_flags  s    !.006688 	> 	>KD%>+T++,, 	"8#>> >S00A55!Q&M%(Q)=)=)?)?)E)Ec)J)J%K%KN#&u{'8'8'='=#>#>L)\99999 I&FLLE >U\\^^!4!4!9!9%*),U[[^^-A-A-C-C-I-I-K-K)L)L'*5;+<+<S+A+A'B'B-====#     &  	5))3444	5 	5s   F11
F?>F?N)r   r   r   r   rj  rk  rn  ro  r  r  r  r@   rE   r2   r  r    s        [FL$$$-M   
 
 
: : :
 [FL$$$-M   5 5 5 5 5rE   r  c                       e Zd Zej                             ej        d           d           e            d                         Z	dS )TestSystemNetIOCountersr  r  r   c                    d }t          j        dd          }|                                D ];\  }}	  ||          }n# t          $ r Y w xY wt	          |j        |d         z
            dk     sJ t	          |j        |d         z
            dk     sJ t	          |j        |d         z
            d	k     sJ t	          |j        |d
         z
            d	k     sJ t	          |j	        |d         z
            dk     sJ t	          |j
        |d         z
            dk     sJ t	          |j        |d         z
            dk     sJ t	          |j        |d         z
            dk     sJ =d S )Nc                    i }t          d|            }t          t          j        d|          d                   |d<   t          t          j        d|          d                   |d<   t          t          j        d|          d                   |d<   t          t          j        d|          d	                   |d
<   t          t          j        d|          d                   |d<   t          t          j        d|          d	                   |d<   t          t          j        d|          d                   |d<   t          t          j        d|          d                   |d<   |S )Nr  zRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinr~   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   ro   r   r   )nicr   rp   s      r2   r  z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfig  sZ   C&&&''C"%
1377:# #C #&
1377:# #C rz*<cBB1EFFCL
+=s C CA FGGCM
+> D DQ GHHCM ,?!E!Ea!HIIC	N #
A3GGJ! !C !$
A3GGJ! !C JrE   TF)pernicnowrapr  i (  r  r  r   r  r  
   r  r  r  )r   net_io_countersr  r  r   r  r  r  r  r  r  r  r  )r   r  nior   r  ifconfig_rets         r2   r  z-TestSystemNetIOCounters.test_against_ifconfig  s   
	 	 	* $D???99;; 	E 	EKD%'x~~    E$|L'AABBYNNNN E$|L'AABBYNNNN E&n)EEFFMMMM E&n)EEFFMMMMu{\'%::;;b@@@@u|l8&<<==BBBBu|l8&<<==BBBBu}|I'>>??"DDDDD)	E 	Es   A
AAN)
r   r   r   r   rj  rk  rn  ro  r   r  r@   rE   r2   r  r    sw        [FL$$$-M    +E +E  +E +E +ErE   r  c                   z    e Zd Z ej        de           ej        dd          d                         Zd ZdS )	TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntopr[  zpsutil._pslinux.supports_ipv6Fr{  c                    	 t          j         t           j        t           j                  }|                     |j                   |                    d           n# t          $ r Y nw xY wt          j        d           d S )N)z::1r   inet6kind)	r&   rO   SOCK_STREAM
addCleanupclosebindOSErrorr   net_connections)r   supports_ipv6rP   r1   s       r2   test_emulate_ipv6_unsupportedz6TestSystemNetConnections.test_emulate_ipv6_unsupportedF  s    	fov/ABBAOOAG$$$FF: 	 	 	D	G,,,,,,s   AA 
A('A(c                     t          j        d          }t          d|i          5 }t          j        d           |j        sJ 	 d d d            d S # 1 swxY w Y   d S )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   s      r2   test_emulate_unixz*TestSystemNetConnections.test_emulate_unixR  s    / #    0':;; 	q"////8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAN)r   r   r   r   r   rK   r
  r  r@   rE   r2   r  r  D  sn        TZ2
KKKTZ/eDDD- - ED LK-	 	 	 	 	rE   r  c                       e Zd Zej                             eed           d           e            d                         Z	d Z
d ZdS )TestSystemDiskPartitionsstatvfszos.statvfs() not availabler   c                 :   d }t          j        d          D ]}t          j        |j                  } ||j                  \  }}}}|j        |k    sJ t          |j        |z
            t          k     sJ t          |j        |z
            t          k     sJ d S )Nc                    t          d|  d                                          }|                    d          }|                    d           |                    d          }|                                d d         \  }}}}|dk    rd}t	          |          t	          |          t	          |          }}}||||fS )Nzdf -P -B 1 ""rj   r   r?   noner[   )r   r   rH   popro   )rl  rp   rq   rS   devrs   rt   rd   s           r2   dfz4TestSystemDiskPartitions.test_against_df.<locals>.dfl  s    +D+++,,2244CIIdOOEIIaLLL99Q<<D%)ZZ\\"1"%5"Cdf}} #E

CIIs4yy4EtT))rE   F)all)	r   disk_partitions
disk_usage
mountpointrs   r   rd   r   rt   )r   r  partusagerr   rs   rt   rd   s           r2   test_against_dfz(TestSystemDiskPartitions.test_against_dfe  s    		* 		* 		* *u555 	A 	AD%do66E#%2do#6#6 AudD;%''''uzD()),@@@@@uzD()),@@@@@@	A 	ArE   c                 ,   t          d          5 }|                                }d d d            n# 1 swxY w Y   d|v r$t          j                    D ]}|j        dk    r d S t          j        d          }t          j        d|d          5 }t          j        ddg	          5 }t          j                    }|j	        sJ |j	        sJ |sJ |d
         j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz/proc/filesystemszfsz
nodev	zfs
r  Tr_  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r   rwr{  r   )
rG   r  r   r  fstyper   r   r   r   r   )r   rQ   r  r  rh  r  r  r   s           r2   test_zfs_fsz$TestSystemDiskPartitions.test_zfs_fs~  s   %&& 	!6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	D==.00  ;%''FF ( K//	Z!	$
 
 
 	.6=>   . ,..y   y   


1v}-----. . . . . . . . . . . . . . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.sB   155D	'=C1%D	1C5	5D	8C5	9D		DDc                 :   	 t          j        dd          5 }t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   |j        sJ 	 d d d            n# 1 swxY w Y   dt
          _        d S # dt
          _        w xY w)Nzos.path.realpathz/non/existentr{  /proc)	r   r   r   raisesr  r   r  r   PROCFS_PATHr(  s     r2   test_emulate_realpath_failz3TestSystemDiskPartitions.test_emulate_realpath_fail  s   	)"    ]#455 - -*,,,- - - - - - - - - - - - - - -x                              ")FF((((sQ   B A3AA3A	A3A	A3'B 3A77B :A7;B BN)r   r   r   r   rj  rk  hasattrr7  r   r  r%  r*  r@   rE   r2   r  r  c  s        [GB	"""+G    A A  A*. . .0
) 
) 
) 
) 
)rE   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSystemDiskIoCountersc                    d}t          d|i          5  t          j        dd          5  t          j        d          }|j        dk    sJ |j        d	k    sJ |j        d
t          z  k    sJ |j	        dk    sJ |j
        dk    sJ |j        dk    sJ |j        dt          z  k    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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  r~   r.  r   r?   r   r0        r  r   r   r   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   s      r2   test_emulate_kernel_2_4z0TestSystemDiskIoCounters.test_emulate_kernel_2_4  s    @ 17;<< 	+ 	+3$   + + -U;;;~****,1111~[8888}))))!++++-2222!k/9999~****}*****+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+5   C+BCC+C	C+C	C++C/2C/c                    d}t          d|i          5  t          j        dd          5  t          j        d          }|j        dk    sJ |j        d	k    sJ |j        d
t          z  k    sJ |j	        dk    sJ |j
        dk    sJ |j        dk    sJ |j        dt          z  k    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r/  r0  Tr{  Fr1  r~   r.  r   r?   r   r0  r2  r3  r  r4  r@  s      r2   test_emulate_kernel_2_6_fullz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_full  s    < 17;<< 	+ 	+3$   + + -U;;;~****,1111~[8888}))))!++++-2222!k/9999~****}*****+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+rB  c                    t          ddi          5  t          j        dd          5  t          j        d          }|j        dk    sJ |j        d	t          z  k    sJ |j        d
k    sJ |j	        dt          z  k    sJ |j
        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr/  z   3    1   hda 1 2 3 4r0  Tr{  Fr1  r~   r.  r   r?   r   )r   r   r   r   r5  r6  r8  r9  r;  r=  r7  r:  r<  r>  r?  )r   r   s     r2   test_emulate_kernel_2_6_limitedz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limited  s     13LMNN 	* 	*3$   * * -U;;;~****~[8888!++++!k/9999,1111}))))-2222~****})))))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s5   C)BCC)C	C)C	C))C-0C-c                    t          j        d          }t          d|i          5  t          j        dd          5  t          j        dd          }t          |          dk    sJ |d	         j        d
k    sJ |d         j        d
k    sJ |d	         j	        dk    sJ |d         j	        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nx            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/  r0  Fr{  Tperdiskr  r.  nvme0n1r~   	nvme0n1p1r   )
r   r   r   r   r   r   r5  rJ   r6  r;  r@  s      r2   test_emulate_include_partitionsz8TestSystemDiskIoCounters.test_emulate_include_partitions  s    / #    17;<< 		9 		93%   9 9 -d5III3xx1}}}}9~0A5555;'2a77779~1Q6666;'3q888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9s5   CA8C6CC	C	C	
CC!Cc                 T   t          j        d          }t          d|i          5  t          j        dd          5  t          j        dd          }|J 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d }t          j        d          }t          d|i          5  t          j        dd|	          5  t          j        dd          }|j        d
k    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrH  r/  r0  Fr{  rI  c                     | dk    S )NrK  r@   )r   s    r2   is_storage_devicezSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_device  s    9$$rE   Tr   r~   r   )	r   r   r   r   r   r   r5  r6  r;  )r   r   r   rP  s       r2   test_emulate_exclude_partitionsz8TestSystemDiskIoCounters.test_emulate_exclude_partitions  sn    / #    17;<< 	# 	#3%   # # -eEJJJ{{{{	# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#	% 	% 	% / #    17;<< 	, 	,3-   , ,
 -eEJJJ~****!+++++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sj   A<A%A<%A)	)A<,A)	-A<<B B /D1D9DD			DD		DD!$D!c                    d }t          j        d          }t          j        dd|          5  t          j        d          }d d d            n# 1 swxY w Y   t	          |          t	          |          k    sJ d S )Nc                     | dk    S )Nr/  r@   rl  s    r2   rm  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.exists  s    ,,,rE   T)rJ  psutil._pslinux.os.path.existsr   )r   r5  r   r   rJ   )r   rm  wprocfswsysfss       r2   test_emulate_use_sysfsz/TestSystemDiskIoCounters.test_emulate_use_sysfs  s    	- 	- 	- )$777Z,Tv
 
 
 	; 	; ,T:::F	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 7||s6{{******s   AAAc                     d }t          j        dd|          5  t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                     dS )NFr@   rT  s    r2   rm  z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.exists!  s    5rE   rU  Tr   )r   r   r   r(  NotImplementedErrorr   r5  )r   rm  s     r2   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_impl   s   	 	 	 Z,Tv
 
 
 	* 	* 233 * *')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s4   A-A	A-A	A-A	A--A14A1N)
r   r   r   rA  rD  rF  rM  rQ  rX  r\  r@   rE   r2   r-  r-    s~        + + +&+ + +(* * *,9 9 9&, , ,@	+ 	+ 	+* * * * *rE   r-  c                      e Zd Zd Zd Zej                            ed          d             Z	ej                             e
j        d           d          ej                            ed          d                         Zd	 Zd
S )TestRootFsDeviceFinderc                     t          j        d          j        }t          j        |          | _        t          j        |          | _        d S )Nr"  )r7  r   st_devmajorminor)r   r  s     r2   setUpzTestRootFsDeviceFinder.setUp-  s4    gcll!Xc]]
Xc]]


rE   c                 P   t                      }t          j                            d          r|                                 nEt          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j                            d| j         d| j	         d          r|
                                 nEt          j        t                    5  |
                                 d d d            n# 1 swxY w Y   |                                 d S Nz/proc/partitionsz/sys/dev/block/rF   z/uevent)r   r7  rl  rm  ask_proc_partitionsr   r(  r  ra  rb  ask_sys_dev_blockask_sys_class_block)r   finders     r2   test_call_methodsz(TestRootFsDeviceFinder.test_call_methods2  s   #%%7>>,-- 	-&&((((011 - -**,,,- - - - - - - - - - - - - - -7>>LDJLLLLLMM 	+$$&&&&011 + +((***+ + + + + + + + + + + + + + +""$$$$$s$   A==BB&DDDzunsupported on GITHUB_ACTIONSr   c                    t                      }|                                J d x}x}}t          j                            d          r|                                }t          j                            d| j         d| j         d          r|                                }|	                                }|p|p|}|r
|r||k    sJ |r
|r||k    sJ |r
|r
||k    sJ d S d S d S re  )
r   findr7  rl  rm  rf  ra  rb  rh  rg  )r   ri  r   r   cbases         r2   test_comparisonsz'TestRootFsDeviceFinder.test_comparisons@  s"   #%%{{}}(((A7>>,-- 	-**,,A7>>LDJLLLLLMM 	-**,,A$$&&{A{ 	A 	19999 	A 	19999 	A 	19999	 	 	 	9rE   findmntzfindmnt utility not availablec                 t    t                                                      }t          d          }||k    sJ d S )Nzfindmnt -o SOURCE -rn /)r   rl  r   )r   r   findmnt_values      r2   test_against_findmntz+TestRootFsDeviceFinder.test_against_findmntT  s@    
 *++0022455},,,,,,rE   c                 D   t          j        ddg          5 }t          j                    d         }|j        sJ t
          s9|j        dk    sJ |j        t                                                      k    sJ n|j        dk    sJ d d d            d S # 1 swxY w Y   d S )Nr!  )	/dev/rootr"  ext4r#  r{  r   ru  )	r   r   r   r  r   r   devicer   rl  )r   r   r  s      r2   test_disk_partitions_mockedz2TestRootFsDeviceFinder.test_disk_partitions_mocked]  s    Z2:;
 
 
 
	2 )++A.D8OOO! 2{k1111{&8&:&:&?&?&A&AAAAAA{k1111
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2 
	2s   A0BBBN)r   r   r   rc  rj  r   rj  rk  r   ro  rn  ro  rs  rx  r@   rE   r2   r^  r^  +  s        # # #
% % % [/NOO  PO& [FL###,K    [/NOO- - PO -
2 2 2 2 2rE   r^  c                       e Zd Zd Zd Zd Zd Zd Zd Z e	            e
j                            ed          d	                         Zd
 ZdS )TestMiscc                     t          d          }t          j                    }t          |          t          |          k    sJ d S )Nz	boot time)r   r   	boot_timero   r   s      r2   test_boot_timezTestMisc.test_boot_timer  sD    k**'))<  C$5$5555555rE   c           	      	   |                                  }t          j        |           t          t          j                            |d          d          5 }|                    d           |                    d           |                    d           d d d            n# 1 swxY w Y   	 t          fd}t          j        d|          5  t          t                     t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d	
           d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d	
           d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d	
           d d d            n# 1 swxY w Y   |t          _        t          j                    dk    sJ t%          t          j                              dk    sJ t          j        d	
          }t%          |          dk    sJ t          j        d	
          }t%          t'          t$          |                    dk    sJ t          t          j                            |d          d          5 }|                    d           |                    d           |                    d           d d d            n# 1 swxY w Y   t          j                    dk    sJ t%          t          j        d	
                    dk    sJ t%          t          j                              dk    sJ t%          t'          t$          t          j        d	
                              dk    sJ 	 d d d            n# 1 swxY w Y   t)          j        |           t          t                     n-# t)          j        |           t          t                     w xY wt          j        dk    sJ d S )Nr   r   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                 T    |                      d          rt           | g|R i |S )Nr'  )rl   r  r  s      r2   r   z4TestMisc.test_no_procfs_on_import.<locals>.open_mock  s=    ??7++ ,++ y7777777rE   r   r[  Tr  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r'  )
get_testfnr7  mkdirrG   rl  rM   writer   r   r   r   r   r(  r  r5  cpu_percentcpu_times_percentr)  sumr   rn  rmtree)r   	my_procfsrQ   r   per_cpu_percentper_cpu_times_percentr   s         @r2   test_no_procfs_on_importz!TestMisc.test_no_procfs_on_importw  s   OO%%	
"',,y&11377 	31GG1222GG1222GG1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
4	"I8 8 8 8 8
 OCCC ) )f%%%]7++ ' '$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ']7++ 2 2$D11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2]7++ ) )&((() ) ) ) ) ) ) ) ) ) ) ) ) ) )]7++ 4 4&d33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4]7++ / /,.../ / / / / / / / / / / / / / /]7++ : :,D9999: : : : : : : : : : : : : : : &/")++q0000635566!;;;; #)"4D"A"A"A?++q0000 )/(@(M(M(M%3s$9::;;q@@@@ "',,y&993?? ;1GG9:::GG9:::GG9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 )++q00006-T:::;;q@@@@635566!;;;;C!9!F!F!FGGHHAMMMMMQ) ) ) ) ) ) ) ) ) ) ) ) ) ) )V M)$$$&!!!! M)$$$&!!!!!W,,,,,,sB  A B$$B(+B(0"R .Q+ D Q+ D$	$Q+'D$	(Q+E&Q+&E*	*Q+-E*	.Q+
F*Q+*F.	.Q+1F.	2Q+G0$Q+0G4	4Q+7G4	8Q+H4(Q+4H8	8Q+;H8	<Q+I:.Q+:I>	>Q+I>	C#Q+%A N1%Q+1N5	5Q+8N5	9B%Q+R +Q//R 2Q/3R *S	c                    t          j        d                                          }t          d|i          5 }t	          j                     |j        sJ t	          j        d           t	          j                     t	          j        d           d d d            n# 1 swxY w Y   t          j        d                                          }t          d|i          5  t	          j                    }|j        sJ t	          j        d          }t	          j                    }t	          j        d          }|dk    sJ t          |          dk    sJ t          |          dk    sJ t          |          dk    sJ t          t          t          |                    dk    sJ t          t          t          |                    dk    sJ |j
        dk    sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )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
            r\  Tr  z~            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
            r   r  )r   r   r   r   r   r  r   r  r  r   r2  user)r   r   r   r  cpu_percent_percpur  cpu_times_percent_percpus          r2   test_cpu_steal_decreasez TestMisc.test_cpu_steal_decrease  s    / #   	 	
 g677 	21    8OOOd++++$&&&$D1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 / #   	 	
 g677 	/ 	/ ,..K8OOO!'!34!@!@!@ & 8 : :'-'?t'L'L'L$!####)**a////())Q....())U2222s3 899::a????s3 899::eCCCC$*a////$)Q.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s%   ABB"%B" DG99G= G=c                    t          j        dd          5 }t          j        t                    5  t
          j                                         d d d            n# 1 swxY w Y   |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  Tr  )	r   r   r   r(  r  r   rb  r|  r   r(  s     r2   test_boot_time_mockedzTestMisc.test_boot_time_mocked  s    Z-d;;; 	q|,, , ,))+++, , , , , , , , , , , , , , ,8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s4   A>AA>A 	 A>#A 	$A>>BBc                 H    t          j                    D ]}|j        dvsJ d S )N>   :0:0.0)r   usershost)r   r  s     r2   
test_userszTestMisc.test_users  s9     LNN 	3 	3D9N22222	3 	3rE   c                    |                                  }t          j        |           	 |t          _        t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j	                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j	        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j
                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j                     d d d            n# 1 swxY w Y   t          j        t          j                  5  t          j                     d d d            n# 1 swxY w Y   dt          _        d S # dt          _        w xY w)NTr  r'  )r  r7  r  r   r)  r   r(  r  r   r5  r|  r  r  r  r  NoSuchProcessProcess)r   tdirs     r2   test_procfs_pathzTestMisc.test_procfs_path  sn     
	)!%Fw'' ( (%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (w'' # # """# # # # # # # # # # # # # # #w'' . . ----. . . . . . . . . . . . . . .w'' # # """# # # # # # # # # # # # # # # w'' ) )&((() ) ) ) ) ) ) ) ) ) ) ) ) ) )w'' ) )&((() ) ) ) ) ) ) ) ) ) ) ) ) ) )w'' & &#%%%& & & & & & & & & & & & & & & w'' ) )&((() ) ) ) ) ) ) ) ) ) ) ) ) ) )v344 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ")FF((((sO  %J/ A/#J/ /A33J/ 6A37J/ B3'J/ 3B77J/ :B7;J/ C9-J/ 9C==J/  C=J/ D=1J/ =EJ/ EJ/ !F5J/ FJ/ F	J/ %G9J/ G		J/ G	J/ )H	=J/ 	HJ/ HJ/ -IJ/ IJ/ I!J/ 6J
J/ JJ/ JJ/ /J=zskip if pytest-parallelr   c                    t                      5  t          j                    }|                                }t	          |          dk    sJ t          |d           d         j        }|j        |k    sJ t          j        |          }|                                 |t          j	                    vsJ 	 d d d            d S # 1 swxY w Y   d S )Nr.  c                     | j         S rz   )id)r|   s    r2   <lambda>z)TestMisc.test_issue_687.<locals>.<lambda>  s     rE   )keyr~   )
r   r   r  threadsrJ   sortedr  pidas_dictpids)r   pr  tidpts        r2   test_issue_687zTestMisc.test_issue_687  s    \\ 	, 	,  AiikkGw<<1$$$$nn555a8;C5C<<<<$$BJJLLLfkmm+++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   B&CC
Cc                     t          ddi          5 }t          j        t          j                              sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz/proc/%s/statusr[   )r   r   
pid_existsr7  getpidr   r(  s     r2   test_pid_exists_no_proc_statusz'TestMisc.test_pid_exists_no_proc_status  s      12677 	1$RY[[111118OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   1AAAN)r   r   r   r}  r  r  r  r  r  r   r   rj  rk  r   r  r  r@   rE   r2   rz  rz  p  s        6 6 6
?- ?- ?-B%/ %/ %/N  3 3 3) ) )8 [0IJJ, , KJ ,     rE   rz  z
no batteryc                       e Zd Zej                             ej        d           d          d             Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd ZdS )TestSensorsBatteryacpizacpi utility not availabler   c                     t          d          }t          |                    d          d                                                             dd                    }t          j                    j        }t          ||z
            dk     sJ d S )Nzacpi -brs  r~   r  r[   )	r   ro   rH   r   replacer   sensors_batterypercentr   )r   rp   
acpi_valuer   s       r2   test_percentzTestSensorsBattery.test_percent*  s|     mm3*0022::3CCDD
-//7:,--111111rE   c                    fd}t           t          j        d|          5 }t          j                    j        du sJ t          j                    j        t          j        k    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 n    |                      d          rt          j        d          S  | g|R i |S )Nz
AC0/onlinez	AC/online   1r  r   r   r  s      r2   r   z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mock5  H    }}899 8z$''' y7777777rE   r   r[  T)	rG   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   r   r   r   s      @r2   test_emulate_power_pluggedz-TestSensorsBattery.test_emulate_power_plugged3  s    	8 	8 	8 	8 	8 	ZY??? 	1)++9TAAAA&((1./ / / / 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AB  BBc                     fd}t           t          j        d|          5 }t          j                    j        du sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                     |                      d          rt          |                      d          rt          j        d          S  | g|R i |S )Nr  /statuschargingr  r  r   r   r  s      r2   r   zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockG  sb    }}899 (''}}Y'' 8{:... y7777777rE   r   r[  TrG   r   r   r   r  r  r   r  s      @r2   test_emulate_power_plugged_2z/TestSensorsBattery.test_emulate_power_plugged_2D  s    	8 	8 	8 	8 	8 	ZY??? 	1)++9TAAAA8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   &AAAc                     fd}t           t          j        d|          5 }t          j                    j        du sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 n    |                      d          rt          j        d          S  | g|R i |S )Nr     0r  r  s      r2   r   zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockV  r  rE   r   r[  Fr  r  s      @r2   test_emulate_power_not_pluggedz1TestSensorsBattery.test_emulate_power_not_pluggedT  s    	8 	8 	8 	8 	8 	ZY??? 	1)++9UBBBB8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                     fd}t           t          j        d|          5 }t          j                    j        du sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                     |                      d          rt          |                      d          rt          j        d          S  | g|R i |S )Nr  r  dischargingr  r  s      r2   r   zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockd  sb    }}899 (''}}Y'' 8{=111 y7777777rE   r   r[  Fr  r  s      @r2    test_emulate_power_not_plugged_2z3TestSensorsBattery.test_emulate_power_not_plugged_2a  s    	8 	8 	8 	8 	8 	ZY??? 	1)++9UBBBB8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                     fd}t           t          j        d|          5 }t          j                    j        J |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                     |                      d          rt          |                      d          rt          j        d          S  | g|R i |S )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/online#/sys/class/power_supply/BAT0/statuss   ???)rl   r  r   r   r  s      r2   r   zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockt  sk         ( ('DEE 8z&))) y7777777rE   r   r[  r  r  s      @r2   test_emulate_power_undeterminedz2TestSensorsBattery.test_emulate_power_undeterminedq  s    		8 		8 		8 		8 		8 	ZY??? 	1)++9AAA8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   $AAAc                     t          ddi          5 }t          j                    j        dk    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )N(/sys/class/power_supply/BAT0/energy_fullr  r   )r   r   r  r  r   r(  s     r2   test_emulate_energy_full_0z-TestSensorsBattery.test_emulate_energy_full_0  s    7>
 
 	)++3q88888OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (AAAc                 L   t          dt                    5  t          dt                    5  t          ddi          5  t          j                    j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )r   r  r   r   r  r  r   s    r2   "test_emulate_energy_full_not_availz5TestSensorsBattery.test_emulate_energy_full_not_avail  s    !6
 
 	B 	B %:!  B B '<eD  B B "133;rAAAAAB B B B B B B B B B B B B B B	B B B B B B B B B B B B B B B		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BsW   BBA*B*A..B1A.2B5BB	BB		BB Bc                 L   t          dt                    5  t          dt                    5  t          dt                    5  t          j                    j        J 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r  r  )r   r  r   r  r  r  s    r2   test_emulate_no_powerz(TestSensorsBattery.test_emulate_no_power  s    /1B
 
 
	J 
	J %46G  J J )9%  J J "133AIIII	J J J J J J J J J J J J J J JJ J J J J J J J J J J J J J J
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	JsX   BBA*B*A..B1A.2B5BB	BB		BB BN)r   r   r   r   rj  rk  rn  ro  r  r  r  r  r  r  r  r  r  r@   rE   r2   r  r  '  s         [FL   )E   2 2 2  "          &  B B B J J J J JrE   r  c                       e Zd Zd ZdS )TestSensorsBatteryEmulatedc                 *   fd}t           t          j        ddg          5 }t          j        d|          5 }t          j                    J 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        sJ |j        sJ d S )Nc                    |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S  | g|R i |S )Nz/energy_now60000000z
/power_now0z/energy_full60000001r  r   r   r  s      r2   r   z5TestSensorsBatteryEmulated.test_it.<locals>.open_mock  s    }}]++ 8{:...|,, 8{3'''~.. 8{:... y7777777rE   z
os.listdirBAT0r{  r   r[  )rG   r   r   r   r  r   )r   r   mlistdirmopenr   s       @r2   test_itz"TestSensorsBatteryEmulated.test_it  s/   	8 	8 	8 	8 	8 	ZF8<<< 	<OCCC <u-//;;;;< < < < < < < < < < < < < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< |s4   A6AA6A#	#A6&A#	'A66A:=A:N)r   r   r   r  r@   rE   r2   r  r    s#            rE   r  c                       e Zd Zd Zd ZdS )TestSensorsTemperaturesc                    fd}t           t          j        d|          5  t          j        ddg          5  t          j                    d         d         }|j        d	k    sJ |j        d
k    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                    |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d	          rt          j        d
          S  | g|R i |S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)r  r   r   r   r  s      r2   r   zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mock  s    }}W%% 8{6***~.. 	8{7+++~.. 8z(+++|,, 8z(+++}-- 8z(+++ y7777777rE   r   r[  rz  z/sys/class/hwmon/hwmon0/temp1r{  r   r   r        >@g      D@      I@	rG   r   r   r   sensors_temperaturesr  r  highcritical)r   r   tempr   s      @r2   test_emulate_class_hwmonz0TestSensorsTemperatures.test_emulate_class_hwmon  sz   	8 	8 	8 	8 	8 	ZY??? 		- 		-+J*K   - - 244V<Q?zW,,,,|t++++yD((((},,,,,- - - - - - - - - - - - - - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s5   B5ABB5B!	!B5$B!	%B55B9<B9c                    fd}d }t           t          j        d|          5  t          j        dd|          5  t          j                    d         d	         }|j        d
k    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                 d   |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S  | g|R i |S )	N0_tempr  r  r  0_typer  typer   )r  r   r   r   r  s      r2   r   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mock  s    }}X&& 	8z(+++v&& 8z(+++x(( 8{:...v&& 8{6*** y7777777rE   c                 8    | dv rg S | dk    rdgS | dk    rddgS g S )N>   /sys/class/hwmon/hwmon*/temp*_*&/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_tempr@   rT  s    r2   	glob_mockzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mock  sS        	;;;:;;GGGHH  IrE   r   r[  rz  Tr   r   r   r[   r  r  r  )r   r   r  r  r   s       @r2   test_emulate_class_thermalz2TestSensorsTemperatures.test_emulate_class_thermal  s~   
	8 
	8 
	8 
	8 
	8	 	 	 	ZY??? 	- 	-K)LLL - -244V<Q?zR''''|t++++yD((((},,,,,- - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   B8AB B8 B$	$B8'B$	(B88B<?B<N)r   r   r   r  r  r@   rE   r2   r  r    s2        - - -6#- #- #- #- #-rE   r  c                       e Zd Zd ZdS )TestSensorsFansc                 P   fd}t           t          j        d|          5  t          j        ddg          5  t          j                    d         d         }|j        d	k    sJ |j        d
k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                    |                      d          rt          j        d          S |                      d          rt          j        d          S |                      d          rt          j        d          S  | g|R i |S )Nr  r   z/fan1_labelr  z/fan1_input2000r  r  s      r2   r   z4TestSensorsFans.test_emulate_data.<locals>.open_mock  s    }}W%% 8{6***}-- 8{7+++}-- 8{6*** y7777777rE   r   r[  rz  z/sys/class/hwmon/hwmon2/fan1r{  r   r   r  i  )rG   r   r   r   sensors_fansr  r  )r   r   fanr   s      @r2   r  z!TestSensorsFans.test_emulate_data  sT   	8 	8 	8 	8 	8 	ZY??? 	+ 	++I*J   + + )++F3A6yG++++{d*****+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s4   B:B7BB	B
B	BB"BN)r   r   r   r  r@   rE   r2   r	  r	    s#        + + + + +rE   r	  c                   *   e Zd Z e            d             Zd Zej                            e	d          d             Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zej                            e d          d             Zd Zd Zd ZdS )TestProcessc                    |                                  }t          j                            |j                                                  \  }}}t          j        |j                                      d          }t          |t          d |D                       z
            dk     sJ t          |t          d |D                       z
            dk     sJ t          |t          d |D                       z
            dk     sJ d S )NF)groupedc              3   4   K   | ]}|j         |j        z   V  d S rz   )private_dirtyprivate_cleanr{   s     r2   r}   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>'  s+      JJ!/AO;JJJJJJrE   r  c              3   $   K   | ]}|j         V  d S rz   )pssr{   s     r2   r}   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>*  s$      11qQU111111rE   c              3   $   K   | ]}|j         V  d S rz   )r#  r{   s     r2   r}   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>+  s$      33af333333rE   )	spawn_testprocr   rb  r  r  _parse_smapsmemory_mapsr   r  )r   sprocussr  r#  mapss         r2   test_parse_smaps_vs_memory_mapsz+TestProcess.test_parse_smaps_vs_memory_maps!  s   ##%%00;;HHJJS$~ei((44U4CCcJJTJJJJJJKK    311D11111122T99994#33d33333344t;;;;;;rE   c                    t          j        d                                          }t          dt	          j                     d|i          5 }t          j                            t	          j                              }|	                                \  }}}|j
        sJ |dk    sJ |dk    sJ |dk    sJ 	 d d d            d S # 1 swxY w Y   d S )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//smapsi l  r  i <  )r   r   r   r   r7  r  r   rb  r  r  r   )r   r   r   r  r  r  r#  s          r2   test_parse_smaps_mockedz#TestProcess.test_parse_smaps_mocked-  s   / #  , - 	.  < < < <gFGG 	%1''	44A^^--NCd8OOO-----(????9$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A*CC	C	zunreliable on PYPYr   c                 `   d }|                                  }t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |           t          |d          5   ||          j        dk    sJ 	 d d d            n# 1 swxY w Y   t          |           t          |d	          5   ||          j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )
Nc                    t          j                    }t          j                    t          z   }	 |                                D ]G}|j        t          j                            |           k    r|c S t          j                    |k    r nH]rz   )	r   r  timer   
open_filesrl  r7  abspathr  )fnamer  	giveup_atfiles       r2   get_test_filez7TestProcess.test_open_files_mode.<locals>.get_test_fileQ  s      A	n4ILLNN  DyBGOOE$:$:::#y00 1	rE   r   rr   zr+zw+za+r|   zx+)r  rG   moder   )r   r,  testfns      r2   test_open_files_modez TestProcess.test_open_files_modeO  s~   		@ 		@ 		@ ""&# 	5 	5 =((-44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5&\\ 	5 	5 =((-44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5&# 	5 	5 =((-44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5&$ 	6 	6 =((-55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6&$ 	6 	6 =((-55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6&$ 	6 	6 =((-55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	F&# 	5 	5 =((-44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5F&$ 	6 	6 =((-55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   AAA&B

BB%C		CC$DDD#EEE"FF
F
0GGG>H##H'*H'c                 v   t          j                                                    t          |                                 d          5  t          fd           t          j        dt                    5 }                                g k    sJ |j	        sJ 	 d d d            n# 1 swxY w Y   t          j        dt          t          j        d                    5 }                                g k    sJ |j	        sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   c                  h    t                                                    t                     k    S rz   rJ   r'  filesr  s   r2   r  z7TestProcess.test_open_files_file_gone.<locals>.<lambda>x  "    s1<<>>22c%jj@ rE   psutil._pslinux.os.readlinkr[  r[   )r   r  r'  rG   r  r   r   r   r  r   r  errnoEINVALr   r   r5  r  s     @@r2   test_open_files_file_gonez%TestProcess.test_open_files_file_goneq  s    N$//##S)) 	  	 @@@@@AAA--     ||~~++++x                              -#EL"55     ||~~++++x                             	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 sZ   /D.;$B, D.,B0	0D.3B0	41D.%$D
D.D	D.D	D..D25D2c                    t          j                                                    t          |                                 d          5  t          fd           t          j        dt                    5 }                                g k    sJ |j	        sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   c                  h    t                                                    t                     k    S rz   r3  r4  s   r2   r  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>  r6  rE   r   r[  )
r   r  r'  rG   r  r   r   r   r  r   r:  s     @@r2   test_open_files_fd_gonez#TestProcess.test_open_files_fd_gone  sO    N$//##S)) 	  	 @@@@@AAA->    ||~~++++x	                             	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s6   /C;$B, C,B0	0C3B0	4CCCc                 $   t          j                                                    t          |                                 d          5  t          fd           d}t          j        |t          t          j
        d                    5 }t          j        d          5                                  g k    sJ |j        sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   c                  h    t                                                    t                     k    S rz   r3  r4  s   r2   r  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>  r6  rE   r7  r[   r[  psutil._pslinux.debug)r   r  r'  rG   r  r   r   r   r  r8  ENAMETOOLONGr   )r   patch_pointr   r5  r  s      @@r2   test_open_files_enametoolongz(TestProcess.test_open_files_enametoolong  s    N$//##S)) 		$ 		$@@@@@AAA7K1CR)H)H   $Z 788 $ $<<>>R////8OOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $$ $ $ $ $ $ $ $ $ $ $ $ $ $ $			$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$s[   ADC-%$C
C-CC-CC-!D-C1	1D4C1	5DD	D	c                     t          j        di           5 }t          j                            t          j                                                              J |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nz)psutil._pslinux._psposix.get_terminal_mapr{  )	r   r   r   rb  r  r7  r  terminalr   r(  s     r2   test_terminal_mockedz TestProcess.test_terminal_mocked  s    Z7b
 
 
 	?**29;;77@@BBJJJ8OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA33A7:A7c                    t          j                    }t          j        d          }t	          j        d|d          5 }|                                ddgk    sJ |j        sJ 	 d d d            n# 1 swxY w Y   t          j        d          }t	          j        d|d          5 }|                                g dk    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )	Nzfoo bar r  Tr_  foobarz	foo bar  rI  rJ  r[   r   r  r   r   r   r   cmdliner   r   r  rh  r   s       r2   test_cmdline_mockedzTestProcess.test_cmdline_mocked  sy   NK 011	Z!	$
 
 
 	99;;5%.00008OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 K 455	Z!	$
 
 
 	99;;"4"4"444448OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#   &A22A69A6(&CC #C c                    t          j                    }t          j        d          }t	          j        d|d          5 }|                                ddgk    sJ |j        sJ 	 d d d            n# 1 swxY w Y   t          j        d          }t	          j        d|d          5 }|                                g dk    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )	Nzfoo bar r  Tr_  rI  rJ  z	foo bar  rK  rL  rN  s       r2   test_cmdline_spaces_mockedz&TestProcess.test_cmdline_spaces_mocked  sw   NK
++	Z!	$
 
 
 	99;;5%.00008OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 K,,	Z!	$
 
 
 	99;;"4"4"444448OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rP  c                     t          j                    }t          j        d          }t	          j        d|d          5 }|                                ddgk    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzfoo bar r  Tr_  rI  rJ  rL  rN  s       r2   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  s     NK 011	Z!	$
 
 
 	99;;5%.00008OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   &A33A7:A7c                    t          j        dd          5  t          j                                                    dk    sJ t          j                                                    dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr7  z/home/foo (deleted)r{  z	/home/foo)r   r   r   r  execwdr  s    r2   !test_readlink_path_deleted_mockedz-TestProcess.test_readlink_path_deleted_mocked  s    Z)8M
 
 
 	9 	9 >##''))[8888>##''))[88888		9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   AA<<B B c                    fd}t           t          j        d|          5 }t          j                                                    }|j        sJ |g k    sJ 	 d d d            n# 1 swxY w Y   fd}t          j        d|          5  t          j        t          j	                  5  t          j                                                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                 ~    |                      dt          j                     d          rt           | g|R i |S Nr!  z/task)rl   r7  r  r  r  s      r2   open_mock_1z4TestProcess.test_threads_mocked.<locals>.open_mock_1  sO    :	:::;; (''9T3D333F333rE   r   r[  c                 ~    |                      dt          j                     d          rt           | g|R i |S r[  )rl   r7  r  PermissionErrorr  s      r2   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_2  sO    :	:::;; &%%9T3D333F333rE   )
rG   r   r   r   r  r  r   r   r(  AccessDenied)r   r\  r   r   r_  r   s        @r2   test_threads_mockedzTestProcess.test_threads_mocked  s   
	4 	4 	4 	4 	4
 	Z[AAA 	Q.""**,,C8OOO"99999	 	 	 	 	 	 	 	 	 	 	 	 	 	 		4 	4 	4 	4 	4
 Z[AAA 	+ 	+v233 + +  ((***+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+sG   7A((A,/A,C7-&CC7C#	#C7&C#	'C77C;>C;c                 8   t          j        dt                    5 }t          j        dg           5  t          j                                                    }|j        sJ |dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nzpsutil._pslinux.readlinkr[  zpsutil._pslinux.Process.cmdliner{  r[   )r   r   r  r   r  rV  r   )r   r   r   s      r2   test_exe_mockedzTestProcess.test_exe_mocked  s'   Z&4E
 
 
 		!1   ! ! n&&**,,xbyyyyy! ! ! ! ! ! ! ! ! ! ! ! ! ! !			! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		!s4   B7A7+B7A;	;B>A;	?BBBc                 P   t          dt          j                     dt                    5 }t	          j                    }t          j        t                    5  |                                 d d d            n# 1 swxY w Y   |j	        sJ 	 d d d            d S # 1 swxY w Y   d S )Nr!  r"  )
r   r7  r  r  r   r  r   r(  r  r   r   r   r  s      r2   test_issue_1014zTestProcess.test_issue_1014  s    !(RY[[(((*;
 
 	  A011                                 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   -BA9-B9A=	=B A=	BB"Bc                    t          j                    }t          dt          j                     dt
                    5  t          j        dd          5  t          j	        t           j
                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr!  z/statmr  Fr{  )r   r  r   r7  r  r  r   r   r   r(  r  memory_info)r   r  s     r2   test_issue_2418zTestProcess.test_issue_2418  s|   N (RY[[(((*;
 
 	$ 	$ ,5AAA $ $]6#788 $ $MMOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$sY   CB,4B	B,BB,BB, C,B0	0C3B0	4CCCr  c                    t          j        dt          t          j        d                    5 }t          j        dd          5 }t          j                    }|                                 t          j	        t
          j
                  5 }|                    t
          j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        sJ |j        sJ |j        j        |j        k    sJ |j        j        |                                k    sJ d S )Nzresource.prlimitr[   r[  z"psutil._pslinux.Process._is_zombieTr{  )r   r   r  r8  ENOSYSr   r  r   r   r(  ZombieProcessrlimitRLIMIT_NOFILEr   rB  r  )r   r  r  r  cms        r2   test_rlimit_zombiezTestProcess.test_rlimit_zombie&  s   
 ZGEL",E,E
 
 
 		344   3N$$]6#788 3BHHV12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 yyx|qu$$$$x}((((((sZ   C&AC B8,C8B<<C?B< CC&C	C&C	C&&C*-C*c                 L   g d}d                     |                                          }t          dt          j                     d|i          5  t          j                    }|                                dk    sJ |                                t
          j	        k    sJ |
                                dk    sJ |                                dt          z  t          j                    z   k    sJ |                                }|j        dt          z  k    sJ |j        d	t          z  k    sJ |j        d
t          z  k    sJ |j        dt          z  k    sJ |j        dt          z  k    sJ |                                dk    sJ 	 d d d            d S # 1 swxY w Y   d S )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  rx  r  r  7r   r!  z/statcatr~   r0  r.  r   r?   r   r2  )rM   r   r   r7  r  r   r  r   statusSTATUS_ZOMBIEppidcreate_timer   r|  r5  r  systemchildren_userchildren_systemiowaitcpu_num)r   r   r   r  cpus        r2   test_stat_file_parsingz"TestProcess.test_stat_file_parsing:  s   +
 +
 +
X ((4..'')) ; ; ; ;WEFF 	$ 	$  A6688u$$$$88::!555556688q======??a+o8H8J8J&JJJJJ++--C8q;....:[0000$K7777&!k/9999:[000099;;!#####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   D9FF Fc                    t          j        d                                          }t          dt	          j                     d|i          5  t          j                    }|                                j	        dk    sJ |                                j
        dk    sJ |                                dk    sJ |                                }|j        dk    sJ |j        dk    sJ |j        d	k    sJ |                                }|j        d
k    sJ |j        dk    sJ |j        dk    sJ |j                                        t'          t)          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )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  r      B   i  i  i  i  i  i  r3  )r   r   r   r   r7  r  r   r  num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistrL   )r   r   r  r  r  s        r2   test_status_file_parsingz$TestProcess.test_status_file_parsingv  s   / #/ 0 0 17 	  = = = =wGHH 	B 	B  A%%''1R7777%%''3r9999==??b((((6688D9$$$$>T)))):%%%%6688D9$$$$>T)))):%%%%7--//4a>>AAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   DE66E:=E:c                 Z   t          j        dt          t          j        d                    5 }t          j                    }t          j        d          5  |                                g k    sJ |j        sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr7  r[   r[  rA  )	r   r   r  r8  rB  r   r  r  r   re  s      r2   !test_net_connections_enametoolongz-TestProcess.test_net_connections_enametoolong  s/    Z) 2B77
 
 
 	    A344    ((**b0000x                             	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s5   (B $B<B B	B B	B  B$'B$N)r   r   r   r   r  r#  r   rj  rk  r   r0  r;  r>  rD  rG  rO  rR  rT  rX  ra  rc  rf  ri  r   rp  r  r  r  r@   rE   r2   r  r    s       	< 	< 	<% % %D [%9::6 6 ;:6B     .     $ $ $&        	 	 	9 9 9+ + +6
! 
! 
!	 	 	$ $ $ [J??) ) @?)&:$ :$ :$xB B B0         rE   r  c                       e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Z e            d
             Zd Zd ZdS )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.
    c                 6    t          j                    | _        d S rz   )r   r  proc)clss    r2   
setUpClassz#TestProcessAgainstStatus.setUpClass  s    >##rE   c                    t           j                            d| j        j         d          5 }|D ]}|                                }|                    |          rY|                    d          d         }	 t          |          c cd d d            S # t          $ r |cY c cd d d            S w xY wt          d|          # 1 swxY w Y   d S )Nr!  r  	r.  r   )
r   _psplatform	open_textr  r  r   rl   	partitionro   rK   )r   	linestartrQ   rS   rB  s        r2   read_status_filez)TestProcessAgainstStatus.read_status_file  sW   ))+TY]+++
 
 	: % %zz||??9-- % NN4003E%"5zz))	: 	: 	: 	: 	: 	: 	: 	: & % % %$	: 	: 	: 	: 	: 	: 	: 	:%	% 8988999	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s6   A	C8BCB2!C1B22CCCc                 n    |                      d          }| j                                        |k    sJ d S )NzName:)r  r  r   r   rB  s     r2   	test_namez"TestProcessAgainstStatus.test_name  8    %%g..y~~5((((((rE   c                     |                      d          }||                    d          dz   |                    d                   }|                    dd          }| j                                        |k    sJ d S )NzState:(r~   )r   r@  )r  rl  rfindr  r  r{  r  s     r2   test_statusz$TestProcessAgainstStatus.test_status  sw    %%h//ejjoo)EKK,<,<<=c3''y!!U******rE   c                 n    |                      d          }| j                                        |k    sJ d S )NzPPid:)r  r  r}  r  s     r2   	test_ppidz"TestProcessAgainstStatus.test_ppid  r  rE   c                 n    |                      d          }| j                                        |k    sJ d S )NzThreads:)r  r  r  r  s     r2   test_num_threadsz)TestProcessAgainstStatus.test_num_threads  s:    %%j11y$$&&%//////rE   c                     |                      d          }t          t          t          |                                dd                             }| j                                        |k    sJ d S )NzUid:r~   r?   )r  r   r   ro   rH   r  r  r  s     r2   	test_uidsz"TestProcessAgainstStatus.test_uids  `    %%f--c#u{{}}QqS12233y~~5((((((rE   c                     |                      d          }t          t          t          |                                dd                             }| j                                        |k    sJ d S )NzGid:r~   r?   )r  r   r   ro   rH   r  r  r  s     r2   	test_gidsz"TestProcessAgainstStatus.test_gids  r  rE   c                     |                      d          }| j                                        j        |k    sJ |                      d          }| j                                        j        |k    sJ d S )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r  r  r  r  r  s     r2   test_num_ctx_switchesz.TestProcessAgainstStatus.test_num_ctx_switches  st    %%&@AAy))++5>>>>%%&CDDy))++75@@@@@@rE   c                 &   |                      d          }dt          |          v rht          t          |                    d                    \  }}| j                                        t          t          ||dz                       k    sJ d S d S )NCpus_allowed_list:r@  r~   )	r  r   r   ro   rH   r  cpu_affinityr  rL   )r   rB  min_max_s       r2   test_cpu_affinityz*TestProcessAgainstStatus.test_cpu_affinity  s    %%&:;;#e**S%++c"2"233JD$9))++tE$q4I4I/J/JJJJJ JJrE   c                    |                      d          }t          j        d          5 }| j        j                                         d d d            n# 1 swxY w Y   dt          |          v r|j        rJ d S |j        sJ d S )Nr  zpsutil._pslinux.per_cpu_timesr@  )r  r   r   r  r  r  r   r   )r   rB  r   s      r2   test_cpu_affinity_eligible_cpusz8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpus  s    %%&:;;Z788 	1AIO..000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1#e**x8OOOOOs   AAAN)r   r   r   __doc__classmethodr  r  r  r  r  r  r  r  r   r  r  r  r@   rE   r2   r  r    s          $ $ [$: : :) ) )+ + +) ) )0 0 0) ) )
) ) )
 A A AK K K    rE   r  c                       e Zd Zd ZdS )	TestUtilsc                     t          j        dd          5 }t          j                            d          dk    sJ |j        sJ 	 d d d            d S # 1 swxY w Y   d S )Nzos.readlinkzfoo (deleted)r{  rJ  rI  )r   r   r   r  readlinkr   r(  s     r2   test_readlinkzTestUtils.test_readlink  s    ZODDD 	%..u55>>>>8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /AAAN)r   r   r   r  r@   rE   r2   r  r    s#            rE   r  )]r  rm   
contextlibr8  r   r7  r  r   rn  r&   r-   r   r&  r   unittestr   r   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra  r   r   r   r   rl  r(  dirname__file__HEREr,   r`   r6   r:   r9  r3   r7   r;   rY   rb   rv   r   r   r   contextmanagerr   r   rj  rk  r   r   r   r  r,  r=  rq  r  r  r  r  r  r  r  r  r-  r^  rz  r  r  r  r	  r  r  r  r@   rE   r2   <module>r     s              				 				  				                                ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % ' ' ' ' ' ' # # # # # #       ( ( ( ( ( ( - - - - - - * * * * * * ' ' ' ' ' ' # # # # # # # # # # # #       & & & & & & ) ) ) ) ) ) $ $ $ $ $ $       0 0 0 0 0 0 	 ,++++++222222444444++++++ 
wrwx0011 K	
 	
 	
	
 	
 	
	
 	
 	
  ,F F FD D DC C C(@ @ @@ @ @   (   ( Il333B 3B 3B 3B 3B 3B 3B 433Bl Il33.D .D .D .D .D> .D .D 43.Db Il33F- F- F- F- F-> F- F- 43F-\ Il33P P P P P> P P 43Pp Il33. . . . . . . 43.& Il33F  F  F  F  F  F  F  43F R Il33    n   43@ Il33V/ V/ V/ V/ V/^ V/ V/ 43V/r Il336 6 6 6 6 6 6 436 Il33	? 	? 	? 	? 	?. 	? 	? 43	?" Il33? ? ? ? ?> ? ? 43?P Il3335 35 35 35 35> 35 35 4335l Il330E 0E 0E 0E 0En 0E 0E 430Ef Il33    ~   43< Il33<) <) <) <) <)~ <) <) 43<)~ Il33D* D* D* D* D*~ D* D* 43D*N Il33<2 <2 <2 <2 <2^ <2 <2 43<2H Il33n n n n n~ n n 43nl Il33OL99J J J J J J J :9 43JD Il33       43( Il33?- ?- ?- ?- ?-n ?- ?- 43?-D Il33+ + + + +n + + 43+6 Il33y  y  y  y  y . y  y  43y x Il33J J J J J~ J J 43Jd Il33       43  rE   