ó
[³XMc           @   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 y d d l m	 Z	 Wn e
 k
 rw d Z	 n Xd e j f d „  ƒ  YZ e	 d k r© d e _ nZ y e	 j d	 ƒ Z Wn7 e k
 rõ Z e j e j k rï [ d
 e _ q‚  n Xe j ƒ  [ d S(   s   
Tests for epoll wrapper.
iÿÿÿÿN(   t   unittest(   t   untilConcludes(   t   _epollt   EPollc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s1   
    Tests for the low-level epoll bindings.
    c         C   sB   t  j  ƒ  |  _ |  j j d ƒ |  j j d ƒ |  j g |  _ d S(   sp   
        Create a listening server port and a list with which to keep track
        of created sockets.
        s	   127.0.0.1i    i   N(   s	   127.0.0.1i    (   t   sockett   serverSockett   bindt   listent   connections(   t   self(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   setUp   s    c         C   s"   x |  j  D] } | j ƒ  q
 Wd S(   sB   
        Close any sockets which were opened by the test.
        N(   R   t   close(   R	   t   skt(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   tearDown"   s    c         C   s´   t  j  ƒ  } | j t ƒ y$ | j d |  j j ƒ  d f ƒ Wn0 t  j k
 ro } |  j | j d t	 j
 ƒ n Xt j d ƒ ‚ |  j j ƒ  \ } } |  j j | | f ƒ | | f S(   sL   
        Return the two sockets which make up a new TCP connection.
        s	   127.0.0.1i   i    s&   Connect should have raised EINPROGRESS(   R   t   setblockingt   Falset   connectR   t   getsocknamet   errort   assertEqualst   argst   errnot   EINPROGRESSR    t   FailTestt   acceptR   t   extend(   R	   t   clientt   et   servert   addr(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   _connectedPair*   s    $c         C   sL   y t  j d ƒ } Wn( t k
 r= } t j t | ƒ ƒ ‚ n X| j ƒ  d S(   s7   
        Test the creation of an epoll object.
        i   N(   R   t   epollt   OSErrorR    R   t   strR   (   R	   t   pR   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   test_create<   s
    c         C   s¤   |  j  t t j d d d ƒ |  j  t t j d ƒ |  j  t t j d ƒ |  j  t t j d ƒ |  j  t t j d g ƒ |  j  t t j i  ƒ |  j  t t j ƒ d S(   su   
        Test that attempting to create an epoll object with some random
        objects raises a TypeError.
        i   i   i   t   fooN(    (   t   assertRaisest	   TypeErrorR   R   t   None(   R	   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   test_badCreateH   s    c         C   sƒ   |  j  ƒ  \ } } t j d ƒ } zP | j t j | j ƒ  t j t j Bƒ | j t j | j ƒ  t j t j Bƒ Wd | j ƒ  Xd S(   s:   
        Test adding a socket to an epoll object.
        i   N(	   R   R   R   t   _controlt   CTL_ADDt   filenot   INt   OUTR   (   R	   R   R   R"   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   test_addV   s    &*c         C   s  |  j  ƒ  \ } } t j d ƒ } | j t j | j ƒ  t j t j Bt j Bƒ | j t j | j ƒ  t j t j Bt j Bƒ t	 j	 ƒ  } t
 | j d d ƒ } t	 j	 ƒ  } |  j | | d k ƒ | j ƒ  | j ƒ  t j f | j ƒ  t j f g } | j ƒ  |  j | | ƒ t	 j	 ƒ  } t
 | j d d ƒ } t	 j	 ƒ  } |  j | | d k ƒ |  j | ƒ | j d ƒ | j d ƒ t	 j	 ƒ  } t
 | j d d ƒ } t	 j	 ƒ  } |  j | | d k ƒ | j ƒ  | j ƒ  t j t j Bf | j ƒ  t j t j Bf g } | j ƒ  |  j | | ƒ d	 S(
   sa   
        Test waiting on an epoll object which has had some sockets added to
        it.
        i   i   iè  g{®Gáz„?iÈ   gš™™™™™¹?s   Hello!s   world!!!N(   R   R   R   R)   R*   R+   R,   R-   t   ETt   timeR   t   waitt   failIft   sortR   t
   failUnlesst   send(   R	   R   R   R"   t   nowt   eventst   thent   expected(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   test_controlAndWaitd   s>    ""



(
   t   __name__t
   __module__t   __doc__R
   R   R   R#   R(   R.   R:   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyR      s   						s   _epoll module unavailablei   s#   epoll support missing from platform(   R=   R   R   R0   t   twisted.trialR    t   twisted.python.utilR   t   twisted.pythonR   t   ImportErrorR'   t   TestCaseR   t   skipR   R   t   IOErrort   exct   ENOSYSR   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_epoll.pyt   <module>   s&   $

