
[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 m Z d d l m	 Z	 m
 Z
 m Z d d l m Z d d l m Z d d l m Z m Z d d	 l m Z m Z d d
 l m Z m Z d d l m Z d d l m Z d f  d     YZ d e j f d     YZ e e d  rDe j   Z  e j!   Z" n
 d Z  Z" d e j f d     YZ# d e j f d     YZ$ d e j f d     YZ% d e j f d     YZ& d e j f d     YZ' d e j( f d     YZ) d f  d      YZ* d! f  d"     YZ+ d# e j, f d$     YZ- d% e j f d&     YZ. d' e j f d(     YZ/ d) e j0 f d*     YZ1 d+ e j f d,     YZ2 d S(-   sU   
Tests for L{twisted.application} and its interaction with
L{twisted.persisted.sob}.
iN(   t   StringIO(   t   unittestt   util(   t   servicet   internett   app(   t   sob(   t   usage(   t
   interfacest   defer(   t   wiret   basic(   t   protocolt   reactor(   t   reactors(   t   MemoryReactort   Dummyc           B   s   e  Z d  Z RS(   N(   t   __name__t
   __module__t   Nonet   processName(    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR      s   t   TestServicec           B   s}   e  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 d   Z RS(   c         C   s0   t  j   } | j d  |  j | j d  d  S(   Nt   hello(   R   t   Servicet   setNamet   failUnlessEqualt   name(   t   selft   s(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testName   s    c         C   sU   t  j   } t  j   } | j |  |  j t |  | g  |  j | j |  d  S(   N(   R   R   t   MultiServicet   setServiceParentR   t   listt   parent(   R   R   t   p(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
   testParent!   s
    c         C   sj   t  j   } t  j d  } | j |  |  j t t  j |   | g  |  j | j t  j |   d  S(   Nt    (   R   R   t   ApplicationR   R   R    t   IServiceCollectionR!   (   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testApplicationAsParent(   s
    "c         C   s{   t  j   } t  j   } | j d  | j |  |  j t |  | g  |  j | j |  |  j | j d  |  d  S(   NR   (	   R   R   R   R   R   R   R    R!   t   getServiceNamed(   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testNamedChild/   s    c         C   sL   t  j   } t  j   } | j d  | j |  |  j t | j d  d  S(   NR   t   lala(   R   R   R   R   R   t   failUnlessRaisest   RuntimeError(   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testDoublyNamedChild8   s
    c         C   se   t  j   } t  j   } | j d  | j |  t  j   } | j d  |  j t | j |  d  S(   NR   (   R   R   R   R   R   R+   R,   (   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testDuplicateNamedChild?   s    c         C   s   t  j   } t  j   } | j |  |  j t |  | g  |  j | j |  | j   |  j t |  g   |  j | j d   d  S(   N(	   R   R   R   R   R   R    R!   t   disownServiceParentR   (   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testDisowningH   s    
c         C   sV   t  j   } |  j | j  | j   |  j | j  | j   |  j | j  d  S(   N(   R   R   t   assert_t   runningt   startServicet   stopService(   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testRunningR   s    

c         C   s   t  j   } t  j   } | j |  |  j | j  |  j | j  | j   |  j | j  |  j | j  | j   |  j | j  |  j | j  d  S(   N(   R   R   R   R   R1   R2   R3   R4   (   R   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testRunningChildren1Z   s    

c            sz   t  j       f d   } t  j   } | | _ | | _ t  j   }  j |  | j |  | j   | j   d  S(   Nc              s     j   j  d  S(   N(   R1   R2   (    (   R   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   checkRunningi   s    (   R   R   R4   R3   R   R   (   R   R7   t   tR"   (    (   R   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testRunningChildren2g   s    		
c         C   so   t  j   } | j   t  j   } |  j | j  | j |  |  j | j  | j   |  j | j  d  S(   N(   R   R   R3   R   R1   R2   R   R/   (   R   R"   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testAddingIntoRunningt   s    

c            st   t  j       f d   } |   _ t  j   } t  j   }   j |  | j |  | j   |  j   j  d  S(   Nc              s   d   _  d  S(   Ni   (   t   privilegedStarted(    (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   pss   s    (   R   R   t   privilegedStartServiceR   R   R1   R;   (   R   R<   t   s1R"   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testPrivileged~   s    	
c         C   sJ   t  j   } | j   t j |  } |  j | j  |  j | j  d  S(   N(   R   R   R3   t   copyR1   R2   (   R   R   R>   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testCopying   s
    
(   R   R   R   R#   R'   R)   R-   R.   R0   R5   R6   R9   R:   R?   RA   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR      s   									
				
	t   getuidi    t   TestProcessc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s<   t  j d d  } |  j | j d  |  j | j d  d  S(   Ni   i   (   R   t   Processt   assertEqualt   uidt   gid(   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testID   s    c         C   s   t  j d  } |  j | j d  |  j | j d   t  j d d  } |  j | j d   |  j | j d  t  j   } |  j | j d   |  j | j d   d  S(   Ni   RG   (   R   RD   RE   RF   RG   R   (   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testDefaults   s    c         C   s?   t  j   } |  j | j d   d | _ |  j | j d  d  S(   NR   (   R   RD   RE   R   R   (   R   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testProcessName   s    	(   R   R   RH   RI   RJ   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRC      s   		t   TestInterfacesc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s#   |  j  t j j t j     d  S(   N(   R1   R   t   IServicet
   providedByR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testService   s    c         C   sB   |  j  t j j t j     |  j  t j j t j     d  S(   N(   R1   R   RL   RM   R   R&   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testMultiService   s    c         C   s#   |  j  t j j t j     d  S(   N(   R1   R   t   IProcessRM   RD   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testProcess   s    (   R   R   RN   RO   RQ   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRK      s   		t   TestApplicationc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s4   t  j d  t  j d d  t  j d d d  d  S(   NR   i   i   (   R   R%   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testConstructor   s    c         C   s   t  j d  } |  j t  j |  j d   |  j t  j |  j d   t  j d d  } |  j t  j |  j d  |  j t  j |  j d   t  j d d d  } |  j t  j |  j d  |  j t  j |  j d  d  S(   NR   i   i   (   R   R%   RE   RP   RF   R   RG   (   R   t   a(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testProcessComponent   s    c         C   sp   t  j d  } |  j t  j |  t  j |  k  |  j t  j |  j d  |  j t  j |  j d   d  S(   NR   (	   R   R%   R1   RL   R&   RE   R   R!   R   (   R   RT   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testServiceComponent   s    %c         C   s^   t  j d  } t j |  } |  j | j d  |  j | j d  |  j | j | k  d  S(   NR   t   pickle(	   R   R%   R   t   IPersistableRE   t   styleR   R1   t   original(   R   RT   R"   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testPersistableComponent   s
    (   R   R   RS   RU   RV   R[   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRR      s   			t   TestLoadingc           B   s   e  Z d    Z RS(   c         C   s   t  j d  } t j |  } xa d j   D]S } | j |  | j   t  j d | d |  } |  j t  j	 |  j
 d  q+ Wt d d  } | j d d g  | j   t  j d d	  } |  j t  j	 |  j
 d  d  S(
   NR   s   source pickles   hello.tai    s	   hello.tact   ws(   from twisted.application import service
s+   application = service.Application('hello')
t   python(   R   R%   R   RX   t   splitt   setStylet   savet   loadApplicationRE   RL   R   t   opent
   writelinest   close(   R   RT   R"   RY   t   a1t   f(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_simpleStoreAndLoad   s    
 

(   R   R   Rh   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR\      s   t   TestAppSupportc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   |  j  t j d  d   d  S(   Ni    (   RE   R   t   getPassphraseR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testPassphrase   s    c         C   s;  t  j d  } i d d 6d d 6d d 6} x d j   D] } | j   } d | i d d 6j | |  <t j |  j |  t j |  j	 d d  t
 j | d  } |  j t  j |  j d  q7 W| j   } d | d <t d d	  } | j d
 d g  | j   t
 j | d  } |  j t  j |  j d  d S(   sL   
        Test loading an application file in different dump format.
        R   t   filet   sourceR^   s   source picklet   helloapplicationRW   t   filenameR]   s(   from twisted.application import service
s+   application = service.Application('hello')
N(   R   R%   R   R_   R@   t   getR   RX   R`   Ra   R   t   getApplicationRE   RL   R   Rc   Rd   Re   (   R   RT   t
   baseconfigRY   t   configRf   Rg   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testLoadApplication   s$     


c      	   C   s   t  j d  } x d j   D] } x d j   D] } t j |  j |  t j |  j d d  t j d | d  d | d  t  j
 d |  } |  j t  j |  j d  q/ Wq Wd  S(   NR*   s   source pickleRo   t   converttests   converttest.outi    (   R   R%   R_   R   RX   R`   Ra   R   t   convertStyleR   Rb   RE   RL   R   (   R   t   applt   instylet   outstylet   appl2(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_convertStyle  s    c         C   s<   t  j d  } t j | d  |  j t  j |  j  d  S(   NR*   i    (   R   R%   R   t   startApplicationR1   RL   R2   (   R   Rw   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_startApplication  s    (   R   R   Rk   Rt   R{   R}   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyRi      s   			t   Fooc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   |  j  j d  d  S(   Ns   lalala
(   t	   transportt   write(   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   connectionMade#  s    c         C   s   | |  j  _ |  j j   d  S(   N(   t   factoryt   lineR   t   loseConnection(   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   lineReceived%  s    c         C   s   |  j  j j |  j  j  d  S(   N(   R   t   dt   callbackR   (   R   t   reason(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   connectionLost(  s    (   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR~   "  s   		t   DummyAppc           B   s    e  Z d Z d    Z d   Z RS(   c         C   s   | |  j  | j <d  S(   N(   t   servicesR   (   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt
   addService.  s    c         C   s   |  j  | j =d  S(   N(   R   R   (   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   removeService0  s    N(   R   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   ,  s   	t   TimerTargetc           B   s   e  Z d    Z d   Z RS(   c         C   s   g  |  _  d  S(   N(   t   l(   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   __init__5  s    c         C   s   |  j  j |  d  S(   N(   R   t   append(   R   t   what(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   7  s    (   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   4  s   	t   TestEchoc           B   s   e  Z d    Z RS(   c         C   s   |  j  j t  d  S(   N(   R   R   t   True(   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   ;  s    (   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   :  s   t   TestInternet2c           B   s   e  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 d   Z e j d d d e  e j d d d e  e j d d  g e _ d   Z d   Z d   Z d   Z d   Z RS(   c            s   t  j       j   t j   } t | _ t j   t _ t	 j
 d |  } | j    | j j   j } t j   } t j   | _ t | _ d  | _ t	 j d | |  j    | j j |  j d  | j j   f d    | j j d    | j S(   Ni    s	   127.0.0.1t   lalalac            s
     j    S(   N(   R4   (   t   x(   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   <lambda>O  s    c         S   s   t  j S(   N(   R   R   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   P  s    (   R   R   R3   R   t   ServerFactoryR   R	   t   DeferredR   R   t	   TCPServerR   t   _portt   getHostt   portt   ClientFactoryR~   R   R   t	   TCPClientt   addCallbackRE   (   R   R   R8   t   num(    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testTCP@  s"    
			c            s   t  j t d  s$ t j d   n  t j     t j	 d    } | j
   | j j   j  |  j  d     f d   } t j | j  j |  S(   s   
        Test L{internet.UDPServer} with a random port: starting the service
        should give it valid port, and stopService should free it so that we
        can start a server on the same port again.
        s)   This reactor does not support UDP socketsi    c            s&   t  j     } | j   | j   S(   N(   R   t	   UDPServerR3   R4   (   t   ignoredR8   (   R   R"   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   onStopa  s    
N(   R   t   IReactorUDPR   R   R   t   SkipTestR   t   DatagramProtocolR   R   R3   R   R   R   t   assertNotEqualsR	   t   maybeDeferredR4   R   (   R   R8   R   (    (   R"   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_UDPT  s    
c            s	  t  j   } t | _  t j   t _ t j d |   d  _  j	    j
 j   j } t  j   } t j   | _ t | _  d  | _ t j d | |      j   | j j |  j d  | j j   f d    | j j  f d    | j j d    | j S(   Ni    i   s	   127.0.0.1R   c            s
     j    S(   N(   R4   (   R   (   t   c(    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   w  s    c            s
     j    S(   N(   R4   (   R   (   R8   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   x  s    c         S   s   t  j S(   N(   R   R   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   y  s    (   R   R   R   R	   R   R   R   R   t
   privilegedR=   R   R   R   R   R~   R   R   R   R3   R   RE   (   R   R   R   (    (   R   R8   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR?   h  s$    		
		
c            s   t  j   } t j | _  t j d |  } | j   | j j   j	 } | j
   t j     t  j   }   f d   | _ t j d | |  } | j     S(   Ni    c             s     j  d   S(   N(   R   R   (   t   args(   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    s	   127.0.0.1(   R   R   R
   t   EchoR   R   R3   R   R   R   R4   R	   R   R   t   clientConnectionFailedR   (   R   R   R8   R   R   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testConnectionGettingRefused|  s    


c            s"  t  j t d   s! t j d  n  t j       j   t	 j
   } t | _	 t j   t _ t j d |  } | j    t	 j   } t | _	 t j   | _ d  | _ t j d |  j    | j j |  j d  | j j   f d    | j j d    | j j |  j |    | j S(   Ns1   This reactor does not support UNIX domain socketss   echo.sktR   c            s
     j    S(   N(   R4   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    c         S   s   t  j S(   N(   R   R   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    (   R   t   IReactorUNIXR   R   R   R   R   R   R3   R   R   R   R	   R   R   R   t
   UNIXServerR   R   R~   R   t
   UNIXClientR   RE   t   _cbTestUnix(   R   R   R8   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testUNIX  s&    
			c            sz   t  j   t _ d  | _ t  j   | _   j   | j j |  j d  | j j   f d    | j j d    | j S(   NR   c            s
     j    S(   N(   R4   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    c         S   s   t  j S(   N(   R   R   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    (	   R	   R   R   R   R   R   R3   R   RE   (   R   R   R   R   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    	
c         C   sQ  t  j t d   s! t j d  n  t j   } t j	 | _ t
 j d |  } | j   |  j | j d   t j |  } |  j | j d   | j   |  j | j d   |  j | j  t j   } t j	 | _ t
 j d |  } | j   |  j | j d   t j |  } |  j | j d   | j   |  j | j d   |  j | j  d  S(   Ns1   This reactor does not support UNIX domain socketss   echo.skt(   R   R   R   R   R   R   R   R   R
   R   R   R   R3   t   failIfIdenticalR   R@   t   assertIdenticalR4   t   failIfR2   R   R   t   _connection(   R   R   R8   t   t1(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testVolatile  s,    



c            s   t  j t d   s! t j d  n  t j   } t j	 | _ t
 j d |  } | j   | j   |  j | j  t j   } t j       f d   | _ t j d |    S(   Ns1   This reactor does not support UNIX domain socketss   echo.sktc             s     j  d   S(   N(   R   R   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    (   R   R   R   R   R   R   R   R   R
   R   R   R   R3   R4   R   R2   R   R	   R   R   t   connectUNIX(   R   R   R8   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testStoppingServer  s    

c         C   sg   t    } t j d | j d  } | j   t j |  } | j   t j |  } |  j	 | j
  d  S(   Ni   R   (   R   R   t   TimerServiceR   R3   RW   t   dumpsR4   t   loadsR   R2   (   R   t   targett   t0R   R8   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testPickledTimer  s    	

c            s   t  j     t j d d      j     f d   } |  _  j     j  f d      j  f d      S(   Ni   c           S   s   d d S(   Ni   i    (    (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    c            s    |     j  d   d  S(   N(   R   R   (   t   why(   R   t	   oldFailed(    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   _failed  s    
c            s     j  S(   N(   R4   (   R   (   R8   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    c            s5     j  t g g    j t  D] } | j j ^ q  S(   N(   RE   t   ZeroDivisionErrort   flushLoggedErrorst   valuet	   __class__(   R   t   o(   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s   (   R	   R   R   R   R   R3   R   (   R   R   (    (   R   R   R   R8   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testBrokenTimer  s    		
c         C   sl   t  j   |  j d |  j g  } |  j | d d d  |  j | d d t  |  j t |  d  d S(   sM   
        Instantiating L{GenericServer} emits a deprecation warning.
        t   offendingFunctionsi    t   messages-   GenericServer was deprecated in Twisted 10.1.t   categoryi   N(   R   t   GenericServert   flushWarningst   test_genericServerDeprecatedt   assertEqualst   DeprecationWarningt   len(   R   t   warnings(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    
	c         C   sl   t  j   |  j d |  j g  } |  j | d d d  |  j | d d t  |  j t |  d  d S(   sM   
        Instantiating L{GenericClient} emits a deprecation warning.
        R   i    R   s-   GenericClient was deprecated in Twisted 10.1.R   i   N(   R   t   GenericClientR   t   test_genericClientDeprecatedR   R   R   (   R   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    
	c      	   C   sh  d j    } x; | D]2 } t t d |  t d  s | j |  q q Wt j t d  d k	 ru | j d d  n  x | D] } x d j    D] } | d k r | d k r q n  |  j t	 t
 | |   t t
 | |  j } i d d	 6d
 d 6| } |  j t	 t | |  p)| d
 k o)| d k  t t
 | |    } |  j t j |  |  q Wq| Wd S(   s   
        L{twisted.application.internet} dynamically defines a set of
        L{service.Service} subclasses that in general have corresponding
        reactor.listenXXX or reactor.connectXXX calls.
        s'   TCP UNIX SSL UDP UNIXDatagram Multicastt   IReactori    t   Generics   Server Clientt	   Multicastt   Clientt   listent   Servert   connectt   UDPN(   R_   t   getattrR   R   R   t   removet   IReactorArbitraryt   insertt
   assertTruet   hasattrR   t   methodR   R   RL   (   R   t   transt   trant   sideR   t   prefixR   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_everythingThere	  s"    R   s-   GenericServer was deprecated in Twisted 10.1.R   s-   GenericClient was deprecated in Twisted 10.1.sb   twisted.internet.interfaces.IReactorArbitrary was deprecated in Twisted 10.1.0: See IReactorFDSet.c         C   s8   x1 t  j D]& } |  j t t  |  d | f  q
 Wd S(   s   
        L{twisted.application.internet} dynamically defines L{service.Service}
        subclasses. This test ensures that the subclasses exposed by C{__all__}
        are valid attributes of the module.
        s3   %s not importable from twisted.application.internetN(   R   t   __all__R   R   (   R   t   cls(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_importAll)  s    c         C   s[   t    } t   } t j d | d | } | j   |  j | j j   d  d | f  d S(   s   
        L{internet._AbstractServer} supports a C{reactor} keyword argument
        that can be used to parametrize the reactor used to listen for
        connections.
        i  R   i   N(   R   t   objectR   R   R3   R   t
   tcpServerst   pop(   R   R   R   R8   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt#   test_reactorParametrizationInServer5  s
    		
c         C   sa   t    } t   } t j d d | d | } | j   |  j | j j   d  d d | f  d S(   s   
        L{internet._AbstractClient} supports a C{reactor} keyword arguments
        that can be used to parametrize the reactor used to create new client
        connections.
        s	   127.0.0.1i  R   i   N(   R   R   R   R   R3   R   t
   tcpClientsR   (   R   R   R   R8   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt#   test_reactorParametrizationInClientC  s    		
c         C   s   t    } t   } t j d | d | } | j   |  j | j j   d  d | f  | j   | j   |  j | j j   d  d | f  d S(   s   
        Like L{test_reactorParametrizationInServer}, but stop and restart the
        service and check that the given reactor is still used.
        i  R   i   N(	   R   R   R   R   R3   R   R   R   R4   (   R   R   R   R8   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt0   test_reactorParametrizationInServerMultipleStartR  s    		
#

c         C   s   t    } t   } t j d d | d | } | j   |  j | j j   d  d d | f  | j   | j   |  j | j j   d  d d | f  d S(   s   
        Like L{test_reactorParametrizationInClient}, but stop and restart the
        service and check that the given reactor is still used.
        s	   127.0.0.1i  R   i   N(	   R   R   R   R   R3   R   R   R   R4   (   R   R   R   R8   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt0   test_reactorParametrizationInClientMultipleStartb  s    		
 

(   R   R   R   R   R?   R   R   R   R   R   R   R   R   R   R   R   t   suppressR   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   >  s.   						
			
								t   TestTimerBasicc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c            sw   t  j   } t j d | j d    _   j j   | j   j d  | j   f d    | j   f d    | S(   Ni   R   c            s     j  j   S(   N(   R8   R4   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   |  s    c            s     j    j j  S(   N(   R   R8   R2   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   }  s    (	   R	   R   R   R   R   R8   R3   R   RE   (   R   R   (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testTimerRunsw  s    c         C   s   |  j  j   S(   N(   R8   R4   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   tearDown  s    c            s   t  j   } t  j     d f | d f g   f d   } t j d |    _   j j     f d   }    f d   }   f d   } | j |  | j |  | j |  | S(   Nt   bart   fooc             s#     j    \ }  } |  j |  d  S(   N(   R   R   (   R   t   arg(   t   work(    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   trigger  s    i   c            s     j  |  d    j j   S(   NR   (   RE   R8   R4   (   t   result(   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   onFirstResult  s    c            s$     j    j j    j j    S(   N(   R   R8   R2   R3   (   R   (   R   t   d2(    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   onFirstStop  s    c            s!     j  |  d    j j   d  S(   NR   (   RE   R8   R4   (   R  (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   onSecondResult  s    (   R	   R   R   R   R8   R3   R   (   R   t   d1R  R  R  R  (    (   R   R  R  sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testTimerRestart  s    c            s   g    f d   } t  j   } t j d | d d |    _   j j   | j   j d g d  | j   f d    | S(   Nc            s3     j  |   t    | k r/ | j    n  d  S(   N(   R   R   R   (   t   datat   numberR   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s    g{Gz?R   i
   c            s     j  j   S(   N(   R8   R4   (   R   (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    (   R	   R   R   R   R8   R3   R   RE   (   R   R  R   (    (   R   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   testTimerLoops  s    (   R   R   R   R   R	  R  (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   u  s   				t   FakeReactorc           B   s   e  Z d  Z d   Z RS(   s6   
    A fake reactor with a hooked install method.
    c         O   s#   t  j j |  | |  | |  _ d S(   sv   
        @param install: any callable that will be used as install method.
        @type install: C{callable}
        N(   R   t   ReactorR   t   install(   R   R  R   t   kwargs(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    (   R   R   t   __doc__R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s   t   PluggableReactorTestCasec           B   st   e  Z d  Z d   Z d   Z d d  Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z RS(   s:   
    Tests for the reactor discovery/inspection APIs.
    c         C   s.   g  |  _  g  |  _ t j |  _ |  j t _ d S(   sI  
        Override the L{reactors.getPlugins} function, normally bound to
        L{twisted.plugin.getPlugins}, in order to control which
        L{IReactorInstaller} plugins are seen as available.

        C{self.pluginResults} can be customized and will be used as the
        result of calls to C{reactors.getPlugins}.
        N(   t   pluginCallst   pluginResultsR   t
   getPluginst   originalFunctiont   _getPlugins(   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   setUp  s    			c         C   s   |  j  t _ d S(   s>   
        Restore the original L{reactors.getPlugins}.
        N(   R  R   R  (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR     s    c         C   s#   |  j  j | | f  t |  j  S(   sy   
        Stand-in for the real getPlugins method which records its arguments
        and returns a fixed result.
        (   R  R   R    R  (   R   t	   interfacet   package(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s    c         C   s   d } t  d } d } t j | | |  g |  _ t j   } |  j |  j t j d f g  xA | D], } | j	 | k rc |  j | j
 |  Pqc qc W|  j d  d S(   sP   
        Test that reactor plugins are returned from L{getReactorTypes}
        t   fakereactortests   .fakereactort   descriptions6   Reactor plugin not present in getReactorTypes() resultN(   R   R   R  R  t   getReactorTypesRE   R  t   IReactorInstallerR   t	   shortNameR  t   fail(   R   R   R  R  t   reactorTypest   r(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_getPluginReactorTypes  s    
c            sK   g      f d   } t  | d t d  } | j   |  j   t g  d S(   sy   
        Test that L{reactors.Reactor.install} loads the correct module and
        calls its install attribute.
        c              s     j  t  d  S(   N(   R   R   (    (   t	   installed(    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s    R  t	   describedN(   R  R   R  RE   R   (   R   R  t	   installer(    (   R$  sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_reactorInstallation  s    
c            sf   g      f d   } d } t  } d } t | | | |  g |  _ t j |  |  j   t g  d S(   su   
        Test that the L{reactors.installReactor} function correctly installs
        the specified reactor.
        c              s     j  t  d  S(   N(   R   R   (    (   R$  (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s    R  R  N(   R   R  R  R   t   installReactorRE   R   (   R   R  R   R  R  (    (   R$  sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_installReactor  s    c         C   s&   g  |  _  |  j t j t j d  d S(   s   
        Test that L{reactors.installReactor} raises L{reactors.NoSuchReactor}
        when asked to install a reactor which it cannot find.
        t   somereactorN(   R  t   assertRaisesR   t   NoSuchReactorR(  (   R   (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_installNonExistentReactor  s    	c         C   sP   d   } d } t  } d } t | | | |  g |  _ |  j t t j |  d S(   s   
        Test that L{reactors.installReactor} raises an exception when asked to
        install a reactor which doesn't work in this environment.
        c           S   s   t  d   d  S(   Ns   Missing foo bar(   t   ImportError(    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR  !  s    R  R  N(   R   R  R  R+  R.  R   R(  (   R   R  R   R  R  (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_installNotAvailableReactor  s    	c            s   g    d  d  d t  j t j f    f d     Y}    f d   } t | d t d  g |  _ |   } | j d d d	 g  |  j   d
   |  j   j	   d  |  j
 | d d  d S(   sx   
        Test that the reactor selected is installed as soon as possible, ie
        when the option is parsed.
        s   reactor installeds   subcommands loadedt   ReactorSelectionOptionsc              s&   e  Z    f d    Z e e  Z RS(   c            s)    j    d d    f d   d f g S(   Nt
   subcommandc              s     S(   N(    (    (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR   6  s    s   test subcommand(   R   R   (   R   (   t   executedt   SUBCOMMAND_EVENT(   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   subCommands4  s    (   R   R   R4  t   property(    (   R2  R3  (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR0  3  s   c              s    j     d  S(   N(   R   (    (   t   INSTALL_EVENTR2  (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR  9  s    R  R%  s	   --reactorR1  i    i   R   N(   R   t   OptionsR   t   ReactorSelectionMixinR  R   R  t   parseOptionsRE   t   countR   (   R   R0  R  t   options(    (   R2  R3  R6  sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   test_reactorSelectionMixin*  s    (	c         C   s   d t  j t j f d     Y} g  |  _ |   } t   | _ |  j t  j | j	 d d d g  } |  j
 d | j d  |  j
 d | j d  d S(	   s   
        Test that the usage mixin exits when trying to use a non existent
        reactor (the name not matching to any reactor), giving an error
        message.
        R0  c           B   s   e  Z RS(    (   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR0  L  s   s	   --reactorR  R1  i    s   help-reactorsN(   R   R7  R   R8  R  R    t   messageOutputR+  t
   UsageErrorR9  t   assertInR   (   R   R0  R;  t   e(    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt%   test_reactorSelectionMixinNonExistentF  s    		c            s   d t  j t j f d     Y} d     f d   } d } t } d } t | | | |  g |  _ |   } t   | _ |  j	 t  j
 | j d d d g  } |  j   | j d	  |  j d
 | j d	  d S(   s   
        Test that the usage mixin exits when trying to use a reactor not
        available (the reactor raises an error at installation), giving an
        error message.
        R0  c           B   s   e  Z RS(    (   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR0  ^  s   s   Missing foo barc              s   t      d  S(   N(   R.  (    (   R   (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR  a  s    R  R  s	   --reactorR1  i    s   help-reactorsN(   R   R7  R   R8  R   R  R  R    R=  R+  R>  R9  R?  R   (   R   R0  R  R   R  R  R;  R@  (    (   R   sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt&   test_reactorSelectionMixinNotAvailableX  s    	N(   R   R   R  R  R   R   R  R#  R'  R)  R-  R/  R<  RA  RB  (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyR    s   										(3   R  R@   t   osRW   R    t   twisted.trialR   R   t   twisted.applicationR   R   R   t   twisted.persistedR   t   twisted.pythonR   t   twisted.internetR   R	   t   twisted.protocolsR
   R   R   R   R   t   twisted.test.proto_helpersR   R   t   TestCaseR   R   RB   t   curuidt   getgidt   curgidRC   RK   RR   R\   Ri   t   LineReceiverR~   R   R   R   R   R   R   R  R  R  (    (    (    sA   /usr/lib/python2.7/dist-packages/twisted/test/test_application.pyt   <module>   s>   $x
/
 85