ó
Gq]c           @   s  d  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
 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( d d# l m) Z) e
 j* ƒ  Z+ d$ e, f d% „  ƒ  YZ- d& e- e& j. f d' „  ƒ  YZ/ d( e- e& j. f d) „  ƒ  YZ0 d* e- e& j. f d+ „  ƒ  YZ1 d, e& j. f d- „  ƒ  YZ2 e3 d. k rþd d/ l4 m5 Z5 e5 e6 ƒ n  d S(0   s;   Tests for net_connections() and Process.connections() APIs.iÿÿÿÿN(   t   closing(   t   AF_INET(   t   AF_INET6(   t
   SOCK_DGRAM(   t   SOCK_STREAM(   t   FREEBSD(   t   LINUX(   t   MACOS(   t   NETBSD(   t   OPENBSD(   t   POSIX(   t   SUNOS(   t   WINDOWS(   t   supports_ipv6(   t   PY3(   t   AF_UNIX(   t   bind_socket(   t   bind_unix_socket(   t   check_connection_ntuple(   t   create_sockets(   t   get_free_port(   t   HAS_CONNECTIONS_UNIX(   t   pyrun(   t   reap_children(   t   safe_rmpath(   t   skip_on_access_denied(   t   tcp_socketpair(   t   TESTFN(   t   TRAVIS(   t   unittest(   t   unix_socket_path(   t   unix_socketpair(   t   wait_for_filet   Basec           B   s;   e  Z d  „  Z d „  Z d „  Z d d „ Z d d „ Z RS(   c         C   s<   t  t ƒ t s8 t j d d ƒ } | s8 t | ƒ ‚ n  d  S(   Nt   kindt   all(   R   R   R   t   thisproct   connectionst   AssertionError(   t   selft   cons(    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   setUp6   s    
c         C   sC   t  t ƒ t ƒ  t s? t j d d ƒ } | s? t | ƒ ‚ n  d  S(   NR"   R#   (   R   R   R   R   R$   R%   R&   (   R'   R(   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   tearDown=   s
    
c         C   s©   t  j d d ƒ } t g  | D] } | j | f ^ q ƒ } t rN | | j ƒ  S|  j t | ƒ d ƒ | d j d k r |  j | | j ƒ  j | j ƒ  ƒ n  | d Sd  S(   NR"   R#   i   i    iÿÿÿÿ(   R$   R%   t   dictt   fdR   t   filenot   assertEqualt   len(   R'   t   sockR(   t   ct   smap(    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   get_conn_from_sockF   s    (&c         C   sP  | d k r |  j | ƒ } n  t | ƒ | j d k rS |  j | j | j ƒ  ƒ n  |  j | j | j ƒ |  j | j | j t	 j
 t	 j ƒ ƒ | j ƒ  } | rÅ t rÅ t | t ƒ rÅ | j ƒ  } n  | j t k rá | d  } n  | j t k rù t rù n |  j | j | ƒ | j t k rLt rLt j d d ƒ } |  j t j ƒ  | ƒ n  | S(   s±   Given a socket, makes sure it matches the one obtained
        via psutil. It assumes this process created one connection
        only (the one supposed to be checked).
        iÿÿÿÿi   R"   R#   N(   t   NoneR3   R   R,   R.   R-   t   familyt   typet
   getsockoptt   sockett
   SOL_SOCKETt   SO_TYPEt   getsocknameR   t
   isinstancet   bytest   decodeR   R   R	   t   laddrR   R$   R%   t   compare_procsys_connectionst   ost   getpid(   R'   R0   t   connR?   R(   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   check_socketS   s(    
R#   c         C   sŽ   y t  j d | ƒ } Wn! t  j k
 r9 t r3 d S‚  n Xg  | D] } | j | k rA | d  ^ qA } | j ƒ  | j ƒ  |  j | | ƒ d S(   sœ   Given a process PID and its list of connections compare
        those against system-wide connections retrieved via
        psutil.net_connections.
        R"   Niÿÿÿÿ(   t   psutilt   net_connectionst   AccessDeniedR   t   pidt   sortR.   (   R'   RH   t	   proc_consR"   t   sys_consR1   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyR@   w   s    ,

N(   t   __name__t
   __module__R)   R*   R3   R4   RD   R@   (    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyR!   4   s
   				$t   TestUnconnectedSocketsc           B   s–   e  Z d  Z d „  Z e j e ƒ  d ƒ d „  ƒ Z d „  Z e j e ƒ  d ƒ d „  ƒ Z	 e j e
 d ƒ d „  ƒ Z e j e
 d ƒ d „  ƒ Z RS(	   s;   Tests sockets which are open but not connected to anything.c         C   sl   d t  ƒ  f } t t t t d | ƒƒ < } |  j | ƒ } | j sL t ‚ |  j | j	 t
 j ƒ Wd  QXd  S(   Ns	   127.0.0.1t   addr(   R   R    R   R   R   RD   t   raddrR&   R.   t   statusRE   t   CONN_LISTEN(   R'   RO   R0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_tcp_v4”   s
    s   IPv6 not supportedc         C   sl   d t  ƒ  f } t t t t d | ƒƒ < } |  j | ƒ } | j sL t ‚ |  j | j	 t
 j ƒ Wd  QXd  S(   Ns   ::1RO   (   R   R    R   R   R   RD   RP   R&   R.   RQ   RE   RR   (   R'   RO   R0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_tcp_v6›   s
    c         C   sl   d t  ƒ  f } t t t t d | ƒƒ < } |  j | ƒ } | j sL t ‚ |  j | j	 t
 j ƒ Wd  QXd  S(   Ns	   127.0.0.1RO   (   R   R    R   R   R   RD   RP   R&   R.   RQ   RE   t	   CONN_NONE(   R'   RO   R0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_udp_v4£   s
    c         C   sl   d t  ƒ  f } t t t t d | ƒƒ < } |  j | ƒ } | j sL t ‚ |  j | j	 t
 j ƒ Wd  QXd  S(   Ns   ::1RO   (   R   R    R   R   R   RD   RP   R&   R.   RQ   RE   RU   (   R'   RO   R0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_udp_v6ª   s
    s
   POSIX onlyc         C   sl   t  ƒ  ] } t t | d t ƒƒ < } |  j | ƒ } | j sF t ‚ |  j | j t	 j
 ƒ Wd  QXWd  QXd  S(   NR6   (   R   R    R   R   RD   RP   R&   R.   RQ   RE   RU   (   R'   t   nameR0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_unix_tcp²   s
    c         C   sl   t  ƒ  ] } t t | d t ƒƒ < } |  j | ƒ } | j sF t ‚ |  j | j t	 j
 ƒ Wd  QXWd  QXd  S(   NR6   (   R   R    R   R   RD   RP   R&   R.   RQ   RE   RU   (   R'   RX   R0   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_unix_udpº   s
    (   RL   RM   t   __doc__RS   R   t   skipIfR   RT   RV   RW   R
   RY   RZ   (    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyRN   ‘   s   		t   TestConnectedSocketPairsc           B   sf   e  Z d  Z e j e d ƒ d „  ƒ Z e j e d ƒ d „  ƒ Z e	 d e
 ƒ d „  ƒ Z d „  Z RS(   sJ   Test socket pairs which are are actually connected to
    each other.
    s   unreliable on SUONSc         C   s¼   d t  ƒ  f } t j d d ƒ s( t ‚ t t d | ƒ\ } } z` t j d d ƒ } |  j t | ƒ d ƒ |  j | d j t	 j
 ƒ |  j | d j t	 j
 ƒ Wd  | j ƒ  | j ƒ  Xd  S(   Ns	   127.0.0.1R"   t   tcp4RO   i   i    i   (   R   R$   R%   R&   R   R   R.   R/   RQ   RE   t   CONN_ESTABLISHEDt   close(   R'   RO   t   servert   clientR(   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_tcpÏ   s    
s
   POSIX onlyc      	   C   sà  t  ƒ  Ñ} t | ƒ \ } } z t j d d ƒ } | d j oJ | d j sT t ‚ | d j ok | d j su t ‚ t r¦ g  | D] } | j d k r‚ | ^ q‚ } n  |  j t	 | ƒ d ƒ t
 sÎ t sÎ t r#|  j | d j d ƒ |  j | d j d ƒ |  j | | d j p| d j ƒ nš t rux‘ | d j | d j | d j | d j f D] } |  j | d ƒ qXWnH |  j | d j p’| d j | ƒ |  j | d j p¶| d j | ƒ Wd  | j ƒ  | j ƒ  XWd  QXd  S(   NR"   t   unixi    i   s   /var/run/logi   t    (   R   R   R$   R%   R?   RP   R&   R   R.   R/   R   R   R   R	   R`   (   R'   RX   Ra   Rb   R(   R1   RO   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt	   test_unixã   s*    !!+'$(
t   only_ifc            sè  ‡  f d †  } t  j d ƒ } t  j d ƒ } d d l m } t j j t ƒ } | | ƒ j d t	 t
 ƒ d d d	 | ƒ } | | ƒ j d t	 t
 ƒ d d d	 | ƒ } | | ƒ j d t	 t ƒ d d
 d	 | ƒ } | | ƒ j d t	 t ƒ d d
 d	 | ƒ }	 t | ƒ }
 t t | ƒ ƒ } t | ƒ } t t | ƒ ƒ } t ƒ  r{t | ƒ } t t | ƒ ƒ } t |	 ƒ } t t | ƒ ƒ } n d  } d  } d  } d  } x5t j ƒ  D]'} | j ƒ  } ˆ  j t | ƒ d ƒ xü | D]ô } | j |
 j k r| | | t
 t | d t j d ƒ qÏ| j | j k rC| | | t
 t | d t j d ƒ qÏ| j t | d d  ƒ k rƒ| | | t t | d t j d ƒ qÏ| j t | d d  ƒ k rÏ| | | t t | d t j d  ƒ qÏqÏWq Wˆ  j t | j d d ƒd  S(!   Nc      
      sã   d } t  | ƒ ˆ  j | j | ƒ ˆ  j | j | ƒ ˆ  j | j | ƒ ˆ  j | j | ƒ ˆ  j | j | ƒ xN | D]F }	 |  j d |	 ƒ }
 |	 | k r© |
 s¼ t ‚ qv |
 sv t |
 ƒ ‚ qv Wt	 rß ˆ  j
 |  j | g ƒ n  d  S(   NR#   t   inett   inet4t   inet6t   tcpR^   t   tcp6t   udpt   udp4t   udp6R"   (
   R#   Rh   Ri   Rj   Rk   R^   Rl   Rm   Rn   Ro   (   R   R.   R5   R6   R?   RP   RQ   R%   R&   R   R@   RH   (   t   procRC   R5   R6   R?   RP   RQ   t   kindst	   all_kindsR"   R(   (   R'   (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt
   check_conn  s     
s  
            import socket, time
            s = socket.socket($family, socket.SOCK_STREAM)
            s.bind(('$addr', 0))
            s.listen(1)
            with open('$testfn', 'w') as f:
                f.write(str(s.getsockname()[:2]))
            time.sleep(60)
        sý   
            import socket, time
            s = socket.socket($family, socket.SOCK_DGRAM)
            s.bind(('$addr', 0))
            with open('$testfn', 'w') as f:
                f.write(str(s.getsockname()[:2]))
            time.sleep(60)
        iÿÿÿÿ(   t   TemplateR5   RO   s	   127.0.0.1t   testfns   ::1i   R#   Rh   Ri   Rk   R^   Rm   Rn   RH   Rj   Rl   Ro   R"   s   ???(    (   R#   Rh   Ri   Rk   R^   (    (   R#   Rh   Ri   Rm   Rn   (    (   R#   Rh   Rj   Rk   Rl   (    (   R#   Rh   Rj   Rm   Ro   (   t   textwrapt   dedentt   stringRt   RA   t   patht   basenameR   t
   substitutet   intR   R   R   t   evalR    R   R4   R$   t   childrenR%   R.   R/   RH   R   RE   RR   R   RU   t   getattrt   assertRaisest
   ValueError(   R'   Rs   t   tcp_templatet   udp_templateRt   t   testfilet   tcp4_templatet   udp4_templatet   tcp6_templatet   udp6_templatet	   tcp4_proct	   tcp4_addrt	   udp4_proct	   udp4_addrt	   tcp6_proct	   tcp6_addrt	   udp6_proct	   udp6_addrt   pR(   RC   (    (   R'   s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_combos  sb    			


c      	   C   sõ  t  ƒ  æ} t j d d ƒ } |  j t | ƒ t | ƒ ƒ t j d d ƒ } |  j t | ƒ t ƒ  rj d n d ƒ x: | D]2 } |  j | j t t	 f ƒ |  j | j
 t ƒ qx Wt j d d ƒ } |  j t | ƒ d ƒ |  j | d j t ƒ |  j | d j
 t ƒ t ƒ  rft j d d ƒ } |  j t | ƒ d ƒ |  j | d j t	 ƒ |  j | d j
 t ƒ n  t j d d	 ƒ } |  j t | ƒ t ƒ  r–d n d ƒ x: | D]2 } |  j | j t t	 f ƒ |  j | j
 t ƒ q¤Wt j d d
 ƒ } |  j t | ƒ d ƒ |  j | d j t ƒ |  j | d j
 t ƒ t ƒ  r’t j d d ƒ } |  j t | ƒ d ƒ |  j | d j t	 ƒ |  j | d j
 t ƒ n  t j d d ƒ } |  j t | ƒ t ƒ  rÂd n d ƒ x@ | D]8 } |  j | j t t	 f ƒ |  j | j
 t t f ƒ qÐWt ƒ  r}t j d d ƒ } |  j t | ƒ d ƒ x= | D]2 } |  j | j t	 ƒ |  j | j
 t t f ƒ qDWn  t rët j d d ƒ } |  j t | ƒ d ƒ x= | D]2 } |  j | j t ƒ |  j | j
 t t f ƒ q²Wn  Wd  QXd  S(   NR"   R#   Rk   i   i   R^   i    Rl   Rm   Rn   Ro   Rh   i   Rj   Rd   i   (   R   R$   R%   R.   R/   R   t   assertInR5   R   R   R6   R   R   R   R   (   R'   t   socksR(   RC   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_multi_sockets_filteringf  s`    %	%	%	 (   RL   RM   R[   R   R\   R   Rc   R
   Rf   R   R   R’   R•   (    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyR]   È   s
   !bt   TestSystemWideConnectionsc           B   s\   e  Z d  Z e ƒ  d „  ƒ Z e ƒ  d „  ƒ Z e ƒ  e j e oE e	 d ƒ d „  ƒ ƒ Z
 RS(   s   Tests for net_connections().c      
      sÏ   ‡  f d †  } t  ƒ  ± d d l m } x€ | j ƒ  D]r \ } } | d k r[ t r[ q6 n  | \ } } t j | ƒ } ˆ  j t | ƒ t t	 | ƒ ƒ ƒ | | | | ƒ q6 Wˆ  j
 t t j d d ƒWd  QXd  S(   Nc            sx   t  t d t ƒ  ƒ } x\ |  D]T } ˆ  j | j | d | ƒ| j | k rf ˆ  j | j | d | ƒn  t | ƒ q Wd  S(   NR   t   msg(   R   R8   t   objectR“   R5   R6   R   (   R(   t   familiest   types_R   RC   (   R'   (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   check¬  s    iÿÿÿÿ(   t	   conn_tmapRd   R"   s   ???(   R   t   psutil._commonRœ   t   itemsR   RE   RF   R.   R/   t   setR€   R   (   R'   R›   Rœ   R"   t   groupsR™   Rš   R(   (    (   R'   s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_itª  s    
"c         C   sl   t  ƒ  ] } g  t j d d ƒ D]! } | j t j ƒ  k r | ^ q } |  j t | ƒ t | ƒ ƒ Wd  QXd  S(   NR"   R#   (   R   RE   RF   RH   RA   RB   R.   R/   (   R'   R”   t   xR(   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_multi_socksÁ  s    !s   unreliable on MACOS + TRAVISc         C   s|  t  ƒ   } t | ƒ } Wd  QXg  } d } xo t | ƒ D]a } t j j t ƒ t | ƒ } t j	 d | ƒ } t
 | ƒ } | j | j ƒ |  j t | ƒ q7 Wx. t | ƒ D]  } t t | ƒ } t | ƒ q© Wg  t j d d ƒ D] }	 |	 j | k rà |	 ^ qà }
 xt | D]l } |  j t g  |
 D] }	 |	 j | k r|	 ^ qƒ | ƒ t j | ƒ } |  j t | j d ƒ ƒ | ƒ qWd  S(   Ni
   s                  import time, os
                from psutil.tests import create_sockets
                with create_sockets():
                    with open(r'%s', 'w') as f:
                        f.write(str(os.getpid()))
                    time.sleep(60)
                R"   R#   (   R   R/   t   rangeRA   Ry   t   realpathR   t   strRv   Rw   R   t   appendRH   t
   addCleanupR   R    RE   RF   R.   t   ProcessR%   (   R'   R”   t   expectedt   pidst   timest   it   fnamet   srct   sprocR¢   t   sysconsRH   R‘   (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_multi_sockets_procsÈ  s*    
1(   RL   RM   R[   R   R¡   R£   R   R\   R   R   R²   (    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyR–   §  s
   t   TestMiscc           B   s   e  Z d  „  Z RS(   c         C   sÍ   g  } g  } x“ t  t ƒ D]… } | j d ƒ r t t | ƒ } t | ƒ } | j ƒ  sa t | ƒ ‚ |  j t | ƒ |  j | | ƒ | j | ƒ | j | ƒ q q Wt	 r¹ t j
 t j n  t rÉ t j n  d  S(   Nt   CONN_(   t   dirRE   t
   startswithR   R¦   t   isupperR&   t   assertNotInR§   R   t	   CONN_IDLEt
   CONN_BOUNDR   t   CONN_DELETE_TCB(   R'   t   intst   strsRX   t   numt   str_(    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   test_connection_constantsù  s     
(   RL   RM   RÀ   (    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyR³   ÷  s   t   __main__(   t   run(7   R[   RA   R8   Rv   t
   contextlibR    R   R   R   R   RE   R   R   R   R   R	   R
   R   R   R   R   t   psutil._compatR   t   psutil.testsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R©   R$   R˜   R!   t   TestCaseRN   R]   R–   R³   RL   t   psutil.tests.runnerRÂ   t   __file__(    (    (    s<   lib/python2.7/site-packages/psutil/tests/test_connections.pyt   <module>   s\   ]7ßP