
    :Qg[d                    >   d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, ddlm-Z- erddl.m/Z/ dd l.m0Z0 dd!l.m1Z1 dd"l.m2Z2 ejf                  ji                  ejf                  jk                  e6            Z7d#Z8d$Z9d%Z:d&Z;d'Z<erd(Z= ej                  d)       Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGej                  d3        ZIej                  d4        ZJe'j                  j                  e d56       G d7 d8e#             ZMe'j                  j                  e d56       G d9 d:e#             ZNe'j                  j                  e d56       G d; d<e#             ZOe'j                  j                  e d56       G d= d>e#             ZPe'j                  j                  e d56       G d? d@e#             ZQe'j                  j                  e d56       G dA dBe#             ZRe'j                  j                  e d56       G dC dDe#             ZSe'j                  j                  e d56       G dE dFe#             ZTe'j                  j                  e d56       G dG dHe#             ZUe'j                  j                  e d56       G dI dJe#             ZVe'j                  j                  e d56       G dK dLe#             ZWe'j                  j                  e d56      e'j                  j                  e dM6       G dN dOe#                    ZXe'j                  j                  e d56       G dP dQe#             ZYe'j                  j                  e d56       G dR dSe#             ZZe'j                  j                  e d56       G dT dUe#             Z[e'j                  j                  e d56       G dV dWe#             Z\e'j                  j                  e d56       G dX dYe#             Z]e'j                  j                  e d56       G dZ d[e#             Z^e'j                  j                  e d56      e'j                  j                  e d\6       G d] d^e#                    Z_e'j                  j                  e d56       G d_ d`e#             Z`e'j                  j                  e d56       G da dbe#             Zae'j                  j                  e d56       G dc dde#             Zbe'j                  j                  e d56       G de dfe#             Zce'j                  j                  e d56       G dg dhe#             Zde'j                  j                  e d56       G di dje#             Zey)kzLinux specific tests.    )divisionN)LINUX)PY3)FileNotFoundError)
basestring)AARCH64)GITHUB_ACTIONS)GLOBAL_TIMEOUT)HAS_BATTERY)HAS_CPU_FREQ)HAS_GETLOADAVG)
HAS_RLIMIT)PYPY)PYTEST_PARALLEL)	QEMU_USER)TOLERANCE_DISK_USAGE)TOLERANCE_SYS_MEM)PsutilTestCase)
ThreadTask)
call_until)mock)pytest)reload_module)retry_on_failure)safe_rmpath)sh)skip_on_not_implemented)which)CLOCK_TICKS)RootFsDeviceFinder)calculate_avail_vmem)open_binaryi  i  i'  i  i  i   z/sys/class/hwmon/hwmon*c                    dd l }| d d } t        rt        | d      } t        j                  t        j                  t        j
                        }t        j                  |      5  t        j                  |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      T/var/www/html/answerous/venv/lib/python3.12/site-packages/psutil/tests/test_linux.pyget_ipv4_addressr;   N   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/   r0   r1   r2   r3   SIOCGIFNETMASKr5   r6   r7   s      r:   get_ipv4_netmaskr?   ]       CR[F
vw'fnnf&7&78A			A	 
KK
NFKK,G

 
 
r<   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/   r0   r1   r2   r3   SIOCGIFBRDADDRr5   r6   r7   s      r:   get_ipv4_broadcastrC   l   r@   r<   c                 H   t        d      5 }g }|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splitappendlen
ValueErrorrangejoinr,   	inet_ptonAF_INET6	inet_ntop)r8   f
all_fieldslinefieldsiunformattedgroupsj	formattedpackeds              r:   get_ipv6_addressesr\   {   s,   	"	# Eq
 	*DZZ\FbzV#!!&)	*
 z?a:VCDD  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    r:   ordzget_mac_address.<locals>.ord   s            r)   z%02x:rE   )r*   r   r+   r,   r-   r.   r/   r0   r2   r3   SIOCGIFHWADDRr5   r6   __builtin__rc   rN   )r8   r*   r9   inforc   rh   chars          r:   get_mac_addressrk      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   rI   
startswithcollections
namedtupleintrL   rN   )outlinesrT   _totalusedrm   nts           r:   	free_swapr      s     fd^&)!4
5CIIdOE 8??6"#'::< AudD''0ABBc%j#d)SY77	8
 1DIIe4DD rd   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.
    rm   rn   ro   rp   rq   rs   Memc              3   2   K   | ]  }t        |        y wr_   )rx   ).0rb   s     r:   	<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   rI   ru   rv   rw   rL   rN   )ry   rz   rT   r|   r}   rm   sharedr~   s           r:   free_physmemr      s     fd^&)!4
5CIIdOE 6??5!(Ka9J(K%E4v''7B eT4556 0499U3CC rd   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-sro   rp   rq   rs    r   z can't find %r in 'vmstat' output)r   rI   striprx   rL   )statry   rT   s      r:   r   r      sl    
hFI#6
7C		$ +zz|4<tzz#q)**+ 7$>
??rd   c            
          t        ddg      j                         } d| v rt        j                  d      t	        t        t        t        j                  d| j                         d                     S )Nrm   z-VUNKNOWNzcan't determine free versionz\d+rE   )
r   r   r   skiptuplemaprx   refindallrI   )ry   s    r:   get_free_version_infor      sX    
fd^

"
"
$CCkk899S"**VSYY[_=>??rd   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       r:   	open_mockz$mock_open_content.<locals>.open_mock   sb    5=DkGgz2;;w//::g..zz'**T3D3F33rd   builtins.open__builtin__.openTcreateside_effectNrH   r   r   patch)r   r   patch_pointmr   s   `   @r:   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      r:   r   z&mock_open_exception.<locals>.open_mock   s%    8IT3D3F33rd   r   r   Tr   Nr   )r   r   r   r   r   r   s   ``   @r:   mock_open_exceptionr      sH     4 I%(/.@K	K)	D   s   0AA	AAAz
LINUX onlyreasonc                   z    e Zd Zd Z e       d        Z e       d        Z e       d        Z e       d        Zy)"TestSystemVirtualMemoryAgainstFreec                 v    t               j                  }t        j                         j                  }||k(  sJ y r_   )r   r|   psutilvirtual_memoryself	cli_valuepsutil_values      r:   
test_totalz-TestSystemVirtualMemoryAgainstFree.test_total  s1     N((	,,.44L(((rd   c                    t               dk  rt        j                  d      t               dk\  rt        j                  d      t               j                  }t        j                         j                  }t        ||z
        t        k  sJ y )N   r      free version too oldrF   r   r   free version too recent)	r   r   r   r   r}   r   r   absr   r   s      r:   	test_usedz,TestSystemVirtualMemoryAgainstFree.test_used  st     !"Z/++455 "i/++788 N''	,,.339|+,/@@@@rd   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y r_   )r   rm   r   r   r   r   r   s      r:   	test_freez,TestSystemVirtualMemoryAgainstFree.test_free'  s<     N''	,,.339|+,/@@@@rd   c                     t               }|j                  }|dk(  rt        j                  d      t	        j
                         j                  }t        ||z
        t        k  sJ |d|d|j                         y )Nr   z%free does not support 'shared' columnr    
)	r   r   r   r   r   r   r   r   output)r   rm   
free_valuer   s       r:   test_sharedz.TestSystemVirtualMemoryAgainstFree.test_shared-  sm    ~[[
?++EFF,,.55
\)*->>	B%|T[[A	B>rd   c                 :   t        ddg      }|j                  d      }d|d   vrt        j                  d      t	        |d   j                         d         }t        j                         j                  }t        ||z
        t        k  sJ |d	|d
|       y )Nrm   rn   rs   	availabler   z(free does not support 'available' columnr   rE   r   r   )
r   rI   r   r   rx   r   r   r   r   r   )r   ry   rz   r   r   s        r:   test_availablez1TestSystemVirtualMemoryAgainstFree.test_available8  s     &$ 		$eAh&++HIIU1X^^-b12J!002<<LJ-.1BB>)<=>Brd   N)	__name__
__module____qualname__r   r   r   r   r   r   r`   rd   r:   r   r     si    )
 A A" A A
 B B > >rd   r   c                       e Zd Zd Z e       d        Z e       d        Z e       d        Z e       d        Z e       d        Z	y)$TestSystemVirtualMemoryAgainstVmstatc                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nztotal memory   )r   r   r   r|   r   r   r   vmstat_valuer   s      r:   r   z/TestSystemVirtualMemoryAgainstVmstat.test_totalJ  s>    n-4,,.44<,./2CCCCrd   c                    t               dk  rt        j                  d      t               dk\  rt        j                  d      t        d      dz  }t	        j
                         j                  }t        ||z
        t        k  sJ y )Nr   r   r   r   zused memoryr   )	r   r   r   r   r   r   r}   r   r   r   s      r:   r   z.TestSystemVirtualMemoryAgainstVmstat.test_usedO  sv     !"Z/++455 "i/++788m,t3,,.33<,./2CCCCrd   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzfree memoryr   )r   r   r   rm   r   r   r   s      r:   r   z.TestSystemVirtualMemoryAgainstVmstat.test_freea  s>    m,t3,,.33<,./2CCCCrd   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzbuffer memoryr   )r   r   r   buffersr   r   r   s      r:   test_buffersz1TestSystemVirtualMemoryAgainstVmstat.test_buffersg  s>    o.5,,.66<,./2CCCCrd   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzactive memoryr   )r   r   r   activer   r   r   s      r:   test_activez0TestSystemVirtualMemoryAgainstVmstat.test_activem  s>    o.5,,.55<,./2CCCCrd   c                     t        d      dz  }t        j                         j                  }t	        ||z
        t
        k  sJ y )Nzinactive memoryr   )r   r   r   inactiver   r   r   s      r:   test_inactivez2TestSystemVirtualMemoryAgainstVmstat.test_inactives  s?    /047,,.77<,./2CCCCrd   N)
r   r   r   r   r   r   r   r   r   r   r`   rd   r:   r   r   H  s    D
 D D" D D
 D D
 D D
 D Drd   r   c                   D    e Zd Zd Z e       d        Zd Zd Zd Zd Z	y)TestSystemVirtualMemoryMocksc                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t	        j                  d       t        j                         }|j                  sJ t        |      dk(  sJ |d   }dt        |j                        v sJ d	t        |j                        v sJ d
t        |j                        v sJ dt        |j                        v sJ dt        |j                        v sJ dt        |j                        v sJ dt        |j                        v sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                   dk(  sJ |j"                  dk(  sJ |j$                  dk(  sJ |j&                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NaL              Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:         -1 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            SReclaimable:     346648 kB
            /proc/meminfoTrecordalwaysr   r   z#memory stats couldn't be determinedcachedr   r   r   r   r   )textwrapdedentencoder   warningscatch_warningssimplefilterr   r   calledrK   strmessager   r   r   r   r   r   slabr   r   r   wsretws         r:   test_warnings_on_missesz4TestSystemVirtualMemoryMocks.test_warnings_on_misses|  s    // 	# 	  	 9: 	%a((5 %%%h/++-xxx2w!|#|qE<AIINNN3qyy>1113qyy>1113qyy>111!S^333 C		N222"c!))n444zzQ&zzQ&||q(((zzQ&{{a'''}})))xx1}$}'%	% 	%% %	% 	%s$   GE3G<GG	GG"c                    i }t        d      5 }|D ])  }|j                         }t        |d         dz  ||d   <   + 	 d d d        t        |      }d|v r!|d   }t	        ||z
        |z  dz  }|dk  sJ y y # 1 sw Y   :xY w)Nr   r   r   r   s   MemAvailable:d   r%   )r"   rI   rx   r!   r   )r   memsrR   rT   rU   abdiff_percents           r:   test_avail_old_percentz3TestSystemVirtualMemoryMocks.test_avail_old_percent  s     ) 	8Q 8"%fQi.4"7VAY8	8
 !&t#%&Aq1u:>C/L"$$$ $	8 	8s   /A77B c                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ j                  dk(  sJ d   }dt        |j                        v sJ 	 d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Na              Active:          9444728 kB
            Active(anon):    6145416 kB
            Active(file):    2950064 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            Inactive(file):  1567648 kB
            MemAvailable:    6574984 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            SReclaimable:     346648 kB
            r   Tr   l     " r   ,inactive memory stats couldn't be determinedr   r   r   r   r   r   r   r   r   r   r   r   r   s         r:    test_avail_old_comes_from_kernelz=TestSystemVirtualMemoryMocks.test_avail_old_comes_from_kernel  s     // #   	 9: 	a((5 .++-.88O8==N2221AAS		F   	 	. .	 	$   B8B,AB8,B5	1B88Cc                    t        j                  d      j                         }t        d|i      5 }t	        j
                  d      5 }t        j                         }d d d        |j                  sJ j                  dk(  sJ d   }dt        |j                        v sJ 	 d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Nat              Active:          9444728 kB
            Active(anon):    6145416 kB
            Buffers:          287952 kB
            Cached:          4818144 kB
            Inactive(file):  1578132 kB
            Inactive(anon):   574764 kB
            MemFree:         2057400 kB
            MemTotal:       16325648 kB
            Shmem:            577588 kB
            r   Tr       `LG r   r  r  r   s         r:   test_avail_old_missing_fieldsz:TestSystemVirtualMemoryMocks.test_avail_old_missing_fields  s     // 
# 
  	 9: 	a((5 .++-.88O8==$CCCC1AAS		F   	 	. .	 	r  c                    t        j                  d      j                         }t        d|i      5  t	        dt        t        j                  d            5  t        j                  d      5 }t        j                         }|j                  dk(  sJ |d   }d	t        |j                        v sJ 	 d d d        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   s        r:   test_avail_old_missing_zoneinfoz<TestSystemVirtualMemoryMocks.test_avail_old_missing_zoneinfo  s     // #   	 9: 	$ &AB  ,,D9 R //1C==,KKKK1AFqyy>**		 	
 	 	 	s<   %C#C-AC2C:C#CCC 	C##C,c                    t        j                  d      j                         }t        d|i      5 }t	        j
                         }|j                  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ |j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Na              MemTotal:              100 kB
            MemFree:               2 kB
            MemAvailable:          3 kB
            Buffers:               4 kB
            Cached:                5 kB
            SwapCached:            6 kB
            Active:                7 kB
            Inactive:              8 kB
            Active(anon):          9 kB
            Inactive(anon):        10 kB
            Active(file):          11 kB
            Inactive(file):        12 kB
            Unevictable:           13 kB
            Mlocked:               14 kB
            SwapTotal:             15 kB
            SwapFree:              16 kB
            Dirty:                 17 kB
            Writeback:             18 kB
            AnonPages:             19 kB
            Mapped:                20 kB
            Shmem:                 21 kB
            Slab:                  22 kB
            SReclaimable:          23 kB
            SUnreclaim:            24 kB
            KernelStack:           25 kB
            PageTables:            26 kB
            NFS_Unstable:          27 kB
            Bounce:                28 kB
            WritebackTmp:          29 kB
            CommitLimit:           30 kB
            Committed_AS:          31 kB
            VmallocTotal:          32 kB
            VmallocUsed:           33 kB
            VmallocChunk:          34 kB
            HardwareCorrupted:     35 kB
            AnonHugePages:         36 kB
            ShmemHugePages:        37 kB
            ShmemPmdMapped:        38 kB
            CmaTotal:              39 kB
            CmaFree:               40 kB
            HugePages_Total:       41 kB
            HugePages_Free:        42 kB
            HugePages_Rsvd:        43 kB
            HugePages_Surp:        44 kB
            Hugepagesize:          45 kB
            DirectMap46k:          46 kB
            DirectMap47M:          47 kB
            DirectMap48G:          48 kB
            r   i  i      i p  i T  i   i    i X     )r   r   r   r   r   r   r   r|   rm   r   r   r   r   r   r   r   )r   r   r   mems       r:   test_virtual_memory_mockedz7TestSystemVirtualMemoryMocks.test_virtual_memory_mocked  s   // 1# 1b c 	d 9: 	-a'')C88O899
***88x''';;(***::000::***::)))<<8+++88y(((==H,,,	- 	- 	-s   B<C77D N)
r   r   r   r   r   r  r  r
  r  r  r`   rd   r:   r   r   z  s4    "%H % %82>@-rd   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:)rH   read)rR   datas     r:   meminfo_has_swap_infoz*TestSystemSwapMemory.meminfo_has_swap_infoN  sC     /" 	a668D	t#;t(;;	 	s   /8c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y r_   )r   r|   r   swap_memoryr   r   r   r   r   s      r:   r   zTestSystemSwapMemory.test_totalU  s<    [&&
))+11:,-0AAAArd   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y r_   )r   r}   r   r  r   r   r  s      r:   r   zTestSystemSwapMemory.test_usedZ  <    [%%
))+00:,-0AAAArd   c                     t               j                  }t        j                         j                  }t	        ||z
        t
        k  sJ y r_   )r   rm   r   r  r   r   r  s      r:   r   zTestSystemSwapMemory.test_free`  r   rd   c                    t        j                  dd      5 }t        j                  d      5 }t        j                  d       t        j                         }|j                  sJ t        |      dk(  sJ |d   }dt        |j                        v sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        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   rK   r   r   sinsoutr   r   r   r   r   s        r:   test_missing_sin_soutz*TestSystemSwapMemory.test_missing_sin_soutf  s    ZZ-d; 	%q((5 %%%h/((*xxx2w!|#|qEO199~&& ww!|#|xx1}$}%	% 	%% %	% 	%s#   CBC	8C	C	CCc                    t        dt        t        j                  d            5 }t	        j
                  d      5 }t	        j                  d       t        j                         }|j                  sJ t        |      dk(  sJ |d   }dt        |j                        v sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        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   rK   r   r   r%  r&  r'  s        r:   test_no_vmstat_mockedz*TestSystemSwapMemory.test_no_vmstat_mockedu  s     GELL2MN
 	%((5 %%%h/((*xxx2w!|#|qE6199~&& ww!|#|xx1}$}%	% 	%% %	% 	%s#   C"BCC"C	C""C+c                    | j                         st        j                  d      t        j                  d      5 }t        j                         }d d d        j                  rJ dd lm	} |j                         \  }}}}}}}||z  }||z  }j                  |k(  sJ t        |j                  |z
        t        k  sJ y # 1 sw Y   rxY w)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinfor   )r  r   r   r   r   r   r  r   psutil._psutil_linux_psutil_linuxlinux_sysinfor|   r   rm   r   )r   r   swapcextr{   r|   rm   unit_multipliers           r:   test_meminfo_against_sysinfoz1TestSystemSwapMemory.test_meminfo_against_sysinfo  s     ))+++ABBZZ<= 	(%%'D	(88|+373E3E3G01aE4 zzU"""499t#$'8888	( 	(s   CC
c                     t        ddi      5 }t        j                          |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   rd   )r   r   r  r   r   r   s     r:   #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*  r2  r5  r`   rd   r:   r  r  L  s`    < <B
 B B
 B B
%%&9"rd   r  c                       e Zd Zd Zy)TestSystemCPUTimesc                 T   t        j                         j                  }t        j                  dt        j                         d         d   }t        t        t        |j                  d                  }|dk\  rd|v sJ d|vsJ |dk\  rd|v sJ d|vsJ |d	k\  rd
|v sJ y d
|vsJ y )Nz\d+\.\d+\.\d+   r   .)r:        steal)r:  r<  r)   guest)r   r:  r   
guest_nice)r   	cpu_times_fieldsr   r   osunamer   r   rx   rI   )r   rU   
kernel_verkernel_ver_infos       r:   test_fieldszTestSystemCPUTimes.test_fields  s    !!#++ZZ 0"((*Q-@C
C)9)9#)> ?@j(f$$$&(((j(f$$$&(((i'6)))v---rd   N)r   r   r   rG  r`   rd   r:   r8  r8    s    .rd   r8  c                      e Zd Zej                  j                  ej                  j                  d       d      d        Z	ej                  j                  ej                  j                  d       d      d        Z
ej                  j                   ed       d	      d
        Zej                  j                   ed       d      d        Zd Zy)TestSystemCPUCountLogical/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existr   c                    t        d      5 }|j                         j                         }d d d        dt              v r:t	        |j                  d      d         dz   }t        j                         |k(  sJ y y # 1 sw Y   QxY w)NrJ  -r   )rH   r  r   r   rx   rI   r   	cpu_count)r   rR   values      r:   test_against_sysdev_cpu_onlinez8TestSystemCPUCountLogical.test_against_sysdev_cpu_online  s{    
 23 	%qFFHNN$E	%#e*C(+,q0E##%... 	% 	%s   A;;B/sys/devices/system/cpuz&/sys/devices/system/cpu does not existc           	          t        j                  d      }t        |D cg c]  }t        j                  d|      | c}      }t        j                         |k(  sJ y c c}w )NrP  zcpu\d+$)rC  listdirrK   r   searchr   rM  )r   lsrb   counts       r:   test_against_sysdev_cpu_numz5TestSystemCPUCountLogical.test_against_sysdev_cpu_num  sU    
 ZZ12K1bii
A&>&JQKL!U*** Ls
   A A nprocznproc utility not availablec                 b    t        t        d            }t        j                  d      |k(  sJ y )Nznproc --allTlogical)rx   r   r   rM  )r   nums     r:   test_against_nprocz,TestSystemCPUCountLogical.test_against_nproc  s,     "]#$-444rd   lscpulscpu utility not availablec                     t        d      }t        |j                  d      D cg c]  }|j                  d      r| c}      }t	        j
                  d      |k(  sJ y c c}w )Nlscpu -prs   #TrY  )r   rK   rI   ru   r   rM  )r   ry   rb   r[  s       r:   test_against_lscpuz,TestSystemCPUCountLogical.test_against_lscpu  sT     nciioGQ\\#5F1GH-444 Hs
   A"A"c                    dd l }|j                  j                         }t        j                  dt
              5 }|j                  j                         |k(  sJ |j                  sJ t        j                  dd      5 }|j                  j                         J |j                  dk(  sJ |j                  d   d   dk(  sJ 	 d d d        t        d	d
      5 }|j                         }d d d        t        j                        }t        j                  d|d      5 }|j                  j                         |k(  sJ 	 d d d        t        d	di      5 }|j                  j                         |k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   zpsutil._pslinux.os.sysconfr   r#  Tr$  r:  
/proc/stat/proc/cpuinforbreturn_valuer   rd   )psutil._pslinux_pslinuxcpu_count_logicalr   r   rL   r   
call_count	call_argsrH   r  r   r   r   )r   r   originalr   rR   cpuinfo_data	fake_files          r:   test_emulate_fallbacksz0TestSystemCPUCountLogical.test_emulate_fallbacks  s   ??446 ZZ(j
 	 ??446(BBB88O8 1$? 9188:BBB||q((({{1~a(L888	9 ot, ( vvx(

<0I%Id G88:hFFFG #OS#9:  a88:hFFFxxx 5	  	 9 9( (G G   5	  	 sm   AG?AFGF!*5G F- G.F9GF	G!F*	&G-F6	2G9G	>GGN)r   r   r   r   markskipifrC  pathexistsrO  rV  r   r\  rb  rr  r`   rd   r:   rI  rI    s    [[GGNN;<<>  /	/ [[GGNN4557  +	+
 [['N#@  55 [['N#@  55
" rd   rI  c                   l    e Zd Zej                  j                   ed       d      d        Zd Zd Z	y)TestSystemCPUCountCoresr]  r^  r   c                    t        d      }t               }|j                  d      D ]9  }|j                  d      r|j                  d      }|j	                  |d          ; t        j                  d      t        |      k(  sJ y )Nr`  rs   ra  ,r   FrY  )r   setrI   ru   addr   rM  rK   )r   ry   core_idsrT   rU   s        r:   rb  z*TestSystemCPUCountCores.test_against_lscpu  ss     n5IIdO 	(D??3'CVAY'	( .#h-???rd   c                    t         j                  j                         }t        j                  dg       5 }t         j                  j                         }|j
                  sJ 	 d d d        ||k(  sJ y y # 1 sw Y   xY w)N	glob.globri  )r   rk  cpu_count_coresr   r   r   )r   meth_1r   meth_2s       r:   test_method_2z%TestSystemCPUCountCores.test_method_2  sq    002ZZ"5 	__446F88O8	 V### 	 	s   -A77B c                 .   t        j                  dg       5 }t        j                  dd      5 }t        j                  j	                         J 	 d d d        d d d        j
                  sJ j
                  sJ y # 1 sw Y   .xY w# 1 sw Y   2xY w)Nr  r  r#  Tr$  )r   r   r   rk  r  r   )r   m1m2s      r:   test_emulate_nonez)TestSystemCPUCountCores.test_emulate_none  s    ZZ"5 	A1$? A2668@@@A	A yyyyyyA A	A 	As"   B!A?B?B	BBN)
r   r   r   r   rs  rt  r   rb  r  r  r`   rd   r:   rx  rx    sA    [['N#@  @@$rd   rx  c                      e Zd Zej                  j                  e d      d        Zej                  j                  e d      ej                  j                  ed      d               Z	ej                  j                  e d      d        Z
ej                  j                  e d      d        Zej                  j                  e d      d        Zy	)
TestSystemCPUFrequencynot supportedr   c                     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ru   )ru  orig_existss    r:   path_exists_mockzMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock(  s    GH"4((rd   os.path.existsT)r   r   )rC  ru  rv  r   r   r   cpu_freq)r   r  r  s     @r:   test_emulate_use_second_filez3TestSystemCPUFrequency.test_emulate_use_second_file%  sR    	) ggnnZZ*:4
 	% ??$$$	% 	% 	%s   AA#z,aarch64 does not report mhz in /proc/cpuinfoc                 t   fd}t         j                  j                  	 t        j                  d|      5  t        t        j                         t        j                         }|sJ |       |j                  dk(  sJ |j                  dk(  sJ t        j                  d      D ]$  }|j                  dk(  sJ |j                  dk(  r$J  	 d d d        t        t        j                         t        t               y # 1 sw Y   2xY w# t        t        j                         t        t               w xY w)Nc                 8    | j                  d      ry |       S )Nz/sys/devices/system/cpu/Fr  )ru  os_path_existss    r:   r  zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mock;  s    9:%d++rd   r  rd          Tpercpu)rC  ru  rv  r   r   r   r   rk  r  maxmin)r   r  r   freqr  s       @r:   test_emulate_use_cpuinfoz/TestSystemCPUFrequency.test_emulate_use_cpuinfo4  s    	, 	",:JK +foo.oo'Csww#~%~ww#~%~"OO48 +D88s?*?88s?*?++ &//*&!+ + &//*&!s)   D BDDD D
D *D7c                    fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t	        j
                         }|j                  dk(  sJ |j                  d	k7  r|j                  d
k(  sJ |j                  d	k7  r|j                  dk(  sJ d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | j                  d      r&| j                  d      rt        j                  d      S | j                  d      r&| j                  d      rt        j                  d      S | j                  d      r&| j                  d      rt        j                  d      S | dk(  rt        j                  d	      S  | g|i |S )
N/scaling_cur_freqr     500000/scaling_min_freq   600000/scaling_max_freqs   700000rf  s   cpu MHz     : 500endswithru   r   r   r   r   r   r   s      r:   r   z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockR  s    }}01doo87 zz),,2389 zz),,2389 zz),,(zz"677 7777rd   r   r   rd  r  Tr       @@r       @g     @	rH   r   r   r   r   r  currentr  r  r   r   r   r  r   s       @r:   test_emulate_dataz(TestSystemCPUFrequency.test_emulate_dataP  s    	8$ 	),o2DZZ; 		-,4@ -(||u,,, 88s?88u,,,88s?88u,,,-		- 		-- -		- 		-s$   C	A&B=,C	=C	C		Cc                    fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t        j                  dd	      5  t	        j
                  d
      }|d   j                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ |d   j                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ |d   j                  dk7  r|d   j                  dk(  sJ d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | }|j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d      S |j                  d      r&|j                  d      rt        j                  d	      S |j                  d      r&|j                  d      rt        j                  d
      S |j                  d      r&|j                  d      rt        j                  d      S | dk(  rt        j                  d      S  | g|i |S )Nr  z'/sys/devices/system/cpu/cpufreq/policy0s   100000r     200000r  s   300000z'/sys/devices/system/cpu/cpufreq/policy1s   400000r  r  rf  s#   cpu MHz     : 100
cpu MHz     : 400r  )r   r   r   nr   s       r:   r   z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mocks  s=   Azz-.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7rd   r   r   rd  r  Tr  !psutil._pslinux.cpu_count_logicalr:  r  r         Y@r  g      i@g     r@r   g      y@r  r  r  r  s       @r:   test_emulate_multi_cpuz-TestSystemCPUFrequency.test_emulate_multi_cpuq  s_   	8> 	),o2DZZ; 	4,4@ 4ZZ7a 4 "??$7D7??e333Aw{{c)#Aw{{e333Aw{{c)#Aw{{e3337??e333Aw{{c)#Aw{{e333Aw{{c)#Aw{{e33344	4 	44 44 4	4 	4s<   E&ECE5E=E&EEE#	E&&E/c                    fd}t         t        rdnd}t        j                  ||      5  t        j                  dd      5  t        j                  dd	      5  t	        j
                         }|j                  d
k(  sJ 	 d d d        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  re   z/cpuinfo_cur_freqr  rf  s   cpu MHz     : 200)r  r  r  r  r   r   r  s      r:   r   zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mock  sj    }}01ellB//23zz),,(zz"677 7777rd   r   r   rd  r  Tr  r  r      )rH   r   r   r   r   r  r  r  s       @r:   %test_emulate_no_scaling_cur_freq_filez<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file  s    	8 	),o2DZZ; 	/,4@ /ZZ7a / "??,D<<3...	//	/ 	// // /	/ 	/s;   B6B*&BB*B6B'#B**B3	/B66B?N)r   r   r   r   rs  rt  r   r  r   r  r  r  r  r`   rd   r:   r  r  #  s    [[L(A% B% [[L(A[[F  " B"0 [[L(A- B-@ [[L(A14 B14f [[L(A/ B/rd   r  c                       e Zd Zd Zy)TestSystemCPUStatsc                 |    t        d      }t        j                         j                  }t	        ||z
        dk  sJ y )N
interruptsi  )r   r   	cpu_statsr  r   r   s      r:   test_interruptsz"TestSystemCPUStats.test_interrupts  s8    l+'')44<,./#555rd   N)r   r   r   r  r`   rd   r:   r  r    s    6rd   r  c                   T    e Zd Zej                  j                  e d      d        Zy)TestLoadAvgr  r   c                 t   t        j                         }t        d      5 }|j                         j	                         }d d d        t        t        d         |d   z
        dk  sJ t        t        |d         |d   z
        dk  sJ t        t        |d         |d   z
        dk  sJ y # 1 sw Y   pxY w)Nz/proc/loadavgr   r   r:  )r   
getloadavgrH   r  rI   r   float)r   r   rR   
proc_values       r:   test_getloadavgzTestLoadAvg.test_getloadavg  s    ((*/" 	*a)J	* 5A',q/9:Q>>>5A',q/9:Q>>>5A',q/9:Q>>>	* 	*s   B..B7N)r   r   r   r   rs  rt  r   r  r`   rd   r:   r  r    s,    [[N*?C? D?rd   r  c                       e Zd Zd Zy)TestSystemNetIfAddrsc                    t        j                         j                         D ]  \  }}|D ]  }|j                  t         j                  k(  r|j
                  t        |      k(  r:J |j                  t        j                  k(  rl|j
                  t        |      k(  sJ |j                  t        |      k(  sJ |j                  |j                  t        |      k(  rJ t        |      dk(  rJ |j                  t        j                  k(  s|j
                  j                  d      d   }|t!        |      v rJ   y )Nz0.0.0.0%r   )r   net_if_addrsitemsfamilyAF_LINKaddressrk   r,   r-   r;   netmaskr?   	broadcastrC   rP   rI   r\   )r   r   addrsaddrr  s        r:   test_ipszTestSystemNetIfAddrs.test_ips  s   !..0668 	?KD% ?;;&..0<<?4+@@@@[[FNN2<<+;D+AAAA<<+;D+AAAA~~1#~~1CD1IIII1$79DDD[[FOO3 #ll005a8G"&8&>>>>%?	?rd   N)r   r   r   r  r`   rd   r:   r  r    s    ?rd   r  QEMU user not supportedc                       e Zd Zej                  j                   ed       d      d        Zd Zej                  j                   ed       d      d        Z	y)TestSystemNetIfStatsifconfigifconfig utility not availabler   c                 &   t        j                         j                         D ]]  \  }}	 t        d|z        }|j                  d|v k(  sJ |       |j
                  t        t        j                  d|      d         k(  r]J  y # t        $ r Y lw xY w)Nifconfig %sRUNNINGz(?i)MTU[: ](\d+)r   )
r   net_if_statsr  r   isupmturx   r   r   RuntimeError)r   r   statsry   s       r:   test_against_ifconfigz*TestSystemNetIfStats.test_against_ifconfig	  s     "..0668 		KD%-. zzi3&67<<7yyCJJ2C8;%   		   s   B	BBc                    t        j                         j                         D ]S  \  }}t        d|z        5 }|j                  t        |j                         j                               k(  sJ 	 d d d        U y # 1 sw Y   `xY w)Nz/sys/class/net/%s/mtu)r   r  r  rH   r  rx   r  r   )r   r   r  rR   s       r:   test_mtuzTestSystemNetIfStats.test_mtu  su    !..0668 	:KD%-45 :yyC(8$9999: :	:: :s   7A::B	c                 4   d}t        j                         j                         D ]M  \  }}	 t        d|z        }t	        j
                  d|      }|rt        |j                               dk\  rh|dz  }t        |j                  d      j                         j                  d            }t        |j                  j                  d            }||k(  rJ t	        j
                  d|      }|st        |j                               dk\  s|dz  }t        |j                  d      j                         j                               }t        |j                  j                  d            }||k(  rNJ  |s| j                  d	      y # t        $ r Y qw xY w)
Nr   r  zflags=(\d+)?<(.*?)>r:  r   rz  z(.*)  MTU:(\d+)  Metric:(\d+)r   zno matches were found)r   r  r  r   r   rS  rK   rX   r{  grouplowerrI   flagsr  fail)r   matches_foundr   r  ry   matchifconfig_flagspsutil_flagss           r:   
test_flagszTestSystemNetIfStats.test_flags  sl    !..0668 	>KD%>-. 		"8#>S0A5!Q&M%(Q)=)=)?)E)Ec)J%KN#&u{{'8'8'=#>L)\999 II&FLEU\\^!4!9%*),U[[^-A-A-C-I-I-K)L'*5;;+<+<S+A'B-===)	>, ))344 '   s   F

	FFN)
r   r   r   r   rs  rt  r   r  r  r  r`   rd   r:   r  r    ss     [[*&F  

:
 [[*&F  55rd   r  c                   t    e Zd Zej                  j                   ed       d       e       d               Zy)TestSystemNetIOCountersr  r  r   c                    d }t        j                  dd      }|j                         D ]  \  }}	  ||      }t	        |j
                  |d   z
        dk  sJ t	        |j                  |d   z
        dk  sJ t	        |j                  |d   z
        d	k  sJ t	        |j                  |d
   z
        d	k  sJ t	        |j                  |d   z
        dk  sJ t	        |j                  |d   z
        dk  sJ t	        |j                  |d   z
        dk  sJ t	        |j                  |d   z
        dk  rJ  y # t        $ r Y  w xY w)Nc                 v   i }t        d| 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   rx   r   r   )nicr   ry   s      r:   r  z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigE  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 Jrd   TF)pernicnowrapr  i (  r  r  r   r  r  
   r  r  r  )r   net_io_countersr  r  r   r  r  r  r  r  r  r  r  )r   r  nior   r  ifconfig_rets         r:   r  z-TestSystemNetIOCounters.test_against_ifconfig@  sx   
	* $$D?99; 	EKD%'~ E$$|L'AABYNN E$$|L'AABYNN E&&n)EEFMM E&&n)EEFMMu{{\'%::;b@@@u||l8&<<=BBBu||l8&<<=BBBu}}|I'>>?"DDD)	E   s   D??	EEN)	r   r   r   r   rs  rt  r   r   r  r`   rd   r:   r  r  >  sE    [[*&F   +E +Erd   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_ntoprd  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,   rP   SOCK_STREAM
addCleanupclosebinderrorr   net_connections)r   supports_ipv6rQ   r9   s       r:   test_emulate_ipv6_unsupportedz6TestSystemNetConnections.test_emulate_ipv6_unsupportedt  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      r:   test_emulate_unixz*TestSystemNetConnections.test_emulate_unix  sU    // #   0':; 	q""/88O8	 	 	s   %AAN)r   r   r   r   r   rL   r  r  r`   rd   r:   r  r  r  s?    TZZ2
KTZZ/eD- E L-	rd   r  c                       e Zd Zej                  j                   eed       d       e       d               Z	d Z
d Zy)TestSystemDiskPartitionsstatvfszos.statvfs() not availabler   c                 R   d }t        j                  d      D ]  }t        j                  |j                        } ||j                        \  }}}}|j                  |k(  sJ t        |j                  |z
        t        k  sJ t        |j                  |z
        t        k  rJ  y )Nc                 ,   t        d| 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"rs   r   rF   nonere   )r   r   rI   poprx   )ru  ry   rz   rT   devr|   r}   rm   s           r:   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))rd   F)all)	r   disk_partitions
disk_usage
mountpointr|   r   rm   r   r}   )r   r  partusager{   r|   r}   rm   s           r:   test_against_dfz(TestSystemDiskPartitions.test_against_df  s    		* **u5 	AD%%doo6E#%doo#6 AudD;;%'''uzzD(),@@@@uzzD(),@@@@	Ard   c                 R   t        d      5 }|j                         }d d d        dv r;t        j                         D ]  }|j                  dk(  s y  | j                  d      t        j                  d      }t        j                  d|d      5 }t        j                  dd	g
      5 }t        j                         }|j                  sJ |j                  sJ |sJ |d   j                  dk(  sJ 	 d d d        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#  Trh  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r$  rwr  r   )rH   r  r   r  fstyper  r   r   r   r   r   )r   rR   r  r   rq  r  r  r   s           r:   test_zfs_fsz$TestSystemDiskPartitions.test_zfs_fs  s!   %& 	!668D	D=..0 C;;%'C ii ABB O4I%Id 2ZZ:"A!B 2  002C99$999$9J3q6==E11122 2	 	2 22 2s0   DD*A	D4DDD	DD&c                 6   	 t        j                  dd      5 }t        j                  t              5  t        j                          d d d        |j                  sJ 	 d d d        dt
        _        y # 1 sw Y   ,xY w# 1 sw Y   !xY w# dt
        _        w xY w)Nzos.path.realpathz/non/existentr  /proc)	r   r   r   raisesr   r   r  r   PROCFS_PATHr4  s     r:   test_emulate_realpath_failz3TestSystemDiskPartitions.test_emulate_realpath_fail  s~    	)"  ]]#45 -**,-xxx  ")F	- -    ")Fs9   B A?A3A?B 3A<	8A??BB BN)r   r   r   r   rs  rt  hasattrrC  r   r"  r)  r.  r`   rd   r:   r  r    sQ    [[B	""+G   A A*24
)rd   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestSystemDiskIoCountersc                     d}t        d|i      5  t        j                  dd      5  t        j                  d      }|j
                  dk(  sJ |j                  d	k(  sJ |j                  d
t        z  k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dt        z  k(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12/proc/diskstats!psutil._pslinux.is_storage_deviceTr  Fr  r   r:  r   rF   r   r<        r  r   r   r   r   disk_io_counters
read_countread_merged_count
read_bytesSECTOR_SIZE	read_timewrite_countwrite_merged_countwrite_bytes
write_time	busy_timer   r   r   s      r:   test_emulate_kernel_2_4z0TestSystemDiskIoCounters.test_emulate_kernel_2_4  s    @ 17;< 	+3$ + --U;~~***,,111~~[888}})))!+++--222!k/999~~***}}***+	+ 	++ +	+ 	+#   DB>C8'D8D	=DDc                     d}t        d|i      5  t        j                  dd      5  t        j                  d      }|j
                  dk(  sJ |j                  d	k(  sJ |j                  d
t        z  k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dt        z  k(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r3  r4  Tr  Fr5  r   r:  r   rF   r   r<  r6  r7  r  r8  rD  s      r:   test_emulate_kernel_2_6_fullz5TestSystemDiskIoCounters.test_emulate_kernel_2_6_full  s    < 17;< 	+3$ + --U;~~***,,111~~[888}})))!+++--222!k/999~~***}}***+	+ 	++ +	+ 	+rF  c                    t        ddi      5  t        j                  dd      5  t        j                  d      }|j
                  dk(  sJ |j                  d	t        z  k(  sJ |j                  d
k(  sJ |j                  dt        z  k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr3  z   3    1   hda 1 2 3 4r4  Tr  Fr5  r   r:  r   rF   r   )r   r   r   r   r9  r:  r<  r=  r?  rA  r;  r>  r@  rB  rC  )r   r   s     r:   test_emulate_kernel_2_6_limitedz8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limited  s     13LMN 	*3$ * --U;~~***~~[888!+++!k/999,,111}})))--222~~***}})))*	* 	** *	* 	*s#   DB>C6%D6C?	;DDc                    t        j                  d      }t        d|i      5  t        j                  dd      5  t        j                  dd      }t        |      dk(  sJ |d	   j                  d
k(  sJ |d   j                  d
k(  sJ |d	   j                  dk(  sJ |d   j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nx            3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
            3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
            r3  r4  Fr  Tperdiskr  r:  nvme0n1r   	nvme0n1p1r   )
r   r   r   r   r   r   r9  rK   r:  r?  rD  s      r:   test_emulate_include_partitionsz8TestSystemDiskIoCounters.test_emulate_include_partitions  s     // #   17;< 		93% 9 --d5I3x1}$}9~00A555;'22a7779~11Q666;'33q8889		9 		99 9		9 		9s#   CA8C4CC	
CCc                 D   t        j                  d      }t        d|i      5  t        j                  dd      5  t        j                  dd      }|J 	 d d d        d d d        d }t        j                  d      }t        d|i      5  t        j                  dd|	      5  t        j                  dd      }|j                  d
k(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)NrL  r3  r4  Fr  rM  c                     | dk(  S )NrO  r`   )r   s    r:   is_storage_devicezSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_device4  s    9$$rd   Tr   r   r   )	r   r   r   r   r   r   r9  r:  r?  )r   r   r   rT  s       r:   test_emulate_exclude_partitionsz8TestSystemDiskIoCounters.test_emulate_exclude_partitions%  s&    // #   17;< 	#3% # --eEJ{"{	#	#	% // #   17;< 	,3- ,
 --eEJ~~***!+++,	, 	,# #	# 	#, ,	, 	,sF   C>C2C>D&:D
!D2C;	7C>>D
D	DDc                     d }t        j                  d      }t        j                  dd|      5  t        j                  d      }d d d        t	        |      t	              k(  sJ y # 1 sw Y   #xY w)Nc                     | dk(  S )Nr3  r`   ru  s    r:   rv  z?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsF  s    ,,,rd   T)rN  psutil._pslinux.os.path.existsr   )r   r9  r   r   rK   )r   rv  wprocfswsysfss       r:   test_emulate_use_sysfsz/TestSystemDiskIoCounters.test_emulate_use_sysfsE  sk    	- ))$7ZZ,Tv
 	; ,,T:F	; 7|s6{***		; 	;s   A++A4c                     d }t        j                  dd|      5  t        j                  t              5  t        j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                      y)NFr`   rX  s    r:   rv  z>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsQ  s    rd   rY  Tr   )r   r   r   r,  NotImplementedErrorr   r9  )r   rv  s     r:   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_implP  sf    	 ZZ,Tv
 	* 23 *'')*	* 	** *	* 	*s"   A(AA(A%	!A((A1N)
r   r   r   rE  rH  rJ  rQ  rU  r\  r`  r`   rd   r:   r1  r1    s&    +&+(*,9&,@	+*rd   r1  c                       e Zd Zd Zd Zej                  j                  ed      d        Z	ej                  j                   e
d       d      ej                  j                  ed      d               Zd	 Zy
)TestRootFsDeviceFinderc                     t        j                  d      j                  }t        j                  |      | _        t        j                  |      | _        y )Nr&  )rC  r   st_devmajorminor)r   r  s     r:   setUpzTestRootFsDeviceFinder.setUp]  s3    ggcl!!XXc]
XXc]
rd   c                 &   t               }t        j                  j                  d      r|j	                          n2t        j                  t              5  |j	                          d d d        t        j                  j                  d| j                  d| j                  d      r|j                          n2t        j                  t              5  |j                          d d d        |j                          y # 1 sw Y   xY w# 1 sw Y   &xY wNz/proc/partitionsz/sys/dev/block/rG   z/uevent)r    rC  ru  rv  ask_proc_partitionsr   r,  r   re  rf  ask_sys_dev_blockask_sys_class_block)r   finders     r:   test_call_methodsz(TestRootFsDeviceFinder.test_call_methodsb  s    #%77>>,-&&(01 -**,-77>>-1ZZD
 $$&01 +((*+""$- -+ +s   C;D;DDzunsupported on GITHUB_ACTIONSr   c                    t               }|j                         J d x}x}}t        j                  j	                  d      r|j                         }t        j                  j	                  d| j                  d| j                  d      r|j                         }|j                         }|xs |xs |}|r	|r||k(  sJ |r	|r||k(  sJ |r|r||k(  sJ y y y ri  )
r    findrC  ru  rv  rj  re  rf  rl  rk  )r   rm  r   r   cbases         r:   test_comparisonsz'TestRootFsDeviceFinder.test_comparisonsr  s    #%{{}(((A77>>,-**,A77>>-1ZZD
 **,A$$&{A{A199A199A199 4rd   findmntzfindmnt utility not availablec                 X    t               j                         }t        d      }||k(  sJ y )Nzfindmnt -o SOURCE -rn /)r    rp  r   )r   r   findmnt_values      r:   test_against_findmntz+TestRootFsDeviceFinder.test_against_findmnt  s.    
 *+00245},,,rd   c                 F   t        j                  ddg      5 }t        j                         d   }|j                  sJ t
        s8|j                  dk7  sJ |j                  t               j                         k(  sJ |j                  dk(  sJ d d d        y # 1 sw Y   y xY w)Nr%  )	/dev/rootr&  ext4r'  r  r   ry  )	r   r   r   r  r   r	   devicer    rp  )r   r   r   s      r:   test_disk_partitions_mockedz2TestRootFsDeviceFinder.test_disk_partitions_mocked  s    ZZ2:;
 
	2 ))+A.D88O8!{{k111{{&8&:&?&?&AAAA{{k111
	2 
	2 
	2s   A5BB N)r   r   r   rg  rn  r   rs  rt  r	   rs  r   rw  r|  r`   rd   r:   rb  rb  [  s    #
%  [[/NO P* [[)%D   [[/NO- P-
2rd   rb  c                       e Zd Zd Zd Zd Zd Zd Zd Z e	       e
j                  j                  ed      d	               Zd
 Zy)TestMiscc                 t    t        d      }t        j                         }t        |      t        |      k(  sJ y )Nz	boot time)r   r   	boot_timerx   r   s      r:   test_boot_timezTestMisc.test_boot_time  s2    k*'')< C$5555rd   c           	      	   | 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               t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                  d
       d d d        t        j                  t              5  t        j                           d d d        t        j                  t              5  t        j                   d
       d d d        t        j                  t              5  t        j"                          d d d        t        j                  t              5  t        j"                  d
       d d d        |t        _        t        j                          dk(  sJ t'        t        j"                               dk(  sJ t        j                   d
      }t'        |      dk(  sJ t        j"                  d
      }t'        t)        t&        |            dk(  sJ t        t        j                  j                  |d      d      5 }|j                  d       |j                  d       |j                  d       d d d        t        j                          dk7  sJ t'        t        j                   d
            dk7  sJ t'        t        j"                               dk7  sJ t'        t)        t&        t        j"                  d
                  dk7  sJ 	 d d d        t+        j,                  |       t        t               t        j$                  dk(  sJ y # 1 sw Y   kxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   2xY w# 1 sw Y   9xY w# 1 sw Y   xY w# t+        j,                  |       t        t               w xY w)Nr   r   zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
c                 r    | j                  d      rt        t        j                  d       | g|i |S )Nr+  zrejecting access for test)ru   r  r  r  r  s      r:   r   z4TestMisc.test_no_procfs_on_import.<locals>.open_mock  s6    ??7+!%,,0KLL 7777rd   r   r   rd  Tr  r   zcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r+  )
get_testfnrC  mkdirrH   ru  rN   writer   r   r   r   r   r   r,  r  rA  cpu_percentcpu_times_percentr-  sumr   shutilrmtree)r   	my_procfsrR   r   r   per_cpu_percentper_cpu_times_percentr   s          @r:   test_no_procfs_on_importz!TestMisc.test_no_procfs_on_import  st   OO%	
"'',,y&137 	31GG12GG12GG12	3
5	"I8
 .1/6HKKY? )f%]]7+ '$$&']]7+ 2$$D12]]7+ )&&()]]7+ 4&&d34]]7+ /,,./]]7+ :,,D9: &/"))+q00063356!;;; #)"4"4D"A?+q000 )/(@(@(M%3s$9:;q@@@ "'',,y&93? ;1GG9:GG9:GG9:;
 ))+q0006--T:;q@@@63356!;;;C!9!9!FGHAMMQ)V MM)$&!!!W,,,y	3 	3"' '2 2) )4 4/ /: :$; ;?) )V MM)$&!s   4O.,Q" :)Q#O;8!QP0!QP&!QP"!Q?P/!Q5P<CQ4Q	BQ,Q" .O8;P	 QP	QP	Q"P,	'Q/P9	4Q<Q	Q	Q	QQQ" "&Rc                    t        j                  d      j                         }t        d|i      5 }t	        j
                          |j                  sJ t	        j
                  d       t	        j                          t	        j                  d       d d d        t        j                  d      j                         }t        d|i      5  t	        j
                         }j                  sJ t	        j
                  d      }t	        j                         }t	        j                  d      }|dk7  sJ t        |      dk7  sJ t        |      dk7  sJ t        |      dk7  sJ t        t        t        |            dk7  sJ t        t        t        |            dk7  sJ |j                  dk(  sJ |j                  dk7  sJ 	 d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nz~            cpu   0 0 0 0 0 0 0 1 0 0
            cpu0  0 0 0 0 0 0 0 1 0 0
            cpu1  0 0 0 0 0 0 0 1 0 0
            re  Tr  z~            cpu   1 0 0 0 0 0 0 0 0 0
            cpu0  1 0 0 0 0 0 0 0 0 0
            cpu1  1 0 0 0 0 0 0 0 0 0
            r   r  )r   r   r   r   r   r  r   r  r  r   r>  user)r   r   r   r  cpu_percent_percpur  cpu_times_percent_percpus          r:   test_cpu_steal_decreasez TestMisc.test_cpu_steal_decrease  s    // #  	 	
 g67 	21  88O8d+$$&$$D1	2 // #  	 	
 g67 	/ ,,.K88O8!'!3!34!@ & 8 8 :'-'?'?t'L$!###)*a///()Q...()U222s3 89:a???s3 89:eCCC$**a///$))Q...	/ 	/	2 	2	/ 	/s   A#GC8GGG$c                    t        j                  dd      5 }t        j                  t              5  t
        j                  j                          d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr#  Tr$  )	r   r   r   r,  r  r   rk  r  r   r4  s     r:   test_boot_time_mockedzTestMisc.test_boot_time_mocked  si    ZZ-d; 	q|, ,))+,88O8	 	, ,	 	s"   A=A1A=1A:	6A==Bc                 V    t        j                         D ]  }|j                  dvrJ  y )N)z:0z:0.0)r   usershost)r   r  s     r:   
test_userszTestMisc.test_users  s+     LLN 	3D99N222	3rd   c                 d   | j                         }t        j                  |       	 |t        _        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                  d       d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t              5  t        j                          d d d        t        j                  t        j                        5  t        j                           d d d        dt        _        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   UxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   {xY w# dt        _        w xY w)NTr  r+  )r  rC  r  r   r-  r   r,  r  r   rA  r  r  r  r  r  NoSuchProcessProcess)r   tdirs     r:   test_procfs_pathzTestMisc.test_procfs_path   s    
	)!%Fw' (%%'(w' #  "#w' .  -.w' #  "# w' )&&()w' )&&()w' &##%& w' )&&()v334 ! ! ")F+( (# #. .# #) )) )& &) )! ! ")Fs   $J" H0 !J" H=!J" 7I
!J" /I!J" %I$:!J" I10!J" I>&!J" J
+J" JJ" 0H:5J" =IJ" 
IJ" I!J" $I.)J" 1I;6J" >JJ" 
JJ" JJ" "J/zskip if pytest-parallelr   c                    t               5  t        j                         }|j                         }t	        |      t
        rdndk(  sJ t        |d       d   j                  }|j                  |k7  sJ t        j                  |      }|j                          |t        j                         vsJ 	 d d d        y # 1 sw Y   y xY w)Nr   r:  c                     | j                   S r_   )idra   s    r:   <lambda>z)TestMisc.test_issue_687.<locals>.<lambda>H  s
     rd   )keyr   )r   r   r  threadsrK   r   sortedr  pidas_dictpids)r   pr  tidpts        r:   test_issue_687zTestMisc.test_issue_687<  s     \ 	, AiikGw<A:::n5a8;;C55C<<$BJJLfkkm+++	, 	, 	,s   B&B;;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/statusre   )r   r   
pid_existsrC  getpidr   r4  s     r:   test_pid_exists_no_proc_statusz'TestMisc.test_pid_exists_no_proc_statusN  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   rs  rt  r   r  r  r`   rd   r:   r~  r~    s]    6
@-D%/N3)8 [[0IJ, K , rd   r~  z
no batteryc                       e Zd Zej                  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 availabler   c                     t        d      }t        |j                  d      d   j                         j	                  dd            }t        j                         j                  }t        ||z
        dk  sJ y )Nzacpi -brz  r   r  re   )	r   rx   rI   r   replacer   sensors_batterypercentr   )r   ry   
acpi_valuer   s       r:   test_percentzTestSensorsBattery.test_percent_  sd    m3*002::3CD
--/77:,-111rd   c                 L   fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                  du sJ t	        j
                         j                  t        j                  k(  sJ |j                  sJ 	 d d d        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      r:   r   z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockh  4    }}89zz$'' 7777rd   r   r   rd  T)
rH   r   r   r   r   r  power_pluggedsecsleftPOWER_TIME_UNLIMITEDr   r   r   r   r   r   s       @r:   test_emulate_power_pluggedz-TestSensorsBattery.test_emulate_power_pluggedf  s    	8 	),o2DZZ; 	q))+99TAAA&&(11..// 88O8	 	 	s   A"BB#c                     fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                  du sJ |j                  sJ 	 d d d        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 )Nr  re   /statuschargingr  r  r  r  r   r   r  s      r:   r   zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mock{  sQ    }}89ellB//y){{;// 7777rd   r   r   rd  TrH   r   r   r   r   r  r  r   r  s       @r:   test_emulate_power_plugged_2z/TestSensorsBattery.test_emulate_power_plugged_2x  sf    	8 	),o2DZZ; 	q))+99TAAA88O8	 	 	   1A))A2c                     fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                  du sJ |j                  sJ 	 d d d        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      r:   r   zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mock  r  rd   r   r   rd  Fr  r  s       @r:   test_emulate_power_not_pluggedz1TestSensorsBattery.test_emulate_power_not_plugged  sf    	8 	),o2DZZ; 	q))+99UBBB88O8	 	 	r  c                     fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                  du sJ |j                  sJ 	 d d d        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 )Nr  re   r  dischargingr  r  s      r:   r   zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mock  sQ    }}89ellB//y){{>22 7777rd   r   r   rd  Fr  r  s       @r:    test_emulate_power_not_plugged_2z3TestSensorsBattery.test_emulate_power_not_plugged_2  sf    	8 	),o2DZZ; 	q))+99UBBB88O8	 	 	r  c                     fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                  J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | j                  d      rt        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/onlinere   #/sys/class/power_supply/BAT0/statuss   ???)ru   r  r  r  r   r   r  s      r:   r   zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mock  sX        ellB//!FGzz&)) 7777rd   r   r   rd  r  r  s       @r:   test_emulate_power_undeterminedz2TestSensorsBattery.test_emulate_power_undetermined  sd    		8 	),o2DZZ; 	q))+99AAA88O8	 	 	s   /A''A0c                     t        ddi      5 }t        j                         j                  dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)N(/sys/class/power_supply/BAT0/energy_fullr  r   )r   r   r  r  r   r4  s     r:   test_emulate_energy_full_0z-TestSensorsBattery.test_emulate_energy_full_0  sR    7>
 	))+33q88888O8		 	 	s   2A

Ac                 t   t        dt        t        j                  d            5  t        dt        t        j                  d            5  t	        ddi      5  t        j                         j                  dk(  sJ 	 d d d        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  re   z(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys   88X   )r   r  r  r  r   r   r  r  r   s    r:   "test_emulate_energy_full_not_availz5TestSensorsBattery.test_emulate_energy_full_not_avail  s     !6ELL"%
 	B %:b) B '<eD B "113;;rAAAB	B		B 	BB B	B B		B 	Bs;   %B.
B"$B=B"B.BB""B+	'B..B7c           	         t        dt        t        j                  d            5  t        dt        t        j                  d            5  t        dt        t        j                  d            5  t	        j
                         j                  J 	 d d d        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  re   r  r  )r   r  r  r  r   r  r  r  s    r:   test_emulate_no_powerz(TestSensorsBattery.test_emulate_no_power  s     /r1J
 
	J %4gellB6O J )9ELL"- J "113AAIII	JJ
	J 
	JJ JJ J
	J 
	Js;   %C
%B6/!B*B6C*B3/B66B?	;CCN)r   r   r   r   rs  rt  r   r  r  r  r  r  r  r  r  r  r`   rd   r:   r  r  \  s]     [[E&M)2NO2 P2$""(B Jrd   r  c                       e Zd Zd Zy)TestSensorsBatteryEmulatedc                 H   fd}t         t        rdnd}t        j                  ddg      5 }t        j                  ||      5 }t	        j
                         J 	 d d d        d d d        j                  sJ j                  sJ y # 1 sw Y   .xY w# 1 sw Y   2xY w)Nc                     | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )Nz/energy_now60000000z
/power_now0z/energy_full60000001r  r   r   r  s      r:   r   z5TestSensorsBatteryEmulated.test_it.<locals>.open_mock  si    }}]+{{;//|,{{4((~.{{;// 7777rd   r   r   z
os.listdirBAT0r  rd  )rH   r   r   r   r   r  r   )r   r   r   mlistdirmopenr   s        @r:   test_itz"TestSensorsBatteryEmulated.test_it  s    	8 	),o2DZZF8< 	<KY? <5--/;;;<	< |||< <	< 	<s#   BBBB	BB!N)r   r   r   r  r`   rd   r:   r  r    s    rd   r  c                       e Zd Zd Zd Zy)TestSensorsTemperaturesc                    fd}t         t        rdnd}t        j                  ||      5  t        j                  ddg      5  t	        j
                         d   d	   }|j                  d
k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d	      rt        j                  d
      S  | g|i |S )N/namer   z/temp1_labellabelz/temp1_input   30000z
/temp1_maxs   40000z/temp1_crit   50000)r  r   r   r   r  s      r:   r   zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mock  s    }}W%{{7++~.{{8,,~.zz(++|,zz(++}-zz(++ 7777rd   r   r   rd  r  z/sys/class/hwmon/hwmon0/temp1r  r   r   r        >@g      D@      I@
rH   r   r   r   r   sensors_temperaturesr  r  highcritical)r   r   r   tempr   s       @r:   test_emulate_class_hwmonz0TestSensorsTemperatures.test_emulate_class_hwmon  s    	8 	),o2DZZ; 		-+J*K - 224V<Q?zzW,,,||t+++yyD(((}},,,-		- 		-- -		- 		-s$   CAB8'C8C	=CCc                    fd}d }t         t        rdnd}t        j                  ||      5  t        j                  dd|      5  t	        j
                         d	   d
   }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 L   | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )	N0_tempr  r   r  0_typer  typer   )r  r   r   r   r  s      r:   r   zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mock  s    }}X&zz(++v&zz(++x({{;//v&{{7++ 7777rd   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`   rX  s    r:   	glob_mockzETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mock$  sP    88	AA	;;:;;GGHH  Ird   r   r   rd  r  Tr   r   r   re   r  r  r  )r   r   r  r   r   r   s        @r:   test_emulate_class_thermalz2TestSensorsTemperatures.test_emulate_class_thermal  s    
	8	 	),o2DZZ; 	-K)L -224V<Q?zzR'''||t+++yyD(((}},,,-	- 	-- -	- 	-s$   C
AB;*C;C	 CCN)r   r   r   r  r	  r`   rd   r:   r  r    s    -8#-rd   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                  d
k(  sJ |j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                     | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S | j                  d      rt        j                  d      S  | g|i |S )Nr  r   z/fan1_labelr  z/fan1_input2000r  r  s      r:   r   z4TestSensorsFans.test_emulate_data.<locals>.open_mock@  si    }}W%{{7++}-{{8,,}-{{7++ 7777rd   r   r   rd  r  z/sys/class/hwmon/hwmon2/fan1r  r   r   r  i  )rH   r   r   r   r   sensors_fansr  r  )r   r   r   fanr   s       @r:   r  z!TestSensorsFans.test_emulate_data?  s    	8 	),o2DZZ; 	++I*J + ))+F3A6yyG+++{{d***+	+ 	++ +	+ 	+s#   B"=BB"B	B""B+N)r   r   r   r  r`   rd   r:   r  r  =  s    +rd   r  c                      e Zd Z e       d        Zd Zej                  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                  j                  e d      d        Zd Zd Zd Zy)TestProcessc           
      h   | j                         }t        j                  j                  |j                        j                         \  }}}t        j                  |j                        j                  d      }t        |t        |D cg c]  }|j                  |j                  z    c}      z
        dk  sJ t        |t        |D cg c]  }|j                   c}      z
        dk  sJ t        |t        |D cg c]  }|j                   c}      z
        dk  sJ y c c}w c c}w c c}w )NF)groupedr  )spawn_testprocr   rk  r  r  _parse_smapsmemory_mapsr   r  private_dirtyprivate_cleanpssr/  )r   sprocussr  r/  mapsrb   s          r:   test_parse_smaps_vs_memory_mapsz+TestProcess.test_parse_smaps_vs_memory_maps\  s    ##%00;HHJS$~~eii(44U4CcdK1??Q__<KLLM	
 3T2aee2334t;;;4#t4!qvv4556===	 L 34s   
 D%D*?D/c                    t        j                  d      j                         }t        dt	        j
                         z  |i      5 }t        j                  j                  t	        j
                               }|j                         \  }}}|j                  sJ |dk(  sJ |dk(  sJ |dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nan              fffff0 r-xp 00000000 00:00 0                  [vsyscall]
            Size:                  1 kB
            Rss:                   2 kB
            Pss:                   3 kB
            Shared_Clean:          4 kB
            Shared_Dirty:          5 kB
            Private_Clean:         6 kB
            Private_Dirty:         7 kB
            Referenced:            8 kB
            Anonymous:             9 kB
            LazyFree:              10 kB
            AnonHugePages:         11 kB
            ShmemPmdMapped:        12 kB
            Shared_Hugetlb:        13 kB
            Private_Hugetlb:       14 kB
            Swap:                  15 kB
            SwapPss:               16 kB
            KernelPageSize:        17 kB
            MMUPageSize:           18 kB
            Locked:                19 kB
            VmFlags: rd ex
            /proc/%s/smapsi l  r  i <  )r   r   r   r   rC  r  r   rk  r  r  r   )r   r   r   r  r  r  r/  s          r:   test_parse_smaps_mockedz#TestProcess.test_parse_smaps_mockedh  s    // # , - 	.  0299; >HI 	%Q''		4A^^-NCd88O8----(?"?9$$$	% 	% 	%s   A)B99Czunreliable on PYPYr   c                    d }| j                         }t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        |d      5   ||      j                  dk(  sJ 	 d d d        t        rqt	        |       t        |d      5   ||      j                  dk(  sJ 	 d d d        t	        |       t        |d	      5   ||      j                  dk(  sJ 	 d d d        y y # 1 sw Y   bxY w# 1 sw Y   CxY w# 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nc                     t        j                         }t        j                         t        z   }	 |j	                         D ]K  }|j
                  t        j
                  j                  |       k(  r|c S t        j                         |kD  sK n _r_   )	r   r  timer
   
open_filesru  rC  abspathr  )fnamer  	giveup_atfiles       r:   get_test_filez7TestProcess.test_open_files_mode.<locals>.get_test_file  sj     A		n4ILLN DyyBGGOOE$::#y0	 rd   r   rr   zr+zw+za+rb   zx+)r  rH   moder   r   )r   r*  testfns      r:   test_open_files_modez TestProcess.test_open_files_mode  s   		@ "&# 	5 (--444	5&\ 	5 (--444	5&# 	5 (--444	5&$ 	6 (--555	6&$ 	6 (--555	6&$ 	6 (--555	6 fc" 9$V,11S8889fd# :$V,11T999: : 	5 	5	5 	5	5 	5	6 	6	6 	6	6 	6
9 9: :s_   FF&9F3&G G G>G%6G1F#&F03F= G
GG"%G.1G:c                 l   t        j                         j                         t        | j	                         d      5  t        fd       t        j                  dt        t        j                  d            5 }j                         g k(  sJ |j                  sJ 	 d d d        t        j                  dt        t        j                  d            5 }j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   nxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S r_   rK   r%  filesr  s   r:   r  z7TestProcess.test_open_files_file_gone.<locals>.<lambda>      s1<<>2c%j@ rd   psutil._pslinux.os.readlinkre   rd  )r   r  r%  rH   r  r   r   r   OSErrorr  r  r   EINVAL)r   r   r3  r  s     @@r:   test_open_files_file_gonez%TestProcess.test_open_files_file_gone  s     NN$//#S) 	 @A-#ELL"5   ||~+++xxx  -#ELL"5   ||~+++xxx 	  	       	  	 s<   ?D* $D%7D*$DD*D	D*D'	#D**D3c                    t        j                         j                         t        | j	                         d      5  t        fd       t        rdnd}t        j                  |t        t        j                  d            5 }j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S r_   r1  r2  s   r:   r  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>  r4  rd   r   r   re   rd  )r   r  r%  rH   r  r   r   r   r   r  r  r  r   r   r   r   r3  r  s      @@r:   test_open_files_fd_gonez#TestProcess.test_open_files_fd_gone  s     NN$//#S) 	 @A-0/6HKr)B  ||~+++xxx	 		  	    		  	 s%   A	C
$C /C C		CCc                    t        j                         j                         t        | j	                         d      5  t        fd       d}t        j                  |t        t        j                  d            5 }t        j                  d      5  j                         g k(  sJ |j                  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                  N    t        j                               t               k7  S r_   r1  r2  s   r:   r  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>  r4  rd   r5  re   rd  psutil._pslinux.debug)r   r  r%  rH   r  r   r   r   r6  r  ENAMETOOLONGr   r;  s      @@r:   test_open_files_enametoolongz(TestProcess.test_open_files_enametoolong  s     NN$//#S) 		$@A7K1C1CR)H $ZZ 78 $<<>R///88O8$$			$ 		$$ $$ $			$ 		$s=   AC.C"$C=C"C.CC""C+	'C..C7c                     t        j                  di       5 }t        j                  j	                  t        j                               j                         J |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nz)psutil._pslinux._psposix.get_terminal_mapr  )	r   r   r   rk  r  rC  r  terminalr   r4  s     r:   test_terminal_mockedz TestProcess.test_terminal_mocked  s`    ZZ7b
 	??**299;7@@BJJJ88O8		 	 	s   AA22A;c                    t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        t        j                  d      }t	        j
                  d|d      5 }|j                         g dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)	Nzfoo bar r#  Trh  foobarz	foo bar  rF  rG  re   r   r  r   r   r   r   cmdliner   r   r  rq  r   s       r:   test_cmdline_mockedzTestProcess.test_cmdline_mocked  s    NNKK 12	ZZ!	$
 	99;5%.00088O8		
 KK 56	ZZ!	$
 	99;"444488O8		 		 		 	   &C&CCC#c                    t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        t        j                  d      }t	        j
                  d|d      5 }|j                         g dk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)	Nzfoo bar r#  Trh  rF  rG  z	foo bar  rH  rI  rK  s       r:   test_cmdline_spaces_mockedz&TestProcess.test_cmdline_spaces_mocked  s    NNKK,	ZZ!	$
 	99;5%.00088O8		
 KK-	ZZ!	$
 	99;"444488O8		 		 		 	rM  c                     t        j                         }t        j                  d      }t	        j
                  d|d      5 }|j                         ddgk(  sJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzfoo bar r#  Trh  rF  rG  rI  rK  s       r:   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  sm     NNKK 12	ZZ!	$
 	99;5%.00088O8		 	 	s   &A22A;c                     t        j                  dd      5  t        j                         j	                         dk(  sJ t        j                         j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr5  z/home/foo (deleted)r  z	/home/foo)r   r   r   r  execwdr  s    r:   !test_readlink_path_deleted_mockedz-TestProcess.test_readlink_path_deleted_mocked!  sg    ZZ)8M
 	9 >>#'')[888>>#'')[888		9 	9 	9s   AA11A:c                    fd}t         t        rdnd}t        j                  ||      5 }t	        j
                         j                         }|j                  sJ |g k(  sJ 	 d d d        fd}t        j                  ||      5  t        j                  t        j                        5  t	        j
                         j                          d d d        d d d        y # 1 sw Y   }xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                     | j                  dt        j                         z        rt        t        j
                  d       | g|i |S Nz/proc/%s/taskre   )ru   rC  r  r  r  r  r  s      r:   open_mock_1z4TestProcess.test_threads_mocked.<locals>.open_mock_1-  s@    <=ellB// 7777rd   r   r   rd  c                     | j                  dt        j                         z        rt        t        j
                  d       | g|i |S rX  )ru   rC  r  r  r  EPERMr  s      r:   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_2<  s@    <=ekk2.. 7777rd   )rH   r   r   r   r   r  r  r   r   r,  AccessDenied)r   rY  r   r   r   r\  r   s         @r:   test_threads_mockedzTestProcess.test_threads_mocked(  s    
	8 	),o2DZZ= 	.."**,C88O8"99		8 ZZ= 	+v223 + ((*+	+ 	+	 	+ +	+ 	+s/   8C#$C;/#C/C;#C,/C8	4C;;Dc                 T   t        j                  dt        t        j                  d            5 }t        j                  dg       5  t        j                         j                         }|j                  sJ |dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzpsutil._pslinux.readlinkre   rd  zpsutil._pslinux.Process.cmdliner  )	r   r   r6  r  r  r   r  rS  r   )r   r   r   s      r:   test_exe_mockedzTestProcess.test_exe_mockedF  s    ZZ&GELL"4M
 		!1 ! nn&**,xxxby y!			! 		!! !			! 		!s#   B8BBB	BB'c                 b   t        dt        j                         z  t        t        j
                  d            5 }t        j                         }t        j                  t              5  |j                          d d d        |j                  sJ 	 d d d        y # 1 sw Y   !xY w# 1 sw Y   y xY w)Nr   re   )r   rC  r  r  r  r  r   r  r   r,  r   r  r   r   r   r  s      r:   test_issue_1014zTestProcess.test_issue_1014R  s     !ryy{*GELL",E
 	 A01   88O8	 	   		 	s#   .B%(B9B%B"	B%%B.r  c                    t        j                  dt        t        j                  d            5 }t        j                  dd      5 }t        j                         }|j                          t        j                  t
        j                        5 }|j                  t
        j                         d d d        d d d        d d d        j                  sJ j                  sJ j                  j                  j                  k(  sJ |j                  j                  |j                         k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nzpsutil._pslinux.prlimitre   rd  z"psutil._pslinux.Process._is_zombieTr  )r   r   r6  r  ENOSYSr   r  r   r   r,  ZombieProcessrlimitRLIMIT_NOFILEr   rN  r  )r   r  r  r  cms        r:   test_rlimit_zombiezTestProcess.test_rlimit_zombie]  s   
 ZZ%75<<3L
 		344 3NN$]]6#7#78 3BHHV11233		3 yyyyyyxx||quu$$$xx}}(((3 33 3		3 		3s<   EAD? D30D?8E3D<8D??E	EEc                    g d}dj                  |      j                         }t        dt        j                         z  |i      5  t        j                         }|j                         dk(  sJ |j                         t
        j                  k(  sJ |j                         dk(  sJ |j                         dt        z  t        j                         z   k(  sJ |j                         }|j                  dt        z  k(  sJ |j                   dt        z  k(  sJ |j"                  d	t        z  k(  sJ |j$                  d
t        z  k(  sJ |j&                  dt        z  k(  sJ |j)                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)N)*r  z(cat)Z1r  r  r  r  r  r  r  r  r  2345r  r  r  r  6r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rr  r  r  7r   z/proc/%s/statcatr   r<  r:  r   rF   r   r6  )rN   r   r   rC  r  r   r  r   statusSTATUS_ZOMBIEppidcreate_timer   r  rA  r  systemchildren_userchildren_systemiowaitcpu_num)r   r   r   r  cpus        r:   test_stat_file_parsingz"TestProcess.test_stat_file_parsingq  sR   +
X ((4.'')"))+ =wGH 	$ A668u$$$88:!5!5555668q= ===?a+o8H8H8J&JJJJ++-C88q;...::[000$$K777&&!k/999::[00099;!###	$ 	$ 	$s   D0F  F	c                    t        j                  d      j                         }t        dt	        j
                         z  |i      5  t        j                         }|j                         j                  dk(  sJ |j                         j                  dk(  sJ |j                         dk(  sJ |j                         }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j!                         }|j                  d	k(  sJ |j                  d
k(  sJ |j                  dk(  sJ |j"                  j%                         t'        t)        d            k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nz            Uid:	1000	1001	1002	1003
            Gid:	1004	1005	1006	1007
            Threads:	66
            Cpus_allowed:	f
            Cpus_allowed_list:	0-7
            voluntary_ctxt_switches:	12
            nonvoluntary_ctxt_switches:	13r  r      B   i  i  i  i  i  i  r7  )r   r   r   r   rC  r  r   r  num_ctx_switches	voluntaryinvoluntarynum_threadsuidsreal	effectivesavedgids_proc_get_eligible_cpuslistrM   )r   r   r  r  r  s        r:   test_status_file_parsingz$TestProcess.test_status_file_parsing  sT   // #/ 0 17 	  1BIIK ?IJ 	B A%%'11R777%%'33r999==?b(((668D99$$$>>T)))::%%%668D99$$$>>T)))::%%%77--/4a>AAA	B 	B 	Bs   DE//E8c                 P   t        j                  dt        t        j                  d            5 }t        j                         }t        j                  d      5  |j                         g k(  sJ |j                  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr5  re   rd  r?  )	r   r   r6  r  r@  r   r  r  r   rb  s      r:   !test_net_connections_enametoolongz-TestProcess.test_net_connections_enametoolong  s     ZZ) 2 2B7
 	   A34  ((*b000xxx 	  	 
   	  	 s#   *B$B?BB	BB%N)r   r   r   r   r  r!  r   rs  rt  r   r.  r8  r<  rA  rD  rL  rO  rQ  rU  r^  r`  rc  r   rj  r  r  r  r`   rd   r:   r  r  Z  s    	> 	>%D [[%9: : ; :D .  $&  	9+<
!	 [[J?) @)&:$xB0 rd   r  c                       e Zd ZdZed        Zd Zd Zej                  j                  ed      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    r:   
setUpClassz#TestProcessAgainstStatus.setUpClass  s    >>#rd   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   ru   	partitionrx   rL   )r   	linestartrR   rT   rN  s        r:   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                 d    | j                  d      }| j                  j                         |k(  sJ y )NzName:)r  r  r   r   rN  s     r:   	test_namez"TestProcessAgainstStatus.test_name  +    %%g.yy~~5(((rd   r  r   c                     | j                  d      }||j                  d      dz   |j                  d       }|j                  dd      }| j                  j                         |k(  sJ y )NzState:(r   )r   rL  )r  rp  rfindr  r  ru  r  s     r:   test_statusz$TestProcessAgainstStatus.test_status  s_    %%h/ejjo)EKK,<=c3'yy!U***rd   c                 d    | j                  d      }| j                  j                         |k(  sJ y )NzPPid:)r  r  rw  r  s     r:   	test_ppidz"TestProcessAgainstStatus.test_ppid  r  rd   c                 d    | j                  d      }| j                  j                         |k(  sJ y )NzThreads:)r  r  r  r  s     r:   test_num_threadsz)TestProcessAgainstStatus.test_num_threads  s-    %%j1yy$$&%///rd   c                     | j                  d      }t        t        t        |j	                         dd             }| j
                  j                         |k(  sJ y )NzUid:r   rF   )r  r   r   rx   rI   r  r  r  s     r:   	test_uidsz"TestProcessAgainstStatus.test_uids	  I    %%f-c#u{{}Qq123yy~~5(((rd   c                     | j                  d      }t        t        t        |j	                         dd             }| j
                  j                         |k(  sJ y )NzGid:r   rF   )r  r   r   rx   rI   r  r  r  s     r:   	test_gidsz"TestProcessAgainstStatus.test_gids	  r  rd   c                     | j                  d      }| j                  j                         j                  |k(  sJ | j                  d      }| j                  j                         j                  |k(  sJ y )Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r  r  r  r  r  r  s     r:   test_num_ctx_switchesz.TestProcessAgainstStatus.test_num_ctx_switches	  sf    %%&@Ayy))+55>>>%%&CDyy))+775@@@rd   c                     | j                  d      }dt        |      v rXt        t        |j	                  d            \  }}| j
                  j                         t        t        ||dz               k(  sJ y y )NCpus_allowed_list:rL  r   )	r  r   r   rx   rI   r  cpu_affinityr  rM   )r   rN  min_max_s       r:   test_cpu_affinityz*TestProcessAgainstStatus.test_cpu_affinity	  sh    %%&:;#e*S%++c"23JD$99))+tE$q4I/JJJJ rd   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_timesrL  )r  r   r   r  r  r  r   r   )r   rN  r   s      r:   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   rs  rt  r   r  r  r  r  r  r   r  r  r  r`   rd   r:   r  r    s     $ $:) [[	*CD+ E+)0)
)
 A AKrd   r  c                       e Zd Zd Zy)	TestUtilsc                     t        j                  dd      5 }t        j                  j	                  d      dk(  sJ |j
                  sJ 	 d d d        y # 1 sw Y   y xY w)Nzos.readlinkzfoo (deleted)r  rG  rF  )r   r   r   r  readlinkr   r4  s     r:   test_readlinkzTestUtils.test_readlink)	  sQ    ZZOD 	%%..u5>>>88O8	 	 	s   3AAN)r   r   r   r  r`   rd   r:   r  r  '	  s    rd   r  )fr  
__future__r   rv   r/   r  globr   rC  r   r  r,   r5   r   r$  r   r   r   psutil._compatr   r   r   psutil.testsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj  r   r    r!   r"   ru  r&  dirname__file__HEREr4   SIOCGIFCONFrg   r>   rB   r=  EMPTY_TEMPERATURESr;   r?   rC   r\   rk   r   r   r   r   contextmanagerr   r   rs  rt  r   r   r   r  r8  rI  rx  r  r  r  r  r  r  r  r  r1  rb  r~  r  r  r  r  r  r  r  r`   rd   r:   <module>r     s         	 	 	          , %   ' ' $ % ' #  ( " - * ' # #   & ) $  0  	+24+ 
wwrwwx01K"#<== 


,K. ,@@  0  , Il36> 6> 46>r Il3.D> .D 4.Db Il3I-> I- 4I-b Il3R> R 4Rt Il3. . 4.& Il3F  F  4F R Il3n  4: Il3V/^ V/ 4V/r Il36 6 46 Il3	?. 	? 4	?" Il3?> ? 4?N Il3I&?@35> 35 A 435l Il30En 0E 40Ef Il3~  4< Il3>)~ >) 4>)B Il3D*~ D* 4D*N Il3@2^ @2 4@2P Il3o~ o 4on Il3OL9BJ BJ : 4BJJ Il3  4* Il3@-n @- 4@-F Il3+n + 4+8 Il3u . u  4u p Il3K~ K 4Kf Il3  4rd   