
    gd                       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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-m/Z/ dd!l-m0Z0 dd"l-m1Z1 ejd                  jg                  ejd                  ji                  e5            Z6d#Z7d$Z8d%Z9d&Z:erd'Z;d( Z<d) Z=d* Z>d+ Z?d, Z@d- ZAd. ZBd/ ZCd0 ZDej                  d1        ZFej                  d2        ZGe&j                  j                  e d34       G d5 d6e"             ZJe&j                  j                  e d34       G d7 d8e"             ZKe&j                  j                  e d34       G d9 d:e"             ZLe&j                  j                  e d34       G d; d<e"             ZMe&j                  j                  e d34       G d= d>e"             ZNe&j                  j                  e d34       G d? d@e"             ZOe&j                  j                  e d34       G dA dBe"             ZPe&j                  j                  e d34       G dC dDe"             ZQe&j                  j                  e d34       G dE dFe"             ZRe&j                  j                  e d34       G dG dHe"             ZSe&j                  j                  e d34       G dI dJe"             ZTe&j                  j                  e d34      e&j                  j                  edK4       G dL dMe"                    ZUe&j                  j                  e d34       G dN dOe"             ZVe&j                  j                  e d34       G dP dQe"             ZWe&j                  j                  e d34       G dR dSe"             ZXe&j                  j                  e d34       G dT dUe"             ZYe&j                  j                  e d34       G dV dWe"             ZZe&j                  j                  e d34       G dX dYe"             Z[e&j                  j                  e d34      e&j                  j                  e dZ4       G d[ d\e"                    Z\e&j                  j                  e d34       G d] d^e"             Z]e&j                  j                  e d34       G d_ d`e"             Z^e&j                  j                  e d34       G da dbe"             Z_e&j                  j                  e d34       G dc dde"             Z`e&j                  j                  e d34       G de dfe"             Zae&j                  j                  e d34       G dg dhe"             Zby)iz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   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      L/var/www/openai/venv/lib/python3.12/site-packages/psutil/tests/test_linux.pyget_ipv4_addressr;   I   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?   X       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   g   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\   v   s   	"	#q
DZZ\FbzV#!!&) 
 z?a:VCDD   
$ 3z?# mA&q#k*A.AMM+a!a%01 /HHV$	!!&//9=((&A
1 $ % 
$	#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	{{HHJv{{66'B
  //CwwRD#d)+DEcrJ 
	 E 
	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??6"#'::< AudD''0ABBc%j#d)SY77	 
 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     (K9JAQ9Js         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??5!(Ka9J(K%E4v''7B eT455  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      sg    
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      s@     4 I%(/.@K	K)	D 
E	D	Ds   /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      s@     4 I%(/.@K	K)	D 
E	D	Ds   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_available3  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_totalE  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_usedJ  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_free\  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_buffersb  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_activeh  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_inactiven  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   C  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_missesw  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}$}' 6 ;:55 ;: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     )Q"%fQi.4"7VAY  *
 !&t#%&Aq1u:>C/L"$$$ $ *)s   /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++- 688O8==N2221AAS		F    ;:55 ;:$   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++- 688O8==$CCCC1AAS		F    ;:55 ;: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9R //1C==,KKKK1AFqyy>** :	 ;:
 :9	  ;: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   u  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_infoI  s<     /"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_totalP  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_usedU  <    [%%
))+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_souta  s    ZZ-d;q((5%%h/((*xxx2w!|#|qEO199~&& ww!|#|xx1}$} 6 <;55 <;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_mockedp  s     GELL2MN
((5%%h/((*xxx2w!|#|qE6199~&& ww!|#|xx1}$} 6
 
 65
 
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  s6     56! 88O8 766s	   #;AN)r   r   r   staticmethodr  r   r   r   r   r(  r*  r2  r5  r`   rd   r:   r  r  G  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  st    
 23qFFHNN$E 4#e*C(+,q0E##%...  43s   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  sY    
 ZZ12K1bii
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  sX     nciioGoQ\\#5F1o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$?188:BBB||q((({{1~a(L888	 @ ot, vvx -

<0I%Id88:hFFF #OS#9:a88:hFFFxxx ;5
 
 @? -,  ;: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  sn     n5IIdOD??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  sj    002ZZ"5__446F88O8 6 V###  65s   -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  st    ZZ"51$?2668@@@ @ 6 yyyyyy @? 65s"   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   sM    	) 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_mock6  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_cpuinfo/  s    	, 	",:JKfoo.oo'Csww#~%~ww#~%~"OO48D88s?*?88s?*? 9 L &//*&! LK &//*&!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_mockM  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_dataK  s    	8$ 	),o2DZZ;,4@(||u,,, 88s?88u,,,88s?88u,,, A <;@@ <;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_mockn  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_cpul  sL   	8> 	),o2DZZ;,4@ZZ7a "??$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 A <;  A@ <;s<   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...	 A <;  A@ <;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8KD%;;&..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&>>>>%  9rd   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8KD%-. zzi3&67<<7yyCJJ2C8;%    9   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  se    !..0668KD%-45yyC(8$9999 65 955s   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  sg    !..0668KD%>-. 		"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-===) 9, ))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>.ifconfig@  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;  sq   
	* $$D?99;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) '   s   D??	EEN)	r   r   r   r   rs  rt  r   r   r  r`   rd   r:   r  r  9  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_unsupportedo  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{  sL    // #   0':;q""/88O8 <;;s   %AAN)r   r   r   r   r   rL   r  r  r`   rd   r:   r  r  m  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5D%%doo6E#%doo#6 AudD;;%'''uzzD(),@@@@uzzD(),@@@@ 6rd   c                 0   t        d      5 }|j                         }d d d        dv r*t        j                         D ]  }|j                  dk(  s y  t        j                  d      }t        j                  d|d      5 }t        j                  ddg	      5 }t        j                         }|j                  sJ |j                  sJ |sJ |d
   j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz/proc/filesystemszfsz
nodev	zfs
r#  Trh  $psutil._pslinux.cext.disk_partitions)z	/dev/sdb3/r$  rwr  r   )
rH   r  r   r  fstyper   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;;%' 1
 KK0	ZZ!	$
6=> ,,.yy yyy y
s1v}}---
 
 '& 
 
s0   C4 DA	D #D4C= D		DDc                 6   	 t        j                  dd      5 }t        j                  t              5  t        j                          d d d        |j                  sJ 	 d d d        dt
        _        y # 1 sw Y   ,xY w# 1 sw Y   !xY w# dt
        _        w xY w)Nzos.path.realpathz/non/existentr  /proc)	r   r   r   raisesr   r   r  r   PROCFS_PATHr4  s     r:   test_emulate_realpath_failz3TestSystemDiskPartitions.test_emulate_realpath_fail  sr    	)"]]#45**, 6xxx ")F	 65  ")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*.0
)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~~***}}))) ON  ONs#   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;<3% --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 =<  =<s#   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_device-  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>.exists?  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_sysfs>  sf    	- ))$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>.existsJ  s    rd   rY  Tr   )r   r   r   r,  NotImplementedErrorr   r9  )r   rv  s     r:   test_emulate_not_implz.TestSystemDiskIoCounters.test_emulate_not_implI  sZ    	 ZZ,Tv
 23'') 4
 
 4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.setUpV  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_methods[  s    #%77>>,-&&(01**, 277>>-1ZZD
 $$&01((* 2""$ 21 21s   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_comparisonsk  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:;
 ))+A.D88O8!{{k111{{&8&:&?&?&AAAA{{k111
 
 
s   A5BB N)r   r   r   rg  rn  r   rs  rt  r	   rs  r   rw  r|  r`   rd   r:   rb  rb  T  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  s/   OO%	
"'',,y&1371GG12GG12GG12 8
5	"I8
 .1/6HKKY?f%]]7+$$& ,]]7+$$D1 ,]]7+&&( ,]]7+&&d3 ,]]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 87" ,+++++++++++$ @?? @?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71  88O8d+$$&$$D1 8 // #  	 	
 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... 87 87 87s   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  sW    ZZ-d;q|,))+ -88O8 <;,, <;s"   A=A1A=1A:	6A==Bc                 V    t        j                         D ]  }|j                  dvrJ  y )N>   :0:0.0)r   usershost)r   r  s     r:   
test_userszTestMisc.test_users  s&     LLND99N222 #rd   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  5 ")F+ (''''''' (''''' ('44 ")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>A  s    rd   )keyr   )r   r   r  threadsrK   r   sortedr  pidas_dictpids)r   pr  tidpts        r:   test_issue_687zTestMisc.test_issue_6875  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_statusG  sE      12671$$RYY[11188O8 877s   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_percentX  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_mocka  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_plugged_  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_mockt  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_2q  s]    	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  s]    	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  s]    	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  s[    		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  sM    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) '<eD "113;;rAAA		
 
 	 	
 
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
 %4gellB6O )9ELL"- "113AAIII	
 
  
 
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  U  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(((}},,, M <;LL <;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_mock9  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_data8  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  6  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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_mapsU  s   ##%00;HHJS$~~eii(44U4CcdKd1??Q__<dKLLM	
 3T2TaeeT2334t;;;4#t4t!qvvt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_mockeda  s    // # , - 	.  0299; >HIQ''		4A^^-NCd88O8----(?"?9$$$ JIIs   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  se     A		n4ILLND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   		@ "&# (--444 &\ (--444 &# (--444 &$ (--555  &$ (--555  &$ (--555   fc"$V,11S888 #fd#$V,11T9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   r5  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_   r3  r4  s   r:   r  z5TestProcess.test_open_files_fd_gone.<locals>.<lambda>  r6  rd   r   r   re   rd  )r   r  r'  rH   r  r   r   r   r   r  r  r  r   r   r   r   r5  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_   r3  r4  s   r:   r  z:TestProcess.test_open_files_enametoolong.<locals>.<lambda>  r6  rd   r7  re   rd  psutil._pslinux.debug)r   r  r'  rH   r  r   r   r   r8  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 9	 *) 98 	 *)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  rH  rI  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  rH  rI  z	foo bar  rJ  rK  rM  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	
 

 

 
rO  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  rH  rI  rK  rM  s       r:   test_cmdline_mixed_separatorsz)TestProcess.test_cmdline_mixed_separators  sh     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)Nr7  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  sb    ZZ)8M
 >>#'')[888>>#'')[888	
 
 
s   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 rZ  )ru   rC  r  r  r  EPERMr  s      r:   open_mock_2z4TestProcess.test_threads_mocked.<locals>.open_mock_25  s@    <=ekk2.. 7777rd   )rH   r   r   r   r   r  r  r   r   r,  AccessDenied)r   r[  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 ((* 4 >= >= 4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   r8  r  r  r   r  rU  r   )r   r   r   s      r:   test_exe_mockedzTestProcess.test_exe_mocked?  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_1014K  sz     !ryy{*GELL",E
 A01 288O8
 
 21	
 
s#   .B%(B9B%B"	B%%B.c                    t        j                         }t        dt        j                         z  t
              5  t        j                  dd      5  t        j                  t         j                        5  |j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz/proc/%s/statmr  Fr  )r   r  r   rC  r  r   r   r   r   r,  r  memory_info)r   r  s     r:   test_issue_2418zTestProcess.test_issue_2418V  s    NN ryy{*,=
 ,5A]]6#7#78MMO 9 B
 
 98 BA
 
s;   B8$B,6B B,B8 B)%B,,B5	1B88Cr  c                    t        j                  dt        t        j                  d            5 }t        j                  dd      5 }t        j                         }|j                          t        j                  t
        j                        5 }|j                  t
        j                         d d d        d d d        d d d        j                  sJ j                  sJ j                  j                  j                  k(  sJ |j                  j                  |j                         k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nzpsutil._pslinux.prlimitre   rd  z"psutil._pslinux.Process._is_zombieTr  )r   r   r8  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
44NN$]]6#7#78BHHV112 9
 yyyyyyxx||quu$$$xx}}((( 98 
 
s<   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  rw  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_parsings  sJ   +
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;!### IHHs   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  sH   // #/ 0 17 	  1BIIK ?IJ A%%'11R777%%'33r999==?b(((668D99$$$>>T)))::%%%668D99$$$>>T)))::%%%77--/4a>AAA KJJs   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)Nr7  re   rd  rA  )	r   r   r8  r  rB  r   r  r  r   rd  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 5
 

 54
 
s#   *B$B?BB	BB%N)r   r   r   r   r   r#  r   rs  rt  r   r0  r:  r>  rC  rF  rN  rQ  rS  rW  r`  rb  re  rh  r   ro  r  r  r  r`   rd   r:   r  r  S  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  rz  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  r|  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	  si    %%&:;ZZ78AIIOO..0 9#e*xx<x88O8 98s   %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  rI  rH  )r   r   r   r  readlinkr   r4  s     r:   test_readlinkzTestUtils.test_readlink+	  sI    ZZOD%%..u5>>>88O8 EDDs   3AAN)r   r   r   r  r`   rd   r:   r  r  )	  s    rd   r  )cr  
__future__r   rv   r/   r  r   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   rg   r>   rB   r=  r;   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     sw        	 	 	          , %   ' ' $ % ' #  ( " - * ' # #   & ) $  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<)~ 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~ . ~  4~ B Il3K~ K 4Kf Il3  4rd   