ó
[³XMc           @   sÛ  d  d d !Z  d d l m Z d d l m Z d d l m Z d d* d „  ƒ  YZ d	 d+ d
 „  ƒ  YZ d e f d „  ƒ  YZ d e j	 f d „  ƒ  YZ
 d d, d „  ƒ  YZ d d- d „  ƒ  YZ d e e j	 f d „  ƒ  YZ d e e j	 f d „  ƒ  YZ d e e j	 f d „  ƒ  YZ d e e j	 f d „  ƒ  YZ d e j	 f d „  ƒ  YZ d e j	 f d „  ƒ  YZ d d. d  „  ƒ  YZ d! e e j	 f d" „  ƒ  YZ d# e e j	 f d$ „  ƒ  YZ d% e j	 f d& „  ƒ  YZ d' e j	 f d( „  ƒ  YZ d) S(/   s   $Revision: 1.5 $i   iþÿÿÿiÿÿÿÿ(   t   StringIO(   t   unittest(   t   pcpt   DummyTransportc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s    A dumb transport to wrap around.c         C   s   g  |  _  d  S(   N(   t   _writes(   t   self(    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   __init__&   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   append(   R   t   data(    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   write)   s    c         C   s   d j  |  j ƒ S(   Nt    (   t   joinR   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   getvalue,   s    (   t   __name__t
   __module__t   __doc__R   R	   R   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR   #   s   		t   DummyProducerc           B   s>   e  Z e Z e Z e Z d  „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s   | |  _  d  S(   N(   t   consumer(   R   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR   4   s    c         C   s   t  |  _ t |  _ d  S(   N(   t   Truet   resumedt   Falset   paused(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   resumeProducing7   s    	c         C   s   t  |  _ d  S(   N(   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   pauseProducing;   s    c         C   s   t  |  _ d  S(   N(   R   t   stopped(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   stopProducing>   s    (
   R   R   R   R   R   R   R   R   R   R   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR   /   s   			t   DummyConsumerc           B   s5   e  Z d Z e Z e Z d  „  Z d „  Z	 d „  Z
 RS(   c         C   s   | | f |  _  d  S(   N(   t   producer(   R   R   t	   streaming(    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   registerProducerG   s    c         C   s   t  |  _ d  S(   N(   R   t   unregistered(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   unregisterProducerJ   s    c         C   s   t  |  _ d  S(   N(   R   t   finished(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   finishM   s    N(   R   R   t   NoneR   R   R    R   R   R   R   R!   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR   B   s   		t   TransportInterfaceTestc           B   s#   e  Z e j Z d  „  Z d „  Z RS(   c         C   s%   t  ƒ  |  _ |  j |  j ƒ |  _ d  S(   N(   R   t
   underlyingt
   proxyClasst	   transport(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   setUpS   s    c         C   s   |  j  j d ƒ d  S(   Ns
   some bytes(   R&   R	   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt	   testWriteW   s    (   R   R   R   t   BasicProducerConsumerProxyR%   R'   R(   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR#   P   s   		t   ConsumerInterfaceTestc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sõ   Test ProducerConsumerProxy as a Consumer.

    Normally we have ProducingServer -> ConsumingTransport.

    If I am to go between (Server -> Shaper -> Transport), I have to
    play the role of Consumer convincingly for the ProducingServer.
    c         C   s7   t  ƒ  |  _ |  j |  j ƒ |  _ t |  j ƒ |  _ d  S(   N(   R   R$   R%   R   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   c   s    c         C   s-   |  j  j |  j t ƒ |  j |  j j ƒ d  S(   N(   R   R   R   R   t   failIfR   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testRegisterPushh   s    c         C   sS   |  j  j |  j t ƒ |  j  j ƒ  t |  j _ |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R   R   R   R   R   R   R   R+   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testUnregistert   s
    c         C   sS   |  j  j |  j t ƒ |  j  j ƒ  t |  j _ |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R   R   R   R   R!   R   R   R+   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt
   testFinish   s
    (   R   R   R   R'   R,   R-   R.   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR*   Z   s
   			t   ProducerInterfaceTestc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sø   Test ProducerConsumerProxy as a Producer.

    Normally we have ProducingServer -> ConsumingTransport.

    If I am to go between (Server -> Shaper -> Transport), I have to
    play the role of Producer convincingly for the ConsumingTransport.
    c         C   s%   t  ƒ  |  _ |  j |  j ƒ |  _ d  S(   N(   R   R   R%   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   ‘   s    c         C   s!   |  j  |  j j d |  j ƒ d  S(   Ni    (   t   failUnlessEqualR   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testRegistersProducer•   s    c         C   s:   |  j  j ƒ  |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   Ns   yakkity yaks*   Paused producer should not have sent data.(   R   R   R	   R+   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt	   testPause˜   s    c         C   sG   |  j  j ƒ  |  j  j ƒ  |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   Ns   yakkity yak(   R   R   R   R	   R0   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt
   testResumež   s    c         C   s=   |  j  j ƒ  |  j  j ƒ  |  j t |  j j ƒ d d ƒ d  S(   Ni    s    Resume triggered an empty write.(   R   R   R   R0   t   lenR   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testResumeNoEmptyWrite¤   s    c         C   sG   |  j  j ƒ  |  j  j d ƒ |  j  j ƒ  |  j |  j j ƒ  d ƒ d  S(   Ns   buffer this(   R   R   R	   R   R0   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testResumeBufferª   s    c         C   s:   |  j  j ƒ  |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   Ns   yakkity yaks+   Stopped producer should not have sent data.(   R   R   R	   R+   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testStop°   s    (
   R   R   R   R'   R1   R2   R3   R5   R6   R7   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR/   ˆ   s   						t   PCP_ConsumerInterfaceTestc           B   s   e  Z e j Z RS(    (   R   R   R   R)   R%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR8   ·   s   t   PCPII_ConsumerInterfaceTestc           B   s   e  Z e j Z RS(    (   R   R   R   t   ProducerConsumerProxyR%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR9   º   s   t   PCP_ProducerInterfaceTestc           B   s   e  Z e j Z RS(    (   R   R   R   R)   R%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR;   ½   s   t   PCPII_ProducerInterfaceTestc           B   s   e  Z e j Z RS(    (   R   R   R   R:   R%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR<   À   s   t   ProducerProxyTestc           B   s)   e  Z d  Z e j Z d „  Z d „  Z RS(   sF   Producer methods on me should be relayed to the Producer I proxy.
    c         C   s>   |  j  d  ƒ |  _ t |  j ƒ |  _ |  j j |  j t ƒ d  S(   N(   R%   R"   t   proxyR   t   parentProducerR   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   È   s    c         C   s$   |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R>   R   t
   failUnlessR?   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR7   Í   s    (   R   R   R   R   R)   R%   R'   R7   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR=   Ã   s   		t   ConsumerProxyTestc           B   s;   e  Z d  Z e j Z d „  Z d „  Z d „  Z d „  Z	 RS(   sF   Consumer methods on me should be relayed to the Consumer I proxy.
    c         C   s%   t  ƒ  |  _ |  j |  j ƒ |  _ d  S(   N(   R   R$   R%   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   ×   s    c         C   s-   |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   Ns
   some bytes(   R   R	   R0   R$   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR(   Û   s    c         C   s$   |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R   R!   R@   R$   R    (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR.   à   s    c         C   s$   |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R   R   R@   R$   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR-   ä   s    (
   R   R   R   R   R)   R%   R'   R(   R.   R-   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRA   Ò   s   				t   PullProducerTestc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sM   t  ƒ  |  _ |  j |  j ƒ |  _ t |  j ƒ |  _ |  j j |  j t ƒ d  S(   N(   R   R$   R%   R>   R   R?   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   ê   s    c         C   s-   |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   Nt   hellos+   Pulling Consumer got data before it pulled.(   R>   R	   R+   R$   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testHoldWritesð   s    c         C   s:   |  j  j d ƒ |  j  j ƒ  |  j |  j j ƒ  d ƒ d  S(   NRC   (   R>   R	   R   R0   R$   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testPullö   s    c         C   sv   |  j  j d ƒ |  j  j d ƒ |  j  j ƒ  t |  j j ƒ } |  j | d d | f ƒ |  j |  j j ƒ  d ƒ d  S(   Ns   hello t   sunshinei   s(   Pull resulted in %d writes instead of 1.s   hello sunshine(   R>   R	   R   R4   R$   R   R0   R   (   R   t   nwrites(    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testMergeWritesû   s    c         C   s:   |  j  j ƒ  |  j  j d ƒ |  j |  j j ƒ  d ƒ d  S(   NR   (   R>   R   R	   R0   R$   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testLateWrite  s    (   R   R   R'   RD   RE   RH   RI   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRB   é   s
   				
t   PCP_PullProducerTestc           B   s!   e  Z d  e j f d „  ƒ  YZ RS(   R%   c           B   s   e  Z e Z RS(    (   R   R   R   t   iAmStreaming(    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR%     s   (   R   R   R   R)   R%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRJ     s   t   PCPII_PullProducerTestc           B   s!   e  Z d  e j f d „  ƒ  YZ RS(   R%   c           B   s   e  Z e Z RS(    (   R   R   R   RK   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR%     s   (   R   R   R   R:   R%   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRL     s   t   BufferedConsumerTestc           B   sM   e  Z d  Z e j Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   s=   As a consumer, ask the producer to pause after too much data.c         C   sY   t  ƒ  |  _ |  j |  j ƒ |  _ d |  j _ t |  j ƒ |  _ |  j j |  j t ƒ d  S(   Nid   (	   R   R$   R%   R>   t
   bufferSizeR   R?   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'     s
    c         C   s-   |  j  j |  j t ƒ |  j |  j j ƒ d  S(   N(   R>   R   R?   R   R@   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testRegisterPull#  s    c         C   s$   |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R>   R   R+   R?   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testPauseIntercept(  s    c         C   s1   |  j  j ƒ  |  j  j ƒ  |  j |  j j ƒ d  S(   N(   R>   R   R   R+   R?   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testResumeIntercept,  s    c         C   sx   |  j  j ƒ  |  j |  j j d ƒ |  j  j d d ƒ |  j |  j j d ƒ |  j  j d d ƒ |  j |  j j ƒ d S(   s   Make sure I say "when."s   don't pause yett   xi3   N(   R>   R   R+   R?   R   R	   R@   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testTriggerPause4  s    c         C   sq   |  j  j ƒ  |  j  j d d ƒ |  j |  j j d ƒ |  j  j ƒ  |  j |  j j d ƒ |  j |  j  j ƒ d S(   s3   Make sure I resumeProducing when my buffer empties.RR   if   s   should be pauseds   Producer should have resumed.N(	   R>   R   R	   R@   R?   R   R   R+   t   producerPaused(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testTriggerResume?  s    (   R   R   R   R   R:   R%   R'   RO   RP   RQ   RS   RU   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRM     s   						t   BufferedPullTestsc           B   s<   e  Z d  e j f d „  ƒ  YZ d „  Z d „  Z d „  Z RS(   R%   c           B   s   e  Z e Z d  „  Z RS(   c         C   s*   t  j j |  | d  ƒ t t | ƒ d ƒ S(   Nid   (   R   R:   t   _writeSomeDatat   minR4   (   R   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRW   O  s    (   R   R   R   RK   RW   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR%   L  s   c         C   sY   t  ƒ  |  _ |  j |  j ƒ |  _ d |  j _ t |  j ƒ |  _ |  j j |  j t ƒ d  S(   Nid   (	   R   R$   R%   R>   RN   R   R?   R   R   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyR'   S  s
    c         C   s0   t  |  j _ |  j j ƒ  |  j |  j j ƒ d  S(   N(   R   R?   R   R>   R   R@   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testResumePull[  s    c         C   s[   |  j  j ƒ  |  j  j d d ƒ |  j |  j j ƒ  d d ƒ |  j |  j  j d g ƒ d  S(   Nt   datumi   i   (   R>   R   R	   R0   R$   R   t   _buffer(   R   (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   testLateWriteBufferingb  s    (   R   R   R   R:   R%   R'   RY   R\   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyRV   K  s   		N(    (    (    (    (    (   t   __version__R    t   twisted.trialR   t   twisted.protocolsR   R   R   R   t   TestCaseR#   R*   R/   R8   R9   R;   R<   R=   RA   RB   RJ   RL   RM   RV   (    (    (    s9   /usr/lib/python2.7/dist-packages/twisted/test/test_pcp.pyt   <module>   s(   
./#5