
Gq]c           @   s_  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l 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  Z d   Z  d   Z! d   Z" d   Z# e j$ e d  d e j% f d     Y Z& e j$ e d  d  e j% f d!     Y Z' e( d" k r[d d# l) m* Z* e* e+  n  d S($   s   POSIX specific tests.iN(   t   AIX(   t   BSD(   t   LINUX(   t   MACOS(   t   OPENBSD(   t   POSIX(   t   SUNOS(   t   APPVEYOR(   t   get_kernel_version(   t   get_test_subprocess(   t   HAS_NET_IO_COUNTERS(   t   mock(   t
   PYTHON_EXE(   t   reap_children(   t   retry_on_failure(   t   sh(   t   skip_on_access_denied(   t   TRAVIS(   t   unittest(   t   wait_for_pid(   t   whichc         C   sQ  d g } t  r | j d  n  | d k	 rG | j d t |  g  n) t sS t rc | j d  n | j d  t r d d d d	 h } | j |  |   }  n  | j d
 |  g  t |  } t  r | j	   } n | j	   d } g  } xK | D]C } | j
   } y t |  } Wn t k
 r#n X| j |  q W| d k rE| S| d Sd S(   s|   
    Wrapper for calling the ps command with a little bit of cross-platform
    support for a narrow range of features.
    t   pss   --no-headerss   -ps   -At   axt   commandt   commt   startt   stimes   -oi   i    N(   R   t   appendt   Nonet   extendt   strR   R    t   getR   t
   splitlinest   stript   intt
   ValueError(   t   fmtt   pidt   cmdt   fmt_mapt   outputt
   all_outputt   line(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyR   )   s8    	c         C   s,   d } t  r d } n  t | |   j   d S(   NR   R   i    (   R   R   t   split(   R%   t   field(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   ps_namef   s    	c         C   s(   d } t  s t r d } n  t | |   S(   NR   t   args(   R    R   R   (   R%   R,   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   ps_argsm   s    	c         C   s"   d } t  r d } n  t | |   S(   Nt   rsst   rssize(   R    R   (   R%   R,   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   ps_rsst   s    	c         C   s"   d } t  r d } n  t | |   S(   Nt   vszt   vsize(   R    R   (   R%   R,   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   ps_vsz{   s    	s
   POSIX onlyt   TestProcessc           B   s  e  Z d  Z e d    Z e d    Z d   Z d   Z d   Z d   Z	 d   Z
 e   e   d     Z e   e   d	     Z d
   Z d   Z d   Z d   Z e j e p e d  d    Z d   Z d   Z e j e d  e j e d  d     Z d   Z RS(   sB   Compare psutil results against 'ps' command line utility (mainly).c         C   s5   t  t d d g d t j j |  _ t |  j  d  S(   Ns   -Es   -Ot   stdin(   R	   R   t
   subprocesst   PIPER%   R   (   t   cls(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt
   setUpClass   s    c         C   s   t    d  S(   N(   R   (   R:   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   tearDownClass   s    c         C   s>   t  d |  j  } t j |  j  j   } |  j | |  d  S(   Nt   ppid(   R   R%   t   psutilt   ProcessR=   t   assertEqual(   t   selft   ppid_pst   ppid_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt	   test_ppid   s    c         C   sA   t  d |  j  } t j |  j  j   j } |  j | |  d  S(   Nt   uid(   R   R%   R>   R?   t   uidst   realR@   (   RA   t   uid_pst
   uid_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_uid   s    c         C   sA   t  d |  j  } t j |  j  j   j } |  j | |  d  S(   Nt   rgid(   R   R%   R>   R?   t   gidsRG   R@   (   RA   t   gid_pst
   gid_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_gid   s    c         C   s>   t  d |  j  } t j |  j  j   } |  j | |  d  S(   Nt   user(   R   R%   R>   R?   t   usernameR@   (   RA   t   username_pst   username_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_username   s    c         C   sb   t  j   } t j d d t ; } |  j | j   t | j   j	   | j
 sX t  Wd  QXd  S(   Ns   psutil.pwd.getpwuidt   side_effect(   R>   R?   R   t   patcht   KeyErrorR@   RQ   R   RF   RG   t   calledt   AssertionError(   RA   t   pt   fun(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_username_no_resolution   s    %c         C   sP   t  j d  t |  j  } t j |  j  j   d d } |  j | |  d  S(   Ng?i    i   (   t   timet   sleepR2   R%   R>   R?   t   memory_infoR@   (   RA   t   rss_pst
   rss_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_rss_memory   s     c         C   sP   t  j d  t |  j  } t j |  j  j   d d } |  j | |  d  S(   Ng?i   i   (   R]   R^   R5   R%   R>   R?   R_   R@   (   RA   t   vsz_pst
   vsz_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_vsz_memory   s     c         C   s   t  |  j  } t j j |  j   } t j |  j  j   j   } t	 j
 d d |  } t	 j
 d d |  } t	 j
 d d |  } t	 j
 d d |  } |  j | |  d  S(   Ns   \d.\dt    s   \d(   R-   R%   t   ost   patht   basenamet   lowerR>   R?   t   namet   ret   subR@   (   RA   t   name_pst   name_psutil(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt	   test_name   s    c         C   ss   d } d d d g } t  j d d | C t  j d d | ' t j   } |  j | j   d  Wd  QXWd  QXd  S(   Ns   long-program-names   long-program-name-extendedt   foot   bars   psutil._psplatform.Process.namet   return_values"   psutil._psplatform.Process.cmdline(   R   RV   R>   R?   R@   Rk   (   RA   Rk   t   cmdlineRZ   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_name_long   s    

c         C   sp   d } t  j d d | O t  j d d t j d d  ' t j   } |  j | j   d  Wd  QXWd  QXd  S(   Ns   long-program-names   psutil._psplatform.Process.nameRs   s"   psutil._psplatform.Process.cmdlineRU   i    Rf   (   R   RV   R>   t   AccessDeniedR?   R@   Rk   (   RA   Rk   RZ   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_name_long_cmdline_ad_exc   s    
c         C   sp   d } t  j d d | O t  j d d t j d d  ' t j   } |  j t j | j  Wd  QXWd  QXd  S(   Ns   long-program-names   psutil._psplatform.Process.nameRs   s"   psutil._psplatform.Process.cmdlineRU   i    Rf   (   R   RV   R>   t   NoSuchProcessR?   t   assertRaisesRk   (   RA   Rk   RZ   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_name_long_cmdline_nsp_exc   s    
s   ps -o start not availablec         C   s   t  d |  j  } t j |  j  j   } t j j |  j d  } t |  } t j j |  j d  } |  j	 | | | g  d  S(   NR   s   %H:%M:%S(
   R   R%   R>   R?   t   create_timet   datetimet   fromtimestampt   strftimet   roundt   assertIn(   RA   t   time_pst   time_psutilt   time_psutil_tstampt   round_time_psutilt   round_time_psutil_tstamp(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_create_time   s    		c         C   ss   t  |  j  } t j |  j  j   } y |  j | |  Wn1 t k
 rn | t |   } |  j | |  n Xd  S(   N(   R-   R%   R>   R?   t   exeR@   RY   t   len(   RA   t   ps_pathnamet   psutil_pathnamet   adjusted_ps_pathname(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_exe   s    c         C   sD   t  |  j  } d j t j |  j  j    } |  j | |  d  S(   Nt    (   R/   R%   t   joinR>   R?   Rt   R@   (   RA   t
   ps_cmdlinet   psutil_cmdline(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_cmdline  s    !s   not reliable on SUNOSs   not reliable on AIXc         C   s8   t  d |  j  } t j   j   } |  j | |  d  S(   Nt   nice(   R   R%   R>   R?   R   R@   (   RA   t   ps_nicet   psutil_nice(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt	   test_nice  s    c   	         s    f d   } t  j t j    } g  } d d d d d d d d	 d
 d d d g } t ry t   d k  ry | j d  n  t r t   d k  r | j d  n  x t t  j  D]     j d  s   | k r q q y@ | j	   } x! t
 d  D] } | |    q W| j	   } Wn t  j k
 r+q Xt | |  d k r d   | | f } | j |  q q W| r|  j d d j |   n  d  S(   Nc            s`   d } t  |    d   } | d  k	 rX t |  rX   d k rK t j f } n  | |   n | d  S(   Nt   rlimit(    (   t   getattrR   t   callableR>   t   RLIMIT_NOFILE(   RZ   t   attrR.   (   Rk   (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   call#  s    t	   terminatet   killt   suspendt   resumeR   t   send_signalt   waitt   childrent   as_dictt   memory_info_ext   parentt   parentsi   i   i$   R   i   t   num_ctx_switchest   _i   s@   failure while processing Process.%s method (before=%s, after=%s)s   
(   i   i   i$   (   i   i   i   (   R>   R?   Rg   t   getpidR   R   R   t   dirt
   startswitht   num_fdst   rangeRv   t   abst   failR   (	   RA   R   RZ   t   failurest   ignored_namest   num1t   xt   num2R   (    (   Rk   s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_num_fds   s4    
(   t   __name__t
   __module__t   __doc__t   classmethodR;   R<   RD   RJ   RO   RT   R\   R   R   Rb   Re   Rp   Ru   Rw   Rz   R   t   skipIfR   R   R   R   R   R   R    R   R   (    (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyR6      s,   												!		
t   TestSystemAPIsc           B   s   e  Z d  Z e   d    Z e j e d  e j e d  e j e	 d  d  e j e
 d  d       Z e j e p e o e j   d  e   d	     Z d
   Z d   Z d   Z d   Z e j e d  d    Z RS(   s   Test some system APIs.c         C   s   t  t d   } t j   } t s6 t rI d | k rI | j d d  n  t |  t |  d k r g  | D] } | | k rl | ^ ql g  | D] } | | k r | ^ q } |  j d t	 |   n  d  S(   NR%   i    i   s   difference: (
   t   sortedR   R>   t   pidsR   R   t   insertR   R   R   (   RA   t   pids_pst   pids_psutilR   t
   difference(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt	   test_pidsN  s    "&s   unreliable on SUNOSs   unreliable on TRAVISt   ifconfigs   no ifconfig cmds   not supportedc         C   st   t  d  } xa t j d t  j   D]G } x> | j   D] } | j |  r8 Pq8 q8 W|  j d | | f  q% Wd  S(   Ns   ifconfig -at   pernics/   couldn't find %s nic in 'ifconfig -a' output
%s(   R   R>   t   net_io_counterst   Truet   keysR+   R   R   (   RA   R(   t   nicR*   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_nic_namesa  s    s    unreliable on APPVEYOR or TRAVISc         C   s   t  d  } | j d  } g  | D] } | j   d ^ q" } g  | D] } | j   d ^ qE } |  j t |  t t j     x: t j   D], } |  j | j |  |  j | j |  q Wd  S(   Nt   whos   
i    i   (	   R   R+   R@   R   R>   t   usersR   Rk   t   terminal(   RA   t   outt   linesR   R   t	   terminalst   u(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt
   test_usersq  s    ##"c         C   s\   t  j d d t t j d  5 } |  j t t j j t	 j
    | j sR t  Wd  QXd  S(   Ns   psutil._psposix.os.killRU   Rf   (   R   RV   t   OSErrort   errnot   EBADFRy   R>   t   _psposixt
   pid_existsRg   R   RX   RY   (   RA   t   m(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_pid_exists_let_raise~  s    c         C   s\   t  j d d t t j d  5 } |  j t t j j t	 j
    | j sR t  Wd  QXd  S(   Ns   psutil._psposix.os.waitpidRU   Rf   (   R   RV   R   R   R   Ry   R>   R   t   wait_pidRg   R   RX   RY   (   RA   R   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_os_waitpid_let_raise  s    c      
   C   sh   t  j d d t t j d  A } |  j t j j t j j	 t
 j   d d | j s^ t  Wd  QXd  S(   Ns   psutil._psposix.os.waitpidRU   Rf   t   timeoutg{Gz?(   R   RV   R   R   t   EINTRRy   R>   R   t   TimeoutExpiredR   Rg   R   RX   RY   (   RA   R   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_os_waitpid_eintr  s    	c         C   sP   t  j d d d 5 } |  j t t j j t j    | j	 sF t
  Wd  QXd  S(   Ns   psutil._psposix.os.waitpidRs   i   i(   i   i(   R   RV   Ry   R#   R>   R   R   Rg   R   RX   RY   (   RA   R   (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_os_waitpid_bad_ret_status  s
    	s   unreliable on AIXc   
      C   s  d   } d } xt  j d t  D] } t  j | j  } y | | j  \ } } } } WnR t k
 r }	 t |	  j   }	 d |	 k s" d |	 k s" d |	 k r q" q  q" X|  j	 | j
 | d | |  j	 | j | d | |  j	 | j | d | |  j	 | j | d d	 q" Wd  S(   Nc         S   s   t  d |   j   } | j d  d } | j   } t | d  d } t | d  d } t | d  d } t | d j d d	   } | | | | f S(
   Ns   df -k %ss   
i   i   i   i   i   t   %Rf   (   R   R!   R+   R"   t   floatt   replace(   t   deviceR   R*   t   fieldst   totalt   usedt   freet   percent(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   df  s    i   i   t   alls   no such file or directorys   raw devices not supporteds   permission deniedt   deltai   i   i  @ (   R>   t   disk_partitionst   Falset
   disk_usaget
   mountpointR   t   RuntimeErrorR   Rj   t   assertAlmostEqualR   R   R   R   (
   RA   R   t	   tolerancet   partt   usageR   R   R   R   t   err(    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   test_disk_usage  s"    	
(   R   R   R   R   R   R   R   R   R   R   R
   R   R   R>   R   R   R   R   R   R   R    R   (    (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyR   J  s   %							t   __main__(   t   run(,   R   R|   R   Rg   Rl   R8   R]   R>   R    R   R   R   R   R   R   t   psutil.testsR   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R-   R/   R2   R5   R   t   TestCaseR6   R   R   t   psutil.tests.runnerR   t   __file__(    (    (    s6   lib/python2.7/site-packages/psutil/tests/test_posix.pyt   <module>   sP   =				y