
    \d0                     ~   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d(S ))z$Revision: 1.5 $       )pcp)unittestc                   $    e Zd ZdZd Zd Zd ZdS )DummyTransportz A dumb transport to wrap around.c                     g | _         d S N)_writesselfs    5lib/python3.11/site-packages/twisted/test/test_pcp.py__init__zDummyTransport.__init__%   s        c                 :    | j                             |           d S r
   )r   appendr   datas     r   writezDummyTransport.write(   s    D!!!!!r   c                 6    d                     | 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   "   sG        **  " " "% % % % %r   r   c                   2    e Zd ZdZdZdZd Zd Zd Zd Z	dS )DummyProducerFc                     || _         d S r
   )consumer)r   r"   s     r   r   zDummyProducer.__init__4   s     r   c                 "    d| _         d| _        d S )NTF)resumedpausedr   s    r   resumeProducingzDummyProducer.resumeProducing7   s    r   c                     d| _         d S NT)r%   r   s    r   pauseProducingzDummyProducer.pauseProducing;   s    r   c                     d| _         d S 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dS )DummyConsumerNFTc                     ||f| _         d S r
   )producer)r   r0   	streamings      r   registerProducerzDummyConsumer.registerProducerG   s    !9-r   c                     d| _         d S r(   )unregisteredr   s    r   unregisterProducerz DummyConsumer.unregisterProducerJ   s     r   c                     d| _         d S r(   )finishedr   s    r   finishzDummyConsumer.finishM   s    r   )	r   r   r   r0   r7   r4   r2   r5   r8   r   r   r   r.   r.   B   sP        HHL. . .! ! !    r   r.   c                   (    e Zd Zej        Zd Zd ZdS )TransportInterfaceTestsc                 j    t                      | _        |                     | j                  | _        d S r
   )r.   
underlying
proxyClass	transportr   s    r   setUpzTransportInterfaceTests.setUpT   s&    '//99r   c                 :    | j                             d           d S 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dS )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                  | _        t	          | j                  | _        d S r
   )r.   r<   r=   r"   r    r0   r   s    r   r?   zConsumerInterfaceTest.setUpe   s7    '//88%dm44r   c                     | j                             | j        d           |                     | j        j                   d S r(   )r"   r2   r0   assertFalser$   r   s    r   testRegisterPushz&ConsumerInterfaceTest.testRegisterPushj   s;    &&t}d;;;./////r   c                     | j                             | j        d           | j                                          d| j        _        | j                                          |                     | j        j                   d S NF)r"   r2   r0   r5   r$   r&   rH   r   s    r   testUnregisterz$ConsumerInterfaceTest.testUnregisterv   so    &&t}e<<<((***
 !&%%'''./////r   c                     | j                             | j        d           | j                                          d| j        _        | j                                          |                     | j        j                   d S rK   )r"   r2   r0   r8   r$   r&   rH   r   s    r   
testFinishz ConsumerInterfaceTest.testFinish   sm    &&t}e<<< %%%'''./////r   N)r   r   r   r   r?   rI   rL   rN   r   r   r   rE   rE   \   sZ         5 5 5
0 0 0	0 	0 	00 0 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
d	S )
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                 j    t                      | _        |                     | j                  | _        d S r
   )r.   r"   r=   r0   r   s    r   r?   zProducerInterfaceTest.setUp   s&    %66r   c                 \    |                      | j        j        d         | j                   d S )Nr   )assertEqualr"   r0   r   s    r   testRegistersProducerz+ProducerInterfaceTest.testRegistersProducer   s*    /2DMBBBBBr   c                     | j                                          | j                             d           |                     | j                                        d           d S )Nyakkity yakz*Paused producer should not have sent data.)r0   r)   r   rH   r"   r   r   s    r   	testPausezProducerInterfaceTest.testPause   sb    $$&&&M***M""$$&R	
 	
 	
 	
 	
r   c                     | j                                          | j                                          | j                             d           |                     | j                                        d           d S )NrV   )r0   r)   r&   r   rS   r"   r   r   s    r   
testResumez ProducerInterfaceTest.testResume   sj    $$&&&%%'''M***//11=AAAAAr   c                     | j                                          | j                                          |                     t	          | j        j                  dd           d S )Nr   z Resume triggered an empty write.)r0   r)   r&   rS   lenr"   r   r   s    r   testResumeNoEmptyWritez,ProducerInterfaceTest.testResumeNoEmptyWrite   sa    $$&&&%%'''%&&+M	
 	
 	
 	
 	
r   c                     | j                                          | j                             d           | j                                          |                     | j                                        d           d S )Nzbuffer this)r0   r)   r   r&   rS   r"   r   r   s    r   testResumeBufferz&ProducerInterfaceTest.testResumeBuffer   sj    $$&&&M***%%'''//11=AAAAAr   c                     | j                                          | j                             d           |                     | j                                        d           d S )NrV   z+Stopped producer should not have sent data.)r0   r,   r   rH   r"   r   r   s    r   testStopzProducerInterfaceTest.testStop   sb    ##%%%M***M""$$&S	
 	
 	
 	
 	
r   N)r   r   r   r   r?   rT   rW   rY   r\   r^   r`   r   r   r   rP   rP      s         7 7 7C C C
 
 
B B B
 
 
B B B
 
 
 
 
r   rP   c                       e Zd Zej        ZdS )PCP_ConsumerInterfaceTestsNr   r   r   r   rC   r=   r   r   r   rb   rb              /JJJr   rb   c                       e Zd Zej        ZdS )PCPII_ConsumerInterfaceTestsNr   r   r   r   ProducerConsumerProxyr=   r   r   r   rf   rf              *JJJr   rf   c                       e Zd Zej        ZdS )PCP_ProducerInterfaceTestsNrc   r   r   r   rk   rk      rd   r   rk   c                       e Zd Zej        ZdS )PCPII_ProducerInterfaceTestsNrg   r   r   r   rm   rm      ri   r   rm   c                   ,    e Zd ZdZej        Zd Zd ZdS )ProducerProxyTestszAProducer methods on me should be relayed to the Producer I proxy.c                     |                      d           | _        t          | j                  | _        | j                            | j        d           d S r(   )r=   proxyr    parentProducerr2   r   s    r   r?   zProducerProxyTests.setUp   sH    __T**
+DJ77
##D$7>>>>>r   c                 v    | j                                          |                     | j        j                   d S r
   )rq   r,   
assertTruerr   r+   r   s    r   r`   zProducerProxyTests.testStop   s4    
  """+344444r   N)	r   r   r   r   r   rC   r=   r?   r`   r   r   r   ro   ro      s@        KK/J? ? ?
5 5 5 5 5r   ro   c                   8    e Zd ZdZej        Zd Zd Zd Z	d Z
dS )ConsumerProxyTestszAConsumer methods on me should be relayed to the Consumer I proxy.c                 j    t                      | _        |                     | j                  | _        d S r
   )r.   r<   r=   r"   r   s    r   r?   zConsumerProxyTests.setUp   s&    '//88r   c                     | j                             d           |                     | j                                        d           d S rA   )r"   r   rS   r<   r   r   s    r   rB   zConsumerProxyTests.testWrite   sB    L)))1133\BBBBBr   c                 v    | j                                          |                     | j        j                   d S r
   )r"   r8   rt   r<   r7   r   s    r   rN   zConsumerProxyTests.testFinish   s3    011111r   c                 v    | j                                          |                     | j        j                   d S r
   )r"   r5   rt   r<   r4   r   s    r   rL   z!ConsumerProxyTests.testUnregister   s3    ((***455555r   N)r   r   r   r   r   rC   r=   r?   rB   rN   rL   r   r   r   rv   rv      sa        KK/J9 9 9C C C
2 2 26 6 6 6 6r   rv   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )PullProducerTestc                     t                      | _        |                     | j                  | _        t	          | j                  | _        | j                            | j        d           d S r(   )r.   r<   r=   rq   r    rr   r2   r   s    r   r?   zPullProducerTest.setUp   sU    '//__T_55
+DJ77
##D$7>>>>>r   c                     | j                             d           |                     | j                                        d           d S )Nhelloz+Pulling Consumer got data before it pulled.)rq   r   rH   r<   r   r   s    r   testHoldWriteszPullProducerTest.testHoldWrites   sN    
!!!O$$&&(U	
 	
 	
 	
 	
r   c                     | j                             d           | j                                          |                     | j                                        d           d S )Nr   )rq   r   r&   rS   r<   r   r   s    r   testPullzPullProducerTest.testPull   sV    
!!!
""$$$1133W=====r   c                 b   | j                             d           | j                             d           | j                                          t          | j        j                  }|                     |dd|fz             |                     | j                                        d           d S )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    
"""
$$$
""$$$do-..QE
R	
 	
 	
 	11335EFFFFFr   c                     | j                                          | j                             d           |                     | j                                        d           d S )Nr   )rq   r&   r   rS   r<   r   r   s    r   testLateWritezPullProducerTest.testLateWrite  sV    
""$$$
   1133V<<<<<r   N)r   r   r   r?   r   r   r   r   r   r   r   r|   r|      sb        ? ? ?
 
 
> > >
G G G= = = = =r   r|   c                   4    e Zd Z G d dej                  ZdS )PCP_PullProducerTestsc                       e Zd ZdZdS ) PCP_PullProducerTests.proxyClassFNr   r   r   iAmStreamingr   r   r   r=   r             r   r=   Nrc   r   r   r   r   r     sA            S3     r   r   c                   4    e Zd Z G d dej                  ZdS )PCPII_PullProducerTestsc                       e Zd ZdZdS )"PCPII_PullProducerTests.proxyClassFNr   r   r   r   r=   r     r   r   r=   Nrg   r   r   r   r   r     sA            S.     r   r   c                   D    e Zd ZdZej        Zd Zd Zd Z	d Z
d Zd ZdS )	BufferedConsumerTestsz=As a consumer, ask the producer to pause after too much data.c                     t                      | _        |                     | j                  | _        d| j        _        t          | j                  | _        | j                            | j        d           d S )Nd   Tr.   r<   r=   rq   
bufferSizer    rr   r2   r   s    r   r?   zBufferedConsumerTests.setUp)  s_    '//__T_55
 #
+DJ77
##D$7>>>>>r   c                     | j                             | j        d           |                     | j        j                   d S rK   )rq   r2   rr   rt   r$   r   s    r   testRegisterPullz&BufferedConsumerTests.testRegisterPull1  s;    
##D$7???+344444r   c                 v    | j                                          |                     | j        j                   d S r
   )rq   r)   rH   rr   r%   r   s    r   testPauseInterceptz(BufferedConsumerTests.testPauseIntercept6  s6    
!!###,344444r   c                     | j                                          | j                                          |                     | j        j                   d S r
   )rq   r)   r&   rH   rr   r$   r   s    r   testResumeInterceptz)BufferedConsumerTests.testResumeIntercept:  sL    
!!###
""$$$ 	,455555r   c                 ^   | j                                          |                     | j        j        d           | j                             d           |                     | j        j        d           | j                             d           |                     | j        j                   dS )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     	
!!###,35FGGG
""",35FGGG
"""+233333r   c                 \   | j                                          | j                             d           |                     | j        j        d           | j                                          |                     | j        j        d           |                     | j         j                   dS )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    
!!###
###+24FGGG
""$$$ 	,35TUUU233333r   N)r   r   r   r   r   rh   r=   r?   r   r   r   r   r   r   r   r   r   r   $  s|        GG*J? ? ?5 5 5
5 5 56 6 6	4 	4 	4	4 	4 	4 	4 	4r   r   c                   F    e Zd Z G d dej                  Zd Zd Zd ZdS )BufferedPullTestsc                       e Zd ZdZd ZdS )BufferedPullTests.proxyClassFc                     t           j                            | |d d                    t          t	          |          d          S )Nr   )r   rh   _writeSomeDataminr[   r   s     r   r   z+BufferedPullTests.proxyClass._writeSomeData]  s9    %44T4:FFFs4yy#&&&r   N)r   r   r   r   r   r   r   r   r=   r   Z  s(        	' 	' 	' 	' 	'r   r=   c                     t                      | _        |                     | j                  | _        d| j        _        t          | j                  | _        | j                            | j        d           d S )Nr   Fr   r   s    r   r?   zBufferedPullTests.setUpa  s_    '//__T_55
 #
+DJ77
##D$7?????r   c                     d| j         _        | j                                         |                     | j         j                   d S rK   )rr   r$   rq   r&   rt   r   s    r   testResumePullz BufferedPullTests.testResumePulli  sA     ',#
""$$$+344444r   c                    | j                                          | j                             d           |                     | j                                        d           |                     | j         j        dg           d S )Nidatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumddatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatum)rq   r&   r   rS   r<   r   _bufferr   s    r   testLateWriteBufferingz(BufferedPullTests.testLateWriteBufferingp  ss    
""$$$
&&&1133\BBB+gY77777r   N)	r   r   r   r   rh   r=   r?   r   r   r   r   r   r   r   Y  sq        ' ' ' ' 'S. ' ' '@ @ @5 5 58 8 8 8 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      s:   !B' ! ! ! ! ! ! " " " " " "2
% 
% 
% 
% 
% 
% 
% 
%       &    N   + + + + +h/ + + ++0 +0 +0 +0 +0 +0 +0 +0\/
 /
 /
 /
 /
 /
 /
 /
d0 0 0 0 0!68I 0 0 0+ + + + +#8(:K + + +0 0 0 0 0!68I 0 0 0+ + + + +#8(:K + + +5 5 5 5 5* 5 5 56 6 6 6 6* 6 6 6."= "= "= "= "= "= "= "=J    ,h.?   
    .0A   24 24 24 24 24H- 24 24 24j8 8 8 8 8) 8 8 8 8 8r   