
    Xh?[                       d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& erddl'm(Z( ddl'm)Z) ddl'm*Z* ddl'm+Z+ ejX                  j[                  ejX                  j]                  e/            Z0dZ1dZ2dZ3d Z4erd!Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>ej~                  d+        Z@ej~                  d,        ZAe!j                  j                  e d-.       G d/ d0e             ZDe!j                  j                  e d-.       G d1 d2e             ZEe!j                  j                  e d-.       G d3 d4e             ZFe!j                  j                  e d-.       G d5 d6e             ZGe!j                  j                  e d-.       G d7 d8e             ZHe!j                  j                  e d-.       G d9 d:e             ZIe!j                  j                  e d-.       G d; d<e             ZJe!j                  j                  e d-.       G d= d>e             ZKe!j                  j                  e d-.       G d? d@e             ZLe!j                  j                  e d-.       G dA dBe             ZMe!j                  j                  e d-.       G dC dDe             ZNe!j                  j                  e d-.       G dE dFe             ZOe!j                  j                  e d-.       G dG dHe             ZPe!j                  j                  e d-.       G dI dJe             ZQe!j                  j                  e d-.       G dK dLe             ZRe!j                  j                  e d-.       G dM dNe             ZSe!j                  j                  e d-.       G dO dPe             ZTe!j                  j                  e d-.       G dQ dRe             ZUe!j                  j                  e d-.      e!j                  j                  e dS.       G dT dUe                    ZVe!j                  j                  e d-.       G dV dWe             ZWe!j                  j                  e d-.       G dX dYe             ZXe!j                  j                  e d-.       G dZ d[e             ZYe!j                  j                  e d-.       G d\ d]e             ZZe!j                  j                  e d-.       G d^ d_e             Z[e!j                  j                  e d-.       G d` dae             Z\y)bzLinux specific tests.    N)mock)LINUX)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)PYTEST_PARALLEL)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)
ThreadTask)
call_until)pytest)reload_module)retry_on_failure)safe_rmpath)sh)skip_on_not_implemented)CLOCK_TICKS)RootFsDeviceFinder)calculate_avail_vmem)open_binaryi  i'  i  i  i   c                 V   dd l }t        | d d d      } t        j                  t        j                  t        j                        5 }t        j
                  |j                  |j                         t        t        j                  d|             dd       cd d d        S # 1 sw Y   y xY wNr      ascii256s      )fcntlbytessocketAF_INET
SOCK_DGRAM	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer$   ss      c/var/www/html/cjf29f/d23bf782/d32178f2/venv/lib/python3.12/site-packages/psutil/tests/test_linux.pyget_ipv4_addressr3   D   s    6#2;(F	v~~v'8'8	9 
QKK
KVV1LM2

 
 
   ABB(c                 V   dd l }t        | d d d      } t        j                  t        j                  t        j                        5 }t        j
                  |j                  |j                         t        t        j                  d|             dd       cd d d        S # 1 sw Y   y xY wr   )r$   r%   r&   r'   r(   r)   r*   r+   SIOCGIFNETMASKr-   r.   r/   s      r2   get_ipv4_netmaskr7   P       6#2;(F	v~~v'8'8	9 
QKK
NFKK,G

 
 
r4   c                 V   dd l }t        | d d d      } t        j                  t        j                  t        j                        5 }t        j
                  |j                  |j                         t        t        j                  d|             dd       cd d d        S # 1 sw Y   y xY wr   )r$   r%   r&   r'   r(   r)   r*   r+   SIOCGIFBRDADDRr-   r.   r/   s      r2   get_ipv4_broadcastr;   \   r8   r4   c                 <   t        d      5 }g }|D ],  }|j                         }|d   | k(  s|j                  |       . t        |      dk(  rt	        d|       	 d d d        t        t                    D ]  }||   d   }t        dt        |      d      D cg c]
  }|||dz     }}dj                  |      }	t        j                  t        j                  |	      }
t        j                  t        j                  |
      ||<    |S # 1 sw Y   xY wc c}w )Nz/proc/net/if_inet6r   zcould not find interface    :)opensplitappendlen
ValueErrorrangejoinr&   	inet_ptonAF_INET6	inet_ntop)r0   f
all_fieldslinefieldsiunformattedjgroups	formattedpackeds              r2   get_ipv6_addressesrT   h   s.   	"	# Eq
 	*DZZ\FbzV#!!&)	*
 z?a8
CDD  E 3z?# B mA&,1!S5Eq,I
'(KAE"
 
 HHV$	!!&//9=((&A
1B %E E
s    D/DDDc           	         dd l }t        | d d d      } t        j                  t        j                  t        j                        5 }|j                  |j                         t        t        j                  d|             }dj                  |dd D cg c]  }|dd	
 c}      d d
 cd d d        S c c}w # 1 sw Y   y xY w)Nr   r   r    r!       r#   02xr?   r=   )r$   r%   r&   r'   r(   r*   r+   SIOCGIFHWADDRr-   r.   rF   )r0   r$   r1   infochars        r2   get_mac_addressr\   ~   s    6#2;(F	v~~v'8'8	9 FQ{{HHJv{{66'B
 ww42;?44*A?@"E	F F @	F Fs   AB7B2
	B72B77C c                  6   t        ddgddi      } | j                  d      }|D ]e  }|j                  d      s|j                         \  }}}}t        j                  dd      } |t        |      t        |      t        |            c S  t        d	|        )
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
Swapztotal used freez$can't find 'Swap' in 'free' output:
)r   rA   
startswithcollections
namedtupleintrD   )outlinesrL   _totalusedr^   nts           r2   	free_swaprp      s     fd^&)!4
5CIIdOE 8??6"#'::< AudD''0ABBc%j#d)SY77	8
 <SEB
CC    c                     t        ddgddi      } | j                  d      }|D ]V  }|j                  d      sd |j                         d	d
 D        \  }}}}t        j                  dd      } ||||||       c S  t        d|        )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    r^   r_   r`   ra   rb   rd   Memc              3   2   K   | ]  }t        |        y wN)ri   .0xs     r2   	<genexpr>zfree_physmem.<locals>.<genexpr>   s     (KAQ(Ks         ztotal used free shared outputz#can't find 'Mem' in 'free' output:
)r   rA   rf   rg   rh   rD   )rj   rk   rL   rm   rn   r^   sharedro   s           r2   free_physmemr}      s     fd^&)!4
5CIIdOE 6??5!(Ka9J(K%E4v''7B eT4556 ;C5A
BBrq   c                     t        ddgddi      }|j                  d      D ]5  }|j                         }| |v st        |j                  d      d         c S  t	        d	| d
      )Nvmstatz-sr`   ra   rb   rd    r   can't find z in 'vmstat' output)r   rA   stripri   rD   )statrj   rL   s      r2   r   r      sp    
hFI#6
7C		$ +zz|4<tzz#q)**+ {4(*=>
??rq   c            
          t        ddg      j                         } d| v rt        j                  d      t	        t        t        t        j                  d| j                         d                     S )Nr^   z-VUNKNOWNzcan't determine free versionz\d+r=   )
r   r   r   skiptuplemapri   refindallrA   )rj   s    r2   get_free_version_infor      sX    
fd^

"
"
$CCkk899S"**VSYY[_=>??rq   c              #       K    fd}t         t        j                  dd|      5 }| ddd       y# 1 sw Y   yxY ww)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        |t              rt        j                  |      S t        j                  |      S  | g|i |S ru   )
isinstancestrioStringIOBytesIO)nameargskwargscontent	orig_openpairss       r2   	open_mockz$mock_open_content.<locals>.open_mock   sP    5=DkG'3'{{7++zz'**T3D3F33rq   builtins.openTcreateside_effectNr@   r   patch)r   r   mr   s   `  @r2   mock_open_contentr      s>     4 I	ODi	H A  s   %A7	AA Ac              #       K    fd}t         t        j                  dd|      5 }| ddd       y# 1 sw Y   yxY ww)zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    c                 *    | k(  r | g|i |S ru    )r   r   r   excfor_pathr   s      r2   r   z&mock_open_exception.<locals>.open_mock   s%    8I////rq   r   Tr   Nr   )r   r   r   r   r   s   ``  @r2   mock_open_exceptionr      s>     0
 I	ODi	H A  s   &A9	AAAz
LINUX onlyreasonc                   z    e Zd Zd Z e       d        Z e       d        Z e       d        Z e       d        Zy)"TestSystemVirtualMemoryAgainstFreec                 v    t               j                  }t        j                         j                  }||k(  sJ y ru   )r}   rm   psutilvirtual_memoryself	cli_valuepsutil_values      r2   
test_totalz-TestSystemVirtualMemoryAgainstFree.test_total   s1     N((	,,.44L(((rq   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 y )N   r      free version too oldr>   r   r   free version too recent)	r   r   r   r}   rn   r   r   absr   r   s      r2   	test_usedz,TestSystemVirtualMemoryAgainstFree.test_used   st     !"Z/++455 "i/++788 N''	,,.339|+,/@@@@rq   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y ru   )r}   r^   r   r   r   r   r   s      r2   	test_freez,TestSystemVirtualMemoryAgainstFree.test_free   s<     N''	,,.339|+,/@@@@rq   c                     t               }|j                  }|dk(  rt        j                  d      t	        j
                         j                  }t        ||z
        t        k  sJ | d| d|j                          y )Nr   z%free does not support 'shared' columnr   z 
)	r}   r|   r   r   r   r   r   r   output)r   r^   
free_valuer   s       r2   test_sharedz.TestSystemVirtualMemoryAgainstFree.test_shared  su    ~[[
?++EFF,,.55
\)*->>	:\<.DKK=9	:>rq   c                     t        ddg      }|j                  d      }d|d   vrt        j                  d      t	        |d   j                         d         }t        j                         j                  }t        ||z
        t        k  sJ y )	Nr^   r_   rd   	availabler   z(free does not support 'available' columnrz   r=   )
r   rA   r   r   ri   r   r   r   r   r   )r   rj   rk   r   r   s        r2   test_availablez1TestSystemVirtualMemoryAgainstFree.test_available  s     &$ 		$eAh&++HIIq)"-.
,,.88:,-0AAAArq   N)	__name__
__module____qualname__r   r   r   r   r   r   r   rq   r2   r   r      si    )
 A A" A A
 : : 	B 	Brq   r   c                       e Zd Zd Z e       d        Z e       d        Z e       d        Z e       d        Z e       d        Z	y)$TestSystemVirtualMemoryAgainstVmstatc                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nztotal memory   )r   r   r   rm   r   r   r   vmstat_valuer   s      r2   r   z/TestSystemVirtualMemoryAgainstVmstat.test_total  s>    n-4,,.44<,./2CCCCrq   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 y )Nr   r   r   r   zused memoryr   )	r   r   r   r   r   r   rn   r   r   r   s      r2   r   z.TestSystemVirtualMemoryAgainstVmstat.test_used#  sv     !"Z/++455 "i/++788m,t3,,.33<,./2CCCCrq   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzfree memoryr   )r   r   r   r^   r   r   r   s      r2   r   z.TestSystemVirtualMemoryAgainstVmstat.test_free5  s>    m,t3,,.33<,./2CCCCrq   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzbuffer memoryr   )r   r   r   buffersr   r   r   s      r2   test_buffersz1TestSystemVirtualMemoryAgainstVmstat.test_buffers;  s>    o.5,,.66<,./2CCCCrq   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzactive memoryr   )r   r   r   activer   r   r   s      r2   test_activez0TestSystemVirtualMemoryAgainstVmstat.test_activeA  s>    o.5,,.55<,./2CCCCrq   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzinactive memoryr   )r   r   r   inactiver   r   r   s      r2   test_inactivez2TestSystemVirtualMemoryAgainstVmstat.test_inactiveG  s?    /047,,.77<,./2CCCCrq   N)
r   r   r   r   r   r   r   r   r   r   r   rq   r2   r   r     s    D
 D D" D D
 D D
 D D
 D Drq   r   c                   D    e Zd Zd Z e       d        Zd Zd Zd Zd Z	y)TestSystemVirtualMemoryMocksc                    t        j                  d      j                         }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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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alwaysrz   r   z#memory stats couldn't be determinedcachedr|   r   r   r   r   )textwrapdedentencoder   warningscatch_warningssimplefilterr   r   calledrC   r   messager   r   r   r|   r   r   slabr   r   r   wsretws         r2   test_warnings_on_missesz4TestSystemVirtualMemoryMocks.test_warnings_on_missesP  s    // 	# 	  	 9: 	%a((5 %%%h/++-xxx2w!|#|qE<AIINNN3qyy>1113qyy>1113qyy>111!S^333 C		N222"c!))n444zzQ&zzQ&||q(((zzQ&{{a'''}})))xx1}$}'%	% 	%% %	% 	%s$   GE3G<GG	GG"c                    i }t        d      5 }|D ])  }|j                         }t        |d         dz  ||d   <   + 	 d d d        t        |      }d|v r!|d   }t	        ||z
        |z  dz  }|dk  sJ y y # 1 sw Y   :xY w)Nr   rz   r   r   s   MemAvailable:d   r   )r   rA   ri   r   r   )r   memsrJ   rL   rM   abdiff_percents           r2   test_avail_old_percentz3TestSystemVirtualMemoryMocks.test_avail_old_percentt  s     ) 	8Q 8"%fQi.4"7VAY8	8
 !&t#%&Aq1u:>C/L"$$$ $	8 	8s   /A77B c                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ j                  dk(  sJ d   }dt        |j                        v sJ 	 d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Na              Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:    6574984 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r   Tr   l     " r   ,inactive memory stats couldn't be determinedr   r   r   r   r   r   r   r   r   r   r   r   r   s         r2    test_avail_old_comes_from_kernelz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernel  s     // #   	 9: 	a((5 .++-.88O8==N2221AAS		F   	 	. .	 	$   B8B,AB8,B5	1B88Cc                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ j                  dk(  sJ d   }dt        |j                        v sJ 	 d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Nat              Active:          9444728 kB
            Active(anon):    6145416 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            r   Tr       `LG r   r   r   r   s         r2   test_avail_old_missing_fieldsz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fields  s     // 
# 
  	 9: 	a((5 .++-.88O8==$CCCC1AAS		F   	 	. .	 	r   c                    t        j                  d      j                         }t        d|i      5  t	        dt
              5  t        j                  d      5 }t        j                         }|j                  dk(  sJ |d   }dt        |j                        v sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Na              Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r   z/proc/zoneinfoTr   r   r   r   )r   r   r   r   r   FileNotFoundErrorr   r   r   r   r   r   r   )r   r   r   r   r   s        r2   test_avail_old_missing_zoneinfoz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfo  s     // #   	 9: 		$%57HI ,,D9 R //1C==,KKKK1AFqyy>**		 		  		 		s<   CCAB7C&C7C <CC	CCc                    t        j                  d      j                         }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        y # 1 sw Y   y xY w)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   rm   r^   r   r   r|   r   r   r   r   )r   r   r   mems       r2   test_virtual_memory_mockedz7TestSystemVirtualMemoryMocks.test_virtual_memory_mocked  s   // 1# 1b c 	d 9: 	-a'')C88O899
***88x''';;(***::000::***::)))<<8+++88y(((==H,,,	- 	- 	-s   B<C77D N)
r   r   r   r   r   r   r   r   r  r  r   rq   r2   r   r   N  s4    "%H % %828@-rq   r   c                   n    e Zd Zed        Zd Z e       d        Z e       d        Zd Z	d Z
d Zd Zy	)
TestSystemSwapMemoryc                  v    t        d      5 } | j                         }ddd       dv xr d|v S # 1 sw Y   xY w)z3Return True if /proc/meminfo provides swap metrics.r   Nz
SwapTotal:z	SwapFree:)r@   read)rJ   datas     r2   meminfo_has_swap_infoz*TestSystemSwapMemory.meminfo_has_swap_info  sC     /" 	a668D	t#;t(;;	 	s   /8c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y ru   )rp   rm   r   swap_memoryr   r   r   r   r   s      r2   r   zTestSystemSwapMemory.test_total&  s<    [&&
))+11:,-0AAAArq   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y ru   )rp   rn   r   r  r   r   r  s      r2   r   zTestSystemSwapMemory.test_used+  <    [%%
))+00:,-0AAAArq   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y ru   )rp   r^   r   r  r   r   r  s      r2   r   zTestSystemSwapMemory.test_free1  r  rq   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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Npsutil._common.openTr   r   r   rz   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r  r   rC   r   r   sinsoutr   r   r   r   r   s        r2   test_missing_sin_soutz*TestSystemSwapMemory.test_missing_sin_sout7  s    ZZ-d; 	%q((5 %%%h/((*xxx2w!|#|qEO199~&& ww!|#|xx1}$}%	% 	%% %	% 	%s#   CBC	8C	C	CCc                    t        dt              5 }t        j                  d      5 }t        j                  d       t        j                         }|j                  sJ t        |      dk(  sJ |d   }dt        |j                        v sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz/proc/vmstatTr   r   rz   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   rC   r   r   r  r  r  s        r2   test_no_vmstat_mockedz*TestSystemSwapMemory.test_no_vmstat_mockedF  s     1BC 	%q((5 %%%h/((*xxx2w!|#|qE6199~&& ww!|#|xx1}$}%	% 	%% %	% 	%s#   CBC1CC	CCc                    | j                         st        j                  d      t        j                  d      5 }t        j                         }d d d        j                  rJ dd lm	} |j                         \  }}}}}}}||z  }||z  }j                  |k(  sJ t        |j                  |z
        t        k  sJ y # 1 sw Y   rxY w)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_sysinform   r   r^   r   )r   r   swapcextrl   rm   r^   unit_multipliers           r2   test_meminfo_against_sysinfoz1TestSystemSwapMemory.test_meminfo_against_sysinfoW  s     ))+++ABBZZ<= 	(%%'D	(88|+373E3E3G01aE4 zzU"""499t#$'8888	( 	(s   CC
c                     t        ddi      5 }t        j                          |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   rq   )r   r   r  r   r   r   s     r2   #test_emulate_meminfo_has_no_metricsz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsh  s?     56 	! 88O8	 	 	s	   #;AN)r   r   r   staticmethodr  r   r   r   r   r  r  r#  r&  r   rq   r2   r  r    s`    < <B
 B B
 B B
%%"9"rq   r  c                       e Zd Zd Zy)TestSystemCPUTimesc                 T   t        j                         j                  }t        j                  dt        j                         d         d   }t        t        t        |j                  d                  }|dk\  rd|v sJ d|vsJ |dk\  rd|v sJ d|vsJ |d	k\  rd
|v sJ y d
|vsJ y )Nz\d+\.\d+\.\d+   r   .)r+        steal)r+  r-  r#   guest)r   r+  r   
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   ri   rA   )r   rM   
kernel_verkernel_ver_infos       r2   test_fieldszTestSystemCPUTimes.test_fieldsx  s    !!#++ZZ 0"((*Q-@C
C)9)9#)> ?@j(f$$$&(((j(f$$$&(((i'6)))v---rq   N)r   r   r   r8  r   rq   r2   r)  r)  v  s    .rq   r)  c                      e Zd Zej                  j                  ej                  j                  d       d      d        Z	ej                  j                  ej                  j                  d       d      d        Z
ej                  j                   ej                  d       d	      d
        Zej                  j                   ej                  d       d      d        Zd Zy)TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr   c                    t        d      5 }|j                         j                         }d d d        dt              v r:t	        |j                  d      d         dz   }t        j                         |k(  sJ y y # 1 sw Y   QxY w)Nr;  -rz   )r@   r
  r   r   ri   rA   r   	cpu_count)r   rJ   values      r2   test_against_sysdev_cpu_onlinez8TestSystemCPUCountLogical.test_against_sysdev_cpu_online  s{    
 23 	%qFFHNN$E	%#e*C(+,q0E##%... 	% 	%s   A;;B/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc           	          t        j                  d      }t        |D cg c]  }t        j                  d|      | c}      }t        j                         |k(  sJ y c c}w )NrA  zcpu\d+$)r4  listdirrC   r   searchr   r>  )r   lsrx   counts       r2   test_against_sysdev_cpu_numz5TestSystemCPUCountLogical.test_against_sysdev_cpu_num  sU    
 ZZ12K1bii
A&>&JQKL!U*** Ls
   A A nprocznproc utility not availablec                 b    t        t        d            }t        j                  d      |k(  sJ y )Nznproc --allTlogical)ri   r   r   r>  )r   nums     r2   test_against_nprocz,TestSystemCPUCountLogical.test_against_nproc  s,     "]#$-444rq   lscpulscpu utility not availablec                     t        d      }t        |j                  d      D cg c]  }|j                  d      r| c}      }t	        j
                  d      |k(  sJ y c c}w )Nlscpu -prd   #TrJ  )r   rC   rA   rf   r   r>  )r   rj   rx   rL  s       r2   test_against_lscpuz,TestSystemCPUCountLogical.test_against_lscpu  sT     nciioGQ\\#5F1GH-444 Hs
   A"A"c                    dd l }|j                  j                         }t        j                  dt
              5 }|j                  j                         |k(  sJ |j                  sJ t        j                  dd      5 }|j                  j                         J |j                  dk(  sJ |j                  d   d   dk(  sJ 	 d d d        t        d	d
      5 }|j                         }d d d        t        j                        }t        j                  d|d      5 }|j                  j                         |k(  sJ 	 d d d        t        d	di      5 }|j                  j                         |k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   zpsutil._pslinux.os.sysconfr   r  Tr  r+  
/proc/stat/proc/cpuinforbreturn_valuer   rq   )psutil._pslinux_pslinuxcpu_count_logicalr   r   rD   r   
call_count	call_argsr@   r
  r   r   r   )r   r   originalr   rJ   cpuinfo_data	fake_files          r2   test_emulate_fallbacksz0TestSystemCPUCountLogical.test_emulate_fallbacks  s   ??446 ZZ(j
 	 ??446(BBB88O8 1$? 9188:BBB||q((({{1~a(L888	9 ot, ( vvx(

<0I%Id G88:hFFFG #OS#9:  a88:hFFFxxx 5	  	 9 9( (G G   5	  	 sm   AG?AFGF!*5G F- G.F9GF	G!F*	&G-F6	2G9G	>GGN)r   r   r   r   markskipifr4  pathexistsr@  rG  shutilwhichrM  rS  rc  r   rq   r2   r:  r:    s    [[GGNN;<<>  /	/ [[GGNN4557  +	+
 [[FLL!!*G  55 [[FLL!!*G  55
" rq   r:  c                       e Zd Zej                  j                   ej                  d       d      d        Zej                  j                   e	j                         dvd      d        Zd Zy	)
TestSystemCPUCountCoresrN  rO  r   c                    t        d      }t               }|j                  d      D ]9  }|j                  d      r|j                  d      }|j	                  |d          ; t        j                  d      t        |      k(  sJ y )NrQ  rd   rR  ,rz   FrJ  )r   setrA   rf   addr   r>  rC   )r   rj   core_idsrL   rM   s        r2   rS  z*TestSystemCPUCountCores.test_against_lscpu  ss     n5IIdO 	(D??3'CVAY'	( .#h-???rq   >   i686x86_64zx86_64/i686 onlyc                    t         j                  j                         }t        j                  dg       5 }t         j                  j                         }|j
                  sJ 	 d d d        ||k(  sJ y y # 1 sw Y   xY w)N	glob.globrZ  )r   r\  cpu_count_coresr   r   r   )r   meth_1r   meth_2s       r2   test_method_2z%TestSystemCPUCountCores.test_method_2  ss     002ZZ"5 	__446F88O8	 V### 	 	s   -A77B c                 .   t        j                  dg       5 }t        j                  dd      5 }t        j                  j	                         J 	 d d d        d d d        j
                  sJ j
                  sJ y # 1 sw Y   .xY w# 1 sw Y   2xY w)Nrt  ru  r  Tr  )r   r   r   r\  rv  r   )r   m1m2s      r2   test_emulate_nonez)TestSystemCPUCountCores.test_emulate_none  s    ZZ"5 	A1$? A2668@@@A	A yyyyyyA A	A 	As"   B!A?B?B	BBN)r   r   r   r   rd  re  rh  ri  rS  platformmachinery  r}  r   rq   r2   rk  rk    s    [[FLL!!*G  @@ [["44=O  $$rq   rk  c                      e Zd Zej                  j                  e d      ej                  j                  ed      d               Zej                  j                  e d      ej                  j                  ed      d               Z	ej                  j                  e d      d        Z
ej                  j                  e d      d        Zej                  j                  e d      d	        Zy
)TestSystemCPUFrequencynot supportedr   z(aarch64 does not always expose frequencyc                     fd}t         j                  j                  t        j                  d|d      5  t        j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nc                 8    | j                  d      ry |       S )N&/sys/devices/system/cpu/cpufreq/policyFrf   )rf  orig_existss    r2   path_exists_mockzMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock  s    GH"4((rq   os.path.existsT)r   r   )r4  rf  rg  r   r   r   cpu_freq)r   r  r  s     @r2   test_emulate_use_second_filez3TestSystemCPUFrequency.test_emulate_use_second_file  sR    	) ggnnZZ*:4
 	% ??$$$	% 	% 	%s   AA#z,aarch64 does not report mhz in /proc/cpuinfoc                 t   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(  r$J  	 d d d        t        t        j                         t        t               y # 1 sw Y   2xY w# t        t        j                         t        t               w xY w)Nc                 8    | j                  d      ry |       S )Nz/sys/devices/system/cpu/Fr  )rf  os_path_existss    r2   r  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mock  s    9:%d++rq   r  rU          Tpercpu)r4  rf  rg  r   r   r   r   r\  r  maxmin)r   r  r   freqr  s       @r2   test_emulate_use_cpuinfoz/TestSystemCPUFrequency.test_emulate_use_cpuinfo	  s    	, 	",:JK +foo.oo'Csww#~%~ww#~%~"OO48 +D88s?*?88s?*?++ &//*&!+ + &//*&!s)   D BDDD D
D *D7c                    fd}t         t        j                  d|      5  t        j                  dd      5  t        j                         }|j
                  dk(  sJ |j                  dk7  r|j                  d	k(  sJ |j                  dk7  r|j                  d
k(  sJ d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | j                  d      r&| j                  d      rt        j                  d      S | j                  d      r&| j                  d      rt        j                  d      S | j                  d      r&| j                  d      rt        j                  d      S | dk(  rt        j                  d	      S  | g|i |S )
N/scaling_cur_freqr     500000/scaling_min_freq   600000/scaling_max_freqs   700000rW  s   cpu MHz     : 500endswithrf   r   r   r   r   r   r   s      r2   r   z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mock'  s    }}01doo87 zz),,2389 zz),,2389 zz),,(zz"677 7777rq   r   rU  r  Tru       @@r       @g     @r@   r   r   r   r  currentr  r  r   r   r  r   s      @r2   test_emulate_dataz(TestSystemCPUFrequency.test_emulate_data%  s    	8$ 	ZZY? 		-,4@ -(||u,,, 88s?88u,,,88s?88u,,,-		- 		-- -		- 		-s#   B?A&B3"B?3B<	8B??Cc                    fd}t         t        j                  d|      5  t        j                  dd      5  t        j                  dd      5  t        j                  d	      }|d
   j
                  dk(  sJ |d
   j                  dk7  r|d
   j                  dk(  sJ |d
   j                  dk7  r|d
   j                  dk(  sJ |d   j
                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | }|j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d	      S |j                  d      r&|j                  d      rt        j                  d
      S |j                  d      r&|j                  d      rt        j                  d      S | dk(  rt        j                  d      S  | g|i |S )Nr  z'/sys/devices/system/cpu/cpufreq/policy0s   100000r     200000r  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000r  r  rW  s#   cpu MHz     : 100
cpu MHz     : 400r  )r   r   r   nr   s       r2   r   z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockG  s=   Azz-.1<<94 zz),,/0Q\\96 zz),,/0Q\\96 zz),,/0Q\\96 zz),,/0Q\\96 zz),,/0Q\\96 zz),,(zz"IJJ 7777rq   r   rU  r  Tru  !psutil._pslinux.cpu_count_logicalr+  r  r         Y@r  g      i@g     r@rz   g      y@r  r  r  r  s      @r2   test_emulate_multi_cpuz-TestSystemCPUFrequency.test_emulate_multi_cpuE  sU   	8> 	ZZY? 	4,4@ 4ZZ7a 4 "??$7D7??e333Aw{{c)#Aw{{e333Aw{{c)#Aw{{e3337??e333Aw{{c)#Aw{{e333Aw{{c)#Aw{{e33344	4 	44 44 4	4 	4s;   EECE+E3EE	EE	EE%c                 p   fd}t         t        j                  d|      5  t        j                  dd      5  t        j                  dd      5  t        j                         }|j
                  d	k(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nc                     | j                  d      rt        | j                  d      rt        j                  d      S | dk(  rt        j                  d      S  | g|i |S )Nr  z/cpuinfo_cur_freqr  rW  s   cpu MHz     : 200)r  r   r   r   r  s      r2   r   zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mock{  s_    }}01''}}01zz),,(zz"677 7777rq   r   rU  r  Tru  r  rz      )r@   r   r   r   r  r  r  s      @r2   %test_emulate_no_scaling_cur_freq_filez<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_filex  s    	8 	ZZY? 	/,4@ /ZZ7a / "??,D<<3...	//	/ 	// // /	/ 	/s:   B,B &B;B B,BB  B)	%B,,B5N)r   r   r   r   rd  re  r	   r   r  r  r  r  r  r   rq   r2   r  r    s!   [[L(A[[B  % B% [[L(A[[F  " B"0 [[L(A- B-> [[L(A04 B04d [[L(A/ B/rq   r  c                       e Zd Zd Zy)TestSystemCPUStatsc                 |    t        d      }t        j                         j                  }t	        ||z
        dk  sJ y )N
interruptsi  )r   r   	cpu_statsr  r   r   s      r2   test_interruptsz"TestSystemCPUStats.test_interrupts  s8    l+'')44<,./#555rq   N)r   r   r   r  r   rq   r2   r  r    s    6rq   r  c                   T    e Zd Zej                  j                  e d      d        Zy)TestLoadAvgr  r   c                 t   t        j                         }t        d      5 }|j                         j	                         }d d 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 y # 1 sw Y   pxY w)Nz/proc/loadavgr   rz   r+  )r   
getloadavgr@   r
  rA   r   float)r   r   rJ   
proc_values       r2   test_getloadavgzTestLoadAvg.test_getloadavg  s    ((*/" 	*a)J	* 5A',q/9:Q>>>5A',q/9:Q>>>5A',q/9:Q>>>	* 	*s   B..B7N)r   r   r   r   rd  re  r
   r  r   rq   r2   r  r    s,    [[N*?C? D?rq   r  c                       e Zd Zd Zy)TestSystemNetIfAddrsc                    t        j                         j                         D ]  \  }}|D ]  }|j                  t         j                  k(  r|j
                  t        |      k(  r:J |j                  t        j                  k(  rl|j
                  t        |      k(  sJ |j                  t        |      k(  sJ |j                  |j                  t        |      k(  rJ t        |      dk(  rJ |j                  t        j                  k(  s|j
                  j                  d      d   }|t!        |      v rJ   y )Nz0.0.0.0%r   )r   net_if_addrsitemsfamilyAF_LINKaddressr\   r&   r'   r3   netmaskr7   	broadcastr;   rH   rA   rT   )r   r   addrsaddrr  s        r2   test_ipszTestSystemNetIfAddrs.test_ips  s   !..0668 	?KD% ?;;&..0<<?4+@@@@[[FNN2<<+;D+AAAA<<+;D+AAAA~~1#~~1CD1IIII1$79DDD[[FOO3 #ll005a8G"&8&>>>>%?	?rq   N)r   r   r   r  r   rq   r2   r  r    s    ?rq   r  c                       e Zd Zej                  j                   ej                  d       d      d        Zd Z	ej                  j                   ej                  d       d      d        Z
y)TestSystemNetIfStatsifconfigifconfig utility not availabler   c                 &   t        j                         j                         D ]]  \  }}	 t        d|       }|j                  d|v k(  sJ |       |j
                  t        t        j                  d|      d         k(  r]J  y # t        $ r Y lw xY w)N	ifconfig RUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsr  r   isupmturi   r   r   RuntimeError)r   r   statsrj   s       r2   test_against_ifconfigz*TestSystemNetIfStats.test_against_ifconfig  s     "..0668 		KD%9TF+, zzi3&67<<7yyCJJ2C8;%   		   s   B	BBc                    t        j                         j                         D ]T  \  }}t        d| d      5 }|j                  t        |j                         j                               k(  sJ 	 d d d        V y # 1 sw Y   axY w)Nz/sys/class/net/z/mtu)r   r  r  r@   r  ri   r
  r   )r   r   r  rJ   s       r2   test_mtuzTestSystemNetIfStats.test_mtu  sx    !..0668 	:KD%vT23 :qyyC(8$9999: :	:: :s   7A;;B	c                 4   d}t        j                         j                         D ]M  \  }}	 t        d|       }t	        j
                  d|      }|rt        |j                               dk\  rh|dz  }t        |j                  d      j                         j                  d            }t        |j                  j                  d            }||k(  rJ t	        j
                  d|      }|st        |j                               dk\  s|dz  }t        |j                  d      j                         j                               }t        |j                  j                  d            }||k(  rNJ  |s| j                  d	      y # t        $ r Y qw xY w)
Nr   r  zflags=(\d+)?<(.*?)>r+  rz   rm  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r  r   r   rD  rC   rQ   rn  grouplowerrA   flagsr  fail)r   matches_foundr   r  rj   matchifconfig_flagspsutil_flagss           r2   
test_flagszTestSystemNetIfStats.test_flags  sn    !..0668 	>KD%>9TF+, 		"8#>S0A5!Q&M%(Q)=)=)?)E)Ec)J%KN#&u{{'8'8'=#>L)\999 II&FLEU\\^!4!9%*),U[[^-A-A-C-I-I-K)L'*5;;+<+<S+A'B-===)	>, ))344 '   s   F

	FFN)r   r   r   r   rd  re  rh  ri  r  r  r  r   rq   r2   r  r    s}    [[FLL$$-M  

:
 [[FLL$$-M  55rq   r  c                       e Zd Zej                  j                   ej                  d       d       e       d               Z	y)TestSystemNetIOCountersr  r  r   c                    d }t        j                  dd      }|j                         D ]  \  }}	  ||      }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  rJ  y # t        $ r Y  w xY w)Nc                 v   i }t        d|        }t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d	         |d
<   t        t        j                  d|      d         |d<   t        t        j                  d|      d	         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   |S )Nr  zRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinrz   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   ri   r   r   )nicr   rj   s      r2   r  z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfig  s-   Cy&'C"%

137:#C #&

137:#C rzz*<cB1EFCL

+=s CA FGCM

+> DQ GHCM ,?!Ea!HIC	N #

A3GJ!C !$

A3GJ!C Jrq   TF)pernicnowrapr  i (  r  r  r   r  r  
   r  r  r  )r   net_io_countersr  r  r   r  r  r  r  r  r  r  r  )r   r  nior   r  ifconfig_rets         r2   r  z-TestSystemNetIOCounters.test_against_ifconfig  sx   
	* $$D?99; 	EKD%'~ E$$|L'AABYNN E$$|L'AABYNN E&&n)EEFMM E&&n)EEFMMu{{\'%::;b@@@u||l8&<<=BBBu||l8&<<=BBBu}}|I'>>?"DDD)	E   s   D??	EEN)
r   r   r   r   rd  re  rh  ri  r   r  r   rq   r2   r  r    sK    [[FLL$$-M   +E +Erq   r  c                   t    e Zd Z ej                  de       ej                  dd      d               Zd Zy)	TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntoprU  zpsutil._pslinux.supports_ipv6Fru  c                    	 t        j                   t         j                  t         j                        }| j                  |j                         |j                  d       t        j                  d       y # t        $ r Y "w xY w)N)z::1r   inet6kind)	r&   rH   SOCK_STREAM
addCleanupclosebindOSErrorr   net_connections)r   supports_ipv6rI   r1   s       r2   test_emulate_ipv6_unsupportedz6TestSystemNetConnections.test_emulate_ipv6_unsupportedF  sa    	foov/A/ABAOOAGG$FF: 	G,  		s   AA7 7	BBc                     t        j                  d      }t        d|i      5 }t        j                  d       |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Na              0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
            0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
            0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
            000000000000000000000000000000000000000000000000000000
            z/proc/net/unixunixr  )r   r   r   r   r  r   )r   r   r   s      r2   test_emulate_unixz*TestSystemNetConnections.test_emulate_unixR  sU    // #   0':; 	q""/88O8	 	 	s   %AAN)r   r   r   r   r   rD   r  r  r   rq   r2   r  r  D  s?    TZZ2
KTZZ/eD- E L-	rq   r  c                       e Zd Zej                  j                   eed       d       e       d               Z	d Z
d Zy)TestSystemDiskPartitionsstatvfszos.statvfs() not availabler   c                 R   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  rJ  y )Nc                 .   t        d|  d      j                         }|j                  d      }|j                  d       |j                  d      }|j                         d d \  }}}}|dk(  rd}t	        |      t	        |      t	        |      }}}||||fS )Nzdf -P -B 1 ""rd   r   r>   nonerV   )r   r   rA   popri   )rf  rj   rk   rL   devrm   rn   r^   s           r2   dfz4TestSystemDiskPartitions.test_against_df.<locals>.dfl  s    |D6+,224CIIdOEIIaL99Q<D%)ZZ\"1%5"Cdf} #E
CIs4y4EtT))rq   F)all)	r   disk_partitions
disk_usage
mountpointrm   r   r^   r   rn   )r   r  partusagerl   rm   rn   r^   s           r2   test_against_dfz(TestSystemDiskPartitions.test_against_dfe  s    		* **u5 	AD%%doo6E#%doo#6 AudD;;%'''uzzD(),@@@@uzzD(),@@@@	Arq   c                 0   t        d      5 }|j                         }d d d        dv r*t        j                         D ]  }|j                  dk(  s y  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        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz/proc/filesystemszfsz
nodev	zfs
r  TrY  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r  rwru  r   )
r@   r
  r   r  fstyper   r   r   r   r   )r   rJ   r  r  rb  r{  r|  r   s           r2   test_zfs_fsz$TestSystemDiskPartitions.test_zfs_fs~  s   %& 	!668D	D=..0 ;;%'
 KK/	ZZ!	$
 	.6=> . ,,.yy yyy y
s1v}}---.	. 	.	 	. .	. 	.s0   C4 DA	D #D4C= D		DDc                 6   	 t        j                  dd      5 }t        j                  t              5  t        j                          d d d        |j                  sJ 	 d d d        dt
        _        y # 1 sw Y   ,xY w# 1 sw Y   !xY w# dt
        _        w xY w)Nzos.path.realpathz/non/existentru  /proc)	r   r   r   raisesr   r   r  r   PROCFS_PATHr%  s     r2   test_emulate_realpath_failz3TestSystemDiskPartitions.test_emulate_realpath_fail  s~    	)"  ]]#45 -**,-xxx  ")F	- -    ")Fs9   B A?A3A?B 3A<	8A??BB BN)r   r   r   r   rd  re  hasattrr4  r   r  r   r%  r   rq   r2   r
  r
  c  sQ    [[B	""+G   A A*.0
)rq   r
  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12/proc/diskstats!psutil._pslinux.is_storage_deviceTru  Fr  rz   r+  r   r>   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      r2   test_emulate_kernel_2_4z0TestSystemDiskIoCounters.test_emulate_kernel_2_4  s    @ 17;< 	+3$ + --U;~~***,,111~~[888}})))!+++--222!k/999~~***}}***+	+ 	++ +	+ 	+#   DB>C8'D8D	=DD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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r*  r+  Tru  Fr,  rz   r+  r   r>   r{   r-  r-  r.  r  r/  r;  s      r2   test_emulate_kernel_2_6_fullz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_full  s    < 17;< 	+3$ + --U;~~***,,111~~[888}})))!+++--222!k/999~~***}}***+	+ 	++ +	+ 	+r=  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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr*  z   3    1   hda 1 2 3 4r+  Tru  Fr,  rz   r+  r   r>   r   )r   r   r   r   r0  r1  r3  r4  r6  r8  r2  r5  r7  r9  r:  )r   r   s     r2   test_emulate_kernel_2_6_limitedz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limited  s     13LMN 	*3$ * --U;~~***~~[888!+++!k/999,,111}})))--222~~***}})))*	* 	** *	* 	*s#   DB>C6%D6C?	;DD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        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nx            3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
            3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
            r*  r+  Fru  Tperdiskr  r+  nvme0n1rz   	nvme0n1p1r{   )
r   r   r   r   r   r   r0  rC   r1  r6  r;  s      r2   test_emulate_include_partitionsz8TestSystemDiskIoCounters.test_emulate_include_partitions  s     // #   17;< 		93% 9 --d5I3x1}$}9~00A555;'22a7779~11Q666;'33q8889		9 		99 9		9 		9s#   CA8C4CC	
CCc                 D   t        j                  d      }t        d|i      5  t        j                  dd      5  t        j                  dd      }|J 	 d d d        d d d        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        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)NrC  r*  r+  Fru  rD  c                     | dk(  S )NrF  r   )r   s    r2   is_storage_devicezSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_device  s    9$$rq   Tr   rz   r{   )	r   r   r   r   r   r   r0  r1  r6  )r   r   r   rK  s       r2   test_emulate_exclude_partitionsz8TestSystemDiskIoCounters.test_emulate_exclude_partitions  s&    // #   17;< 	#3% # --eEJ{"{	#	#	% // #   17;< 	,3- ,
 --eEJ~~***!+++,	, 	,# #	# 	#, ,	, 	,sF   C>C2C>D&:D
!D2C;	7C>>D
D	DDc                     d }t        j                  d      }t        j                  dd|      5  t        j                  d      }d d d        t	        |      t	              k(  sJ y # 1 sw Y   #xY w)Nc                     | dk(  S )Nr*  r   rf  s    r2   rg  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.exists  s    ,,,rq   T)rE  psutil._pslinux.os.path.existsr   )r   r0  r   r   rC   )r   rg  wprocfswsysfss       r2   test_emulate_use_sysfsz/TestSystemDiskIoCounters.test_emulate_use_sysfs  sk    	- ))$7ZZ,Tv
 	; ,,T:F	; 7|s6{***		; 	;s   A++A4c                     d }t        j                  dd|      5  t        j                  t              5  t        j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                      y)NFr   rO  s    r2   rg  z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.exists!  s    rq   rP  Tr   )r   r   r   r#  NotImplementedErrorr   r0  )r   rg  s     r2   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_impl   sf    	 ZZ,Tv
 	* 23 *'')*	* 	** *	* 	*s"   A(AA(A%	!A((A1N)
r   r   r   r<  r?  rA  rH  rL  rS  rW  r   rq   r2   r(  r(    s&    +&+(*,9&,@	+*rq   r(  c                      e Zd Zd Zd Zej                  j                  ed      d        Z	ej                  j                   e
j                  d       d      ej                  j                  ed      d               Zd	 Zy
)TestRootFsDeviceFinderc                     t        j                  d      j                  }t        j                  |      | _        t        j                  |      | _        y )Nr  )r4  r   st_devmajorminor)r   r  s     r2   setUpzTestRootFsDeviceFinder.setUp-  s3    ggcl!!XXc]
XXc]
rq   c                 &   t               }t        j                  j                  d      r|j	                          n2t        j                  t              5  |j	                          d d d        t        j                  j                  d| j                   d| j                   d      r|j                          n2t        j                  t              5  |j                          d d d        |j                          y # 1 sw Y   xY w# 1 sw Y   &xY wNz/proc/partitionsz/sys/dev/block/r?   z/uevent)r   r4  rf  rg  ask_proc_partitionsr   r#  r   r\  r]  ask_sys_dev_blockask_sys_class_block)r   finders     r2   test_call_methodsz(TestRootFsDeviceFinder.test_call_methods2  s    #%77>>,-&&(01 -**,-77>>ODJJ<qGLM$$&01 +((*+""$- -
+ +s   C;D;DDzunsupported on GITHUB_ACTIONSr   c                    t               }|j                         J d x}x}}t        j                  j	                  d      r|j                         }t        j                  j	                  d| j                   d| j                   d      r|j                         }|j                         }|xs |xs |}|r	|r||k(  sJ |r	|r||k(  sJ |r|r||k(  sJ y y y r`  )
r   findr4  rf  rg  ra  r\  r]  rc  rb  )r   rd  r   r   cbases         r2   test_comparisonsz'TestRootFsDeviceFinder.test_comparisons@  s    #%{{}(((A77>>,-**,A77>>ODJJ<qGLM**,A$$&{A{A199A199A199 4rq   findmntzfindmnt utility not availablec                 X    t               j                         }t        d      }||k(  sJ y )Nzfindmnt -o SOURCE -rn /)r   rg  r   )r   r   findmnt_values      r2   test_against_findmntz+TestRootFsDeviceFinder.test_against_findmntT  s.    
 *+00245},,,rq   c                 F   t        j                  ddg      5 }t        j                         d   }|j                  sJ t
        s8|j                  dk7  sJ |j                  t               j                         k(  sJ |j                  dk(  sJ d d d        y # 1 sw Y   y xY w)Nr  )	/dev/rootr  ext4r  ru  r   rp  )	r   r   r   r  r   r   devicer   rg  )r   r   r  s      r2   test_disk_partitions_mockedz2TestRootFsDeviceFinder.test_disk_partitions_mocked]  s    ZZ2:;
 
	2 ))+A.D88O8!{{k111{{&8&:&?&?&AAAA{{k111
	2 
	2 
	2s   A5BB N)r   r   r   r^  re  r   rd  re  r   rj  rh  ri  rn  rs  r   rq   r2   rY  rY  +  s    #
% [[/NO P& [[FLL##,K   [[/NO- P-
2rq   rY  c                       e Zd Zd Zd Zd Zd Zd Zd Z e	       e
j                  j                  ed      d	               Zd
 Zy)TestMiscc                 t    t        d      }t        j                         }t        |      t        |      k(  sJ y )Nz	boot time)r   r   	boot_timeri   r   s      r2   test_boot_timezTestMisc.test_boot_timer  s2    k*'')< C$5555rq   c           	      	   | j                         }t        j                  |       t        t        j                  j                  |d      d      5 }|j                  d       |j                  d       |j                  d       d d d        	 t        fd}t        j                  d|      5  t        t               t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                  d	
       d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                  d	
       d d d        t        j                  t              5  t        j                           d d d        t        j                  t              5  t        j                   d	
       d d d        |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                  j                  |d      d      5 }|j                  d       |j                  d       |j                  d       d d d        t        j                         dk7  sJ t%        t        j                  d	
            dk7  sJ t%        t        j                                dk7  sJ t%        t'        t$        t        j                   d	
                  dk7  sJ 	 d d d        t)        j*                  |       t        t               t        j"                  dk(  sJ y # 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   2xY w# 1 sw Y   9xY w# 1 sw Y   xY w# t)        j*                  |       t        t               w xY w)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                 J    | j                  d      rt         | g|i |S )Nr"  )rf   r   r  s      r2   r   z4TestMisc.test_no_procfs_on_import.<locals>.open_mock  s*    ??7+++ 7777rq   r   rU  Tr  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r"  )
get_testfnr4  mkdirr@   rf  rF   writer   r   r   r   r   r#  r  r2  cpu_percentcpu_times_percentr$  sumr   rh  rmtree)r   	my_procfsrJ   r   per_cpu_percentper_cpu_times_percentr   s         @r2   test_no_procfs_on_importz!TestMisc.test_no_procfs_on_importw  sj   OO%	
"'',,y&137 	31GG12GG12GG12	3
4	"I8
 OC )f%]]7+ '$$&']]7+ 2$$D12]]7+ )&&()]]7+ 4&&d34]]7+ /,,./]]7+ :,,D9: &/"))+q00063356!;;; #)"4"4D"A?+q000 )/(@(@(M%3s$9:;q@@@ "'',,y&93? ;1GG9:GG9:GG9:;
 ))+q0006--T:;q@@@63356!;;;C!9!9!FGHAMMQ)V MM)$&!!!W,,,w	3 	3 ' '2 2) )4 4/ /: :$; ;?) )V MM)$&!s   4O$"Q 0)QO1.!QO>&!QP!Q=P!Q5P%
!Q+P2CQ4P?BQ"Q $O.1O;	6Q>P	QP	QP"	Q%P/	*Q2P<	7Q?Q		QQQ &Q>c                    t        j                  d      j                         }t        d|i      5 }t	        j
                          |j                  sJ t	        j
                  d       t	        j                          t	        j                  d       d d d        t        j                  d      j                         }t        d|i      5  t	        j
                         }j                  sJ t	        j
                  d      }t	        j                         }t	        j                  d      }|dk7  sJ t        |      dk7  sJ t        |      dk7  sJ t        |      dk7  sJ t        t        t        |            dk7  sJ t        t        t        |            dk7  sJ |j                  dk(  sJ |j                  dk7  sJ 	 d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)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
            rV  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   r/  user)r   r   r   r~  cpu_percent_percpur  cpu_times_percent_percpus          r2   test_cpu_steal_decreasez TestMisc.test_cpu_steal_decrease  s    // #  	 	
 g67 	21  88O8d+$$&$$D1	2 // #  	 	
 g67 	/ ,,.K88O8!'!3!34!@ & 8 8 :'-'?'?t'L$!###)*a///()Q...()U222s3 89:a???s3 89:eCCC$**a///$))Q...	/ 	/	2 	2	/ 	/s   A#GC8GGG$c                    t        j                  dd      5 }t        j                  t              5  t
        j                  j                          d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr  Tr  )	r   r   r   r#  r  r   r\  rw  r   r%  s     r2   test_boot_time_mockedzTestMisc.test_boot_time_mocked  si    ZZ-d; 	q|, ,))+,88O8	 	, ,	 	s"   A=A1A=1A:	6A==Bc                 V    t        j                         D ]  }|j                  dvrJ  y )N>   :0:0.0)r   usershost)r   r  s     r2   
test_userszTestMisc.test_users  s+     LLN 	3D99N222	3rq   c                 d   | j                         }t        j                  |       	 |t        _        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                  d       d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t        j                        5  t        j                           d d d        dt        _        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   UxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   {xY w# dt        _        w xY w)NTr  r"  )r{  r4  r|  r   r$  r   r#  r  r   r2  rw  r  r  r  r  NoSuchProcessProcess)r   tdirs     r2   test_procfs_pathzTestMisc.test_procfs_path  s    
	)!%Fw' (%%'(w' #  "#w' .  -.w' #  "# w' )&&()w' )&&()w' &##%& w' )&&()v334 ! ! ")F+( (# #. .# #) )) )& &) )! ! ")Fs   $J" H0 !J" H=!J" 7I
!J" /I!J" %I$:!J" I10!J" I>&!J" J
+J" JJ" 0H:5J" =IJ" 
IJ" I!J" $I.)J" 1I;6J" >JJ" 
JJ" JJ" "J/zskip if pytest-parallelr   c                 ~   t               5  t        j                         }|j                         }t	        |      dk(  sJ t        |d       d   j                  }|j                  |k7  sJ t        j                  |      }|j                          |t        j                         vsJ 	 d d d        y # 1 sw Y   y xY w)Nr+  c                     | j                   S ru   )id)rx   s    r2   <lambda>z)TestMisc.test_issue_687.<locals>.<lambda>  s
     rq   )keyrz   )
r   r   r  threadsrC   sortedr  pidas_dictpids)r   pr  tidpts        r2   test_issue_687zTestMisc.test_issue_687  s     \ 	, AiikGw<1$$$n5a8;;C55C<<$BJJLfkkm+++	, 	, 	,s   BB33B<c                     t        ddi      5 }t        j                  t        j                               sJ |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz/proc/%s/statusrV   )r   r   
pid_existsr4  getpidr   r%  s     r2   test_pid_exists_no_proc_statusz'TestMisc.test_pid_exists_no_proc_status  sN      1267 	1$$RYY[11188O8	 	 	s   8AAN)r   r   r   rx  r  r  r  r  r  r   r   rd  re  r   r  r  r   rq   r2   ru  ru  p  s\    6
?-B%/N3)8 [[0IJ, K , rq   ru  z
no batteryc                       e Zd Zej                  j                   ej                  d       d      d        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zy)TestSensorsBatteryacpizacpi utility not availabler   c                     t        d      }t        |j                  d      d   j                         j	                  dd            }t        j                         j                  }t        ||z
        dk  sJ y )Nzacpi -brm  rz   r  rV   )	r   ri   rA   r   replacer   sensors_batterypercentr   )r   rj   
acpi_valuer   s       r2   test_percentzTestSensorsBattery.test_percent*  sf     m3*002::3CD
--/77:,-111rq   c                 8   fd}t         t        j                  d|      5 }t        j                         j
                  du sJ t        j                         j                  t        j                  k(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                 h    | j                  d      rt        j                  d      S  | g|i |S )Nz
AC0/onlinez	AC/online   1r  r   r   r  s      r2   r   z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mock5  4    }}89zz$'' 7777rq   r   rU  T)	r@   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   r   r   r   s      @r2   test_emulate_power_pluggedz-TestSensorsBattery.test_emulate_power_plugged3  s    	8 	ZZY? 	1))+99TAAA&&(11..// 88O8	 	 	s   A"BBc                     fd}t         t        j                  d|      5 }t        j                         j
                  du sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        | j                  d      rt        j                  d      S  | g|i |S )Nr  /statuschargingr  r   r   r   r  s      r2   r   zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockG  sF    }}89''}}Y'{{:.. 7777rq   r   rU  Tr@   r   r   r   r  r  r   r  s      @r2   test_emulate_power_plugged_2z/TestSensorsBattery.test_emulate_power_plugged_2D  s\    	8 	ZZY? 	1))+99TAAA88O8	 	 	   1AA(c                     fd}t         t        j                  d|      5 }t        j                         j
                  du sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                 h    | j                  d      rt        j                  d      S  | g|i |S )Nr     0r  r  s      r2   r   zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockV  r  rq   r   rU  Fr  r  s      @r2   test_emulate_power_not_pluggedz1TestSensorsBattery.test_emulate_power_not_pluggedT  s\    	8 	ZZY? 	1))+99UBBB88O8	 	 	r  c                     fd}t         t        j                  d|      5 }t        j                         j
                  du sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        | j                  d      rt        j                  d      S  | g|i |S )Nr  r  dischargingr  r  s      r2   r   zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockd  sF    }}89''}}Y'{{=11 7777rq   r   rU  Fr  r  s      @r2    test_emulate_power_not_plugged_2z3TestSensorsBattery.test_emulate_power_not_plugged_2a  s\    	8 	ZZY? 	1))+99UBBB88O8	 	 	r  c                     fd}t         t        j                  d|      5 }t        j                         j
                  J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        | j                  d      rt        j                  d      S  | g|i |S )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/online#/sys/class/power_supply/BAT0/statuss   ???)rf   r   r   r   r  s      r2   r   zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockt  sM        ('DEzz&)) 7777rq   r   rU  r  r  s      @r2   test_emulate_power_undeterminedz2TestSensorsBattery.test_emulate_power_undeterminedq  sZ    		8 	ZZY? 	1))+99AAA88O8	 	 	s   /AA&c                     t        ddi      5 }t        j                         j                  dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N(/sys/class/power_supply/BAT0/energy_fullr  r   )r   r   r  r  r   r%  s     r2   test_emulate_energy_full_0z-TestSensorsBattery.test_emulate_energy_full_0  sR    7>
 	))+33q88888O8		 	 	s   2A

Ac                 $   t        dt              5  t        dt              5  t        ddi      5  t        j                         j
                  dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )r   r   r   r   r  r  r   s    r2   "test_emulate_energy_full_not_availz5TestSensorsBattery.test_emulate_energy_full_not_avail  s     !6
 	B %:! B '<eD B "113;;rAAAB	B		B 	BB B	B B		B 	Bs9   BA:$A.A:B.A73A::B	?BBc                 $   t        dt              5  t        dt              5  t        dt              5  t        j                         j                  J 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r  )r   r   r   r  r  r  s    r2   test_emulate_no_powerz(TestSensorsBattery.test_emulate_no_power  s     /1B
 
	J %46G J )9% J "113AAIII	JJ
	J 
	JJ JJ J
	J 
	Js9   BA:!A.A:B.A73A::B	?BBN)r   r   r   r   rd  re  rh  ri  r  r  r  r  r  r  r  r  r  r   rq   r2   r  r  '  sh     [[FLL  )E  22"  &B Jrq   r  c                       e Zd Zd Zy)TestSensorsBatteryEmulatedc                 4   fd}t         t        j                  ddg      5 }t        j                  d|      5 }t        j                         J 	 d d d        d d d        j
                  sJ j
                  sJ y # 1 sw Y   .xY w# 1 sw Y   2xY w)Nc                     | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )Nz/energy_now60000000z
/power_now0z/energy_full60000001r  r   r   r  s      r2   r   z5TestSensorsBatteryEmulated.test_it.<locals>.open_mock  si    }}]+{{:..|,{{3''~.{{:.. 7777rq   z
os.listdirBAT0ru  r   rU  )r@   r   r   r   r  r   )r   r   mlistdirmopenr   s       @r2   test_itz"TestSensorsBatteryEmulated.test_it  s    	8 	ZZF8< 	<OC <u--/;;;<	< |||< <	< 	<s"   BBBB	BBN)r   r   r   r  r   rq   r2   r  r    s    rq   r  c                       e Zd Zd Zd Zy)TestSensorsTemperaturesc                    fd}t         t        j                  d|      5  t        j                  ddg      5  t        j                         d   d   }|j
                  d	k(  sJ |j                  d
k(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d	      rt        j                  d
      S  | g|i |S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)r  r   r   r   r  s      r2   r   zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mock  s    }}W%{{6**~.{{7++~.zz(++|,zz(++}-zz(++ 7777rq   r   rU  rt  z/sys/class/hwmon/hwmon0/temp1ru  r   r   r        >@g      D@      I@	r@   r   r   r   sensors_temperaturesr  r  highcritical)r   r   tempr   s      @r2   test_emulate_class_hwmonz0TestSensorsTemperatures.test_emulate_class_hwmon  s    	8 	ZZY? 		-+J*K - 224V<Q?zzW,,,||t+++yyD(((}},,,-		- 		-- -		- 		-s#   B:AB.B:.B7	3B::Cc                    fd}d }t         t        j                  d|      5  t        j                  dd|      5  t        j                         d   d	   }|j
                  d
k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 L   | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )	N0_tempr  r  r  0_typer  typer   )r  r   r   r   r  s      r2   r   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mock  s    }}X&zz(++v&zz(++x({{:..v&{{6** 7777rq   c                 4    | dv rg S | dk(  rdgS | dk(  rddgS g S )N>   /sys/class/hwmon/hwmon*/temp*_*&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr   rO  s    r2   	glob_mockzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mock  sH       	;;:;;GGHH  Irq   r   rU  rt  Tr   r   r   rV   r  r  r  )r   r   r  r  r   s       @r2   test_emulate_class_thermalz2TestSensorsTemperatures.test_emulate_class_thermal  s    
	8	 	ZZY? 	-K)L -224V<Q?zzR'''||t+++yyD(((}},,,-	- 	-- -	- 	-s$   B= AB1 B=1B:	6B==CN)r   r   r   r  r  r   rq   r2   r  r    s    -6#-rq   r  c                       e Zd Zd Zy)TestSensorsFansc                 H   fd}t         t        j                  d|      5  t        j                  ddg      5  t        j                         d   d   }|j
                  d	k(  sJ |j                  d
k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                     | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )Nr  r   z/fan1_labelr  z/fan1_input2000r  r  s      r2   r   z4TestSensorsFans.test_emulate_data.<locals>.open_mock  si    }}W%{{6**}-{{7++}-{{6** 7777rq   r   rU  rt  z/sys/class/hwmon/hwmon2/fan1ru  r   r   r  i  )r@   r   r   r   sensors_fansr  r  )r   r   fanr   s      @r2   r  z!TestSensorsFans.test_emulate_data  s    	8 	ZZY? 	++I*J + ))+F3A6yyG+++{{d***+	+ 	++ +	+ 	+s"   B=B;BB	BB!N)r   r   r   r  r   rq   r2   r  r    s    +rq   r  c                      e Zd Z e       d        Zd Zej                  j                  e	d      d        Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zej                  j                  e d      d        Zd Zd Zd Zy)TestProcessc                    | j                         }t        j                  j                  |j                        j                         \  }}}t        j                  |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 y )NF)groupedc              3   N   K   | ]  }|j                   |j                  z     y wru   )private_dirtyprivate_cleanrv   s     r2   ry   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>'  s     J!//AOO;Js   #%r  c              3   4   K   | ]  }|j                     y wru   )pssrv   s     r2   ry   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>*  s     1qQUU1   c              3   4   K   | ]  }|j                     y wru   )r   rv   s     r2   ry   z>TestProcess.test_parse_smaps_vs_memory_maps.<locals>.<genexpr>+  s     3aff3r  )	spawn_testprocr   r\  r  r  _parse_smapsmemory_mapsr   r  )r   sprocussr  r   mapss         r2   test_parse_smaps_vs_memory_mapsz+TestProcess.test_parse_smaps_vs_memory_maps!  s    ##%00;HHJS$~~eii(44U4CcJTJJJK	
 31D1112T9994#3d3334t;;;rq   c                    t        j                  d      j                         }t        dt	        j
                          d|i      5 }t        j                  j                  t	        j
                               }|j                         \  }}}|j                  sJ |dk(  sJ |dk(  sJ |dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nan              fffff0 r-xp 00000000 00:00 0                  [vsyscall]
            Size:                  1 kB
            Rss:                   2 kB
            Pss:                   3 kB
            Shared_Clean:          4 kB
            Shared_Dirty:          5 kB
            Private_Clean:         6 kB
            Private_Dirty:         7 kB
            Referenced:            8 kB
            Anonymous:             9 kB
            LazyFree:              10 kB
            AnonHugePages:         11 kB
            ShmemPmdMapped:        12 kB
            Shared_Hugetlb:        13 kB
            Private_Hugetlb:       14 kB
            Swap:                  15 kB
            SwapPss:               16 kB
            KernelPageSize:        17 kB
            MMUPageSize:           18 kB
            Locked:                19 kB
            VmFlags: rd ex
            /proc//smapsi l  r  i <  )r   r   r   r   r4  r  r   r\  r  r  r   )r   r   r   r  r  r  r   s          r2   test_parse_smaps_mockedz#TestProcess.test_parse_smaps_mocked-  s    // # , - 	. &V <gFG 	%1''		4A^^-NCd88O8----(?"?9$$$	% 	% 	%s   A)B::Czunreliable on PYPYr   c                    d }| j                         }t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |       t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |       t        |d	      5   ||      j                  dk(  sJ 	 d d d        y # 1 sw Y   [xY w# 1 sw Y   <xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nc                     t        j                         }t        j                         t        z   }	 |j	                         D ]K  }|j
                  t        j
                  j                  |       k(  r|c S t        j                         |kD  sK n _ru   )	r   r  timer   
open_filesrf  r4  abspathr  )fnamer  	giveup_atfiles       r2   get_test_filez7TestProcess.test_open_files_mode.<locals>.get_test_fileQ  sj     A		n4ILLN DyyBGGOOE$::#y0	 rq   r   rr   zr+zw+za+rx   zx+)r{  r@   moder   )r   r(  testfns      r2   test_open_files_modez TestProcess.test_open_files_modeO  s   		@ "&# 	5 (--444	5&\ 	5 (--444	5&# 	5 (--444	5&$ 	6 (--555	6&$ 	6 (--555	6&$ 	6 (--555	6 	F&# 	5 (--444	5F&$ 	6 (--555	6 	6#	5 	5	5 	5	5 	5	6 	6	6 	6	6 	6	5 	5	6 	6s_   FF9F,&F9G G8G0G)FF),F69GGGG&)G2c                 D   t        j                         j                         t        | j	                         d      5  t        fd       t        j                  dt              5 }j                         g k(  sJ |j                  sJ 	 d d d        t        j                  dt        t        j                  d            5 }j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   nxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S ru   rC   r#  filesr  s   r2   r  z7TestProcess.test_open_files_file_gone.<locals>.<lambda>x      s1<<>2c%j@ rq   psutil._pslinux.os.readlinkrU  rV   )r   r  r#  r@   r{  r   r   r   r   r   r  errnoEINVALr   r   r1  r  s     @@r2   test_open_files_file_gonez%TestProcess.test_open_files_file_goneq  s     NN$//#S) 	 @A--   ||~+++xxx  -#ELL"5   ||~+++xxx 	  	       	  	 s<   +D,$C>7D$D
-D>D	D
D	DDc                 t   t        j                         j                         t        | j	                         d      5  t        fd       t        j                  dt              5 }j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S ru   r/  r0  s   r2   r  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>  r2  rq   r   rU  )
r   r  r#  r@   r{  r   r   r   r   r   r6  s     @@r2   test_open_files_fd_gonez#TestProcess.test_open_files_fd_gone  s     NN$//#S) 	 @A->  ||~+++xxx	 	  	    	  	 s$   +B.,$B"B."B+	'B..B7c                    t        j                         j                         t        | j	                         d      5  t        fd       d}t        j                  |t        t        j                  d            5 }t        j                  d      5  j                         g k(  sJ |j                  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S ru   r/  r0  s   r2   r  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>  r2  rq   r3  rV   rU  psutil._pslinux.debug)r   r  r#  r@   r{  r   r   r   r  r4  ENAMETOOLONGr   )r   patch_pointr   r1  r  s      @@r2   test_open_files_enametoolongz(TestProcess.test_open_files_enametoolong  s     NN$//#S) 		$@A7K1C1CR)H $ZZ 78 $<<>R///88O8$$			$ 		$$ $$ $			$ 		$s=   AC.C"$C=C"C.CC""C+	'C..C7c                     t        j                  di       5 }t        j                  j	                  t        j                               j                         J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz)psutil._pslinux._psposix.get_terminal_mapru  )	r   r   r   r\  r  r4  r  terminalr   r%  s     r2   test_terminal_mockedz TestProcess.test_terminal_mocked  s`    ZZ7b
 	??**299;7@@BJJJ88O8		 	 	s   AA22A;c                    t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        t        j                  d      }t	        j
                  d|d      5 }|j                         g dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)	Nzfoo bar r  TrY  foobarz	foo bar  rE  rF  rV   r   r  r   r   r   r   cmdliner   r   r  rb  r   s       r2   test_cmdline_mockedzTestProcess.test_cmdline_mocked  s    NNKK 01	ZZ!	$
 	99;5%.00088O8		
 KK 45	ZZ!	$
 	99;"444488O8		 		 		 	   &C&CCC#c                    t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        t        j                  d      }t	        j
                  d|d      5 }|j                         g dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)	Nzfoo bar r  TrY  rE  rF  z	foo bar  rG  rH  rJ  s       r2   test_cmdline_spaces_mockedz&TestProcess.test_cmdline_spaces_mocked  s    NNKK
+	ZZ!	$
 	99;5%.00088O8		
 KK,	ZZ!	$
 	99;"444488O8		 		 		 	rL  c                     t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzfoo bar r  TrY  rE  rF  rH  rJ  s       r2   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  sm     NNKK 01	ZZ!	$
 	99;5%.00088O8		 	 	s   &A22A;c                     t        j                  dd      5  t        j                         j	                         dk(  sJ t        j                         j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr3  z/home/foo (deleted)ru  z	/home/foo)r   r   r   r  execwdr  s    r2   !test_readlink_path_deleted_mockedz-TestProcess.test_readlink_path_deleted_mocked  sg    ZZ)8M
 	9 >>#'')[888>>#'')[888		9 	9 	9s   AA11A:c                    fd}t         t        j                  d|      5 }t        j                         j                         }|j                  sJ |g k(  sJ 	 d d d        fd}t        j                  d|      5  t        j                  t        j                        5  t        j                         j                          d d d        d d d        y # 1 sw Y   }xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 v    | j                  dt        j                          d      rt         | g|i |S Nr  z/task)rf   r4  r  r   r  s      r2   open_mock_1z4TestProcess.test_threads_mocked.<locals>.open_mock_1  s9    		}E:;''T3D3F33rq   r   rU  c                 v    | j                  dt        j                          d      rt         | g|i |S rW  )rf   r4  r  PermissionErrorr  s      r2   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_2  s9    		}E:;%%T3D3F33rq   )
r@   r   r   r   r  r  r   r   r#  AccessDenied)r   rX  r   r   r[  r   s        @r2   test_threads_mockedzTestProcess.test_threads_mocked  s    
	4
 	ZZ[A 	Q.."**,C88O8"99		4
 ZZ[A 	+v223 + ((*+	+ 	+	 	+ +	+ 	+s/   8C$C1%#C%C1C"%C.	*C11C:c                 ,   t        j                  dt              5 }t        j                  dg       5  t        j                         j                         }|j                  sJ |dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzpsutil._pslinux.readlinkrU  zpsutil._pslinux.Process.cmdlineru  rV   )r   r   r   r   r  rR  r   )r   r   r   s      r2   test_exe_mockedzTestProcess.test_exe_mocked  s    ZZ&4E
 		!1 ! nn&**,xxxby y!			! 		!! !			! 		!s"   B
8A>-B
>B	B

Bc                 <   t        dt        j                          dt              5 }t	        j
                         }t        j                  t              5  |j                          d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr  r  )
r   r4  r  r   r   r  r   r#  r  r   r   r   r  s      r2   test_issue_1014zTestProcess.test_issue_1014  s     !RYY[M(*;
 	 A01   88O8	 	   		 	s#   .BB&BB	BBc                    t        j                         }t        dt        j                          dt
              5  t        j                  dd      5  t        j                  t         j                        5  |j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  z/statmr  Fru  )r   r  r   r4  r  r   r   r   r   r#  r  memory_info)r   r  s     r2   test_issue_2418zTestProcess.test_issue_2418  s    NN RYY[M(*;
 	$ ,5A $]]6#7#78 $MMO$$	$ 	$$ $$ $	$ 	$s;   B9$B-7B!B-B9!B*&B--B6	2B99Cr  c                    t        j                  dt        t        j                  d            5 }t        j                  dd      5 }t        j                         }|j                          t        j                  t
        j                        5 }|j                  t
        j                         d d d        d d d        d d d        j                  sJ j                  sJ j                  j                  j                  k(  sJ |j                  j                  |j                         k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nzresource.prlimitrV   rU  z"psutil._pslinux.Process._is_zombieTru  )r   r   r  r4  ENOSYSr   r  r   r   r#  ZombieProcessrlimitRLIMIT_NOFILEr   r?  r  )r   r{  r|  r  cms        r2   test_rlimit_zombiezTestProcess.test_rlimit_zombie&  s   
 ZZGELL",E
 		344 3NN$]]6#7#78 3BHHV11233		3 yyyyyyxx||quu$$$xx}}(((3 33 3		3 		3s<   EAD? D30D?8E3D<8D??E	EEc                    g d}dj                  |      j                         }t        dt        j                          d|i      5  t        j                         }|j                         dk(  sJ |j                         t
        j                  k(  sJ |j                         dk(  sJ |j                         dt        z  t        j                         z   k(  sJ |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 |j)                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)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  rt  r  r  7r   r  z/statcatrz   r-  r+  r   r>   r{   r-  )rF   r   r   r4  r  r   r  r   statusSTATUS_ZOMBIEppidcreate_timer   rw  r2  r  systemchildren_userchildren_systemiowaitcpu_num)r   r   r   r  cpus        r2   test_stat_file_parsingz"TestProcess.test_stat_file_parsing:  sV   +
X ((4.'')&U ;WEF 	$ A668u$$$88:!5!5555668q= ===?a+o8H8H8J&JJJJ++-C88q;...::[000$$K777&&!k/999::[00099;!###	$ 	$ 	$s   D0FF
c                    t        j                  d      j                         }t        dt	        j
                          d|i      5  t        j                         }|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                         dk(  sJ |j                         }|j                  dk(  sJ |j                  dk(  sJ |j                  d	k(  sJ |j!                         }|j                  d
k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j"                  j%                         t'        t)        d            k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nz            Uid:	1000	1001	1002	1003
            Gid:	1004	1005	1006	1007
            Threads:	66
            Cpus_allowed:	f
            Cpus_allowed_list:	0-7
            voluntary_ctxt_switches:	12
            nonvoluntary_ctxt_switches:	13r  r  r      B   i  i  i  i  i  i  r.  )r   r   r   r   r4  r  r   r  num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistrE   )r   r   r  r  r  s        r2   test_status_file_parsingz$TestProcess.test_status_file_parsingv  sW   // #/ 0 17 	 &W =wGH 	B A%%'11R777%%'33r999==?b(((668D99$$$>>T)))::%%%668D99$$$>>T)))::%%%77--/4a>AAA	B 	B 	Bs   DE00E9c                 P   t        j                  dt        t        j                  d            5 }t        j                         }t        j                  d      5  |j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr3  rV   rU  r=  )	r   r   r  r4  r>  r   r  r  r   ra  s      r2   !test_net_connections_enametoolongz-TestProcess.test_net_connections_enametoolong  s     ZZ) 2 2B7
 	   A34  ((*b000xxx 	  	 
   	  	 s#   *B$B?BB	BB%N)r   r   r   r   r  r  r   rd  re  r   r,  r7  r:  r@  rC  rK  rN  rP  rT  r]  r_  rb  re  r   rl  r  r  r  r   rq   r2   r  r    s    	< 	<%D [[%9:6 ;6B . $&  	9+6
!	$ [[J?) @)&:$xB0 rq   r  c                   p    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Z e       d
        Zd Zd Zy)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                         | _        y ru   )r   r  proc)clss    r2   
setUpClassz#TestProcessAgainstStatus.setUpClass  s    >>#rq   c                    t         j                  j                  d| j                  j                   d      5 }|D ]N  }|j                         }|j                  |      s%|j                  d      d   }	 t        |      c cd d d        S  t        d|      # t        $ r |cY c cd d d        S w xY w# 1 sw Y   y xY w)Nr  r  	r+  r   )
r   _psplatform	open_textr  r  r   rf   	partitionri   rD   )r   	linestartrJ   rL   r?  s        r2   read_status_filez)TestProcessAgainstStatus.read_status_file  s    ))TYY]]O7+
 	: %zz|??9- NN403E%"5z)	: 	:% {9-899 & %$	: 	:%	: 	:s;   'B6 B65
B?B6B6B3%B62B33B66B?c                 d    | j                  d      }| j                  j                         |k(  sJ y )NzName:)r  r  r   r   r?  s     r2   	test_namez"TestProcessAgainstStatus.test_name  +    %%g.yy~~5(((rq   c                     | j                  d      }||j                  d      dz   |j                  d       }|j                  dd      }| j                  j                         |k(  sJ y )NzState:(rz   )r   r=  )r  rg  rfindr  r  rw  r  s     r2   test_statusz$TestProcessAgainstStatus.test_status  s_    %%h/ejjo)EKK,<=c3'yy!U***rq   c                 d    | j                  d      }| j                  j                         |k(  sJ y )NzPPid:)r  r  ry  r  s     r2   	test_ppidz"TestProcessAgainstStatus.test_ppid  r  rq   c                 d    | j                  d      }| j                  j                         |k(  sJ y )NzThreads:)r  r  r  r  s     r2   test_num_threadsz)TestProcessAgainstStatus.test_num_threads  s-    %%j1yy$$&%///rq   c                     | j                  d      }t        t        t        |j	                         dd             }| j
                  j                         |k(  sJ y )NzUid:rz   r>   )r  r   r   ri   rA   r  r  r  s     r2   	test_uidsz"TestProcessAgainstStatus.test_uids  I    %%f-c#u{{}Qq123yy~~5(((rq   c                     | j                  d      }t        t        t        |j	                         dd             }| j
                  j                         |k(  sJ y )NzGid:rz   r>   )r  r   r   ri   rA   r  r  r  s     r2   	test_gidsz"TestProcessAgainstStatus.test_gids  r  rq   c                     | j                  d      }| j                  j                         j                  |k(  sJ | j                  d      }| j                  j                         j                  |k(  sJ y )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r  r  r  r  r  s     r2   test_num_ctx_switchesz.TestProcessAgainstStatus.test_num_ctx_switches  sf    %%&@Ayy))+55>>>%%&CDyy))+775@@@rq   c                     | j                  d      }dt        |      v rXt        t        |j	                  d            \  }}| j
                  j                         t        t        ||dz               k(  sJ y y )NCpus_allowed_list:r=  rz   )	r  r   r   ri   rA   r  cpu_affinityr  rE   )r   r?  min_max_s       r2   test_cpu_affinityz*TestProcessAgainstStatus.test_cpu_affinity  sh    %%&:;#e*S%++c"23JD$99))+tE$q4I/JJJJ rq   c                    | j                  d      }t        j                  d      5 }| j                  j                  j                          d d d        dt        |      v rj                  rJ y j                  sJ y # 1 sw Y   4xY w)Nr  zpsutil._pslinux.per_cpu_timesr=  )r  r   r   r  r  r  r   r   )r   r?  r   s      r2   test_cpu_affinity_eligible_cpusz8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpus  sp    %%&:;ZZ78 	1AIIOO..0	1#e*xx<x88O8	1 	1s   %A??BN)r   r   r   __doc__classmethodr  r  r  r  r  r  r  r  r   r  r  r  r   rq   r2   r  r    sb     $ $:)+)0)
)
 A AKrq   r  c                       e Zd Zd Zy)	TestUtilsc                     t        j                  dd      5 }t        j                  j	                  d      dk(  sJ |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzos.readlinkzfoo (deleted)ru  rF  rE  )r   r   r   r  readlinkr   r%  s     r2   test_readlinkzTestUtils.test_readlink  sQ    ZZOD 	%%..u5>>>88O8	 	 	s   3AAN)r   r   r   r  r   rq   r2   r  r    s    rq   r  )]r  rg   
contextlibr4  r   r4  r~  r   rh  r&   r-   r   r"  r   unittestr   r   r   psutil.testsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[  r   r   r   r   rf  r$  dirname__file__HEREr,   rY   r6   r:   r4  r3   r7   r;   rT   r\   rp   r}   r   r   contextmanagerr   r   rd  re  r   r   r   r  r)  r:  rk  r  r  r  r  r  r  r  r
  r(  rY  ru  r  r  r  r  r  r  r  r   rq   r2   <module>r     sL       	 	  	            ' ' $ % ' #  ( - * ' # #  & ) $  0 	+24+ 
wwrwwx01K	
	
	
,FDC(@@  (  ( Il33B 3B 43Bl Il3.D> .D 4.Db Il3F-> F- 4F-\ Il3P> P 4Pp Il3. . 4.& Il3F  F  4F R Il3n  4@ Il3V/^ V/ 4V/r Il36 6 46 Il3	?. 	? 4	?" Il3?> ? 4?P Il335> 35 435l Il30En 0E 40Ef Il3~  4< Il3<)~ <) 4<)~ Il3D*~ D* 4D*N Il3<2^ <2 4<2H Il3n~ n 4nl Il3OL9J J : 4JD Il3  4( Il3?-n ?- 4?-D Il3+n + 4+6 Il3y . y  4y x Il3J~ J 4Jd Il3  4rq   