
Gq]c        A   @  sy	  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l 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 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 j' d k  r d d l( Z) n d d l) Z) y d d l) m* Z* Wn= e+ k
 r_e j,    e j- d  d d l* Z* Wd QXn Xe j' d k r~d d l. Z. n d Z. d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV g@ Z0 e j1 d#  pbdW d k Z2 dZ e j3 k Z4 e rd n d Z5 e6 e j7 j8 d$   Z9 e6 e j7 j8 d   Z: dZ e j3 k Z4 d] Z; d Z< e9 se: rd n d` Z= e9 se: re; d 9Z; e= d 9Z= n  da Z> e j? db k r*dc Z> n dd Z> e j@ jA e j@ jB e jC    e>  ZD eD eE e jF    ZD eD de ZG eD e$ df  ZH e jI   jJ   d k ZK e j@ jL e j@ jA e j@ jM eN  di di   ZO e j@ jA eO dj  ZP e j@ jL e j@ jM eN   ZQ e oe ZR eS e jT dk  ZU eS e dl  ZV eS e dm  ZW eS e jT dn  ZX eS e jT do  ZY eS e jT dp  ZZ eS e dq  Z[ eS e jT dr  Z\ eS e jT ds  Z] eS e jT dt  Z^ eS e du  Z_ y e_ oe6 e j`    Za Wn eb k
 rec Za n XeS e dv  Zd eS e dw  Ze eS e jT dx  Zf dy   Zg eg   Zh ei e jj dz  Zk g  el e  D]$ Zm em jn d{  r`eo e em  ^ q`Zp eo e d| eq    Zr eo e d} eq    Zs et   Zu et   Zv et   Zw e jx d~    Zy e jx d    Zz d e j{ f d     YZ| d   Z} e} d d   Z~ e} d    Z d   Z e} d    Z e} d    Z e d  Z d   Z d   Z d eq f d     YZ e d e j d d d e= d d  d    Z e d e e f d d d e= d d  ec e d   Z e d e d d d e= d d  d    Z d   Z d   Z e j d    Z d d  Z e> dW d  Z d e) j f d     YZ e e) _ e; d  Z d d  Z d d  Z d d  Z e j dW d   Z e e d d  Z e j d  Z d d  Z d   Z e j d    Z d   Z d   Z d   Z d   Z d   Z d   Z e r`	e j e> d   Z n e j e> d   Z d S(   s   
Test utilities.
i(   t   print_functionN(   t   AF_INET(   t   AF_INET6(   t
   SOCK_DGRAM(   t   SOCK_STREAM(   t   MACOS(   t   POSIX(   t   SUNOS(   t   WINDOWS(   t   supports_ipv6(   t   PY3(   t   u(   t   unicode(   t   whichi   i   (   t   mockt   ignorei   i   t   APPVEYORt   DEVNULLt   GLOBAL_TIMEOUTt   MEMORY_TOLERANCEt
   NO_RETRIESt   PYPYt
   PYTHON_EXEt   ROOT_DIRt   SCRIPTS_DIRt   TESTFILE_PREFIXt   TESTFNt   TESTFN_UNICODEt   TOXt   TRAVISt   VALID_PROC_STATUSESt   HAS_CPU_AFFINITYt   HAS_CPU_FREQt   HAS_ENVIRONt   HAS_PROC_IO_COUNTERSt
   HAS_IONICEt   HAS_MEMORY_MAPSt   HAS_PROC_CPU_NUMt
   HAS_RLIMITt   HAS_SENSORS_BATTERYt   HAS_BATTERYt   HAS_SENSORS_FANSt   HAS_SENSORS_TEMPERATURESt   HAS_MEMORY_FULL_INFOt   pyrunt   reap_childrent   get_test_subprocesst   create_zombie_proct   create_proc_children_pairt   ThreadTaskunittestt   skip_on_access_deniedt   skip_on_not_implementedt   retry_on_failuret   install_pipt   install_test_depst   chdirt   safe_rmpatht
   create_exet   decode_patht   encode_patht   unique_filenamet
   get_winvert   get_kernel_versiont
   call_untilt   wait_for_pidt   wait_for_filet   check_connection_ntuplet   check_net_addresst   get_free_portt   unix_socket_patht   bind_sockett   bind_unix_sockett   tcp_socketpairt   unix_socketpairt   create_socketst   reload_modulet   import_module_by_patht   warnt   copyload_shared_libt   is_namedtuplet    t   1t   truet   __pypy__i   i    i
   i  i   g      ?s   $testfnt   javas   $psutil-test-s   @psutil-test-s	   -internals   -ƒőőt   asciis   us-asciis   ..t   scriptst   cpu_affinityt   cpu_freqt
   getloadavgt   environt   ionicet   memory_mapst   net_io_counterst   cpu_numt   io_counterst   rlimitt   sensors_batteryt   sensors_fanst   sensors_temperaturest   threadsc          C  s   d   }  t  r |  t j  pk |  t j j t j   pk |  t d t j d    pk |  t j	   j
    } | s t d   n  | St j j t j  } t r | j d d  } n  t j j |  s t |   | Sd  S(   Nc         S  sF   y) t  j |  d g d t  j d t  j Wn t k
 r= d  SX|  Sd  S(   Ns   -Vt   stdoutt   stderr(   t
   subprocesst
   check_callt   PIPEt	   Exceptiont   None(   t   exe(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   attempt   s    #s   python%s.%si   s"   can't find python exe real abspaths   \s   \\(   R   t   syst
   executablet   ost   patht   realpathR   t   version_infot   psutilt   ProcessRl   t
   ValueErrorR   t   replacet   existst   AssertionError(   Rm   Rl   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   _get_py_exe   s    		s   r+t   STATUS_t   AF_UNIXt   SOCK_SEQPACKETc          C  s   t  j   x t j t d   D]h }  t |  t  rD t t  } n t } |  j |  r  y t	 |   Wq t
 k
 r t j   q Xq  q  Wx: t D]2 } y t	 |  Wq t
 k
 r t j   q Xq Wd  S(   Nt   .(   R   t   closeRp   t   listdirR   t
   isinstanceR   R   t
   startswithR8   Rj   t	   tracebackt	   print_exct   _testfiles_created(   t   namet   prefixRq   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   cleanup_test_files   s    
c           C  s   t  d t  d  S(   Nt	   recursive(   R-   t   True(    (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   cleanup_test_procs   s    t
   ThreadTaskc           B  sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s6   A thread task which does nothing expect staying alive.c         C  s5   t  j j |   t |  _ d |  _ t  j   |  _ d  S(   NgMbP?(   t	   threadingt   Threadt   __init__t   Falset   _runningt	   _intervalt   Eventt   _flag(   t   self(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR      s    		c         C  s&   |  j  j } d | |  j t |   f S(   Ns   <%s running=%s at %#x>(   t	   __class__t   __name__R   t   id(   R   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   __repr__  s    c         C  s   |  j    |  S(   N(   t   start(   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt	   __enter__
  s    
c         O  s   |  j    d  S(   N(   t   stop(   R   t   argst   kwargs(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   __exit__  s    c         C  s9   |  j  r t d   n  t j j |   |  j j   d S(   s   Start thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        s   already startedN(   R   Rv   R   R   R   R   t   wait(   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR     s    	c         C  s:   t  |  _ |  j j   x |  j r5 t j |  j  q Wd  S(   N(   R   R   R   t   sett   timet   sleepR   (   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   run  s    	c         C  s/   |  j  s t d   n  t |  _  |  j   d S(   s8   Stop thread execution and and waits until it is stopped.s   already stoppedN(   R   Rv   R   t   join(   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR      s    		(
   R   t
   __module__t   __doc__R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR      s   							c           s"   t  j      f d    } | S(   Nc            s3   y   |  |   SWn t  k
 r. t     n Xd  S(   N(   Rj   R-   (   R   R   (   t   fun(    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   wrapper.  s
    (   t	   functoolst   wraps(   R   R   (    (   R   s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   _reap_children_on_err-  s    c         K  s   | j  d t  | j  d t  | j  d t j    | j  d t j  t rh d } | j  d |  n  |  d k r t t  d t } t	 d | g }  t
 j |  |  } t j |  t t d	 t d
 t n, t
 j |  |  } t j |  t | j  | S(   s{  Creates a python subprocess which does nothing for 60 secs and
    return it as subprocess.Popen instance.
    If "cmd" is specified that is used instead of python.
    By default stdin and stdout are redirected to /dev/null.
    It also attemps to make sure the process is in a reasonably
    initialized state.
    The process is registered for cleanup on reap_children().
    t   stdinRe   t   cwdt   envi   t   creationflagss:   from time import sleep;open(r'%s', 'w').close();sleep(60);s   -ct   deletet   emptyN(   t
   setdefaultR   Rp   t   getcwdRZ   R   Rk   R8   t   _TESTFNR   Rg   t   Popent   _subprocesses_startedt   addRA   R   R@   t   pid(   t   cmdt   kwdst   CREATE_NO_WINDOWt   pylinet   sproc(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR.   8  s&    

c          C  s   t  j j t  d }  t j d |  t f  } t rJ t | d d } n t |  } t	 j
 | j  } t |  d t d t } t |   t |  } t j |  t	 j
 |  } | | f S(   s  Create a subprocess which creates another one as in:
    A (us) -> B (child) -> C (grandchild).
    Return a (child, grandchild) tuple.
    The 2 processes are fully initialized and will live for 60 secs
    and are registered for cleanup on reap_children().
    t   2s          import subprocess, os, sys, time
        s = "import os, time;"
        s += "f = open('%s', 'w');"
        s += "f.write(str(os.getpid()));"
        s += "f.close();"
        s += "time.sleep(60);"
        p = subprocess.Popen(['%s', '-c', s])
        p.wait()
        R   i    R   R   (   Rp   Rq   t   basenameR   t   textwrapt   dedentR   R   R,   Rt   Ru   R   RA   R   R8   t   intt   _pids_startedR   (   t   _TESTFN2t   st   subpt   child1t   datat
   child2_pidt   child2(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR0   \  s    	
c       	     s'  t  j s t  t r' t j d t  n t }  t j	 d |   } t
 j t j t j    } | j t  | j |   | j d  t |  | j   \ } } zn t j | j   g g  g  t  t | j d   } t j |  t  j |    t   f d   d  | SWd | j   XWd QXd S(   s+   Create a zombie process and return its PID.R   s          import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            s = socket.socket(socket.AF_UNIX)
            with contextlib.closing(s):
                s.connect('%s')
                if sys.version_info < (3, ):
                    pid = str(os.getpid())
                else:
                    pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        i   i   c             s
     j    S(   N(   t   status(    (   t   zproc(    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   <lambda>  RP   s   ret == psutil.STATUS_ZOMBIEN(   Rt   R   Ry   R   t   tempfilet   mktempR   R   R   R   t
   contextlibt   closingt   socketR|   t
   settimeoutR   t   bindt   listenR,   t   acceptt   selectt   filenoR   t   recvR   R   Ru   R?   R   (   t	   unix_filet   srct   sockt   connt   _t   zpid(    (   R   s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR/     s$    
c         K  s   | j  d d  | j  d d  t j d t d d d t  S } t j | j  | j	 |   | j
   t t | j g |  } t | j  Wd QX| S(   se   Run python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance.
    Re   Rf   R   t   modet   wtR   N(   R   Rk   R   t   NamedTemporaryFileR   R   R   R   R   t   writet   flushR.   R   R@   R   (   R   R   t   fR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR,     s    	
c         K  s  t  |  t t f  r t n t } t r3 | r3 d n d } | j d |  | j d t j  | j d t j  | j d t  | j d |  t j	 |  |  } t
 j |  | j   \ } } | j d k r t |   n  | r t |  n  | j d  r| d	  } n  | S(
   sU   run cmd in a subprocess and return its output.
    raises RuntimeError on error.
    i   i    t   shellRe   Rf   t   universal_newlinesR   s   
i(   R   t   strR   R   R   R   R   Rg   Ri   R   R   R   t   communicatet
   returncodet   RuntimeErrorRM   t   endswith(   R   R   R   t   flagst   pRe   Rf   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   sh  s"    !c   	      C  s  d   } |  r0 t  t j   j d t   } n	 t    } x	t rDt j   } t j | j	  y | j
   WnC t k
 r } t r | j d k r q | j t j k r   q n X| j r | j j   n  | j r | j j   n  z | j r | j j   n  Wd y | j   Wn+ t k
 r?} | j t j k r@  q@n XXq< WxW t rt j   } y t j |  } Wn t j k
 r| |  qHX| j |  qHW| rx3 | D]+ } y | j
   Wqt j k
 rqXqWt j | d t \ } } xA | D]9 } t d |  y | j   Wqt j k
 r5qXqWt j | d t \ } } | r}x | D] } t d |  qbWn  x | D] } | | j	  qWn  d S(   s#  Terminate and wait() any subprocess started by this test suite
    and ensure that no zombies stick around to hog resources and
    create problems  when looking for refleaks.

    If resursive is True it also tries to terminate and wait()
    all grandchildren started by this process.
    c         S  s   t  j |   s t |    |  t  j   k s: t |    y, t  j |   } | j   se t |    Wn t  j k
 r| n Xd s t d |    d  S(   Ni    s   pid %s is not gone(   Rt   t
   pid_existsRy   t   pidsRu   t
   is_runningt   NoSuchProcess(   R   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   assert_gone  s    R   i   Nt   timeouts0   couldn't terminate process %r; attempting kill()s   process %r survived kill()(   R   Rt   Ru   t   childrenR   R   t   popR   R   R   t	   terminatet   OSErrorR   t   winerrort   errnot   ESRCHRe   R   Rf   R   R   t   ECHILDR   t
   wait_procsR   RM   t   kill(	   R   R   R   R   t   errR   R   t   gonet   alive(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR-     sh    	!		
				c          C  s   t  s t d   n  d }  t j   d } x4 | D], } | j   sP | d k r] |  | 7}  q2 Pq2 W|  s{ t d |   n  d } d } |  j d  } t | d  } t |  d k r t | d  } n  t |  d k r t | d  } n  | | | f S(	   s"   Return a tuple such as (2, 6, 36).s	   not POSIXRP   i   R~   s   can't parse %ri    i   i   (	   R   t   NotImplementedErrorRp   t   unamet   isdigitRv   t   splitR   t   len(   R   R  t   ct   minort   microt   numst   major(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR>   /  s&    c          C  s   t  s t d   n  t j   }  t |  d  rB |  j p< d } n: t j d |  d  } | rv t | j	 d   } n d } |  d |  d | f S(   Ns   not WINDOWSt   service_pack_majori    s   \s\d$i   i   (
   R   R  Rn   t   getwindowsversiont   hasattrR  t   ret   searchR   t   group(   t   wvt   spt   r(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR=   G  s    t   retryc           B  sA   e  Z d  Z e d d d d d  Z d   Z d   Z d   Z RS(   s   A retry decorator.gMbP?c         C  sL   | r | r t  d   n  | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   Ns/   timeout and retries args are mutually exclusive(   Rv   t	   exceptionR   t   retriest   intervalt   logfun(   R   R  R   R  R  R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   ^  s    				c         c  s~   |  j  r= t j   |  j  } x[ t j   | k  r9 d  Vq Wn= |  j rh x1 t |  j  D] } d  VqV Wn x t ry d  Vqk Wd  S(   N(   R   R   R  t   rangeR   (   R   t   stop_atR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   __iter__m  s    			c         C  s&   |  j  d  k	 r" t j |  j   n  d  S(   N(   R  Rk   R   R   (   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   y  s    c           s.   t  j       f d    }  | _ | S(   Nc            s   d  } xj  D]b } y   |  |   SWq  j k
 rn } | }  j d  k	 r^  j |  n   j   q q Xq Wt r |  n   d  S(   N(   Rk   R  R  R   R
   (   R   R   t   excR   (   R   R   (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   ~  s    
	(   R   R   t	   decorator(   R   R   R   (    (   R   R   s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   __call__}  s    !	N(	   R   R   R   Rj   Rk   R   R  R   R!  (    (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR  [  s   
		R  R  R   R  gMbP?c         C  s'   t  j |   t r# t j d  n  d S(   s   Wait for pid to show up in the process list then return.
    Used in the test suite to give time the sub process to initialize.
    g{Gz?N(   Rt   Ru   R   R   R   (   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR@     s    c         C  sP   t  |  d   } | j   } Wd QX| s9 | s9 t  n  | rL t |   n  | S(   s8   Wait for a file to be written on disk with some content.t   rbN(   t   opent   readRy   R8   (   t   fnameR   R   R   R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRA     s    c         C  s   |    } t  |  s t  | S(   sV   Keep calling function for timeout secs and exit if eval()
    expression is True.
    (   t   evalRy   (   R   t   exprt   ret(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR?     s    	c         C  s   d   } yl t  j |   } t j | j  rE t j t j |   } n t j t  j |   } t	 rj |   n
 | |  Wn+ t
 k
 r } | j t j k r   q n Xd S(   s>   Convenience function for removing temporary test files or dirsc         S  s   t  j    d } xv t  j    | k  r y |    SWq t k
 r } | } | j t j k r`   q t d t |   t  j d  q Xq W|  d  S(   Ni   s   ignoring %sg{Gz?(   R   t   WindowsErrorR   t   ENOENTRM   R   R   (   R   R  R   R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt	   retry_fun  s    N(   Rp   t   statt   S_ISDIRt   st_modeR   t   partialt   shutilt   rmtreet   removeR   R   R   R*  (   Rq   R+  t   stR   R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR8     s    	
c         C  sC   y t  j |   Wn+ t k
 r> } | j t j k r?   q? n Xd S(   s-   Convenience function for creating a directoryN(   Rp   t   mkdirR   R   t   EEXIST(   t   dirR  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt
   safe_mkdir  s
    c         c  s7   t  j   } z t  j |   d VWd t  j |  Xd S(   s@   Context manager which temporarily changes the current directory.N(   Rp   R   R7   (   t   dirnamet   curdir(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR7     s
    	c         C  s*  t  j j |   s t |    | r t d  s@ t d   n  t | t  ra t j	 d  } n  t | t
  s| t |   t j d d d t d d   } | j |  Wd	 QXz  t j d | j d
 |  g  Wd	 t | j  XnB t j t |   t r&t  j |   } t  j |  | j t j B n  d	 S(   s1   Creates an executable file in the given location.t   gccs   gcc is not installeds   
                #include <unistd.h>
                int main() {
                    pause();
                    return 1;
                }
                t   suffixs   .cR   R   R   Ns   -o(   Rp   Rq   Rx   Ry   R   Rv   R   t   boolR   R   R   R   R   R   R   Rg   Rh   R   R8   R0  t   copyfileR   R   R,  t   chmodR.  t   S_IEXEC(   t   outpatht   c_codeR   R3  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR9     s$    	 c         C  s   t  j d |  d |  S(   NR   R;  (   R   R   (   R   R;  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR<     s    t   TestCasec           B  s2   e  Z d    Z e e j d  s0 e j j Z n  RS(   c         C  sB   |  j  j } | j d  s( d | } n  d | |  j  j |  j f S(   Ns   psutil.s   psutil.tests.s   %s.%s.%s(   R   R   R   R   t   _testMethodName(   R   t   fqmod(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   __str__!  s
    t   assertRaisesRegex(   R   R   RE  R  t   unittestRB  t   assertRaisesRegexpRF  (    (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRB    s   		c      	   C  s(   d   } t  d t d d d |  d |  S(   sZ   Decorator which runs a test function and retries N times before
    actually failing.
    c         S  s   t  d |  d t j d  S(   Ns   %r, retryingt   file(   t   printRn   Rf   (   R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR  6  s    R  R   R  R  N(   R  Ry   Rk   (   R  R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR4   2  s    	c           s     f d   } | S(   s,   Decorator to Ignore AccessDenied exceptions.c           s%   t  j       f d    } | S(   Nc            sV   y   |  |   SWn> t  j k
 rQ  d  k	 r?  s?   q? n  t j d   n Xd  S(   Ns   raises AccessDenied(   Rt   t   AccessDeniedRk   RG  t   SkipTest(   R   R   (   R   t   only_if(    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   @  s    	(   R   R   (   R   R   (   RM  (   R   s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   ?  s    !	(    (   RM  R   (    (   RM  s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR2   =  s    c           s     f d   } | S(   s3   Decorator to Ignore NotImplementedError exceptions.c           s%   t  j       f d    } | S(   Nc            s`   y   |  |   SWnH t  k
 r[  d  k	 r<  s<   q< n  d   j } t j |   n Xd  S(   Ns4   %r was skipped because it raised NotImplementedError(   R  Rk   R   RG  RL  (   R   R   t   msg(   R   RM  (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   P  s    	
(   R   R   (   R   R   (   RM  (   R   s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR   O  s    !(    (   RM  R   (    (   RM  s4   lib/python2.7/site-packages/psutil/tests/__init__.pyR3   M  s    s	   127.0.0.1c         C  s\   t  j t j    A } | j t j t j d  | j |  d f  | j   d SWd QXd S(   s   Return an unused TCP port.i   i    N(   R   R   R   t
   setsockoptt
   SOL_SOCKETt   SO_REUSEADDRR   t   getsockname(   t   hostR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRD   d  s    c         c  sT   t  j s t  t d |   } z	 | VWd y t j |  Wn t k
 rN n XXd S(   sa   A context manager which returns a non-existent file name
    and tries to delete it on exit.
    R;  N(   Rt   R   Ry   R<   Rp   t   unlinkR   (   R;  Rq   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRE   l  s    	c         C  s   | d k r' |  t t f k r' d } n  t j |  |  } yM | j t j t j d  | j |  | t j k r | j	 d  n  | SWn t
 k
 r | j     n Xd S(   s   Binds a generic socket.RP   i    i   i
   N(   RP   i    (   Rk   R   R   R   RO  RP  RQ  R   R   R   Rj   R   (   t   familyt   typet   addrR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRF   |  s    	
c         C  s   t  j s t  t j j |   s. t |    t j t j |  } y0 | j |   | t j	 k rr | j
 d  n  Wn t k
 r | j     n X| S(   s   Bind a UNIX socket.i
   (   Rt   R   Ry   Rp   Rq   Rx   R   R|   R   R   R   Rj   R   (   R   RV  R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRG     s    
c      	   C  s   t  j t j |  t    } | j |  | j d  | j   } t j |  t  } y\ | j |  | j   } x< t r | j	   \ } } | | k r | | f S| j
   qu WWn t k
 r | j
     n XWd QXd S(   s^   Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    i
   N(   R   R   R   R   R   R   RR  t   connectR   R   R   R   (   RU  RW  t   llR	  t   caddrt   a(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRH     s     	

c         C  s   t  j s t  d } } yX t |  d t j } | j d  t j t j t j  } | j d  | j	 |   WnF t
 k
 r | d k	 r | j   n  | d k	 r | j   n    n X| | f S(   s   Build a pair of UNIX sockets connected to each other through
    the same UNIX file name.
    Return a (server, client) tuple.
    RV  i    N(   Rt   R   Ry   Rk   RG   R   R   t   setblockingR|   RX  Rj   R   (   R   t   servert   client(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRI     s    
c          c  se  g  }  d } } z |  j t t j t j   |  j t t j t j   t   r |  j t t j t j   |  j t t j t j   n  t	 r
t
 r
t   j   } t   j   } t |  \ } } t | d t j } x' | | | f D] } |  j |  q Wn  |  VWd x |  D] } | j   qW| d k	 rGt |  n  | d k	 r`t |  n  Xd S(   s1   Open as many socket families / types as possible.RV  N(   Rk   t   appendRF   R   R   R   R   R	   R   R   t   HAS_CONNECTIONS_UNIXRE   R   RI   RG   R   R8   (   t   sockst   fname1t   fname2t   s1t   s2t   s3R   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRJ     s,    
		c         C  s  d d l  } t r9 t r9 t | t j  s9 t |   n  | t j k r g  |  j d  D] } t	 |  ^ qX } t
 |  d k s t |    x6 | D]. } d | k o d k n s t |    q Wt s t |   }  n  | j |   n | t j k r;t |  t  st |    t s+t |   }  n  | j |   nE | t j k rqt j d |   d k	 st |    n t d |   d S(	   s[   Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    iNR~   i   i    i   s   ([a-fA-F0-9]{2}[:|\-]?){6}s   unknown family %r(   t	   ipaddresst   enumR
   R   t   IntEnumRy   R   R   R  R   R  R   t   IPv4AddressR   R   t   IPv6AddressRt   t   AF_LINKR  t   matchRk   Rv   (   RW  RU  Rg  t   xt   octst   num(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRC     s&    !(,'c   	   
   C  s  t  |   d k s t |    t  |   d k } t |  d d  d k } |  d |  j k sa t  |  d |  j k sz t  |  d |  j k s t  |  d |  j k s t  |  d	 |  j k s t  |  d
 |  j k s t  | r |  d |  j	 k s t  n  | r|  j d k s!t |    t
 t d  rt ry" t j |  j |  j |  j  } Wn8 t j t f k
 r} | j d t j k r  qqXt j |  5 | j |  j k st  | j |  j k st  Wd QXqn  |  j t t t f k st t |  j    |  j t t f k r|  j t k rt j |  j |  j  } t j |  T y | j |  j d d f  Wn. t j k
 r} | j t j k r  qn XWd QXqn3 |  j t k r|  j t j k st |  j   n  |  j t t t f k st t |  j    |  j t k rG|  j t j k sGt |  j   n  x |  j |  j f D] } |  j t t f k rt  | t!  st |   | sqZn  t  | j" t#  st | j"   d | j" k od k n st | j"   t$ | j% |  j  qZ|  j t k rZt  | t&  s.t |   qZqZWt  |  j t&  sPt |    g  t' t  D]$ } | j( d  r]t t |  ^ q]} |  j | k st |    d S(   s*   Check validity of a connection namedtuple.i   i   t   fdii    i   i   i   i   i   t   fromfdNi  t   CONN_(   i   i   ()   R  Ry   t   getattrRq  RU  RV  t   laddrt   raddrR   R   R  R   R   Rr  t   errorR   R   R   t   EBADFR   R   R   R   R|   t   reprR   t   EADDRNOTAVAILRt   t	   CONN_NONER   R   R}   R   t   tuplet   portR   RC   t   ipR   R6  R   (	   R   t   has_pidt   has_fdt   dupsockR  R   RW  Rn  t   valids(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRB     sf    "
$-$$!."7c         C  sc   y( d d l  } t | d  s' t  n  Wn' t k
 rQ d d l } | j |   SX| j |   Sd S(   s,   Backport of importlib.reload of Python 3.3+.iNt   reload(   t	   importlibR  t   ImportErrort   impR  (   t   moduleR  R  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRK   M  s    c         C  s   t  j j t  j j |    d } t j d d k rQ d d  l } | j | |   St j d  d k r d d l m	 } | | |   j
   Sd d  l } | j j | |   } | j j |  } | j j |  | Sd  S(   Ni    i   ii   i   (   t   SourceFileLoader(   i   i   (   Rp   Rq   t   splitextR   Rn   Rs   R  t   load_sourcet   importlib.machineryR  t   load_modulet   importlib.utilt   utilt   spec_from_file_locationt   module_from_spect   loadert   exec_module(   Rq   R   R  R  R  t   spect   mod(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRL   Z  s    "c         C  s   t  j |  t  d S(   s   Raise a warning msg.N(   t   warningsRM   t   UserWarning(   RN  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRM   o  s    c         C  st   t  |   } | j } t |  d k s7 | d t k r; t St | d d  } t | t  s` t St d   | D  S(   s-   Check if object is an instance of namedtuple.i   i    t   _fieldsc         s  s!   |  ] } t  |  t k Vq d  S(   N(   RV  R   (   t   .0t   n(    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pys	   <genexpr>}  s    N(	   RV  t	   __bases__R  R|  R   Rt  Rk   R   t   all(   Rn  t   tt   bR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRO   t  s    	"c         c  s   t  r d n d } d } t j d |  d |  } g  t j   j   D]C } t j j | j  d | k rC | | j j	   k rC | j ^ qC } t
 j |  } t j | |  z t j |  | VWd t |  Xd S(   s   Ctx manager which picks up a random shared CO lib used
        by this process, copies it in another location and loads it
        in memory via ctypes. Return the new absolutized path.
        t   pypyt   pythons   .soR   R;  i   N(   R   R   R   Rt   Ru   R\   Rp   Rq   R  t   lowert   randomt   choiceR0  R=  t   ctypest   CDLLR8   (   t
   dst_prefixRl   t   extt   dstRn  t   libsR   (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRN     s    $	c         c  sb  d d l  m } d d l  m } d } t j d |  d |  } g  t j   j   D]j } t j	 j
 | j	  d j   | k rQ d t j	 j | j	  j   k rQ d	 | j	 j   k rQ | j	 ^ qQ } t j |  } t j | |  d
 } z t  j |  } | VWd
 | d
 k	 rSt  j j j }	 | j g |	 _ |	 | j  }
 |
 d k rS|   qSn  t |  Xd
 S(   s   Ctx manager which picks up a random shared DLL lib used
        by this process, copies it in another location and loads it
        in memory via ctypes.
        Return the new absolutized, normcased path.
        i(   t   wintypes(   t   WinErrors   .dllR   R;  i   R  t   wow64Ni    (   R  R  R  R   R   Rt   Ru   R\   Rp   Rq   R  R  R   R  R  R0  R=  Rk   t   WinDLLt   windllt   kernel32t   FreeLibraryt   HMODULEt   argtypest   _handleR8   (   R  R  R  R  R  Rn  R  R   t   cfileR  R(  (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyRN     s*    %!$	(   i   i   (   i   i   (   RQ   RR   (   i   i    i    i  (   RU   s   us-ascii(   RP   i    (   R   t
   __future__R    t   atexitR   R  R   R   Rp   R  R  R   R0  R   R,  Rg   Rn   R   R   R   R   R   R  R   R   R   R   Rt   R   R   R   R   t   psutil._commonR	   t   psutil._compatR
   R   R   R   Rs   t	   unittest2RG  R   R  t   catch_warningst   simplefilterRh  Rk   t   __all__t   getenvR   t   builtin_module_namesR   t	   WIN_VISTAR<  RZ   t   getR   R   R   R   R   R   R   Rq   R   Rr   R   R   R   t   getpidR   R   t   getfilesystemencodingR  t   ASCII_FSt   abspathR8  t   __file__R   R   t   HERER`  R  Ru   R   R    t   HAS_GETLOADAVGR!   R#   R$   t   HAS_NET_IO_COUNTERSR%   R"   R&   R'   Ra   R(   Rj   R   R)   R*   t   HAS_THREADSRz   R   R#  t   devnullR   R6  Rn  R   Rt  R   t   objectR|   R}   R   R   R   R   t   registerR   R   R   R   R   R.   R0   R/   R,   R   R   R-   R>   R=   R  R   R@   t   EnvironmentErrorRy   RA   R?   R8   R7  t   contextmanagerR7   R9   R<   RB  R4   R2   R3   RD   RE   RF   RG   RH   RI   RJ   RC   RB   RK   RL   RM   RO   RN   (    (    (    s4   lib/python2.7/site-packages/psutil/tests/__init__.pyt   <module>	   sX  			

	'
0
		$			
0	##	%a		:	#							L				