
    Vh0                     z   d dd Z ddlmZ ddlmZ  G d d      Z G d d	      Z G d
 de      Z G d dej                        Z	 G d d      Z
 G d d      Z G d de
ej                        Z G d de
ej                        Z G d deej                        Z G d deej                        Z G d dej                        Z G d dej                        Z G d d      Z G d  d!eej                        Z G d" d#eej                        Z G d$ d%ej                        Z G d& d'ej                        Zy())z$Revision: 1.5 $       )pcp)unittestc                   "    e Zd ZdZd Zd Zd Zy)DummyTransportz A dumb transport to wrap around.c                     g | _         y N)_writesselfs    E/home/dcms/DCMS/lib/python3.12/site-packages/twisted/test/test_pcp.py__init__zDummyTransport.__init__%   s	        c                 :    | j                   j                  |       y r
   )r   appendr   datas     r   writezDummyTransport.write(   s    D!r   c                 8    dj                  | j                        S )N )joinr   r   s    r   getvaluezDummyTransport.getvalue+   s    wwt||$$r   N)__name__
__module____qualname____doc__r   r   r    r   r   r   r   "   s    *"%r   r   c                   0    e Zd ZdZdZdZd Zd Zd Zd Z	y)DummyProducerFc                     || _         y r
   )consumer)r   r"   s     r   r   zDummyProducer.__init__4   s	     r   c                      d| _         d| _        y )NTF)resumedpausedr   s    r   resumeProducingzDummyProducer.resumeProducing7   s    r   c                     d| _         y NT)r%   r   s    r   pauseProducingzDummyProducer.pauseProducing;   s	    r   c                     d| _         y r(   )stoppedr   s    r   stopProducingzDummyProducer.stopProducing>   s	    r   N)
r   r   r   r$   r+   r%   r   r&   r)   r,   r   r   r   r    r    /   s%    GGF!r   r    c                   *    e Zd ZdZdZdZd Zd Zd Zy)DummyConsumerNFTc                     ||f| _         y r
   )producer)r   r0   	streamings      r   registerProducerzDummyConsumer.registerProducerG   s    !9-r   c                     d| _         y r(   )unregisteredr   s    r   unregisterProducerz DummyConsumer.unregisterProducerJ   s
     r   c                     d| _         y r(   )finishedr   s    r   finishzDummyConsumer.finishM   s	    r   )	r   r   r   r0   r7   r4   r2   r5   r8   r   r   r   r.   r.   B   s     HHL.!r   r.   c                   0    e Zd Zej                  Zd Zd Zy)TransportInterfaceTestsc                 b    t               | _        | j                  | j                        | _        y r
   )r.   
underlying
proxyClass	transportr   s    r   setUpzTransportInterfaceTests.setUpT   s    '/9r   c                 :    | j                   j                  d       y Nz
some bytes)r>   r   r   s    r   	testWritez!TransportInterfaceTests.testWriteX   s    \*r   N)r   r   r   r   BasicProducerConsumerProxyr=   r?   rB   r   r   r   r:   r:   Q   s    //J:+r   r:   c                   (    e Zd ZdZd Zd Zd Zd Zy)ConsumerInterfaceTestzTest 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                     t               | _        | j                  | j                        | _        t	        | j                        | _        y r
   )r.   r<   r=   r"   r    r0   r   s    r   r?   zConsumerInterfaceTest.setUpe   s/    '/8%dmm4r   c                     | j                   j                  | j                  d       | j                  | j                  j                         y r(   )r"   r2   r0   assertFalser$   r   s    r   testRegisterPushz&ConsumerInterfaceTest.testRegisterPushj   s2    &&t}}d;../r   c                 $   | j                   j                  | j                  d       | j                   j                          d| j                  _        | j                   j                          | j                  | j                  j                         y NF)r"   r2   r0   r5   r$   r&   rH   r   s    r   testUnregisterz$ConsumerInterfaceTest.testUnregisterv   s`    &&t}}e<((*
 !&%%'../r   c                 $   | j                   j                  | j                  d       | j                   j                          d| j                  _        | j                   j                          | j                  | j                  j                         y rK   )r"   r2   r0   r8   r$   r&   rH   r   s    r   
testFinishz ConsumerInterfaceTest.testFinish   s^    &&t}}e< %%%'../r   N)r   r   r   r   r?   rI   rL   rN   r   r   r   rE   rE   \   s    5
0	00r   rE   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
ProducerInterfaceTestzTest 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                 b    t               | _        | j                  | j                        | _        y r
   )r.   r"   r=   r0   r   s    r   r?   zProducerInterfaceTest.setUp   s    %6r   c                 j    | j                  | j                  j                  d   | j                         y )Nr   )assertEqualr"   r0   r   s    r   testRegistersProducerz+ProducerInterfaceTest.testRegistersProducer   s%    //2DMMBr   c                     | j                   j                          | j                   j                  d       | j                  | j                  j                         d       y )Nyakkity yakz*Paused producer should not have sent data.)r0   r)   r   rH   r"   r   r   s    r   	testPausezProducerInterfaceTest.testPause   sE    $$&M*MM""$&R	
r   c                     | j                   j                          | j                   j                          | j                   j                  d       | j	                  | j
                  j                         d       y )NrV   )r0   r)   r&   r   rS   r"   r   r   s    r   
testResumez ProducerInterfaceTest.testResume   sQ    $$&%%'M*//1=Ar   c                     | j                   j                          | j                   j                          | j                  t	        | j
                  j                        dd       y )Nr   z Resume triggered an empty write.)r0   r)   r&   rS   lenr"   r   r   s    r   testResumeNoEmptyWritez,ProducerInterfaceTest.testResumeNoEmptyWrite   sG    $$&%%'%%&+M	
r   c                     | j                   j                          | j                   j                  d       | j                   j                          | j	                  | j
                  j                         d       y )Nzbuffer this)r0   r)   r   r&   rS   r"   r   r   s    r   testResumeBufferz&ProducerInterfaceTest.testResumeBuffer   sQ    $$&M*%%'//1=Ar   c                     | j                   j                          | j                   j                  d       | j                  | j                  j                         d       y )NrV   z+Stopped producer should not have sent data.)r0   r,   r   rH   r"   r   r   s    r   testStopzProducerInterfaceTest.testStop   sE    ##%M*MM""$&S	
r   N)r   r   r   r   r?   rT   rW   rY   r\   r^   r`   r   r   r   rP   rP      s-    7C
B
B
r   rP   c                   $    e Zd Zej                  Zy)PCP_ConsumerInterfaceTestsNr   r   r   r   rC   r=   r   r   r   rb   rb          //Jr   rb   c                   $    e Zd Zej                  Zy)PCPII_ConsumerInterfaceTestsNr   r   r   r   ProducerConsumerProxyr=   r   r   r   rf   rf          **Jr   rf   c                   $    e Zd Zej                  Zy)PCP_ProducerInterfaceTestsNrc   r   r   r   rk   rk      rd   r   rk   c                   $    e Zd Zej                  Zy)PCPII_ProducerInterfaceTestsNrg   r   r   r   rm   rm      ri   r   rm   c                   4    e Zd ZdZej
                  Zd Zd Zy)ProducerProxyTestszAProducer methods on me should be relayed to the Producer I proxy.c                     | j                  d       | _        t        | j                        | _        | j                  j	                  | j                  d       y r(   )r=   proxyr    parentProducerr2   r   s    r   r?   zProducerProxyTests.setUp   s=    __T*
+DJJ7

##D$7$7>r   c                     | j                   j                          | j                  | j                  j                         y r
   )rq   r,   
assertTruerr   r+   r   s    r   r`   zProducerProxyTests.testStop   s*    

  "++334r   N)	r   r   r   r   r   rC   r=   r?   r`   r   r   r   ro   ro      s    K//J?
5r   ro   c                   @    e Zd ZdZej
                  Zd Zd Zd Z	d Z
y)ConsumerProxyTestszAConsumer methods on me should be relayed to the Consumer I proxy.c                 b    t               | _        | j                  | j                        | _        y r
   )r.   r<   r=   r"   r   s    r   r?   zConsumerProxyTests.setUp   s    '/8r   c                     | j                   j                  d       | j                  | j                  j	                         d       y rA   )r"   r   rS   r<   r   r   s    r   rB   zConsumerProxyTests.testWrite   s1    L)113\Br   c                     | j                   j                          | j                  | j                  j                         y r
   )r"   r8   rt   r<   r7   r   s    r   rN   zConsumerProxyTests.testFinish   s(    001r   c                     | j                   j                          | j                  | j                  j                         y r
   )r"   r5   rt   r<   r4   r   s    r   rL   z!ConsumerProxyTests.testUnregister   s(    ((*445r   N)r   r   r   r   r   rC   r=   r?   rB   rN   rL   r   r   r   rv   rv      s%    K//J9C
26r   rv   c                   *    e Zd Zd Zd Zd Zd Zd Zy)PullProducerTestc                     t               | _        | j                  | j                        | _        t	        | j                        | _        | j                  j                  | j
                  d       y r(   )r.   r<   r=   rq   r    rr   r2   r   s    r   r?   zPullProducerTest.setUp   sJ    '/__T__5
+DJJ7

##D$7$7>r   c                     | j                   j                  d       | j                  | j                  j	                         d       y )Nhelloz+Pulling Consumer got data before it pulled.)rq   r   rH   r<   r   r   s    r   testHoldWriteszPullProducerTest.testHoldWrites   s5    

!OO$$&(U	
r   c                     | j                   j                  d       | j                   j                          | j                  | j                  j                         d       y )Nr   )rq   r   r&   rS   r<   r   r   s    r   testPullzPullProducerTest.testPull   sA    

!

""$113W=r   c                 d   | j                   j                  d       | j                   j                  d       | j                   j                          t        | j                  j
                        }| j                  |dd|fz         | j                  | j                  j                         d       y )Nzhello sunshine   z(Pull resulted in %d writes instead of 1.zhello sunshine)rq   r   r&   r[   r<   r   rS   r   )r   nwritess     r   testMergeWritesz PullProducerTest.testMergeWrites  s    

"

$

""$doo--.QE
R	
 	1135EFr   c                     | j                   j                          | j                   j                  d       | j                  | j                  j                         d       y )Nr   )rq   r&   r   rS   r<   r   r   s    r   testLateWritezPullProducerTest.testLateWrite  sA    

""$

 113V<r   N)r   r   r   r?   r   r   r   r   r   r   r   r|   r|      s    ?
>
G=r   r|   c                   6    e Zd Z G d dej                        Zy)PCP_PullProducerTestsc                       e Zd ZdZy) PCP_PullProducerTests.proxyClassFNr   r   r   iAmStreamingr   r   r   r=   r         r   r=   Nrc   r   r   r   r   r     s    S33 r   r   c                   6    e Zd Z G d dej                        Zy)PCPII_PullProducerTestsc                       e Zd ZdZy)"PCPII_PullProducerTests.proxyClassFNr   r   r   r   r=   r     r   r   r=   Nrg   r   r   r   r   r     s    S.. r   r   c                   L    e Zd ZdZej
                  Zd Zd Zd Z	d Z
d Zd Zy)	BufferedConsumerTestsz=As a consumer, ask the producer to pause after too much data.c                    t               | _        | j                  | j                        | _        d| j                  _        t        | j                        | _        | j                  j                  | j                  d       y )Nd   Tr.   r<   r=   rq   
bufferSizer    rr   r2   r   s    r   r?   zBufferedConsumerTests.setUp)  sV    '/__T__5
 #

+DJJ7

##D$7$7>r   c                     | j                   j                  | j                  d       | j                  | j                  j                         y rK   )rq   r2   rr   rt   r$   r   s    r   testRegisterPullz&BufferedConsumerTests.testRegisterPull1  s4    

##D$7$7?++334r   c                     | j                   j                          | j                  | j                  j                         y r
   )rq   r)   rH   rr   r%   r   s    r   testPauseInterceptz(BufferedConsumerTests.testPauseIntercept6  s,    

!!#,,334r   c                     | j                   j                          | j                   j                          | j                  | j                  j
                         y r
   )rq   r)   r&   rH   rr   r$   r   s    r   testResumeInterceptz)BufferedConsumerTests.testResumeIntercept:  s>    

!!#

""$ 	,,445r   c                    | j                   j                          | j                  | j                  j                  d       | j                   j                  d       | j                  | j                  j                  d       | j                   j                  d       | j                  | j                  j                         y)zMake sure I say "when." zdon't pause yet3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxN)rq   r)   rH   rr   r%   r   rt   r   s    r   testTriggerPausez&BufferedConsumerTests.testTriggerPauseB  s     	

!!#,,335FG

",,335FG

"++223r   c                    | j                   j                          | j                   j                  d       | j                  | j                  j
                  d       | j                   j                          | j                  | j                  j
                  d       | j                  | j                   j                         y)z3Make sure I resumeProducing when my buffer empties.fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzshould be pausedzProducer should have resumed.N)	rq   r)   r   rt   rr   r%   r&   rH   producerPausedr   s    r   testTriggerResumez'BufferedConsumerTests.testTriggerResumeM  s    

!!#

#++224FG

""$ 	,,335TU223r   N)r   r   r   r   r   rh   r=   r?   r   r   r   r   r   r   r   r   r   r   $  s.    G**J?5
56	4	4r   r   c                   H    e Zd Z G d dej                        Zd Zd Zd Zy)BufferedPullTestsc                       e Zd ZdZd Zy)BufferedPullTests.proxyClassFc                 r    t         j                  j                  | |d d        t        t	        |      d      S )Nr   )r   rh   _writeSomeDataminr[   r   s     r   r   z+BufferedPullTests.proxyClass._writeSomeData]  s/    %%44T4:Fs4y#&&r   N)r   r   r   r   r   r   r   r   r=   r   Z  s    	'r   r=   c                    t               | _        | j                  | j                        | _        d| j                  _        t        | j                        | _        | j                  j                  | j                  d       y )Nr   Fr   r   s    r   r?   zBufferedPullTests.setUpa  sV    '/__T__5
 #

+DJJ7

##D$7$7?r   c                     d| j                   _        | j                  j                          | j	                  | j                   j                         y rK   )rr   r$   rq   r&   rt   r   s    r   testResumePullz BufferedPullTests.testResumePulli  s:     ',#

""$++334r   c                    | j                   j                          | j                   j                  d       | j                  | j                  j                         d       | j                  | j                   j                  dg       y )Nidatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumddatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatum)rq   r&   r   rS   r<   r   _bufferr   s    r   testLateWriteBufferingz(BufferedPullTests.testLateWriteBufferingp  s]    

""$

&113\B++gY7r   N)	r   r   r   r   rh   r=   r?   r   r   r   r   r   r   r   Y  s$    'S.. '@58r   r   N)__version__twisted.protocolsr   twisted.trialr   r   r    r.   TestCaser:   rE   rP   rb   rf   rk   rm   ro   rv   r|   r   r   r   r   r   r   r   <module>r      s3   !B' ! "2
% 
% &N +h// ++0 +0\/
 /
d0!68I8I 0+#8(:K:K +0!68I8I 0+#8(:K:K +5** 56** 6."= "=J,h.?.? 
.0A0A 24H-- 24j8)) 8r   