
    fri                    
   d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ erddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ejb                  je                  ejb                  jg                  e4            Z5d Z6d!Z7d"Z8d#Z9d$Z:erd%Z; ej                  d&       Z<d' Z=d( Z>d) Z?d* Z@d+ ZAd, ZBd- ZCd. ZDd/ ZEej                  d0        ZGej                  d1        ZH ej                  e d2       G d3 d4e"             ZJ ej                  e d2       G d5 d6e"             ZK ej                  e d2       G d7 d8e"             ZL ej                  e d2       G d9 d:e"             ZM ej                  e d2       G d; d<e"             ZN ej                  e d2       G d= d>e"             ZO ej                  e d2       G d? d@e"             ZP ej                  e d2       G dA dBe"             ZQ ej                  e d2       G dC dDe"             ZR ej                  e d2       G dE dFe"             ZS ej                  e d2       G dG dHe"             ZT ej                  e d2       G dI dJe"             ZU ej                  e d2       G dK dLe"             ZV ej                  e d2       G dM dNe"             ZW ej                  e d2       G dO dPe"             ZX ej                  e d2       G dQ dRe"             ZY ej                  e d2       G dS dTe"             ZZ ej                  e d2       G dU dVe"             Z[ ej                  e d2       ej                  e dW       G dX dYe"                    Z\ ej                  e d2       G dZ d[e"             Z] ej                  e d2       G d\ d]e"             Z^ ej                  e d2       G d^ d_e"             Z_ ej                  e d2       G d` dae"             Z` ej                  e d2       G db dce"             Za ej                  e d2       G dd dee"             Zbecdfk(  rddgldmeZe  eee4       yy)hzLinux specific tests.    )divisionN)LINUX)PY3)FileNotFoundError)
basestring)u)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)
ThreadTask)
call_until)mock)reload_module)retry_on_failure)safe_rmpath)sh)skip_on_not_implemented)which)CLOCK_TICKS)RootFsDeviceFinder)calculate_avail_vmem)open_binaryi  i  i'  i  i  i   z/sys/class/hwmon/hwmon*c                    dd l }| d d } t        rt        | d      } t        j                  t        j                  t        j
                        }t        j                  |      5  t        j                  |j                  |j                         t        t        j                  d|             dd       cd d d        S # 1 sw Y   y xY wNr      ascii256s      )fcntlr   bytessocketAF_INET
SOCK_DGRAM
contextlibclosing	inet_ntoaioctlfilenoSIOCGIFADDRstructpackifnamer'   ss      9/usr/lib/python3/dist-packages/psutil/tests/test_linux.pyget_ipv4_addressr8   L   s    CR[F
vw'fnnf&7&78A			A	 
KK
KVV1LM2

 
 
   #AB<<Cc                    dd l }| d d } t        rt        | d      } t        j                  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-   r.   r/   r0   SIOCGIFNETMASKr2   r3   r4   s      r7   get_ipv4_netmaskr<   [       CR[F
vw'fnnf&7&78A			A	 
KK
NFKK,G

 
 
r9   c                    dd l }| d d } t        rt        | d      } t        j                  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-   r.   r/   r0   SIOCGIFBRDADDRr2   r3   r4   s      r7   get_ipv4_broadcastr@   j   r=   r9   c                 d   t        d      5 }g }|j                         D ],  }|j                         }|d   | k(  s|j                  |       . t	        |      dk(  rt        d| z        	 d d d        t        t	                    D ]  }||   d   }g }t        dt	        |      d      D ]  }|j                  |||dz            dj                  |      }	t        j                  t        j                  |	      }
t        j                  t        j                  |
      ||<    |S # 1 sw Y   xY w)Nz/proc/net/if_inet6r   zcould not find interface %r   :)open	readlinessplitappendlen
ValueErrorrangejoinr)   	inet_ptonAF_INET6	inet_ntop)r5   f
all_fieldslinefieldsiunformattedgroupsj	formattedpackeds              r7   get_ipv6_addressesrZ   y   s2   	"	# Eq
KKM 	*DZZ\FbzV#!!&)	*
 z?a:VCDD  E 3z?# B mA&q#k*A. 	2AMM+a!a%01	2HHV$	!!&//9=((&A
1B %E Es   .D&/D&&D/c           
         dd l }| d d } t        rt        | d      } t        j                  t        j                  t        j
                        }t        j                  |      5  |j                  |j                         t        t        j                  d|             }t        rd }ndd l}|j                  }dj                  |dd D cg c]  }d	 ||      z   c}      d d
 cd d d        S c c}w # 1 sw Y   y xY w)Nr   r"   r#   r$   c                     | S N xs    r7   ordzget_mac_address.<locals>.ord   s            r&   z%02x:rB   )r'   r   r(   r)   r*   r+   r,   r-   r/   r0   SIOCGIFHWADDRr2   r3   __builtin__ra   rL   )r5   r'   r6   infora   rf   chars          r7   get_mac_addressri      s    CR[F
vw'fnnf&7&78A			A	 K{{HHJv{{66'B
  //CwwRD#d)+DEcrJK K EK Ks   #A&C3	C.
	C3.C33C<c                  T   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	dj                  |      z        )
zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    free-bLANGC.UTF-8env
Swapztotal used freez&can't find 'Swap' in 'free' output:
%s)r   rG   
startswithcollections
namedtupleintrJ   rL   )outlinesrR   _totalusedrk   nts           r7   	free_swapr}      s     fd^&)!4
5CIIdOE 8??6"#'::< AudD''0ABBc%j#d)SY77	8
 1DIIe4DD rb   c                  6   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dj                  |      z        )zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rk   rl   rm   rn   ro   rq   Memc              3   2   K   | ]  }t        |        y wr]   )rv   ).0r`   s     r7   	<genexpr>zfree_physmem.<locals>.<genexpr>   s     (KAQ(Ks         ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%s)r   rG   rs   rt   ru   rJ   rL   )rw   rx   rR   rz   r{   rk   sharedr|   s           r7   free_physmemr      s     fd^&)!4
5CIIdOE 6??5!(Ka9J(K%E4v''7B eT4556 0499U3CC rb   c                     t        ddgddi      }|j                  d      D ]5  }|j                         }| |v st        |j                  d      d         c S  t	        d	| z        )
Nvmstatz-srm   rn   ro   rq    r   z can't find %r in 'vmstat' output)r   rG   striprv   rJ   )statrw   rR   s      r7   r   r      sl    
hFI#6
7C		$ +zz|4<tzz#q)**+ 7$>
??rb   c            
          t        ddg      j                         } d| v rt        j                  d      t	        t        t        t        j                  d| j                         d                     S )Nrk   z-VUNKNOWNzcan't determine free versionz\d+rB   )
r   r   unittestSkipTesttuplemaprv   refindallrG   )rw   s    r7   get_free_version_infor      sZ    
fd^

"
"
$CC >??S"**VSYY[_=>??rb   c              #       K    fd}t         t        rdnd}t        j                  |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 rZ|    }t         r:t        |t              rt        j                  |      S t        j
                  |      S t        j
                  |      S  | g|i |S r]   )r   
isinstancer   ioStringIOBytesIO)nameargskwargscontent	orig_openpairss       r7   	open_mockz$mock_open_content.<locals>.open_mock   sb    5=DkGgz2;;w//::g..zz'**T3D3F33rb   builtins.open__builtin__.openTcreateside_effectNrE   r   r   patch)r   r   patch_pointmr   s   `   @r7   mock_open_contentr      sH     4 I%(/.@K	K)	D   s   /AA	AA
Ac              #       K    fd}t         t        rdnd}t        j                  |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 r]   r^   )r   r   r   excfor_pathr   s      r7   r   z&mock_open_exception.<locals>.open_mock   s%    8IT3D3F33rb   r   r   Tr   Nr   )r   r   r   r   r   r   s   ``   @r7   mock_open_exceptionr      sH     4 I%(/.@K	K)	D   s   0AA	AAAz
LINUX onlyc                   z    e Zd Zd Z e       d        Z e       d        Z e       d        Z e       d        Zy)"TestSystemVirtualMemoryAgainstFreec                     t               j                  }t        j                         j                  }| j	                  ||       y r]   )r   rz   psutilvirtual_memoryassertEqualself	cli_valuepsutil_values      r7   
test_totalz-TestSystemVirtualMemoryAgainstFree.test_total  s3     N((	,,.44L1rb   c                     t               dk  r| j                  d      t               j                  }t	        j
                         j                  }| j                  ||t               y )N   r      old free versiondelta)r   skipTestr   r{   r   r   assertAlmostEqualr   r   s      r7   	test_usedz,TestSystemVirtualMemoryAgainstFree.test_used  s[     !"Z/-- 233 N''	,,.33|+< 	 	
rb   c                     t               j                  }t        j                         j                  }| j	                  ||t
               y Nr   )r   rk   r   r   r   r   r   s      r7   	test_freez,TestSystemVirtualMemoryAgainstFree.test_free!  s>     N''	,,.33|+< 	 	
rb   c           
          t               }|j                  }|dk(  rt        j                  d      t	        j
                         j                  }| j                  ||t        |d|d|j                         y )Nr   z%free does not support 'shared' columnr    
r   msg)	r   r   r   r   r   r   r   r   output)r   rk   
free_valuer   s       r7   test_sharedz.TestSystemVirtualMemoryAgainstFree.test_shared)  si    ~[[
?##$KLL,,.55# *L$++F	 	 	
rb   c           
      4   t        ddg      }|j                  d      }d|d   vrt        j                  d      t	        |d   j                         d         }t        j                         j                  }| j                  ||t        |d	|d
|       y )Nrk   rl   rq   	availabler   z(free does not support 'available' columnr   rB   r   r   r   )
r   rG   r   r   rv   r   r   r   r   r   )r   rw   rx   r   r   s        r7   test_availablez1TestSystemVirtualMemoryAgainstFree.test_available7  s     &$ 		$eAh&##$NOOU1X^^-b12J!002<<L""'$.cB	 # rb   N)	__name__
__module____qualname__r   r   r   r   r   r   r^   rb   r7   r   r     sc    2
 
 
 
 
 
 
  rb   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                  }| j	                  ||t
               y )Nztotal memory   r   )r   r   r   rz   r   r   r   vmstat_valuer   s      r7   r   z/TestSystemVirtualMemoryAgainstVmstat.test_totalL  s@    n-4,,.44,.? 	 	
rb   c                     t               dk  r| j                  d      t        d      dz  }t        j                         j
                  }| j                  ||t               y )Nr   r   zused memoryr   r   )r   r   r   r   r   r{   r   r   r   s      r7   r   z.TestSystemVirtualMemoryAgainstVmstat.test_usedS  s]     !"Z/-- 233m,t3,,.33,.? 	 	
rb   c                     t        d      dz  }t        j                         j                  }| j	                  ||t
               y )Nzfree memoryr   r   )r   r   r   rk   r   r   r   s      r7   r   z.TestSystemVirtualMemoryAgainstVmstat.test_freea  s@    m,t3,,.33,.? 	 	
rb   c                     t        d      dz  }t        j                         j                  }| j	                  ||t
               y )Nzbuffer memoryr   r   )r   r   r   buffersr   r   r   s      r7   test_buffersz1TestSystemVirtualMemoryAgainstVmstat.test_buffersi  s@    o.5,,.66,.? 	 	
rb   c                     t        d      dz  }t        j                         j                  }| j	                  ||t
               y )Nzactive memoryr   r   )r   r   r   activer   r   r   s      r7   test_activez0TestSystemVirtualMemoryAgainstVmstat.test_activeq  s@    o.5,,.55,.? 	 	
rb   c                     t        d      dz  }t        j                         j                  }| j	                  ||t
               y )Nzinactive memoryr   r   )r   r   r   inactiver   r   r   s      r7   test_inactivez2TestSystemVirtualMemoryAgainstVmstat.test_inactivey  sA    /047,,.77,.? 	 	
rb   N)
r   r   r   r   r   r   r   r   r   r   r^   rb   r7   r   r   J  sz    
 
 
 
 
 
 
 
 
 
 
rb   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 | j                  t        |      d       |d   }| j                  dt        |j                               | j                  d	t        |j                               | j                  d
t        |j                               | j                  dt        |j                               | j                  dt        |j                               | j                  dt        |j                               | j                  dt        |j                               | j                  |j                  d       | j                  |j                   d       | j                  |j"                  d       | j                  |j$                  d       | j                  |j&                  d       | j                  |j(                  d       | j                  |j*                  d       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alwaysr   r   z#memory stats couldn't be determinedcachedr   r   r   r   r   )textwrapdedentencoder   warningscatch_warningssimplefilterr   r   calledr   rI   assertInstrmessager   r   r   r   r   r   slabr   r   r   wsretws         r7   test_warnings_on_missesz4TestSystemVirtualMemoryMocks.test_warnings_on_misses  s    // 	# 	  	 9: 	.a((5 .%%h/++-xxx  R!,qE93qyy> hAII7hAII7hAII7j#aii.9iQYY8k3qyy>:  Q/  Q/  q1  Q/  a0  2  1-+.	. 	.. .	. 	.s$   JHI8'J8J	=JJ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  }| j                  |d       y y # 1 sw Y   ExY w)Nr   r   r   r   s   MemAvailable:d   r"   )r   rG   rv   r   abs
assertLess)r   memsrP   rR   rS   abdiff_percents           r7   test_avail_old_percentz3TestSystemVirtualMemoryMocks.test_avail_old_percent  s     ) 	8Q 8"%fQi.4"7VAY8	8
 !&t#%&Aq1u:>C/LOOL"- $	8 	8s   /BBc                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ | j                  j                  d       d   }| j                  dt        |j                               d d d        y # 1 sw Y   fx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   r   r   s         r7    test_avail_old_comes_from_kernelz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernel  s     // #   	 9: 	a((5 .++-.88O8S]]N;1AMM>AII	 	. .	 	$   CCACC	CCc                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ | j                  j                  d       d   }| j                  dt        |j                               d d d        y # 1 sw Y   fx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         r7   test_avail_old_missing_fieldsz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fields  s     // 
# 
  	 9: 	a((5 .++-.88O8S]],KL1AMM>AII	 	. .	 	r  c           	      
   t        j                  d      j                         }t        d|i      5  t	        dt        t        j                  d            5  t        j                  d      5 }t        j                         }| j                  |j                  d       |d   }| j                  d	t        |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/zoneinfono such file or directoryTr   r  r   r	  )r   r   r   r   r   IOErrorerrnoENOENTr   r   r   r   r   r   r   r   r   )r   r   r   r   r   s        r7   test_avail_old_missing_zoneinfoz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfo  s     // #   	 9: 	$ &AB  ,,D9 	R //1C$$'F 1AMMFAII			 	
	 		 	 	s<   %C9C--AC!C-C9!C*&C--C6	2C99Dc                    t        j                  d      j                         }t        d|i      5 }t	        j
                         }|j                  sJ | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d	       | j                  |j                  d
       | j                  |j                   d       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   r   rz   rk   r   r   r   r   r   r   r   )r   r   r   mems       r7   test_virtual_memory_mockedz7TestSystemVirtualMemoryMocks.test_virtual_memory_mocked  s   // 1# 1b c 	d 9: 	6a'')C88O8SYY
3SXXx0S[[(3SZZ9SZZ3SZZ2S\\84SXXy1S]]H5	6 	6 	6s   DEE"N)
r   r   r   r   r   r  r  r  r  r  r^   rb   r7   r   r     s5    $.L . .82B@6rb   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:)rE   read)rP   datas     r7   meminfo_has_swap_infoz*TestSystemSwapMemory.meminfo_has_swap_infoZ  sC     /" 	a668D	t#;t(;;	 	s   /8c                     t               j                  }t        j                         j                  }| j	                  ||t
              S r   )r}   rz   r   swap_memoryr   r   r   r   r   s      r7   r   zTestSystemSwapMemory.test_totala  sC    [&&
))+11%%,= & 
 	
rb   c                     t               j                  }t        j                         j                  }| j	                  ||t
              S r   )r}   r{   r   r"  r   r   r#  s      r7   r   zTestSystemSwapMemory.test_usedh  C    [%%
))+00%%,= & 
 	
rb   c                     t               j                  }t        j                         j                  }| j	                  ||t
              S r   )r}   rk   r   r"  r   r   r#  s      r7   r   zTestSystemSwapMemory.test_freep  r%  rb   c                    t        j                  dd      5 }t        j                  d      5 }t        j                  d       t        j                         }|j                  sJ | j                  t        |      d       |d   }| j                  dt        |j                               | j                  |j                  d       | j                  |j                  d       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   r   r   z9'sin' and 'sout' swap memory stats couldn't be determined)r   r   r   r   r   r   r"  r   r   rI   r   r   r   sinsoutr   r   r   r   r   s        r7   test_missing_sin_soutz*TestSystemSwapMemory.test_missing_sin_soutx  s    ZZ-d; 	.q((5 .%%h/((*xxx  R!,qE$		N
   !,  1-.	. 	.. .	. 	.s#   DB5C5$D5C>	:DD
c                 4   t        dt        t        j                  d            5 }t	        j
                  d      5 }t	        j                  d       t        j                         }|j                  sJ | j                  t        |      d       |d   }| j                  dt        |j                               | j                  |j                  d       | j                  |j                   d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nz/proc/vmstatr  Tr   r   r   r   zK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r   r  r  r  r   r   r   r   r"  r   r   rI   r   r   r   r*  r+  r,  s        r7   test_no_vmstat_mockedz*TestSystemSwapMemory.test_no_vmstat_mocked  s     GELL2MN
 	.((5 .%%h/((*xxx  R!,qE6		N
   !,  1-.	. 	.. .	. 	.s#   DB5D1DD	DDc                    | j                         st        j                  d      S t        j                  d      5 }t        j                         }d d d        j                  rJ dd lm	} |j                         \  }}}}}}}||z  }||z  }| j                  j                  |       | j                  |j                  |t               y # 1 sw Y   ~xY w)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   r   )r   r   skipr   r   r   r"  r   psutil._psutil_linux_psutil_linuxlinux_sysinfor   rz   r   rk   r   )r   r   swapcextry   rz   rk   unit_multipliers           r7   test_meminfo_against_sysinfoz1TestSystemSwapMemory.test_meminfo_against_sysinfo  s     ))+==!DEEZZ<= 	(%%'D	(88|+373E3E3G01aE4 U+tyy$6GH	( 	(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   rb   )r   r   r"  r   r   r   s     r7   #test_emulate_meminfo_has_no_metricsz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metrics  s?     56 	! 88O8	 	 	s	   #;AN)r   r   r   staticmethodr   r   r   r   r   r-  r/  r8  r;  r^   rb   r7   r  r  X  s\    < <
 
 
 
 
. .&I"rb   r  c                       e Zd Zd Zy)TestSystemCPUTimesc                    t        j                         j                  }t        j                  dt        j                         d         d   }t        t        t        |j                  d                  }|dk\  r| j                  d|       n| j                  d|       |dk\  r| j                  d|       n| j                  d|       |d	k\  r| j                  d
|       y | j                  d
|       y )Nz\d+\.\d+\.\d+   r   .)r@        steal)r@  rB  r&   guest)r   r@  r   
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   rv   rG   r   assertNotIn)r   rS   
kernel_verkernel_ver_infos       r7   test_fieldszTestSystemCPUTimes.test_fields  s    !!#++ZZ 0"((*Q-@C
C)9)9#)> ?@j(MM'6*Wf-j(MM'6*Wf-i'MM,/\62rb   N)r   r   r   rN  r^   rb   r7   r>  r>    s    3rb   r>  c                   ^   e Zd Z ej                  ej                  j                  d       d      d        Z ej                  ej                  j                  d       d      d        Z	 ej                   e
d       d      d	        Z ej                   e
d
       d      d        Zd Zy)TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc                 $   t        d      5 }|j                         j                         }d d d        dt              v rEt	        |j                  d      d         dz   }| j                  t        j                         |       y y # 1 sw Y   \xY w)NrQ  -r   )	rE   r  r   r   rv   rG   r   r   	cpu_count)r   rP   values      r7   test_against_sysdev_cpu_onlinez8TestSystemCPUCountLogical.test_against_sysdev_cpu_online  s}    
 23 	%qFFHNN$E	%#e*C(+,q0EV--/7 	% 	%s   BB/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc           	          t        j                  d      }t        |D cg c]  }t        j                  d|      | c}      }| j                  t        j                         |       y c c}w )NrW  zcpu\d+$)rI  listdirrI   r   searchr   r   rT  )r   lsr`   counts       r7   test_against_sysdev_cpu_numz5TestSystemCPUCountLogical.test_against_sysdev_cpu_num  sW    
 ZZ12K1bii
A&>&JQKL))+U3 Ls
   A+A+nprocznproc utility not availablec                 x    t        t        d            }| j                  t        j                  d      |       y )Nznproc --allTlogical)rv   r   r   r   rT  )r   nums     r7   test_against_nprocz,TestSystemCPUCountLogical.test_against_nproc  s,    "]#$))$7=rb   lscpulscpu utility not availablec                     t        d      }t        |j                  d      D cg c]  }|j                  d      r| c}      }| j	                  t        j                  d      |       y c c}w )Nlscpu -prq   #Tr`  )r   rI   rG   rs   r   r   rT  )r   rw   r`   rb  s       r7   test_against_lscpuz,TestSystemCPUCountLogical.test_against_lscpu  sT    nciioGQ\\#5F1GH))$7= Hs
   A-A-c                 &   dd l }|j                  j                         }t        j                  dt
              5 }| j                  |j                  j                         |       |j                  sJ t        j                  dd      5 }| j                  |j                  j                                | j                  |j                  d       | j                  |j                  d   d   d       d d d        t        d	d
      5 }|j                         }d d d        t        j                        }t        j                  d|d      5 }| j                  |j                  j                         |       d d d        t        d	di      5 }| j                  |j                  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   yx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   rb   )psutil._pslinux_pslinuxcpu_count_logicalr   r   rJ   r   r   assertIsNone
call_count	call_argsrE   r  r   r   r   )r   r   originalr   rP   cpuinfo_data	fake_files          r7   test_emulate_fallbacksz0TestSystemCPUCountLogical.test_emulate_fallbacks  s   ??446 ZZ(j
 	 V__>>@(K88O8 1$? B1!!&//"C"C"EF  q1  Q!2LA	B ot, ( vvx(

<0I%Id P  !B!B!DhOP #OS#9:  a  !B!B!DhOxxx 5	  	 B B( (P P   5	  	 sm   AH
A(G2HG#5H+G/7H9G;HG 	H#G,	(H/G8	4H;H	 HHN)r   r   r   r   skipIfrI  pathexistsrV  r]  r   rc  ri  rz  r^   rb   r7   rP  rP    s    X__GGNN;<<78	8 X__GGNN45504	4
 X__w')FG> H> X__w')FG> H>
" rb   rP  c                   X    e Zd Z ej                   ed       d      d        Zd Zd Zy)TestSystemCPUCountCoresrd  re  c                 &   t        d      }t               }|j                  d      D ]9  }|j                  d      r|j                  d      }|j	                  |d          ; | j                  t        j                  d      t        |             y )Nrg  rq   rh  ,r   Fr`  )	r   setrG   rs   addr   r   rT  rI   )r   rw   core_idsrR   rS   s        r7   ri  z*TestSystemCPUCountCores.test_against_lscpu  ss    n5IIdO 	(D??3'CVAY'	( 	))%8#h-Hrb   c                    t         j                  j                         }t        j                  dg       5 }t         j                  j                         }|j
                  sJ 	 d d d        || j                  |       y y # 1 sw Y   xY w)N	glob.globrp  )r   rr  cpu_count_coresr   r   r   r   )r   meth_1r   meth_2s       r7   test_method_2z%TestSystemCPUCountCores.test_method_2   ss    002ZZ"5 	__446F88O8	 VV, 	 	s   -BBc                 F   t        j                  dg       5 }t        j                  dd      5 }| j                  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)Nr  r  r(  Tr)  )r   r   rt  r   rr  r  r   )r   m1m2s      r7   test_emulate_nonez)TestSystemCPUCountCores.test_emulate_none(  s    ZZ"5 	E1$? E2!!&//"A"A"CDE	E yyyyyyE E	E 	Es"   B.BBB	BB N)	r   r   r   r   r{  r   ri  r  r  r^   rb   r7   r  r    s6    X__w')FGI HI-rb   r  c                      e Zd Z ej                  e d      d        Z ej                  e d      d        Z ej                  e d      d        Z ej                  e d      d        Z	 ej                  e d      d        Z
y)TestSystemCPUFrequencynot supportedc                     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rs   )r|  orig_existss    r7   path_exists_mockzMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock5  s    GH"4((rb   os.path.existsT)r   r   )rI  r|  r}  r   r   r   cpu_freq)r   r  r  s     @r7   test_emulate_use_second_filez3TestSystemCPUFrequency.test_emulate_use_second_file2  sR    	) ggnnZZ*:4
 	% ??$$$	% 	% 	%s   AA#c                    fd}t         j                  j                  	 t        j                  d|      5  t        t        j                         t        j                         }|sJ |       | j                  |j                  d       | j                  |j                  d       t        j                  d      D ]:  }| j                  |j                  d       | j                  |j                  d       < 	 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  )r|  os_path_existss    r7   r  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockE  s    9:%d++rb   r  rk          Tpercpu)rI  r|  r}  r   r   r   r   rr  r  r   maxmin)r   r  r   freqr  s       @r7   test_emulate_use_cpuinfoz/TestSystemCPUFrequency.test_emulate_use_cpuinfoA  s    	, 	",:JK 4foo.oo'Cs  #.  #."OO48 4D$$TXXs3$$TXXs344 &//*&!4 4 &//*&!s#   D9 CD-<D9 -D62D9 9*E#c                    fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t	        j
                         }| j                  |j                  d       |j                  d	k7  r| j                  |j                  d
       |j                  d	k7  r| j                  |j                  d       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   700000rm  s   cpu MHz     : 500endswithrs   r   r   r   r   r   r   s      r7   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7rb   r   r   rk  r  Tr       @@r       @g     @
rE   r   r   r   r   r  r   currentr  r  r   r   r   r  r   s       @r7   test_emulate_dataz(TestSystemCPUFrequency.test_emulate_dataZ  s    	8$ 	),o2DZZ; 		6,4@ 6(  u5 88s?$$TXXu588s?$$TXXu56		6 		66 6		6 		6s$   C*BCC*C'	#C**C3c                 h   fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t        j                  dd	      5  t	        j
                  d
      }| j                  |d   j                  d       |d   j                  dk7  r| j                  |d   j                  d       |d   j                  dk7  r| j                  |d   j                  d       | j                  |d   j                  d       |d   j                  dk7  r| j                  |d   j                  d       |d   j                  dk7  r| j                  |d   j                  d       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  rm  s#   cpu MHz     : 100
cpu MHz     : 400r  )r   r   r   nr   s       r7   r   z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mock}  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7rb   r   r   rk  r  Tr  !psutil._pslinux.cpu_count_logicalr@  r  r         Y@r  g      i@g     r@r   g      y@r  r  r  r  s       @r7   test_emulate_multi_cpuz-TestSystemCPUFrequency.test_emulate_multi_cpu{  sk   	8> 	),o2DZZ; 	=,4@ =ZZ7a = "??$7D$$T!W__e<Aw{{c)((ae<Aw{{c)((ae<$$T!W__e<Aw{{c)((ae<Aw{{c)((ae<==	= 	== == =	= 	=s<   F(FDF7F?F(FFF%	!F((F1c                    fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t        j                  dd	      5  t	        j
                         }| j                  |j                  d
       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        t        j                  d      | j                  d      rt	        j
                  d      S | dk(  rt	        j
                  d      S  | g|i |S )Nr  rc   z/cpuinfo_cur_freqr  rm  s   cpu MHz     : 200)r  r  r  r  r   r   r  s      r7   r   zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mock  sj    }}01ellB//23zz),,(zz"677 7777rb   r   r   rk  r  Tr  r  r      )rE   r   r   r   r   r  r   r  r  s       @r7   %test_emulate_no_scaling_cur_freq_filez<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file  s    	8 	),o2DZZ; 	8,4@ 8ZZ7a 8 "??,D$$T\\37	88	8 	88 88 8	8 	8s;   C B41B(B4C (B1-B44B=	9C  C	N)r   r   r   r   r{  r   r  r  r  r  r  r^   rb   r7   r  r  0  s    X__%7% 8% X__%7" 8"0 X__%76 86@ X__%71= 81=f X__%78 88rb   r  c                       e Zd Zd Zd Zy)TestSystemCPUStatsc                 ~    t        d      }t        j                         j                  }| j	                  ||d       y )Nzcontext switches  r   )r   r   	cpu_statsctx_switchesr   r   s      r7   test_ctx_switchesz$TestSystemCPUStats.test_ctx_switches  s6    01'')66|\Erb   c                 ~    t        d      }t        j                         j                  }| j	                  ||d       y )N
interruptsr  r   )r   r   r  r  r   r   s      r7   test_interruptsz"TestSystemCPUStats.test_interrupts  s5    l+'')44|\Erb   N)r   r   r   r  r  r^   rb   r7   r  r    s    F
Frb   r  c                   @    e Zd Z ej                  e d      d        Zy)TestLoadAvgr  c                 z   t        j                         }t        d      5 }|j                         j	                         }d d d        | j                  t        d         |d   d       | j                  t        |d         |d   d       | j                  t        |d         |d   d       y # 1 sw Y   sxY w)Nz/proc/loadavgr   r   r   r@  )r   
getloadavgrE   r  rG   r   float)r   r   rP   
proc_values       r7   test_getloadavgzTestLoadAvg.test_getloadavg  s    ((*/" 	*a)J	* 	uZ]3\!_ANuZ]3\!_ANuZ]3\!_AN	* 	*s   B11B:N)r   r   r   r   r{  r   r  r^   rb   r7   r  r    s&    X__'9O :Orb   r  c                       e Zd Zd Zy)TestSystemNetIfAddrsc                    t        j                         j                         D ]_  \  }}|D ]S  }|j                  t         j                  k(  r&| j                  |j                  t        |             G|j                  t        j                  k(  r| j                  |j                  t        |             | j                  |j                  t        |             |j                  &| j                  |j                  t        |             | j                  t        |      d       |j                  t        j                  k(  s|j                  j!                  d      d   }| j#                  |t%        |             V b y )Nz0.0.0.0%r   )r   net_if_addrsitemsfamilyAF_LINKr   addressri   r)   r*   r8   netmaskr<   	broadcastr@   rN   rG   r   rZ   )r   r   addrsaddrr  s        r7   test_ipszTestSystemNetIfAddrs.test_ips  s%   !..0668 	EKD% E;;&..0$$T\\?43HI[[FNN2$$T\\3CD3IJ$$T\\3CD3IJ~~1(( NN,>t,D (();D)A9M[[FOO3 #ll005a8GMM'+=d+CD)E	Erb   N)r   r   r   r  r^   rb   r7   r  r    s    Erb   r  c                       e Zd Z ej                   ed       d      d        Zd Z ej                   ed       d      d        Zy)TestSystemNetIfStatsifconfigifconfig utility not availablec           
      L   t        j                         j                         D ]p  \  }}	 t        d|z        }| j	                  |j
                  d|v |       | j	                  |j                  t        t        j                  d|      d                r y # t        $ r Y w xY w)Nifconfig %sRUNNING)r   z(?i)MTU[: ](\d+)r   )r   net_if_statsr  r   r   isupmturv   r   r   RuntimeError)r   r   statsrw   s       r7   test_against_ifconfigz*TestSystemNetIfStats.test_against_ifconfig  s    !..0668 		KD%-.   Y#-=3 G  IIs2::.A3#G#JK		   s   B	B#"B#c           	          t        j                         j                         D ]]  \  }}t        d|z        5 }| j	                  |j
                  t        |j                         j                                      d d d        _ y # 1 sw Y   jxY w)Nz/sys/class/net/%s/mtu)	r   r  r  rE   r   r  rv   r  r   )r   r   r  rP   s       r7   test_mtuzTestSystemNetIfStats.test_mtu  s~    !..0668 	CKD%-45 C  C0@,ABC C	CC Cs   ABB	c                 `   d}t        j                         j                         D ]c  \  }}	 t        d|z        }t	        j
                  d|      }|rt        |j                               dk\  rs|dz  }t        |j                  d      j                         j                  d            }t        |j                  j                  d            }| j                  ||       t	        j
                  d|      }|st        |j                               dk\  s|dz  }t        |j                  d      j                         j                               }t        |j                  j                  d            }| j                  ||       f |s| j                  d	      y # t        $ r Y w xY w)
Nr   r  zflags=(\d+)?<(.*?)>r@  r   r  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r  r   r   rZ  rI   rV   r  grouplowerrG   flagsr   r  fail)r   matches_foundr   r  rw   matchifconfig_flagspsutil_flagss           r7   
test_flagszTestSystemNetIfStats.test_flags$  ss    !..0668 	GKD%G-. 		"8#>S0A5!Q&M%(Q)=)=)?)E)Ec)J%KN#&u{{'8'8'=#>L$$^\B II&FLEU\\^!4!9%*),U[[^-A-A-C-I-I-K)L'*5;;+<+<S+A'B((F)	G, ))344 '   s   F  	F-,F-N)	r   r   r   r   r{  r   r  r  r  r^   rb   r7   r  r    s\    X__z**,LM
 N
C
 X__z**,LM5 N5rb   r  c                   `    e Zd Z ej                   ed       d       e       d               Zy)TestSystemNetIOCountersr  r  c                    d }t        j                  dd      }|j                         D ]  \  }}	  ||      }| j	                  |j
                  |d   d       | j	                  |j                  |d   d       | j	                  |j                  |d	   d
       | j	                  |j                  |d   d
       | j	                  |j                  |d   d       | j	                  |j                  |d   d       | j	                  |j                  |d   d       | j	                  |j                  |d   d        y # t        $ r Y (w xY w)Nc                 v   i }t        d| z        }t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d	         |d
<   t        t        j                  d|      d         |d<   t        t        j                  d|      d	         |d<   t        t        j                  d|      d         |d<   t        t        j                  d|      d         |d<   |S )Nr  zRX packets[: ](\d+)r   packets_recvzTX packets[: ](\d+)packets_sentzerrors[: ](\d+)errinr   erroutzdropped[: ](\d+)dropindropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)
bytes_sent)r   rv   r   r   )nicr   rw   s      r7   r  z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigH  s+   C]S()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 Jrb   TF)pernicnowrapr  i   r   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         r7   r  z-TestSystemNetIOCounters.test_against_ifconfigE  s   	* $$D?99; 	KD%'~ ""  ,|"<H #  ""  ,|"<H #  """"L$@ #  """"L$@ #  ""\'2" #  ""l84B #  ""l84B #  ""|I6b # 5	   s   E	EEN)r   r   r   r   r{  r   r   r  r^   rb   r7   r  r  C  s6    X__z**,LM3  N3rb   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_ntoprk  zpsutil._pslinux.supports_ipv6Fr  c                     	 t        j                   t         j                  t         j                        }| j                  |j                         |j                  d       t        j                  d       y # t         j                  $ r Y ,w xY w)N)z::1r   inet6kind)	r)   rN   SOCK_STREAM
addCleanupclosebinderrorr   net_connections)r   supports_ipv6rO   r6   s       r7   test_emulate_ipv6_unsupportedz6TestSystemNetConnections.test_emulate_ipv6_unsupported  se    	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      r7   test_emulate_unixz*TestSystemNetConnections.test_emulate_unix  sU    // #   0':; 	q""/88O8	 	 	s   %AAN)r   r   r   r   r   rJ   r  r  r^   rb   r7   r  r  }  s?    TZZ2
KTZZ/eD- E L-	rb   r  c                   n    e Zd Z ej                   eed       d       e       d               Zd Z	d Z
y)TestSystemDiskPartitionsstatvfszos.statvfs() not availablec                 l   d }t        j                  d      D ]  }t        j                  |j                        } ||j                        \  }}}}| j	                  |j
                  |       | j                  |j                  |t               | j                  |j                  |t                y )Nc                 ,   t        d| z        j                         }|j                  d      }|j                  d       |j                  d      }|j                         d d \  }}}}|dk(  rd}t	        |      t	        |      t	        |      }}}||||fS )Nzdf -P -B 1 "%s"rq   r   rC   nonerc   )r   r   rG   poprv   )r|  rw   rx   rR   devrz   r{   rk   s           r7   dfz4TestSystemDiskPartitions.test_against_df.<locals>.df  s    &-.446CIIdOEIIaL99Q<D%)ZZ\"1%5"Cdf} #E
CIs4y4EtT))rb   F)allr   )
r   disk_partitions
disk_usage
mountpointr   rz   r   rk   r   r{   )r   r%  partusagery   rz   r{   rk   s           r7   test_against_dfz(TestSystemDiskPartitions.test_against_df  s    
		* **u5 		D%%doo6E#%doo#6 AudDU[[%0""

D(< #  ""

D(< # 		rb   c                 x   t        d      5 }|j                         }d d d        dv r;t        j                         D ]  }|j                  dk(  s y  | j                  d      t        j                  t        d            }t        j                  d|d      5 }t        j                  dd	g
      5 }t        j                         }|j                  sJ |j                  sJ |sJ | j                  |d   j                  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)Nz/proc/filesystemszfszcouldn't find any ZFS partitionz
nodev	zfs
r(  Tro  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r.  rwr  r   )rE   r  r   r'  fstyper  r   r   r   r   r   r   r   )r   rP   r  r*  ry  r  r  r   s           r7   test_zfs_fsz$TestSystemDiskPartitions.test_zfs_fs  s(   %& 	!668D	D=..0 C;;%'C ii ABB An$56I%Id ;ZZ:"A!B ;  002C99$999$9J3$$SV]]E:;; ;	 	; ;; ;s0   DD03AD$D0D!$D-	)D00D9c                 .   	 t        j                  dd      5 }| 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/existentr  /proc)r   r   assertRaisesr   r   r'  r   PROCFS_PATHr:  s     r7   test_emulate_realpath_failz3TestSystemDiskPartitions.test_emulate_realpath_fail  s    	)"  &&'89 -**,-xxx  ")F	- -    ")Fs9   B A;A/A;B /A8	4A;;B B BN)r   r   r   r   r{  hasattrrI  r   r,  r3  r8  r^   rb   r7   r  r    sB    X__Y//1MN  O2;4
)rb   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                  |j                  d       | j                  |j                  d	       | j                  |j                  d
t        z         | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  dt        z         | j                  |j                  d       | j                  |j                  d       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_deviceTr  Fr  r   r@  r   rC   r   rB        r  r   r   r   r   disk_io_countersr   
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      r7   test_emulate_kernel_2_4z0TestSystemDiskIoCounters.test_emulate_kernel_2_4  s*    @ 17;< 	43$ 4 --U;  3  !6!6:  [A  2  !4  !7!7;  !k/B  3  34	4 	44 4	4 	4#   E&D!E	E&E#	E&&E/c                    d}t        d|i      5  t        j                  dd      5  t        j                  d      }| j                  |j                  d       | j                  |j                  d	       | j                  |j                  d
t        z         | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  dt        z         | j                  |j                  d       | j                  |j                  d       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>  Tr  Fr?  r   r@  r   rC   r   rB  r@  rA  r  rB  rN  s      r7   test_emulate_kernel_2_6_fullz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_full  s)    < 17;< 	43$ 4 --U;  3  !6!6:  [A  2  !4  !7!7;  !k/B  3  34	4 	44 4	4 	4rP  c                    t        ddi      5  t        j                  dd      5  t        j                  d      }| j                  |j                  d       | j                  |j                  d	t        z         | j                  |j                  d
       | j                  |j                  dt        z         | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       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>  Tr  Fr?  r   r@  r   rC   r   )r   r   r   r   rC  r   rD  rF  rG  rI  rK  rE  rH  rJ  rL  rM  )r   r   s     r7   test_emulate_kernel_2_6_limitedz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limited	  s%     13LMN 	33$ 3 --U;  3  [A  !4  !k/B  !6!6:  2  !7!7;  3  23	3 	33 3	3 	3s#   E$D!EE$E!	E$$E-c                 &   t        j                  d      }t        d|i      5  t        j                  dd      5  t        j                  dd      }| j                  t        |      d       | j                  |d	   j                  d
       | j                  |d   j                  d
       | j                  |d	   j                  d       | j                  |d   j                  d       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>  Fr  Tperdiskr  r@  nvme0n1r   	nvme0n1p1r   )r   r   r   r   r   r   rC  r   rI   rD  rI  rN  s      r7   test_emulate_include_partitionsz8TestSystemDiskIoCounters.test_emulate_include_partitions  s    // #   17;< 		B3% B --d5I  S1-  Y!:!:A>  [!1!<!<a@  Y!;!;Q?  [!1!=!=qAB		B 		BB B		B 		Bs#   DB/C;*D;D	 DDc                    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                  |j                  d
       | j                  |j                  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   *xY w# 1 sw Y   y xY w)NrV  r=  r>  Fr  rW  c                     | dk(  S )NrY  r^   )r   s    r7   is_storage_devicezSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceB  s    9$$rb   Tr   r   r   )r   r   r   r   r   r   rC  rt  r   rD  rI  )r   r   r   r^  s       r7   test_emulate_exclude_partitionsz8TestSystemDiskIoCounters.test_emulate_exclude_partitions2  s.    // #   17;< 	'3% ' --eEJ!!#&	'	'	% // #   17;< 	53- 5
 --eEJ  3  !45	5 	5' '	' 	' 5 5	5 	5sG   D)D$DD72AD+D7D	DD(+D4	0D77E c                    d }t        j                  d      }t        j                  dd|      5  t        j                  d      }d d d        | j	                  t        |      t                     y # 1 sw Y   .xY w)Nc                     | dk(  ryy)Nr=  FTr^   r|  s    r7   r}  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT  s    ((rb   T)rX  psutil._pslinux.os.path.existsr   )r   rC  r   r   r   rI   )r   r}  wprocfswsysfss       r7   test_emulate_use_sysfsz/TestSystemDiskIoCounters.test_emulate_use_sysfsS  sm    	
 ))$7ZZ,Tv
 	; ,,T:F	; 	Ws6{3		; 	;s   A66A?c                     d }t        j                  dd|      5  | j                  t        t        j
                         d d d        y # 1 sw Y   y xY w)Nc                      y)NFr^   rb  s    r7   r}  z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsa  s    rb   rc  Tr   )r   r   r6  NotImplementedErrorr   rC  )r   r}  s     r7   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_impl`  sN    	 ZZ,Tv
 	L 163J3JK	L 	L 	Ls   %A

AN)
r   r   r   rO  rR  rT  r[  r_  rf  rj  r^   rb   r7   r;  r;    s(    4&4(3,B&5B4Lrb   r;  c                       e Zd Zd Zd Z ej                  ed      d        Z ej                   e	d       d       ej                  ed      d               Z
d Zy	)
TestRootFsDeviceFinderc                     t        j                  d      j                  }t        j                  |      | _        t        j                  |      | _        y )Nr0  )rI  r   st_devmajorminor)r   r$  s     r7   setUpzTestRootFsDeviceFinder.setUpl  s3    ggcl!!XXc]
XXc]
rb   c                    t               }t        j                  j                  d      r|j	                          n | j                  t        |j                         t        j                  j                  d| j                  d| j                  d      r|j                          n | j                  t        |j                         |j                          y Nz/proc/partitionsz/sys/dev/block/rD   z/uevent)r   rI  r|  r}  ask_proc_partitionsr6  r   ro  rp  ask_sys_dev_blockask_sys_class_block)r   finders     r7   test_call_methodsz(TestRootFsDeviceFinder.test_call_methodsq  s    #%77>>,-&&(/1K1KL77>>-1ZZD
 $$&/1I1IJ""$rb   zunsupported on GITHUB_ACTIONSc                    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| j                  ||       |r|r| j                  ||       |r|r| j                  ||       y y y rs  )r   assertIsNotNonefindrI  r|  r}  rt  ro  rp  rv  ru  r   )r   rw  r  r  cbases         r7   test_comparisonsz'TestRootFsDeviceFinder.test_comparisons  s    #%V[[]+A77>>,-**,A77>>-1ZZD
 **,A$$&{A{AT1%AT1%AT1% 4rb   findmntzfindmnt utility not availablec                 n    t               j                         }t        d      }| j                  ||       y )Nzfindmnt -o SOURCE -rn /)r   r{  r   r   )r   r   findmnt_values      r7   test_against_findmntz+TestRootFsDeviceFinder.test_against_findmnt  s0     *+00245}5rb   c                    t        j                  ddg      5 }t        j                         d   }|j                  sJ t
        sO| j                  |j                  d       | j                  |j                  t               j                                n| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr/  )	/dev/rootr0  ext4r1  r  r   r  )r   r   r   r'  r   r	   assertNotEqualdevicer   r   r{  )r   r   r*  s      r7   test_disk_partitions_mockedz2TestRootFsDeviceFinder.test_disk_partitions_mocked  s    ZZ2:;
 
	; ))+A.D88O8!##DKK=  .@.B.G.G.IJ  k:
	; 
	; 
	;s   BB99CN)r   r   r   rq  rx  r   r{  r	   r~  r   r  r  r^   rb   r7   rl  rl  j  sv    #
% X__^%DE& F&* X__y))+JKX__^%DE6 F L6
;rb   rl  c                   P    e Zd Zd Zd Zd Zd Zd Zd Z e	       d        Z
d Zy	)
TestMiscc                     t        d      }t        j                         }| j                  t	        |      t	        |             y )Nz	boot time)r   r   	boot_timer   rv   r   s      r7   test_boot_timezTestMisc.test_boot_time  s4    k*'')\*C,=>rb   c                 f   | j                         }t        j                  |       t        t        j                  j                  |d      d      5 }|j                  d       |j                  d       |j                  d       d d d        	 t        fd}t        rdnd}t        j                  ||	      5  t        t               | j                  t        t        j                         | j                  t        t        j                  d
       | j                  t        t        j                         | j                  t        t        j                  d
       | j                  t        t        j                          | j                  t        t        j                   d
       |t        _        | j%                  t        j                         d       | j%                  t'        t        j                                d       t        j                  d
      }| j%                  t'        |      d       t        j                   d
      }| j%                  t'        t)        t&        |            d       t        t        j                  j                  |d      d      5 }|j                  d       |j                  d       |j                  d       d d d        | j+                  t        j                         d       | j+                  t'        t        j                  d
            d       | j+                  t'        t        j                                d       | j+                  t'        t)        t&        t        j                   d
                  d       d d d        t-        j.                  |       t        t               | j%                  t        j"                  d       y # 1 sw Y   axY w# 1 sw Y   !xY w# 1 sw Y   hx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                 r    | j                  d      rt        t        j                  d       | g|i |S )Nr5  zrejecting access for test)rs   r  r  r  r  s      r7   r   z4TestMisc.test_no_procfs_on_import.<locals>.open_mock  s6    ??7+!%,,0KLL 7777rb   r   r   rk  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
r5  )
get_testfnrI  mkdirrE   r|  rL   writer   r   r   r   r   r6  r  rG  cpu_percentcpu_times_percentr7  r   sumr   r  shutilrmtree)r   	my_procfsrP   r   r   per_cpu_percentper_cpu_times_percentr   s          @r7   test_no_procfs_on_importz!TestMisc.test_no_procfs_on_import  s   OO%	
"'',,y&137 	31GG12GG12GG12	3
1	"I8
 .1/6HKKY? %f%!!'6+;+;<!!'6+;+;D!I!!'6+=+=>!!'6+=+=d!K!!'6+C+CD!!V55d "  &/"  !3!3!5q9  V%=%=%?!@!D #)"4"4D"A  _!5q9 )/(@(@(M%  S.C%D!EqI "'',,y&93? ;1GG9:GG9:GG9:;
 ##F$6$6$8!<##C(:(:$(G$H!L##C(@(@(B$CQG##C!9!9!FGH!G%N MM)$&!++W5q	3 	3R; ;7% %N MM)$&!sJ   4O$,P
 :G$O>4O1CO>P
 $O.1O;	6O>>PP
 
&P0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      }| j                  |d       | j                  t        |      d       | j                  t        |      d       | j                  t        |      d       | j                  t        t        t        |            d       | j                  t        t        t        |            d       | j                  |j                  d       | j                  |j                  d       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
            rl  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   r   rD  user)r   r   r   r  cpu_percent_percpur  cpu_times_percent_percpus          r7   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$Q/$6 7;$5 6:$5 6>C-E$F GKC-E$F GO.44a8 1 6 6:	; 	;	2 	2	; 	;s   A#H%EH2%H/2H;c                     t        j                  dd      5 }| j                  t        t        j
                  j                         |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr(  Tr)  )r   r   r6  r  r   rr  r  r   r:  s     r7   test_boot_time_mockedzTestMisc.test_boot_time_mocked  sM    ZZ-d; 	qlFOO,E,EF88O8	 	 	s   =AA(c                 n    t        j                         D ]  }| j                  |j                  d         y )N)z:0z:0.0)r   usersrK  host)r   r  s     r7   
test_userszTestMisc.test_users   s-     LLN 	8DTYY7	8rb   c                 <   | j                         }t        j                  |       	 |t        _        | j                  t        t        j                         | j                  t        t        j                         | j                  t        t        j                  d       | j                  t        t        j                         | j                  t        t        j                         | j                  t        t        j                         | j                  t        t        j                         | j                  t        t        j                         | j                  t        j                  t        j                         dt        _        y # dt        _        w xY w)NTr  r5  )r  rI  r  r   r7  r6  r  r   rG  r  r  r	  r  r'  NoSuchProcessProcess)r   tdirs     r7   test_procfs_pathzTestMisc.test_procfs_path&  s    
	)!%Fgv'<'<=gv'7'78gv'7'7Egv'7'78gv'='=>gv'='=>gv':':;gv'='=>f22FNNC!(FFs   EF Fc                    t               5  t        j                         }|j                         }| j	                  t        |      d       t        |d       d   j                  }| j                  |j                  |       t        j                  |      }|j                          | j                  |t        j                                d d d        y # 1 sw Y   y xY w)Nr@  c                     | j                   S r]   )idr_   s    r7   <lambda>z)TestMisc.test_issue_687.<locals>.<lambda>D  s
     rb   )keyr   )r   r   r  threadsr   rI   sortedr  r  pidas_dictrK  pids)r   pr  tidpts        r7   test_issue_687zTestMisc.test_issue_6879  s     \ 	1 AiikGS\1-n5a8;;Cs+$BJJLS&++-0	1 	1 	1s   C CC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)N/proc/%s/statusrc   )r   r   
pid_existsrI  getpidr   r:  s     r7   test_pid_exists_no_proc_statusz'TestMisc.test_pid_exists_no_proc_statusJ  sN      1267 	1$$RYY[11188O8	 	 	s   8AAN)r   r   r   r  r  r  r  r  r  r   r  r  r^   rb   r7   r  r    s>    ?
<6|%;N
8)& 1 1 rb   r  z
no batteryc                   |    e Zd Z ej                   ed       d      d        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zy)TestSensorsBatteryacpizacpi utility not availablec                     t        d      }t        |j                  d      d   j                         j	                  dd            }t        j                         j                  }| j                  ||d       y )Nzacpi -br  r   r  rc   r   )	r   rv   rG   r   replacer   sensors_batterypercentr   )r   rw   
acpi_valuer   s       r7   test_percentzTestSensorsBattery.test_percent[  sa    m3*002::3CD
--/77z<qArb   c                 z   fd}t         t        rdnd}t        j                  ||      5 }| j	                  t        j                         j                  d       | j	                  t        j                         j                  t
        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      r7   r   z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockd  4    }}89zz$'' 7777rb   r   r   rk  T)rE   r   r   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   r   r   r   r   s       @r7   test_emulate_power_pluggedz-TestSensorsBattery.test_emulate_power_pluggedb  s    	8 	),o2DZZ; 	qV335CCTJ&&(1163N3N 88O8	 	 	s   A9B11B:c                    fd}t         t        rdnd}t        j                  ||      5 }| j	                  t        j                         j                  d       |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        t        j                  d      | j                  d      rt	        j
                  t        d            S  | g|i |S )Nr  rc   /statuschargingr  r  r  r  r   r   r   r  s      r7   r   zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockv  sU    }}89ellB//y){{1Z=11 7777rb   r   r   rk  T	rE   r   r   r   r   r   r  r  r   r  s       @r7   test_emulate_power_plugged_2z/TestSensorsBattery.test_emulate_power_plugged_2s  sh    	8 	),o2DZZ; 	qV335CCTJ88O8	 	 	   =A55A>c                    fd}t         t        rdnd}t        j                  ||      5 }| j	                  t        j                         j                  d       |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      r7   r   zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mock  r  rb   r   r   rk  Fr  r  s       @r7   test_emulate_power_not_pluggedz1TestSensorsBattery.test_emulate_power_not_plugged  sh    	8 	),o2DZZ; 	qV335CCUK88O8	 	 	r  c                    fd}t         t        rdnd}t        j                  ||      5 }| j	                  t        j                         j                  d       |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        t        j                  d      | j                  d      rt	        j
                  t        d            S  | g|i |S )Nr  rc   r  dischargingr  r  s      r7   r   zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mock  sV    }}89ellB//y){{1]#344 7777rb   r   r   rk  Fr  r  s       @r7    test_emulate_power_not_plugged_2z3TestSensorsBattery.test_emulate_power_not_plugged_2  sh    	8 	),o2DZZ; 	qV335CCUK88O8	 	 	r  c                     fd}t         t        rdnd}t        j                  ||      5 }| j	                  t        j                         j                         |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        t        j                  d      | j                  d      rt	        j
                  d      S  | g|i |S )N)"/sys/class/power_supply/AC0/online!/sys/class/power_supply/AC/onlinerc   #/sys/class/power_supply/BAT0/statuss   ???)rs   r  r  r  r   r   r  s      r7   r   zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mock  sX        ellB//!FGzz&)) 7777rb   r   r   rk  )	rE   r   r   r   rt  r   r  r  r   r  s       @r7   test_emulate_power_undeterminedz2TestSensorsBattery.test_emulate_power_undetermined  sf    		8 	),o2DZZ; 	qf446DDE88O8	 	 	s   <A44A=c                     t        ddi      5 }| j                  t        j                         j                  d       |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   r:  s     r7   test_emulate_energy_full_0z-TestSensorsBattery.test_emulate_energy_full_0  sT    7>
 	V335==qA88O8		 	 	s   =AAc                    t        dt        t        j                  d            5  t        dt        t        j                  d            5  t	        ddi      5  | j                  t        j                         j                  d       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  rc   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )	r   r  r  r  r   r   r   r  r  r   s    r7   "test_emulate_energy_full_not_availz5TestSensorsBattery.test_emulate_energy_full_not_avail  s     !6ELL"%
 	K %:b) K '<eD K $$V%;%;%=%E%ErJK	K		K 	KK K	K K		K 	Ks;   %B8
B,/B B,B8 B)%B,,B5	1B88Cc           	         t        dt        t        j                  d            5  t        dt        t        j                  d            5  t        dt        t        j                  d            5  | j	                  t        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  rc   r  r  )r   r  r  r  rt  r   r  r  r  s    r7   test_emulate_no_powerz(TestSensorsBattery.test_emulate_no_power  s     /r1J
 
	N %4gellB6O N )9ELL"- N %%f&<&<&>&L&LM	NN
	N 
	NN NN N
	N 
	Ns;   %C
%C/.B6C%C6B?;CC	CCN)r   r   r   r   r{  r   r  r  r  r  r  r  r  r  r  r^   rb   r7   r  r  X  sX     X__v&(DEB FB"""(K Nrb   r  c                       e Zd Zd Zy)TestSensorsBatteryEmulatedc                 `   fd}t         t        rdnd}t        j                  ddg      5 }t        j                  ||      5 }| j	                  t        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                 6   | j                  d      rt        j                  t        d            S | j                  d      rt        j                  t        d            S | j                  d      rt        j                  t        d            S  | g|i |S )Nz/energy_now60000000z
/power_now0z/energy_full60000001r  r   r   r   r  s      r7   r   z5TestSensorsBatteryEmulated.test_it.<locals>.open_mock  su    }}]+{{1Z=11|,{{1S6**~.{{1Z=11 7777rb   r   r   z
os.listdirBAT0r  rk  )rE   r   r   r   rz  r   r  r   )r   r   r   mlistdirmopenr   s        @r7   test_itz"TestSensorsBatteryEmulated.test_it  s    	8 	),o2DZZF8< 	?KY? ?5$$V%;%;%=>?	? |||? ?	? 	?s#   B$$B+B$B!	B$$B-N)r   r   r   r  r^   rb   r7   r  r    s    rb   r  c                       e Zd Zd Zd Zy)TestSensorsTemperaturesc                    fd}t         t        rdnd}t        j                  ||      5  t        j                  ddg      5  t	        j
                         d   d	   }| j                  |j                  d
       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       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                  t        d            S | j                  d      rt        j                  t        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   r  s      r7   r   zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mock  s    }}W%{{1V9--~.{{1W:..~.zz(++|,zz(++}-zz(++ 7777rb   r   r   rk  r  z/sys/class/hwmon/hwmon0/temp1r  r   r   r        >@g      D@      I@rE   r   r   r   r   sensors_temperaturesr   r  r  highcritical)r   r   r   tempr   s       @r7   test_emulate_class_hwmonz0TestSensorsTemperatures.test_emulate_class_hwmon  s    	8 	),o2DZZ; 		6+J*K 6 224V<Q?  W5  t4  D1  56		6 		66 6		6 		6s$   C/BC#C/#C,	(C//C8c                    fd}d }t         t        rdnd}t        j                  ||      5  t        j                  dd|      5  t	        j
                         d	   d
   }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 p   | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  t	        d            S | j                  d      rt        j                  t	        d            S  | g|i |S )	N0_tempr  r  r  0_typer  typer   )r  r   r   r   r   r  s      r7   r   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mock  s    }}X&zz(++v&zz(++x({{1Z=11v&{{1V9-- 7777rb   c                 D    | dk(  rg S | dk(  rg S | dk(  rdgS | dk(  rddgS g S )Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr^   rb  s    r7   	glob_mockzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mock  sP    88	AA	;;:;;GGHH  Irb   r   r   rk  r  Tr   r   r   rc   r  r  r  )r   r   r  r   r  r   s        @r7   test_emulate_class_thermalz2TestSensorsTemperatures.test_emulate_class_thermal  s    
	8	 	),o2DZZ; 	6K)L 6224V<Q?  R0  t4  D1  56	6 	66 6	6 	6s$   C2
BC&C2&C/	+C22C;N)r   r   r   r  r  r^   rb   r7   r  r    s    68#6rb   r  c                       e Zd Zd Zy)TestSensorsFansc                    fd}t         t        rdnd}t        j                  ||      5  t        j                  ddg      5  t	        j
                         d   d	   }| j                  |j                  d
       | j                  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 6   | j                  d      rt        j                  t        d            S | j                  d      rt        j                  t        d            S | j                  d      rt        j                  t        d            S  | g|i |S )Nr  r   z/fan1_labelr  z/fan1_input2000r  r  s      r7   r   z4TestSensorsFans.test_emulate_data.<locals>.open_mock;  su    }}W%{{1V9--}-{{1W:..}-{{1V9-- 7777rb   r   r   rk  r  z/sys/class/hwmon/hwmon2/fan1r  r   r   r  i  )	rE   r   r   r   r   sensors_fansr   r  r  )r   r   r   fanr   s       @r7   r  z!TestSensorsFans.test_emulate_data:  s    	8 	),o2DZZ; 	4+I*J 4 ))+F3A6  G4  d34	4 	44 4	4 	4s$   B7AB+B7+B4	0B77C N)r   r   r   r  r^   rb   r7   r  r  8  s    4rb   r  c                       e Zd Z e       d        Zd Z ej                  ed      d        Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z ej                  e d      d        Zd Zd Zd Zy)TestProcessc           
      n   | j                         }t        j                  j                  |j                        j                         \  }}}t        j                  |j                        j                  d      }| j                  |t        |D cg c]  }|j                  |j                  z    c}      d       | j                  |t        |D cg c]  }|j                   c}      d       | j                  |t        |D cg c]  }|j                   c}      d       y c c}w c c}w c c}w )NF)groupedr  r   )spawn_testprocr   rr  r  r  _parse_smapsmemory_mapsr   r  private_dirtyprivate_cleanpssr5  )r   sprocussr&  r5  mapsr`   s          r7   test_parse_smaps_vs_memory_mapsz+TestProcess.test_parse_smaps_vs_memory_mapsW  s    ##%00;HHJS$~~eii(44U4CDAq1??2AB 	 	

 	sC(=1(=$>dKtS$)?Q!&&)?%@M	 B )>)?s    D(D-D2c                    t        j                  d      j                         }t        dt	        j
                         z  |i      5 }t        j                  j                  t	        j
                               }|j                         \  }}}|j                  sJ | j                  |d       | j                  |d       | j                  |d       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/%s/smapsi l  r  i <  )r   r   r   r   rI  r  r   rr  r  r"  r   r   )r   r   r   r  r(  r&  r5  s          r7   test_parse_smaps_mockedz#TestProcess.test_parse_smaps_mockedd  s    // # , - 	.  0299; >HI 	.Q''		4A^^-NCd88O8S"56S(+T9-	. 	. 	.s   B
CC"zunreliable on PYPYc                    d }| j                         }t        |d      5  | j                   ||      j                  d       d d d        t        |      5  | j                   ||      j                  d       d d d        t        |d      5  | j                   ||      j                  d       d d d        t        |d      5  | j                   ||      j                  d       d d d        t        |d      5  | j                   ||      j                  d       d d d        t        |d      5  | j                   ||      j                  d       d d d        t        rt        |       t        |d      5  | j                   ||      j                  d       d d d        t        |       t        |d	      5  | j                   ||      j                  d       d d d        y y # 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   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 _r]   )	r   r  timer
   
open_filesr|  rI  abspathr  )fnamer  	giveup_atfiles       r7   get_test_filez7TestProcess.test_open_files_mode.<locals>.get_test_file  sj     A		n4ILLN DyyBGGOOE$::#y0	 rb   r   rr  zr+zw+za+r`   zx+)r  rE   r   moder   r   )r   r6  testfns      r7   test_open_files_modez TestProcess.test_open_files_mode  s   		@ "&# 	>]6277=	>&\ 	>]6277=	>&# 	>]6277=	> &$ 	?]6277>	?&$ 	?]6277>	?&$ 	?]6277>	? fc" B  v!6!;!;SABfd# C  v!6!;!;TBC C 	> 	>	> 	>	> 	>	? 	?	? 	?	? 	?
B BC Cs_   #G)#G6#H#H;#H2#H*:#H6<#I)G36H HHH'*H36H?Ic                    t        j                         }|j                         }t        | j	                         d      5  t        |j                  dt        |      z         t        j                  dt        t        j                  d            5 }| j                  |j                         g        |j                  sJ 	 d d d        t        j                  dt        t        j                  d            5 }| j                  |j                         g        |j                  sJ 	 d d d        d d d        y # 1 sw Y   yxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   len(ret) != %ipsutil._pslinux.os.readlinkrc   rk  )r   r  r1  rE   r  r   rI   r   r   OSErrorr  r  r   r   EINVAL)r   r  filesr   s       r7   test_open_files_file_gonez%TestProcess.test_open_files_file_gone  s    NN$//#S) 	 q||%5E
%BC-#ELL"5     4xxx  -#ELL"5     4xxx 	  	       	  	 s<   AE/D97E8/E(E9E	>EE	
EEc                    t        j                         }|j                         }t        | j	                         d      5  t        |j                  dt        |      z         t        rdnd}t        j                  |t        t        j                  d            5 }| j                  |j                         g        |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   r<  r   r   rc   rk  )r   r  r1  rE   r  r   rI   r   r   r   r  r  r  r   r   r   r  r@  r   r   s        r7   test_open_files_fd_gonez#TestProcess.test_open_files_fd_gone  s     NN$//#S) 	 q||%5E
%BC-0/6HKr)B    4xxx	 		  	    		  	 s$   AC(/CC(C%	!C((C1c                 ,   t        j                         }|j                         }t        | j	                         d      5  t        |j                  dt        |      z         d}t        j                  |t        t        j                  d            5 }t        j                  d      5  | j                  |j                         g        |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   r<  r=  rc   rk  psutil._pslinux.debug)r   r  r1  rE   r  r   rI   r   r   r>  r  ENAMETOOLONGr   r   rC  s        r7   test_open_files_enametoolongz(TestProcess.test_open_files_enametoolong  s     NN$//#S) 		$q||%5E
%BC7K1C1CR)H $ZZ 78 $$$Q\\^R888O8$$			$ 		$$ $$ $			$ 		$s<   AD
C>)/C2C>!D
2C;7C>>D	D

Dc                    t        j                  di       5 }| j                  t        j                  j                  t        j                               j                                |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz)psutil._pslinux._psposix.get_terminal_mapr  )
r   r   rt  r   rr  r  rI  r  terminalr   r:  s     r7   test_terminal_mockedz TestProcess.test_terminal_mocked  sb    ZZ7b
 	foo55biikBKKMN88O8		 	 	s   AA??Bc                    t        j                         }t        j                  t	        d            }t        j                  d|d      5 }| j                  |j                         ddg       |j                  sJ 	 d d d        t        j                  t	        d            }t        j                  d|d      5 }| j                  |j                         g d       |j                  sJ 	 d d d        y # 1 sw Y   zxY w# 1 sw Y   y xY w)	Nzfoo bar r(  Tro  foobarz	foo bar  rM  rN  rc   
r   r  r   r   r   r   r   r   cmdliner   r   r  ry  r   s       r7   test_cmdline_mockedzTestProcess.test_cmdline_mocked  s    NNKK"2 34	ZZ!	$
 	QYY[5%.988O8		
 KK"6 78	ZZ!	$
 	QYY[*<=88O8		 		 		 	   1C6;1D6C?Dc                    t        j                         }t        j                  t	        d            }t        j                  d|d      5 }| j                  |j                         ddg       |j                  sJ 	 d d d        t        j                  t	        d            }t        j                  d|d      5 }| j                  |j                         g d       |j                  sJ 	 d d d        y # 1 sw Y   zxY w# 1 sw Y   y xY w)	Nzfoo bar r(  Tro  rM  rN  z	foo bar  rO  rP  rR  s       r7   test_cmdline_spaces_mockedz&TestProcess.test_cmdline_spaces_mocked  s    NNKK*.	ZZ!	$
 	QYY[5%.988O8		
 KK+/	ZZ!	$
 	QYY[*<=88O8		 		 		 	rT  c                 $   t        j                         }t        j                  t	        d            }t        j                  d|d      5 }| j                  |j                         ddg       |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzfoo bar r(  Tro  rM  rN  rP  rR  s       r7   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  st     NNKK"2 34	ZZ!	$
 	QYY[5%.988O8		 	 	s   1BBc                 $   t        j                  dd      5  | j                  t        j                         j                         d       | j                  t        j                         j                         d       d d d        y # 1 sw Y   y xY w)Nr=  z/home/foo (deleted)r  z	/home/foo)r   r   r   r   r  execwdr  s    r7   !test_readlink_path_deleted_mockedz-TestProcess.test_readlink_path_deleted_mocked  so    ZZ)8M
 	B V^^-113[AV^^-113[A		B 	B 	Bs   A%BBc                    fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                         }|j                  sJ | j                  |g        d d d        fd}t        j                  ||      5  | j                  t        j                  t	        j
                         j                         d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nc                     | j                  dt        j                         z        rt        t        j
                  d       | g|i |S Nz/proc/%s/taskrc   )rs   rI  r  r  r  r  r  s      r7   open_mock_1z4TestProcess.test_threads_mocked.<locals>.open_mock_1+  s@    <=ellB// 7777rb   r   r   rk  c                     | j                  dt        j                         z        rt        t        j
                  d       | g|i |S r_  )rs   rI  r  r  r  EPERMr  s      r7   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_2:  s@    <=ekk2.. 7777rb   )rE   r   r   r   r   r  r  r   r   r6  AccessDenied)r   r`  r   r   r   rc  r   s         @r7   test_threads_mockedzTestProcess.test_threads_mocked&  s    
	8 	),o2DZZ= 	&.."**,C88O8S"%	&	8 ZZ= 	Mf116>>3C3K3KL	M 	M	& 	&	M 	Ms   AC=C'C$'C0c                    t        j                  dt        t        j                  d            5 }t        j                         j                         }|j                  sJ | j                  |d       d d d        y # 1 sw Y   y xY w)Nzpsutil._pslinux.readlinkrc   rk  )
r   r   r>  r  r  r   r  rZ  r   r   )r   r   r   s      r7   test_exe_mockedzTestProcess.test_exe_mockedC  sf    ZZ&GELL"4M
 	&.."&&(C88O8S"%	& 	& 	&s   AA<<Bc                 Z   t        dt        j                         z  t        t        j
                  d            5 }t        j                         }| 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,  rc   )r   rI  r  r  r  r  r   r  r6  r   r#  r   r   r   r  s      r7   test_issue_1014zTestProcess.test_issue_1014K  s     !ryy{*GELL",E
 	 A""#45   88O8	 	   		 	s#   *B!$B5B!B	B!!B*r  c                    t        j                  dt        t        j                  d            5 }t        j                  dd      5 }t        j                         }|j                          | 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                  j                         | j                  |j                  j                  |j                                y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nzpsutil._pslinux.prlimitrc   rk  z"psutil._pslinux.Process._is_zombieTr  )r   r   r>  r  ENOSYSr   r  r   r6  ZombieProcessrlimitRLIMIT_NOFILEr   r   	exceptionr  )r   r  r  r  r   s        r7   test_rlimit_zombiezTestProcess.test_rlimit_zombieV  s   
 ZZ%75<<3L
 		344 3NN$&&v';';< 3HHV11233		3 yyyyyy**AEE2++QVVX63 33 3		3 		3s<   EAE E,E4EE
EE	EE&c                    g d}dj                  |      j                         }t        dt        j                         z  |i      5  t        j                         }| j                  |j                         d       | j                  |j                         t
        j                         | j                  |j                         d       | j                  |j                         dt        z  t        j                         z          |j                         }| j                  |j                   dt        z         | j                  |j"                  dt        z         | j                  |j$                  d	t        z         | j                  |j&                  d
t        z         | j                  |j(                  dt        z         | j                  |j+                         d       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  ry  r  r  7r   z/proc/%s/statcatr   rB  r@  r   rC   r   r@  )rL   r   r   rI  r  r   r  r   r   statusSTATUS_ZOMBIEppidcreate_timer   r  rG  r  systemchildren_userchildren_systemiowaitcpu_num)r   r   r   r  cpus        r7   test_stat_file_parsingz"TestProcess.test_stat_file_parsingj  sm   +
X ((4.'')"))+ =wGH 	- AQVVXu-QXXZ)=)=>QVVXq)[63C3C3E!E ++-CSXXq;7SZZ[9S..K@S00!k/BSZZ[9QYY[!,	- 	- 	-s   FG--G6c           	         t        j                  d      j                         }t        dt	        j
                         z  |i      5  t        j                         }| j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                         d       |j                         }| j                  |j                  d       | j                  |j                  d       | j                  |j                   d       |j#                         }| j                  |j                  d	       | j                  |j                  d
       | j                  |j                   d       | j                  |j$                  j'                         t)        t+        d                   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      B   i  i  i  i  i  i  rA  )r   r   r   r   rI  r  r   r  r   num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistrK   )r   r   r  r  r  s        r7   test_status_file_parsingz$TestProcess.test_status_file_parsing  sh   // #/ 0 17 	  1BIIK ?IJ 	K AQ//1;;R@Q//1==rBQ]]_b1668DTYY-T^^T2TZZ.668DTYY-T^^T2TZZ.QWW7794a>J	K 	K 	Ks   FGG%c                 f   t        j                  dt        t        j                  d            5 }t        j                         }t        j                  d      5  | j                  |j                         g        |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=  rc   rk  rF  )
r   r   r>  r  rG  r   r  r   connectionsr   ri  s      r7   test_connections_enametoolongz)TestProcess.test_connections_enametoolong  s     ZZ) 2 2B7
 	   A34    "5xxx 	  	 
   	  	 s#   *B'/B
B'B$	 B''B0N)r   r   r   r   r*  r-  r   r{  r   r:  rA  rD  rH  rK  rS  rV  rX  r\  re  rg  rj  r   rq  r  r  r  r^   rb   r7   r  r  U  s    
N 
N.D X__T/0"C 1"CH .  $&  	BM:&	 X__^_57 67&<-|K0 rb   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 r]   )r   r  proc)clss    r7   
setUpClassz#TestProcessAgainstStatus.setUpClass  s    >>#rb   c                    t         j                  j                  d| j                  j                  z        5 }|D ]N  }|j                         }|j                  |      s%|j                  d      d   }	 t        |      c cd d d        S  t        d|z        # t        $ r |cY c cd d d        S w xY w# 1 sw Y   y xY w)Nr  	r@  zcan't find %r)
r   _psplatform	open_textr  r  r   rs   	partitionrv   rJ   )r   	linestartrP   rR   rU  s        r7   read_status_filez)TestProcessAgainstStatus.read_status_file  s    ))		-
 	: %zz|??9- NN403E%"5z)	: 	:% _y899 & %$	: 	:%	: 	:s;   'B5B54
B>B5
B5B2$B51B22B55B>c                 z    | j                  d      }| j                  | j                  j                         |       y )NzName:)r  r   r  r   r   rU  s     r7   	test_namez"TestProcessAgainstStatus.test_name  -    %%g.)51rb   c                     | j                  d      }||j                  d      dz   |j                  d       }|j                  dd      }| j	                  | j
                  j                         |       y )NzState:(r   )r   rS  )r  r{  rfindr  r   r  r|  r  s     r7   test_statusz$TestProcessAgainstStatus.test_status  sa    %%h/ejjo)EKK,<=c3'))+U3rb   c                 z    | j                  d      }| j                  | j                  j                         |       y )NzPPid:)r  r   r  r~  r  s     r7   	test_ppidz"TestProcessAgainstStatus.test_ppid  r  rb   c                 z    | j                  d      }| j                  | j                  j                         |       y )NzThreads:)r  r   r  r  r  s     r7   test_num_threadsz)TestProcessAgainstStatus.test_num_threads  s/    %%j1..0%8rb   c                     | j                  d      }t        t        t        |j	                         dd             }| j                  | j                  j                         |       y )NzUid:r   rC   )r  r   r   rv   rG   r   r  r  r  s     r7   	test_uidsz"TestProcessAgainstStatus.test_uids  K    %%f-c#u{{}Qq123)51rb   c                     | j                  d      }t        t        t        |j	                         dd             }| j                  | j                  j                         |       y )NzGid:r   rC   )r  r   r   rv   rG   r   r  r  r  s     r7   	test_gidsz"TestProcessAgainstStatus.test_gids 	  r  rb   c                    | j                  d      }| j                  | j                  j                         j                  |       | j                  d      }| j                  | j                  j                         j
                  |       y )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r   r  r  r  r  r  s     r7   test_num_ctx_switchesz.TestProcessAgainstStatus.test_num_ctx_switches	  sj    %%&@A335??G%%&CD335AA5Irb   c           
         | j                  d      }dt        |      v rct        t        |j	                  d            \  }}| j                  | j                  j                         t        t        ||dz                      y y )NCpus_allowed_list:rS  r   )
r  r   r   rv   rG   r   r  cpu_affinityr  rK   )r   rU  min_max_s       r7   test_cpu_affinityz*TestProcessAgainstStatus.test_cpu_affinity	  sm    %%&:;#e*S%++c"23JD$		&&($uT4!8/D*E rb   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_timesrS  )r  r   r   r  r  r  r   r   )r   rU  r   s      r7   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^   rb   r7   r  r    sa     $ $:24292
2
 J Jrb   r  c                       e Zd Zd Zy)	TestUtilsc                     t        j                  dd      5 }| j                  t        j                  j                  d      d       |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzos.readlinkzfoo (deleted)r  rN  rM  )r   r   r   r   r  readlinkr   r:  s     r7   test_readlinkzTestUtils.test_readlink%	  sS    ZZOD 	V//88?G88O8	 	 	s   >A  A)N)r   r   r   r  r^   rb   r7   r  r  #	  s    rb   r  __main__)run_from_name)fr  
__future__r   rt   r,   r  globr   rI  r   r  r)   r2   r   r0  r   r   r   r   psutil._compatr   r   r   r   psutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq  r   r   r   r   r|  r2  dirname__file__HEREr1   SIOCGIFCONFre   r;   r?   rG  EMPTY_TEMPERATURESr8   r<   r@   rZ   ri   r}   r   r   r   contextmanagerr   r   r{  r   r   r   r  r>  rP  r  r  r  r  r  r  r  r  r  r;  rl  r  r  r  r  r  r  r  r  r   psutil.tests.runnerr  r^   rb   r7   <module>r     s         	 	 	           , %  ' ' $ % ' #  - * ' # #  & ) $  0  	+24+ 
wwrwwx01K"#<== 


,K. ,@@  0  , UL): : *:z UL)4
> 4
 *4
n UL)M6> M6 *M6j UL)Y> Y *YB UL)3 3 *3& UL)B  B  *B J UL)n  *6 UL)S8^ S8 *S8l UL)	F 	F *	F UL)	O. 	O *	O" UL)E> E *ER UL)/5> /5 */5d UL)6n 6 *6r UL)~  *< UL)@)~ @) *@)F UL)FL~ FL *FLR UL)<;^ <; *<;H UL)`~ ` *`P UL)[,/AN AN 0 *ANH UL)  ** UL)@6n @6 *@6F UL)4n 4 *48 UL)u . u  *u p UL)L~ L *Lh UL)  * z1( rb   