
    g[d                    2   d Z ddlm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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' 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.m0Z0 dd!l.m1Z1 dd"l.m2Z2 ej3        4                    ej3        5                    e6                    Z7d#Z8d$Z9d%Z:d&Z;d'Z<erd(Z= ej        d)           Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGejH        d3             ZIejH        d4             ZJe'jK        L                    e d56           G d7 d8e#                      ZMe'jK        L                    e d56           G d9 d:e#                      ZNe'jK        L                    e d56           G d; d<e#                      ZOe'jK        L                    e d56           G d= d>e#                      ZPe'jK        L                    e d56           G d? d@e#                      ZQe'jK        L                    e d56           G dA dBe#                      ZRe'jK        L                    e d56           G dC dDe#                      ZSe'jK        L                    e d56           G dE dFe#                      ZTe'jK        L                    e d56           G dG dHe#                      ZUe'jK        L                    e d56           G dI dJe#                      ZVe'jK        L                    e d56           G dK dLe#                      ZWe'jK        L                    e d56          e'jK        L                    e dM6           G dN dOe#                                  ZXe'jK        L                    e d56           G dP dQe#                      ZYe'jK        L                    e d56           G dR dSe#                      ZZe'jK        L                    e d56           G dT dUe#                      Z[e'jK        L                    e d56           G dV dWe#                      Z\e'jK        L                    e d56           G dX dYe#                      Z]e'jK        L                    e d56           G dZ d[e#                      Z^e'jK        L                    e d56          e'jK        L                    e d\6           G d] d^e#                                  Z_e'jK        L                    e d56           G d_ d`e#                      Z`e'jK        L                    e d56           G da dbe#                      Zae'jK        L                    e d56           G dc dde#                      Zbe'jK        L                    e d56           G de dfe#                      Zce'jK        L                    e d56           G dg dhe#                      Zde'jK        L                    e d56           G di dje#                      ZedS )kzLinux specific tests.    )divisionN)LINUX)PY3)FileNotFoundError)
basestring)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)PYTEST_PARALLEL)	QEMU_USER)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)
ThreadTask)
call_until)mock)pytest)reload_module)retry_on_failure)safe_rmpath)sh)skip_on_not_implemented)which)CLOCK_TICKS)RootFsDeviceFinder)calculate_avail_vmem)open_binaryi  i  i'  i  i  i   z/sys/class/hwmon/hwmon*c                    dd l }| d d         } t          rt          | d          } t          j        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      )fcntlr   bytessocketAF_INET
SOCK_DGRAM
contextlibclosing	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer*   ss      S/var/www/html/ai-engine/env/lib/python3.11/site-packages/psutil/tests/test_linux.pyget_ipv4_addressr;   N   s    LLLCRC[F
 (vw''fnf&788A		A		 
 
KK

KVV1L1LMM2
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   #ACCCc                    dd l }| d d         } t          rt          | d          } t          j        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/   r0   r1   r2   r3   SIOCGIFNETMASKr5   r6   r7   s      r:   get_ipv4_netmaskr?   ]      LLLCRC[F
 (vw''fnf&788A		A		 
 
KK

NFK,G,G e
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
r<   c                    dd l }| d d         } t          rt          | d          } t          j        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/   r0   r1   r2   r3   SIOCGIFBRDADDRr5   r6   r7   s      r:   get_ipv4_broadcastrC   l   r@   r<   c                    t          d          5 }g }|D ]7}|                                }|d         | k    r|                    |           8t          |          dk    rt	          d| z            	 d d d            n# 1 swxY w Y   t          t          |                    D ]}||         d         }g }t          dt          |          d          D ]"}|                    |||dz                       #d                    |          }	t          j        t          j	        |	          }
t          j
        t          j	        |
          ||<   |S )Nz/proc/net/if_inet6r   zcould not find interface %r   :)opensplitappendlen
ValueErrorrangejoinr,   	inet_ptonAF_INET6	inet_ntop)r8   f
all_fieldslinefieldsiunformattedgroupsj	formattedpackeds              r:   get_ipv6_addressesr\   {   s   	"	#	# Eq
 	* 	*DZZ\\FbzV##!!&)))z??a:VCDDD  E E E E E E E E E E E E E E E 3z??## B B mA&q#k**A.. 	2 	2AMM+a!a%i01111HHV$$	!&/9==(&AA
1s   A"A??BBc           	         dd l }| d d         } t          rt          | d          } t          j        t          j        t          j                  }t          j        |          5  |                    |	                                t          t          j        d|                     }t          rd ndd l}|j        d                    f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                     | S N xs    r:   ordzget_mac_address.<locals>.ord   s         c                 ,    g | ]}d  |          z  S )z%02x:r`   ).0charrc   s     r:   
<listcomp>z#get_mac_address.<locals>.<listcomp>   s&    DDD##d))+DDDrd      r)   rE   )r*   r   r+   r,   r-   r.   r/   r0   r2   r3   SIOCGIFHWADDRr5   r6   __builtin__rc   rN   )r8   r*   r9   inforl   rc   s        @r:   get_mac_addressrn      se   LLLCRC[F
 (vw''fnf&788A		A		 K K{{HHJJv{66'B'B
 
  	"    /CwwDDDDRUDDDEEcrcJK K K K K K K K K K K K K K K K K Ks   $BC99C= C=c                     t          ddgddi          } |                     d          }|D ]{}|                    d          rd|                                \  }}}}t          j        dd          } |t          |          t          |          t          |                    c S |t          d	d                    |          z            )
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:
%s)r   rI   
startswithcollections
namedtupleintrL   rN   )outlinesrT   _totalusedrp   nts           r:   	free_swapr      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 1DIIe4D4DD  rd   c                  v   t          ddgddi          } |                     d          }|D ]h}|                    d          rQd |                                d	d
         D             \  }}}}t          j        dd          } ||||||           c S it          dd                    |          z            )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rp   rq   rr   rs   rt   rv   Memc              3   4   K   | ]}t          |          V  d S r_   )r{   rg   rb   s     r:   	<genexpr>zfree_physmem.<locals>.<genexpr>   s(      (K(KAQ(K(K(K(K(K(Krd         ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%s)r   rI   rx   ry   rz   rL   rN   )r|   r}   rT   r   r   rp   sharedr   s           r:   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 0499U3C3CC  rd   c                    t          ddgddi          }|                    d          D ]D}|                                }| |v r*t          |                    d          d                   c S Et	          d	| z            )
Nvmstatz-srr   rs   rt   rv    r   z can't find %r in 'vmstat' output)r   rI   stripr{   rL   )statr|   rT   s      r:   r   r      s    
hFI#6
7
7
7C		$ + +zz||4<<tzz#q)***** 
7$>
?
??rd   c            
         t          ddg                                          } d| v rt          j        d          t	          t          t          t          j        d| 	                                d                                       S )Nrp   z-VUNKNOWNzcan't determine free versionz\d+rE   )
r   r   r   skiptuplemapr{   refindallrI   )r|   s    r:   get_free_version_infor      sk    
fd^


"
"
$
$CCk8999S"*VSYY[[_==>>???rd   c              #       K    fd}t           t          rdnd}t          j        |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 r`|          }t           r=t          |t                    rt          j        |          S t          j        |          S t          j        |          S  | g|R i |S r_   )r   
isinstancer   ioStringIOBytesIO)nameargskwargscontent	orig_openpairss       r:   	open_mockz$mock_open_content.<locals>.open_mock   s    5==DkG +gz22 /;w///:g...z'***9T3D333F333rd   builtins.open__builtin__.openTcreateside_effectNrH   r   r   patch)r   r   patch_pointmr   s   `   @r:   mock_open_contentr      s      4 4 4 4 4 4 I%(@//.@K	K)	D	D	D                  s   AA
A
c              #       K    fd}t           t          rdnd}t          j        |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 r_   r`   )r   r   r   excfor_pathr   s      r:   r   z&mock_open_exception.<locals>.open_mock   s3    8I9T3D333F333rd   r   r   Tr   Nr   )r   r   r   r   r   r   s   ``   @r:   mock_open_exceptionr      s      4 4 4 4 4 4 4 I%(@//.@K	K)	D	D	D                  s   A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 r_   )r   r   psutilvirtual_memoryself	cli_valuepsutil_values      r:   
test_totalz-TestSystemVirtualMemoryAgainstFree.test_total  s6     NN(	,..4L((((((rd   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rF   r   r   free version too recent)	r   r   r   r   r   r   r   absr   r   s      r:   	test_usedz,TestSystemVirtualMemoryAgainstFree.test_used  s     !""Z//+4555 ""i//+7888 NN'	,..39|+,,/@@@@@@@rd   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S r_   )r   rp   r   r   r   r   r   s      r:   	test_freez,TestSystemVirtualMemoryAgainstFree.test_free'  sD     NN'	,..39|+,,/@@@@@@@rd   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    
)	r   r   r   r   r   r   r   r   output)r   rp   
free_valuer   s       r:   test_sharedz.TestSystemVirtualMemoryAgainstFree.test_shared-  s    ~~[
??+EFFF,..5
\)**->>>>%::|||T[[A ?>>>>rd   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	|d
|            d S )Nrp   rq   rv   	availabler   z(free does not support 'available' columnr   rE   r   r   )
r   rI   r   r   r{   r   r   r   r   r   )r   r|   r}   r   r   s        r:   test_availablez1TestSystemVirtualMemoryAgainstFree.test_available8  s     &$  		$eAh&&+HIIIU1X^^--b122J!022<LJ-..1BBBB)zz<<<= CBBBBrd   N)	__name__
__module____qualname__r   r   r   r   r   r   r`   rd   r:   r   r     s        ) ) )
 A A A" A A A
 B B B > > > > >rd   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   r   r   r   r   vmstat_valuer   s      r:   r   z/TestSystemVirtualMemoryAgainstVmstat.test_totalJ  sJ    n--4,..4<,.//2CCCCCCCrd   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   r   r   r   r   s      r:   r   z.TestSystemVirtualMemoryAgainstVmstat.test_usedO  s     !""Z//+4555 ""i//+7888m,,t3,..3<,.//2CCCCCCCrd   c                     t          d          dz  }t          j                    j        }t	          ||z
            t
          k     sJ d S )Nzfree memoryr   )r   r   r   rp   r   r   r   s      r:   r   z.TestSystemVirtualMemoryAgainstVmstat.test_freea  sJ    m,,t3,..3<,.//2CCCCCCCrd   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      r:   test_buffersz1TestSystemVirtualMemoryAgainstVmstat.test_buffersg  sJ    o..5,..6<,.//2CCCCCCCrd   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      r:   test_activez0TestSystemVirtualMemoryAgainstVmstat.test_activem  sJ    o..5,..5<,.//2CCCCCCCrd   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      r:   test_inactivez2TestSystemVirtualMemoryAgainstVmstat.test_inactives  sK    /0047,..7<,.//2CCCCCCCrd   N)
r   r   r   r   r   r   r   r   r   r   r`   rd   r:   r   r   H  s        D D D
 D D D" D D D
 D D D
 D D D
 D D D D Drd   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   calledrK   strmessager   r   r   r   r   r   slabr   r   r   wsretws         r:   test_warnings_on_missesz4TestSystemVirtualMemoryMocks.test_warnings_on_misses|  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"   rI   r{   r!   r   )r   memsrR   rT   rU   abdiff_percents           r:   test_avail_old_percentz3TestSystemVirtualMemoryMocks.test_avail_old_percent  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         r:    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         r:   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          t          j        d                    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/zoneinfono such file or directoryTr   r  r   r  )r   r   r   r   r   IOErrorerrnoENOENTr   r   r   r   r   r   r   )r   r   r   r   r   s        r:   test_avail_old_missing_zoneinfoz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfo  s    / #    	 9:: 	 	$ &ABB    ,D999 R /11C=,KKKKK1AFqy>>* * * * *              	              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ   )C4!C7AC9CC		CC	CC4C 	 C4#C 	$C44C8;C8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   r   rp   r   r   r   r   r   r   r   )r   r   r   mems       r:   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`   rd   r:   r   r   z  s        "% "% "%H % % %  8  2  >@- @- @- @- @-rd   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:)rH   read)rR   datas     r:   meminfo_has_swap_infoz*TestSystemSwapMemory.meminfo_has_swap_infoN  s     /"" 	a6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	t#;t(;;s   155c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S r_   )r   r   r   swap_memoryr   r   r   r   r   s      r:   r   zTestSystemSwapMemory.test_totalU  sD    [[&
)++1:,--0AAAAAAArd   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S r_   )r   r   r   r   r   r   r!  s      r:   r   zTestSystemSwapMemory.test_usedZ  D    [[%
)++0:,--0AAAAAAArd   c                     t                      j        }t          j                    j        }t	          ||z
            t
          k     sJ d S r_   )r   rp   r   r   r   r   r!  s      r:   r   zTestSystemSwapMemory.test_free`  r#  rd   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   rK   r   r   sinsoutr   r   r   r   r   s        r:   test_missing_sin_soutz*TestSystemSwapMemory.test_missing_sin_soutf  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          t          j        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 )	Nz/proc/vmstatr  Tr   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   r   r   rK   r   r   r(  r)  r*  s        r:   test_no_vmstat_mockedz*TestSystemSwapMemory.test_no_vmstat_mockedu  sx    GEL2MNN
 
 	%(555 %%h///(**x2ww!||||qE619~~& & & & w!||||x1}}}}}% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s5   C$B C C$C	C$C	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_sysinfor   r   rp   r   )r   r   swapcextr~   r   rp   unit_multipliers           r:   test_meminfo_against_sysinfoz1TestSystemSwapMemory.test_meminfo_against_sysinfo  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   rd   )r   r   r   r   r   r   s     r:   #test_emulate_meminfo_has_no_metricsz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metrics  s     566 	!   8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =AAN)r   r   r   staticmethodr  r   r   r   r   r+  r-  r5  r8  r`   rd   r:   r  r  L  s        < < \<B B B
 B B B
 B B B
% % %% % %&9 9 9"    rd   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=  r?  r)   guest)r   r=  r   
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   r{   rI   )r   rU   
kernel_verkernel_ver_infos       r:   test_fieldszTestSystemCPUTimes.test_fields  s    !##+Z 0"(**Q-@@C
C)9)9#)>)> ? ?@@j((f$$$$$&((((j((f$$$$$&((((i''6))))))v------rd   N)r   r   r   rJ  r`   rd   r:   r;  r;    s#        . . . . .rd   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d           d	          d
             Zej                             e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 )NrM  -r   )rH   r  r   r   r{   rI   r   	cpu_count)r   rR   values      r:   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 )NrS  c                 <    g | ]}t          j        d |          |S )zcpu\d+$)r   searchr   s     r:   ri   zITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>  s)    KKK1bi
A&>&>&JQ&J&J&Jrd   )rF  listdirrK   r   rP  )r   lscounts      r:   test_against_sysdev_cpu_numz5TestSystemCPUCountLogical.test_against_sysdev_cpu_num  sP    
 Z122KKKKKLL!!U******rd   nprocznproc utility not availablec                 t    t          t          d                    }t          j        d          |k    sJ d S )Nznproc --allTlogical)r{   r   r   rP  )r   nums     r:   test_against_nprocz,TestSystemCPUCountLogical.test_against_nproc  s>     "]##$$---444444rd   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 )#rx   r   s     r:   ri   z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>  s)    GGGQ\\#5F5FG1GGGrd   rv   Tr]  )r   rK   rI   r   rP  )r   r|   r_  s      r:   test_against_lscpuz,TestSystemCPUCountLogical.test_against_lscpu  sZ     nnGGciiooGGGHH---444444rd   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   rd   )psutil._pslinux_pslinuxcpu_count_logicalr   r   rL   r   
call_count	call_argsrH   r  r   r   r   )r   r   originalr   rR   cpuinfo_data	fake_files          r:   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skipifrF  pathexistsrR  rZ  r   r`  rh  rx  r`   rd   r:   rL  rL    sG       [GNN;<<<>   / /	 / [GNN45557   + +	 +
 [E'NN#@   5 5 5 [E'NN#@   5 5 5
"  "  "  "  " rd   rL  c                   x    e Zd Zej                             ed           d          d             Zd Zd Z	dS )TestSystemCPUCountCoresra  rb  r   c                 J   t          d          }t                      }|                    d          D ]G}|                    d          s0|                    d          }|                    |d                    Ht          j        d          t          |          k    sJ d S )Nrd  rv   rf  ,r   Fr]  )r   setrI   rx   addr   rP  rK   )r   r|   core_idsrT   rU   s        r:   rh  z*TestSystemCPUCountCores.test_against_lscpu  s     nn55IIdOO 	( 	(D??3'' (CVAY'''...#h--??????rd   c                    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ro  )r   rq  cpu_count_coresr   r   r   )r   meth_1r   meth_2s       r:   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 )Nr  r  r&  Tr'  )r   r   r   rq  r  r   )r   m1m2s      r:   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   ry  rz  r   rh  r  r  r`   rd   r:   r~  r~    sy        [E'NN#@   @ @ @$ $ $    rd   r~  c                      e Zd Z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   c                     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/policyFrg  )r{  orig_existss    r:   path_exists_mockzMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock(  s-    GHH )u"{4(((rd   os.path.existsT)r   r   )rF  r{  r|  r   r   r   cpu_freq)r   r  r  s     @r:   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/Frg  )r{  os_path_existss    r:   r  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mock;  s-    9:: ,u%~d+++rd   r  rj          Tpercpu)rF  r{  r|  r   r   r   r   rq  r  maxmin)r   r  r   freqr  s       @r:   test_emulate_use_cpuinfoz/TestSystemCPUFrequency.test_emulate_use_cpuinfo4  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                    fd}t           t          rdnd}t          j        ||          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   700000rl  s   cpu MHz     : 500endswithrx   r   r   r   r   r   r   s      r:   r   z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockR  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7rd   r   r   rj  r  Tr       @@r       @g     @	rH   r   r   r   r   r  currentr  r  r   r   r   r  r   s       @r:   test_emulate_dataz(TestSystemCPUFrequency.test_emulate_dataP  st   	8 	8 	8 	8 	8$ 	),Doo2DZ;;; 		- 		-,4@@@ - -((|u,,,, 8s??8u,,,,8s??8u,,,,- - - - - - - - - - - - - - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s6   B;AB#B;#B'	'B;*B'	+B;;B?B?c                    fd}t           t          rdnd}t          j        ||          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  rl  s#   cpu MHz     : 100
cpu MHz     : 400r  )r   r   r   nr   s       r:   r   z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mocks  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7rd   r   r   rj  r  Tr  !psutil._pslinux.cpu_count_logicalr=  r  r         Y@r  g      i@g     r@r   g      y@r  r  r  r  s       @r:   test_emulate_multi_cpuz-TestSystemCPUFrequency.test_emulate_multi_cpuq  si   	8 	8 	8 	8 	8> 	),Doo2DZ;;; 	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 	4sZ   E$ECD5)E5D99E<D9=E E$E	E$E	E$$E(+E(c                    fd}t           t          rdnd}t          j        ||          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          t          j        d          |                      d          rt	          j        d          S | dk    rt	          j        d          S  | g|R i |S )Nr  re   z/cpuinfo_cur_freqr  rl  s   cpu MHz     : 200)r  r  r  r  r   r   r  s      r:   r   zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mock  s    }}011 8elB///233 8z),,,((z"6777 y7777777rd   r   r   rj  r  Tr  r  r      )rH   r   r   r   r   r  r  r  s       @r:   %test_emulate_no_scaling_cur_freq_filez<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file  s   	8 	8 	8 	8 	8 	),Doo2DZ;;; 	/ 	/,4@@@ / /Z7a   / / "?,,D<3.....	/ / / / / / / / / / / / / / // / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/sY   B:B"!B?B"BB"BB"B:"B&	&B:)B&	*B::B>B>N)r   r   r   r   ry  rz  r   r  r   r  r  r  r  r`   rd   r:   r  r  #  sG       [L(AA% % BA% [L(AA[F   " "  BA"0 [L(AA- - BA-@ [L(AA14 14 BA14f [L(AA/ / BA/ / /rd   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      r:   test_interruptsz"TestSystemCPUStats.test_interrupts  sD    l++'))4<,.//#555555rd   N)r   r   r   r  r`   rd   r:   r  r    s#        6 6 6 6 6rd   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   
getloadavgrH   r  rI   r   float)r   r   rR   
proc_values       r:   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   ry  rz  r   r  r`   rd   r:   r  r    sG        [N*?CC? ? DC? ? ?rd   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addressrn   r,   r-   r;   netmaskr?   	broadcastrC   rP   rI   r\   )r   r   addrsaddrr  s        r:   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&>&>>>>>%?	? 	?rd   N)r   r   r   r  r`   rd   r:   r  r    s#        ? ? ? ? ?rd   r  QEMU user not supportedc                       e Zd Zej                             ed           d          d             Zd Zej                             ed           d          d             Z	dS )TestSystemNetIfStatsifconfigifconfig utility not availabler   c                 6   t          j                                                    D ]r\  }}	 t          d|z            }|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 %sRUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsr  r   isupmtur{   r   r   RuntimeError)r   r   statsr|   s       r:   test_against_ifconfigz*TestSystemNetIfStats.test_against_ifconfig	  s     ".006688 		 		KD%-.. zi3&6777777yCJ2C88;% %     	     		 		s   B		
BBc                 .   t          j                                                    D ]n\  }}t          d|z            5 }|j        t          |                                                                          k    sJ 	 d d d            n# 1 swxY w Y   od S )Nz/sys/class/net/%s/mtu)r   r  r  rH   r  r{   r  r   )r   r   r  rR   s       r:   test_mtuzTestSystemNetIfStats.test_mtu  s    !.006688 	: 	:KD%-455 :yC(8(8$9$999999: : : : : : : : : : : : : : :	: 	:s   ?B		B	B	c                    d}t          j                                                    D ]\  }}	 t          d|z            }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   r  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r  r   r   rV  rK   rX   r  grouplowerrI   flagsr  fail)r   matches_foundr   r  r|   matchifconfig_flagspsutil_flagss           r:   
test_flagszTestSystemNetIfStats.test_flags  s    !.006688 	> 	>KD%>-.. 	"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   ry  rz  r   r  r  r  r`   rd   r:   r  r    s         [E*&F   
 
 
: : :
 [E*&F   5 5 5 5 5rd   r  c                       e Zd Zej                             e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| z            }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   r{   r   r   )nicr   r|   s      r:   r  z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigE  sV   C]S())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 Jrd   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         r:   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   ry  rz  r   r   r  r`   rd   r:   r  r  >  su        [E*&F    +E +E  +E +E +Erd   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_ntoprj  zpsutil._pslinux.supports_ipv6Fr  c                    	 t          j         t           j        t           j                  }|                     |j                   |                    d           n# t           j        $ r Y nw xY wt          j        d           d S )N)z::1r   inet6kind)	r,   rP   SOCK_STREAM
addCleanupclosebinderrorr   net_connections)r   supports_ipv6rQ   r9   s       r:   test_emulate_ipv6_unsupportedz6TestSystemNetConnections.test_emulate_ipv6_unsupportedt  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      r:   test_emulate_unixz*TestSystemNetConnections.test_emulate_unix  s    / #    0':;; 	q"////8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAN)r   r   r   r   r   rL   r  r  r`   rd   r:   r  r  r  sn        TZ2
KKKTZ/eDDD- - ED LK-	 	 	 	 	rd   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| z                                            }|                    d          }|                    d           |                    d          }|                                d d         \  }}}}|dk    rd}t	          |          t	          |          t	          |          }}}||||fS )Nzdf -P -B 1 "%s"rv   r   rF   nonere   )r   r   rI   popr{   )r{  r|   r}   rT   devr   r   rp   s           r:   dfz4TestSystemDiskPartitions.test_against_df.<locals>.df  s    &-..4466CIIdOOEIIaLLL99Q<<D%)ZZ\\"1"%5"Cdf}} #E

CIIs4yy4EtT))rd   F)all)	r   disk_partitions
disk_usage
mountpointr   r   rp   r   r   )r   r   partusager~   r   r   rp   s           r:   test_against_dfz(TestSystemDiskPartitions.test_against_df  s    		* 		* 		* *u555 	A 	AD%do66E#%2do#6#6 AudD;%''''uzD()),@@@@@uzD()),@@@@@@	A 	Ard   c                 V   t          d          5 }|                                }d d d            n# 1 swxY w Y   d|v r9t          j                    D ]}|j        dk    r d S |                     d          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couldn't find any ZFS partitionz
nodev	zfs
r&  Trn  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r)  rwr  r   )rH   r  r   r"  fstyper  r   r   r   r   r   )r   rR   r  r%  rw  r  r  r   s           r:   test_zfs_fsz$TestSystemDiskPartitions.test_zfs_fs  s   %&& 	!6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	D==.00 C C;%''EE ( ii ABBB O44I%Id   2Z:"A!B   2  022C9$$$9$$$JJJq6=E111112 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2sB   155$D<=D:DD
	
DD
	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_PATHr7  s     r:   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   ry  rz  hasattrrF  r   r'  r.  r3  r`   rd   r:   r  r    s        [GB	"""+G    A A  A*2 2 24
) 
) 
) 
) 
)rd   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   rF   r   r?        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      r:   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 11r8  r9  Tr  Fr:  r   r=  r   rF   r   r?  r;  r<  r  r=  rI  s      r:   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~****}*****+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+rK  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 )Nr8  z   3    1   hda 1 2 3 4r9  Tr  Fr:  r   r=  r   rF   r   )r   r   r   r   r>  r?  rA  rB  rD  rF  r@  rC  rE  rG  rH  )r   r   s     r:   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
            r8  r9  Fr  Tperdiskr  r=  nvme0n1r   	nvme0n1p1r   )
r   r   r   r   r   r   r>  rK   r?  rD  rI  s      r:   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 )NrQ  r8  r9  Fr  rR  c                     | dk    S )NrT  r`   )r   s    r:   is_storage_devicezSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_device4  s    9$$rd   Tr   r   r   )	r   r   r   r   r   r   r>  r?  rD  )r   r   r   rY  s       r:   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 )Nr8  r`   r{  s    r:   r|  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsF  s    ,,,rd   T)rS  psutil._pslinux.os.path.existsr   )r   r>  r   r   rK   )r   r|  wprocfswsysfss       r:   test_emulate_use_sysfsz/TestSystemDiskIoCounters.test_emulate_use_sysfsE  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`   r]  s    r:   r|  z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsQ  s    5rd   r^  Tr   )r   r   r   r1  NotImplementedErrorr   r>  )r   r|  s     r:   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_implP  s   	 	 	 Z,Tv
 
 
 	* 	* 233 * *')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s4   A-A	A-A	A-A	A--A14A1N)
r   r   r   rJ  rM  rO  rV  rZ  ra  re  r`   rd   r:   r6  r6    s~        + + +&+ + +(* * *,9 9 9&, , ,@	+ 	+ 	+* * * * *rd   r6  c                      e Zd Zd Zd Zej                            ed          d             Z	ej                             e
d           d          ej                            ed          d                         Zd	 Zd
S )TestRootFsDeviceFinderc                     t          j        d          j        }t          j        |          | _        t          j        |          | _        d S )Nr+  )rF  r   st_devmajorminor)r   r  s     r:   setUpzTestRootFsDeviceFinder.setUp]  s4    gcll!Xc]]
Xc]]


rd   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/rG   z/uevent)r    rF  r{  r|  ask_proc_partitionsr   r1  r   rj  rk  ask_sys_dev_blockask_sys_class_block)r   finders     r:   test_call_methodsz(TestRootFsDeviceFinder.test_call_methodsb  s   #%%7>>,-- 	-&&((((011 - -**,,,- - - - - - - - - - - - - - -7>>>-1ZZZD
 
 	+ $$&&&&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 rn  )
r    findrF  r{  r|  ro  rj  rk  rq  rp  )r   rr  r  r  cbases         r:   test_comparisonsz'TestRootFsDeviceFinder.test_comparisonsr  s$   #%%{{}}(((A7>>,-- 	-**,,A7>>>-1ZZZD
 
 	- **,,A$$&&{A{ 	A 	19999 	A 	19999 	A 	19999	 	 	 	9rd   findmntzfindmnt utility not availablec                 t    t                                                      }t          d          }||k    sJ d S )Nzfindmnt -o SOURCE -rn /)r    ru  r   )r   r   findmnt_values      r:   test_against_findmntz+TestRootFsDeviceFinder.test_against_findmnt  s@    
 *++0022455},,,,,,rd   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   r~  )	r   r   r   r"  r   r	   devicer    ru  )r   r   r%  s      r:   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   rl  rs  r   ry  rz  r	   rx  r   r|  r  r`   rd   r:   rg  rg  [  s        # # #
% % %  [/NOO  PO* [E)%D    [/NOO- - PO -
2 2 2 2 2rd   rg  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_timer{   r   s      r:   test_boot_timezTestMisc.test_boot_time  sD    k**'))<  C$5$5555555rd   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          rdnd}t          j	        ||	          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                 z    |                      d          rt          t          j        d           | g|R i |S )Nr0  zrejecting access for test)rx   r  r  r  r  s      r:   r   z4TestMisc.test_no_procfs_on_import.<locals>.open_mock  sK    ??7++ M!%,0KLLL y7777777rd   r   r   rj  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
r0  )
get_testfnrF  mkdirrH   r{  rN   writer   r   r   r   r   r   r1  r  rD  cpu_percentcpu_times_percentr2  sumr   shutilrmtree)r   	my_procfsrR   r   r   per_cpu_percentper_cpu_times_percentr   s          @r:   test_no_procfs_on_importz!TestMisc.test_no_procfs_on_import  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
5	"I8 8 8 8 8
 .1H//6HKKY??? ) )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* .Q6D+Q6+D/	/Q62D/	3Q6E1%Q61E5	5Q68E5	9Q6F5)Q65F9	9Q6<F9	=Q6G;/Q6;G?	?Q6G?	Q6H?3Q6?I	Q6I	Q6#J9Q6J			Q6J		C#Q60A N<0Q6<O 	 Q6O 	B%Q6*R* 6Q::R* =Q:>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
            rk  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   rA  user)r   r   r   r  cpu_percent_percpur  cpu_times_percent_percpus          r:   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   r1  r  r   rq  r  r   r7  s     r:   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)z:0z:0.0)r   usershost)r   r  s     r:   
test_userszTestMisc.test_users  s9     LNN 	3 	3D9N22222	3 	3rd   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  r0  )r  rF  r  r   r2  r   r1  r  r   rD  r  r  r  r  r"  NoSuchProcessProcess)r   tdirs     r:   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	          |          t
          rdn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   r=  c                     | j         S r_   )idra   s    r:   <lambda>z)TestMisc.test_issue_687.<locals>.<lambda>H  s     rd   )keyr   )r   r   r  threadsrK   r   sortedr  pidas_dictpids)r   pr  tidpts        r:   test_issue_687zTestMisc.test_issue_687<  s    \\ 	, 	,  AiikkGw<<$9AA::::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 )N/proc/%s/statusre   )r   r   
pid_existsrF  getpidr   r7  s     r:   test_pid_exists_no_proc_statusz'TestMisc.test_pid_exists_no_proc_statusN  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   ry  rz  r   r  r  r`   rd   r:   r  r    s        6 6 6
@- @- @-D%/ %/ %/N  3 3 3) ) )8 [0IJJ, , KJ ,     rd   r  z
no batteryc                       e Zd Zej                             e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 -br  r   r  re   )	r   r{   rI   r   replacer   sensors_batterypercentr   )r   r|   
acpi_valuer   s       r:   test_percentzTestSensorsBattery.test_percent_  sz    mm3*0022::3CCDD
-//7:,--111111rd   c                 0   fd}t           t          rdnd}t          j        ||          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      r:   r   z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockh  H    }}899 8z$''' y7777777rd   r   r   rj  T)
rH   r   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   r   r   r   r   s       @r:   test_emulate_power_pluggedz-TestSensorsBattery.test_emulate_power_pluggedf  s    	8 	8 	8 	8 	8 	),Doo2DZ;;; 	q)++9TAAAA&((1./ / / / 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBBc                     fd}t           t          rdnd}t          j        ||          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          t          j        d          |                      d          rt	          j        d          S  | g|R i |S )Nr  re   /statuschargingr  r  r  r  r   r   r  s      r:   r   zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mock{  sn    }}899 8elB///y)) 8{;/// y7777777rd   r   r   rj  TrH   r   r   r   r   r  r  r   r  s       @r:   test_emulate_power_plugged_2z/TestSensorsBattery.test_emulate_power_plugged_2x  s    	8 	8 	8 	8 	8 	),Doo2DZ;;; 	q)++9TAAAA8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   &A##A'*A'c                     fd}t           t          rdnd}t          j        ||          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      r:   r   zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mock  r  rd   r   r   rj  Fr  r  s       @r:   test_emulate_power_not_pluggedz1TestSensorsBattery.test_emulate_power_not_plugged  s    	8 	8 	8 	8 	8 	),Doo2DZ;;; 	q)++9UBBBB8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                     fd}t           t          rdnd}t          j        ||          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          t          j        d          |                      d          rt	          j        d          S  | g|R i |S )Nr  re   r  dischargingr  r  s      r:   r   zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mock  sn    }}899 8elB///y)) 8{>222 y7777777rd   r   r   rj  Fr  r  s       @r:    test_emulate_power_not_plugged_2z3TestSensorsBattery.test_emulate_power_not_plugged_2  s    	8 	8 	8 	8 	8 	),Doo2DZ;;; 	q)++9UBBBB8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                     fd}t           t          rdnd}t          j        ||          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          t          j        d          |                      d          rt	          j        d          S  | g|R i |S )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/onlinere   #/sys/class/power_supply/BAT0/statuss   ???)rx   r  r  r  r   r   r  s      r:   r   zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mock  sw         8 elB///!FGG 8z&))) y7777777rd   r   r   rj  r  r  s       @r:   test_emulate_power_undeterminedz2TestSensorsBattery.test_emulate_power_undetermined  s    		8 		8 		8 		8 		8 	),Doo2DZ;;; 	q)++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   r7  s     r:   test_emulate_energy_full_0z-TestSensorsBattery.test_emulate_energy_full_0  s    7>
 
 	)++3q88888OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (AAAc                    t          dt          t          j        d                    5  t          dt          t          j        d                    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  re   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )r   r  r  r  r   r   r  r  r   s    r:   "test_emulate_energy_full_not_availz5TestSensorsBattery.test_emulate_energy_full_not_avail  s    !6EL"%%
 
 	B 	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sY   )B?B'$BB'BB'BB'B?'B+	+B?.B+	/B??CCc           	         t          dt          t          j        d                    5  t          dt          t          j        d                    5  t          dt          t          j        d                    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  re   r  r  )r   r  r  r  r   r  r  r  s    r:   test_emulate_no_powerz(TestSensorsBattery.test_emulate_no_power  s    /r1J1J
 
 
	J 
	J %4gelB6O6O  J J )9EL"--  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sY   )C)B:;B#B:#B''B:*B'+B:.C:B>	>CB>	CCCN)r   r   r   r   ry  rz  r   r  r  r  r  r  r  r  r  r  r`   rd   r:   r  r  \  s         [EE&MM)2NOO2 2 PO2  $  "    "  (  B B B J J J J Jrd   r  c                       e Zd Zd ZdS )TestSensorsBatteryEmulatedc                 @   fd}t           t          rdnd}t          j        ddg          5 }t          j        ||          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      r:   r   z5TestSensorsBatteryEmulated.test_it.<locals>.open_mock  s    }}]++ 8{;///|,, 8{4(((~.. 8{;/// y7777777rd   r   r   z
os.listdirBAT0r  rj  )rH   r   r   r   r   r  r   )r   r   r   mlistdirmopenr   s        @r:   test_itz"TestSensorsBatteryEmulated.test_it  s>   	8 	8 	8 	8 	8 	),Doo2DZF8<<< 	<KY??? <5-//;;;;< < < < < < < < < < < < < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< |s5   BA*B*A.	.B1A.	2BBBN)r   r   r   r  r`   rd   r:   r  r    s#            rd   r  c                       e Zd Zd Zd ZdS )TestSensorsTemperaturesc                    fd}t           t          rdnd}t          j        ||          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      r:   r   zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mock  s    }}W%% 8{7+++~.. 	8{8,,,~.. 8z(+++|,, 8z(+++}-- 8z(+++ y7777777rd   r   r   rj  r  z/sys/class/hwmon/hwmon0/temp1r  r   r   r        >@g      D@      I@
rH   r   r   r   r   sensors_temperaturesr  r  highcritical)r   r   r   tempr   s       @r:   test_emulate_class_hwmonz0TestSensorsTemperatures.test_emulate_class_hwmon  s   	8 	8 	8 	8 	8 	),Doo2DZ;;; 		- 		-+J*K   - - 244V<Q?zW,,,,|t++++yD((((},,,,,- - - - - - - - - - - - - - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s6   C AB(C (B,	,C /B,	0C  CCc                    fd}d }t           t          rdnd}t          j        ||          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      r:   r   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mock  s    }}X&& 	8z(+++v&& 8z(+++x(( 8{;///v&& 8{7+++ y7777777rd   c                 L    | dk    rg S | dk    rg S | dk    rdgS | dk    rddgS g S )Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr`   r]  s    r:   	glob_mockzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mock$  s\    888	AAA	;;;:;;GGGHH  Ird   r   r   rj  r  Tr   r   r   re   r  r   r  )r   r   r  r   r  r   s        @r:   test_emulate_class_thermalz2TestSensorsTemperatures.test_emulate_class_thermal  s   
	8 
	8 
	8 
	8 
	8	 	 	 	),Doo2DZ;;; 	- 	-K)LLL - -244V<Q?zR''''|t++++yD((((},,,,,- - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s6   C
AB+C+B/	/C2B/	3CC
CN)r   r   r   r  r  r`   rd   r:   r  r    s2        - - -8#- #- #- #- #-rd   r  c                       e Zd Zd ZdS )TestSensorsFansc                 f   fd}t           t          rdnd}t          j        ||          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      r:   r   z4TestSensorsFans.test_emulate_data.<locals>.open_mock@  s    }}W%% 8{7+++}-- 8{8,,,}-- 8{7+++ y7777777rd   r   r   rj  r  z/sys/class/hwmon/hwmon2/fan1r  r   r   r  i  )rH   r   r   r   r   sensors_fansr  r  )r   r   r   fanr   s       @r:   r  z!TestSensorsFans.test_emulate_data?  sc   	8 	8 	8 	8 	8 	),Doo2DZ;;; 	+ 	++I*J   + + )++F3A6yG++++{d*****+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s5   B&:BB&B	B&B	B&&B*-B*N)r   r   r   r  r`   rd   r:   r  r  =  s#        + + + + +rd   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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                 ,    g | ]}|j         |j        z   S r`   )private_dirtyprivate_cleanr   s     r:   ri   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>b  s!    KKK1?Q_<KKKrd   r  c                     g | ]	}|j         
S r`   )pssr   s     r:   ri   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>e  s    222ae222rd   c                     g | ]	}|j         
S r`   )r2  r   s     r:   ri   z?TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<listcomp>f  s    444!qv444rd   )	spawn_testprocr   rq  r  r  _parse_smapsmemory_mapsr   r  )r   sprocussr  r2  mapss         r:   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KKdKKKLLLMM    322T22233344t;;;;4#44t44455566======rd   c                    t          j        d                                          }t          dt	          j                    z  |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/%s/smapsi l  r  i <  )r   r   r   r   rF  r  r   rq  r  r!  r   )r   r   r   r  r$  r  r2  s          r:   test_parse_smaps_mockedz#TestProcess.test_parse_smaps_mockedh  s   / #  , - 	.  029;; >HII 	%Q''	44A^^--NCd8OOO-----(????9$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A*CCCzunreliable on PYPYr   c                 r   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          rt	          |           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 d S )
Nc                    t          j                    }t          j                    t          z   }	 |                                D ]G}|j        t          j                            |           k    r|c S t          j                    |k    r nH]r_   )	r   r  timer
   
open_filesr{  rF  abspathr  )fnamer  	giveup_atfiles       r:   get_test_filez7TestProcess.test_open_files_mode.<locals>.get_test_file  s      A	n4ILLNN  DyBGOOE$:$:::#y00 1	rd   r   rr  zr+zw+za+rb   zx+)r  rH   moder   r   )r   r2  testfns      r:   test_open_files_modez TestProcess.test_open_files_mode  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  	:fc"" 9 9$}V,,1S888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9fd## : :$}V,,1T99999: : : : : : : : : : : : : : : : : :	: 	:s   AAA&B

BB%C		CC$DDD#EEE"FF
F
7GG"GH**H.1H.c                    t          j                                                    t          |                                 d          5  t          fd           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   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 r_   rK   r-  filesr  s   r:   r  z7TestProcess.test_open_files_file_gone.<locals>.<lambda>  "    s1<<>>22c%jj@ rd   psutil._pslinux.os.readlinkre   rj  )r   r  r-  rH   r  r   r   r   OSErrorr  r  r   EINVAL)r   r   r;  r  s     @@r:   test_open_files_file_gonez%TestProcess.test_open_files_file_gone  s    N$//##S)) 	  	 @@@@@AAA-#EL"55     ||~~++++x                              -#EL"55     ||~~++++x                             	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s[   AE$B?3E?C	EC	1E8$D)E)D-	-E0D-	1EEEc                    t          j                                                    t          |                                 d          5  t          fd           t          rdnd}t          j        |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 r_   r9  r:  s   r:   r  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>  r<  rd   r   r   re   rj  )r   r  r-  rH   r  r   r   r   r   r  r  r  r   r   r   r   r;  r  s      @@r:   test_open_files_fd_gonez#TestProcess.test_open_files_fd_gone  si    N$//##S)) 	  	 @@@@@AAA-0H//6HKr)B)B    ||~~++++x	                             		  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s7   AC"$C
>C"
C	C"C	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 r_   r9  r:  s   r:   r  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>  r<  rd   r=  re   rj  psutil._pslinux.debug)r   r  r-  rH   r  r   r   r   r>  r  ENAMETOOLONGr   rC  s      @@r:   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   rq  r  rF  r  terminalr   r7  s     r:   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&  Trn  foobarz	foo bar  rN  rO  re   r   r  r   r   r   r   cmdliner   r   r  rw  r   s       r:   test_cmdline_mockedzTestProcess.test_cmdline_mocked  sy   NK 122	Z!	$
 
 
 	99;;5%.00008OOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 K 566	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&  Trn  rN  rO  z	foo bar  rP  rQ  rS  s       r:   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		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rU  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&  Trn  rN  rO  rQ  rS  s       r:   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  s     NK 122	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 )Nr=  z/home/foo (deleted)r  z	/home/foo)r   r   r   r  execwdr  s    r:   !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          rdnd}t          j        ||          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        ||          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                    z            rt          t          j        d           | g|R i |S Nz/proc/%s/taskre   )rx   rF  r  r  r  r  r  s      r:   open_mock_1z4TestProcess.test_threads_mocked.<locals>.open_mock_1-  sT    <== 8elB/// y7777777rd   r   r   rj  c                     |                      dt          j                    z            rt          t          j        d           | g|R i |S r`  )rx   rF  r  r  r  EPERMr  s      r:   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_2<  sT    <== 8ek2... y7777777rd   )rH   r   r   r   r   r  r  r   r   r1  AccessDenied)r   ra  r   r   r   rd  r   s         @r:   test_threads_mockedzTestProcess.test_threads_mocked(  s   
	8 	8 	8 	8 	8 	),Doo2DZ=== 	.""**,,C8OOO"99999	 	 	 	 	 	 	 	 	 	 	 	 	 	 		8 	8 	8 	8 	8 Z=== 	+ 	+v233 + +  ((***+ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+sG   7A33A7:A7D8&C*D*C.	.D1C.	2DD	Dc                 ^   t          j        dt          t          j        d                    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.readlinkre   rj  zpsutil._pslinux.Process.cmdliner  )	r   r   r>  r  r  r   r  r[  r   )r   r   r   s      r:   test_exe_mockedzTestProcess.test_exe_mockedF  s2   Z&GEL"4M4M
 
 
 		!1   ! ! n&&**,,xbyyyyy! ! ! ! ! ! ! ! ! ! ! ! ! ! !			! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		!s5   B"7B
>B"
B	B"B	B""B&)B&c                 t   t          dt          j                    z  t          t          j        d                    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(  re   )r   rF  r  r  r  r  r   r  r   r1  r   r"  r   r   r   r  s      r:   test_issue_1014zTestProcess.test_issue_1014R  s    !ry{{*GEL",E,E
 
 	  A011                                 8OOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   -B-*B?B-B	B-B	B--B14B1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psutil._pslinux.prlimitre   rj  z"psutil._pslinux.Process._is_zombieTr  )r   r   r>  r  ENOSYSr   r  r   r   r1  ZombieProcessrlimitRLIMIT_NOFILEr   rQ  r  )r   r  r  r  cms        r:   test_rlimit_zombiezTestProcess.test_rlimit_zombie]  s   
 Z%75<3L3L
 
 
 		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                 J   g d}d                     |                                          }t          dt          j                    z  |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  rz  r  r  7r   z/proc/%s/statcatr   r?  r=  r   rF   r   r;  )rN   r   r   rF  r  r   r  r   statusSTATUS_ZOMBIEppidcreate_timer   r  rD  r  systemchildren_userchildren_systemiowaitcpu_num)r   r   r   r  cpus        r:   test_stat_file_parsingz"TestProcess.test_stat_file_parsingq  s   +
 +
 +
X ((4..''))")++ =wGHH 	$ 	$  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                    z  |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      B   i  i  i  i  i  i  r<  )r   r   r   r   rF  r  r   r  num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistrM   )r   r   r  r  r  s        r:   test_status_file_parsingz$TestProcess.test_status_file_parsing  s   / #/ 0 0 17 	  1BIKK ?IJJ 	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E55E9<E9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 )Nr=  re   rj  rG  )	r   r   r>  r  rH  r   r  r  r   rj  s      r:   !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   ry  rz  r   r6  r@  rD  rI  rL  rT  rW  rY  r]  rf  rh  rk  r   rr  r  r  r  r`   rd   r:   r  r  Z  s       	> 	> 	>% % %D [%9:: :  : ;: :D     .      $ $ $&        	 	 	9 9 9+ + +<
! 
! 
!	 	 	 [J??) ) @?)&:$ :$ :$xB B B0         rd   r  c                       e Zd ZdZed             Zd Zd Zej	        
                    ed          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 r_   )r   r  proc)clss    r:   
setUpClassz#TestProcessAgainstStatus.setUpClass  s    >##rd   c                    t           j                            d| j        j        z            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|z            # 1 swxY w Y   d S )Nr  	r=  zcan't find %r)
r   _psplatform	open_textr  r  r   rx   	partitionr{   rL   )r   	linestartrR   rT   rQ  s        r:   read_status_filez)TestProcessAgainstStatus.read_status_file  sM   ))	-
 
 	: % %zz||??9-- % NN4003E%"5zz))	: 	: 	: 	: 	: 	: 	: 	: & % % %$	: 	: 	: 	: 	: 	: 	: 	:%	% _y8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s6   A	C7BCB1 C0B11CCCc                 n    |                      d          }| j                                        |k    sJ d S )NzName:)r  r  r   r   rQ  s     r:   	test_namez"TestProcessAgainstStatus.test_name  8    %%g..y~~5((((((rd   r  r   c                     |                      d          }||                    d          dz   |                    d                   }|                    dd          }| j                                        |k    sJ d S )NzState:(r   )r   rO  )r  ru  rfindr  r  r}  r  s     r:   test_statusz$TestProcessAgainstStatus.test_status  sw    %%h//ejjoo)EKK,<,<<=c3''y!!U******rd   c                 n    |                      d          }| j                                        |k    sJ d S )NzPPid:)r  r  r  r  s     r:   	test_ppidz"TestProcessAgainstStatus.test_ppid  r  rd   c                 n    |                      d          }| j                                        |k    sJ d S )NzThreads:)r  r  r  r  s     r:   test_num_threadsz)TestProcessAgainstStatus.test_num_threads  s:    %%j11y$$&&%//////rd   c                     |                      d          }t          t          t          |                                dd                             }| j                                        |k    sJ d S )NzUid:r   rF   )r  r   r   r{   rI   r  r  r  s     r:   	test_uidsz"TestProcessAgainstStatus.test_uids	  `    %%f--c#u{{}}QqS12233y~~5((((((rd   c                     |                      d          }t          t          t          |                                dd                             }| j                                        |k    sJ d S )NzGid:r   rF   )r  r   r   r{   rI   r  r  r  s     r:   	test_gidsz"TestProcessAgainstStatus.test_gids	  r  rd   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     r:   test_num_ctx_switchesz.TestProcessAgainstStatus.test_num_ctx_switches	  st    %%&@AAy))++5>>>>%%&CDDy))++75@@@@@@rd   c                 &   |                      d          }dt          |          v rht          t          |                    d                    \  }}| j                                        t          t          ||dz                       k    sJ d S d S )NCpus_allowed_list:rO  r   )	r  r   r   r{   rI   r  cpu_affinityr  rM   )r   rQ  min_max_s       r:   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Jrd   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_timesrO  )r  r   r   r  r  r  r   r   )r   rQ  r   s      r:   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   ry  rz  r   r  r  r  r  r  r   r  r  r  r`   rd   r:   r  r    s         $ $ [$: : :) ) ) [	*CDD+ + ED+) ) )0 0 0) ) )
) ) )
 A A AK K K    rd   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  rO  rN  )r   r   r   r  readlinkr   r7  s     r:   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`   rd   r:   r  r  '	  s#            rd   r  )fr  
__future__r   ry   r/   r  globr   rF  r   r  r,   r5   r   r,  r   r   r   psutil._compatr   r   r   psutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp  r   r    r!   r"   r{  r.  dirname__file__HEREr4   SIOCGIFCONFrk   r>   rB   rB  EMPTY_TEMPERATURESr;   r?   rC   r\   rn   r   r   r   r   contextmanagerr   r   ry  rz  r   r   r   r  r;  rL  r~  r  r  r  r  r  r  r  r  r6  rg  r  r  r  r  r  r  r  r  r`   rd   r:   <module>r     su                     				 				 				                    , , , , , , % % % % % %             ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ % % % % % % ' ' ' ' ' ' # # # # # #       ( ( ( ( ( ( " " " " " " - - - - - - * * * * * * ' ' ' ' ' ' # # # # # # # # # # # #             & & & & & & ) ) ) ) ) ) $ $ $ $ $ $       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"#<=== 
 
 

 
 

 
 
  ,K K K.     ,@ @ @@ @ @   0   , Il336> 6> 6> 6> 6> 6> 6> 436>r Il33.D .D .D .D .D> .D .D 43.Db Il33I- I- I- I- I-> I- I- 43I-b Il33R R R R R> R R 43Rt 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?N Il33I&?@@35 35 35 35 35> 35 35 A@ 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>)B 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@2P Il33o o o o o~ o o 43on Il33OL99BJ BJ BJ BJ BJ BJ BJ :9 43BJJ Il33       43* Il33@- @- @- @- @-n @- @- 43@-F Il33+ + + + +n + + 43+8 Il33u  u  u  u  u . u  u  43u p Il33K K K K K~ K K 43Kf Il33       43  rd   