o
    ¯bð0  ã                   @   sP  d dd… Z ddlmZ ddlmZ G dd„ dƒZG dd	„ d	ƒZG d
d„ deƒZG dd„ dejƒZ	G dd„ dƒZ
G dd„ dƒZG dd„ de
ejƒZG dd„ de
ejƒZG dd„ deejƒZG dd„ deejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dƒZG d d!„ d!eejƒZG d"d#„ d#eejƒZG d$d%„ d%ejƒZG d&d'„ d'ejƒZd(S ))z$Revision: 1.5 $é   éþÿÿÿé    )Úpcp)Úunittestc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚDummyTransportz A dumb transport to wrap around.c                 C   s
   g | _ d S ©N)Ú_writes©Úself© r   ú7/usr/lib/python3/dist-packages/twisted/test/test_pcp.pyÚ__init__%   ó   
zDummyTransport.__init__c                 C   s   | j  |¡ d S r   )r   Úappend©r
   Údatar   r   r   Úwrite(   ó   zDummyTransport.writec                 C   s   d  | j¡S )NÚ )Újoinr   r	   r   r   r   Úgetvalue+   s   zDummyTransport.getvalueN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   "   s
    r   c                   @   s8   e Zd ZdZdZdZdd„ Zdd„ Zdd„ Zdd	„ Z	d
S )ÚDummyProducerFc                 C   s
   || _ d S r   )Úconsumer)r
   r   r   r   r   r   4   r   zDummyProducer.__init__c                 C   s   d| _ d| _d S )NTF)ÚresumedÚpausedr	   r   r   r   ÚresumeProducing7   s   
zDummyProducer.resumeProducingc                 C   ó
   d| _ d S ©NT)r   r	   r   r   r   ÚpauseProducing;   r   zDummyProducer.pauseProducingc                 C   r    r!   )Ústoppedr	   r   r   r   ÚstopProducing>   r   zDummyProducer.stopProducingN)
r   r   r   r   r#   r   r   r   r"   r$   r   r   r   r   r   /   s    r   c                   @   s0   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ ZdS )
ÚDummyConsumerNFTc                 C   s   ||f| _ d S r   )Úproducer)r
   r&   Ú	streamingr   r   r   ÚregisterProducerG   s   zDummyConsumer.registerProducerc                 C   r    r!   )Úunregisteredr	   r   r   r   ÚunregisterProducerJ   r   z DummyConsumer.unregisterProducerc                 C   r    r!   )Úfinishedr	   r   r   r   ÚfinishM   r   zDummyConsumer.finish)	r   r   r   r&   r+   r)   r(   r*   r,   r   r   r   r   r%   B   s    r%   c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚTransportInterfaceTestsc                 C   ó   t ƒ | _|  | j¡| _d S r   )r%   Ú
underlyingÚ
proxyClassÚ	transportr	   r   r   r   ÚsetUpT   ó   zTransportInterfaceTests.setUpc                 C   s   | j  d¡ d S ©Nz
some bytes)r1   r   r	   r   r   r   Ú	testWriteX   r   z!TransportInterfaceTests.testWriteN)r   r   r   r   ÚBasicProducerConsumerProxyr0   r2   r5   r   r   r   r   r-   Q   s    r-   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚConsumerInterfaceTestzõ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   s&   t ƒ | _|  | j¡| _t| jƒ| _d S r   )r%   r/   r0   r   r   r&   r	   r   r   r   r2   e   s   zConsumerInterfaceTest.setUpc                 C   ó"   | j  | jd¡ |  | jj¡ d S r!   )r   r(   r&   ÚassertFalser   r	   r   r   r   ÚtestRegisterPushj   ó   z&ConsumerInterfaceTest.testRegisterPushc                 C   ó>   | j  | jd¡ | j  ¡  d| j_| j  ¡  |  | jj¡ d S ©NF)r   r(   r&   r*   r   r   r9   r	   r   r   r   ÚtestUnregisterv   s
   

z$ConsumerInterfaceTest.testUnregisterc                 C   r<   r=   )r   r(   r&   r,   r   r   r9   r	   r   r   r   Ú
testFinish   s
   

z ConsumerInterfaceTest.testFinishN)r   r   r   r   r2   r:   r>   r?   r   r   r   r   r7   \   s    r7   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚProducerInterfaceTestzø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   r.   r   )r%   r   r0   r&   r	   r   r   r   r2   “   r3   zProducerInterfaceTest.setUpc                 C   s   |   | jjd | j¡ d S )Nr   )ÚassertEqualr   r&   r	   r   r   r   ÚtestRegistersProducer—   s   z+ProducerInterfaceTest.testRegistersProducerc                 C   ó,   | j  ¡  | j  d¡ |  | j ¡ d¡ d S )Núyakkity yakz*Paused producer should not have sent data.)r&   r"   r   r9   r   r   r	   r   r   r   Ú	testPauseš   ó
   

ÿzProducerInterfaceTest.testPausec                 C   s6   | j  ¡  | j  ¡  | j  d¡ |  | j ¡ d¡ d S )NrD   )r&   r"   r   r   rA   r   r   r	   r   r   r   Ú
testResume¡   s   

z ProducerInterfaceTest.testResumec                 C   s.   | j  ¡  | j  ¡  |  t| jjƒdd¡ d S )Nr   z Resume triggered an empty write.)r&   r"   r   rA   Úlenr   r   r	   r   r   r   ÚtestResumeNoEmptyWrite§   s
   

ÿz,ProducerInterfaceTest.testResumeNoEmptyWritec                 C   s6   | j  ¡  | j  d¡ | j  ¡  |  | j ¡ d¡ d S )Nzbuffer this)r&   r"   r   r   rA   r   r   r	   r   r   r   ÚtestResumeBuffer®   s   

z&ProducerInterfaceTest.testResumeBufferc                 C   rC   )NrD   z+Stopped producer should not have sent data.)r&   r$   r   r9   r   r   r	   r   r   r   ÚtestStop´   rF   zProducerInterfaceTest.testStopN)r   r   r   r   r2   rB   rE   rG   rI   rJ   rK   r   r   r   r   r@   Š   s    r@   c                   @   ó   e Zd ZejZdS )ÚPCP_ConsumerInterfaceTestsN©r   r   r   r   r6   r0   r   r   r   r   rM   ¼   ó    
rM   c                   @   rL   )ÚPCPII_ConsumerInterfaceTestsN©r   r   r   r   ÚProducerConsumerProxyr0   r   r   r   r   rP   À   rO   rP   c                   @   rL   )ÚPCP_ProducerInterfaceTestsNrN   r   r   r   r   rS   Ä   rO   rS   c                   @   rL   )ÚPCPII_ProducerInterfaceTestsNrQ   r   r   r   r   rT   È   rO   rT   c                   @   s&   e Zd ZdZejZdd„ Zdd„ ZdS )ÚProducerProxyTestszAProducer methods on me should be relayed to the Producer I proxy.c                 C   s,   |   d ¡| _t| jƒ| _| j | jd¡ d S r!   )r0   Úproxyr   ÚparentProducerr(   r	   r   r   r   r2   Ñ   s   zProducerProxyTests.setUpc                 C   ó   | j  ¡  |  | jj¡ d S r   )rV   r$   Ú
assertTruerW   r#   r	   r   r   r   rK   Ö   ó   
zProducerProxyTests.testStopN)	r   r   r   r   r   r6   r0   r2   rK   r   r   r   r   rU   Ì   s
    rU   c                   @   s6   e Zd ZdZejZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
S )ÚConsumerProxyTestszAConsumer methods on me should be relayed to the Consumer I proxy.c                 C   r.   r   )r%   r/   r0   r   r	   r   r   r   r2   à   r3   zConsumerProxyTests.setUpc                 C   s"   | j  d¡ |  | j ¡ d¡ d S r4   )r   r   rA   r/   r   r	   r   r   r   r5   ä   s   zConsumerProxyTests.testWritec                 C   rX   r   )r   r,   rY   r/   r+   r	   r   r   r   r?   é   rZ   zConsumerProxyTests.testFinishc                 C   rX   r   )r   r*   rY   r/   r)   r	   r   r   r   r>   í   rZ   z!ConsumerProxyTests.testUnregisterN)r   r   r   r   r   r6   r0   r2   r5   r?   r>   r   r   r   r   r[   Û   s    r[   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚPullProducerTestc                 C   s6   t ƒ | _|  | j¡| _t| jƒ| _| j | jd¡ d S r!   )r%   r/   r0   rV   r   rW   r(   r	   r   r   r   r2   ó   s   zPullProducerTest.setUpc                 C   s"   | j  d¡ |  | j ¡ d¡ d S )NÚhelloz+Pulling Consumer got data before it pulled.)rV   r   r9   r/   r   r	   r   r   r   ÚtestHoldWritesù   s   
ÿzPullProducerTest.testHoldWritesc                 C   s,   | j  d¡ | j  ¡  |  | j ¡ d¡ d S )Nr]   )rV   r   r   rA   r/   r   r	   r   r   r   ÚtestPull   s   
zPullProducerTest.testPullc                 C   sX   | j  d¡ | j  d¡ | j  ¡  t| jjƒ}|  |dd|f ¡ |  | j ¡ d¡ d S )Nzhello Úsunshineé   z(Pull resulted in %d writes instead of 1.zhello sunshine)rV   r   r   rH   r/   r   rA   r   )r
   Únwritesr   r   r   ÚtestMergeWrites  s   
ÿz PullProducerTest.testMergeWritesc                 C   s,   | j  ¡  | j  d¡ |  | j ¡ d¡ d S )Nr   )rV   r   r   rA   r/   r   r	   r   r   r   ÚtestLateWrite  s   
zPullProducerTest.testLateWriteN)r   r   r   r2   r^   r_   rc   rd   r   r   r   r   r\   ò   s    
r\   c                   @   ó   e Zd ZG dd„ dejƒZdS )ÚPCP_PullProducerTestsc                   @   ó   e Zd ZdZdS )z PCP_PullProducerTests.proxyClassFN©r   r   r   ÚiAmStreamingr   r   r   r   r0     ó    r0   NrN   r   r   r   r   rf     ó    rf   c                   @   re   )ÚPCPII_PullProducerTestsc                   @   rg   )z"PCPII_PullProducerTests.proxyClassFNrh   r   r   r   r   r0     rj   r0   NrQ   r   r   r   r   rl     rk   rl   c                   @   sF   e Zd ZdZejZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZdS )ÚBufferedConsumerTestsz=As a consumer, ask the producer to pause after too much data.c                 C   ó>   t ƒ | _|  | j¡| _d| j_t| jƒ| _| j | jd¡ d S )Néd   T©r%   r/   r0   rV   Ú
bufferSizer   rW   r(   r	   r   r   r   r2   )  ó
   zBufferedConsumerTests.setUpc                 C   r8   r=   )rV   r(   rW   rY   r   r	   r   r   r   ÚtestRegisterPull1  r;   z&BufferedConsumerTests.testRegisterPullc                 C   rX   r   )rV   r"   r9   rW   r   r	   r   r   r   ÚtestPauseIntercept6  rZ   z(BufferedConsumerTests.testPauseInterceptc                 C   s&   | j  ¡  | j  ¡  |  | jj¡ d S r   )rV   r"   r   r9   rW   r   r	   r   r   r   ÚtestResumeIntercept:  s   

z)BufferedConsumerTests.testResumeInterceptc                 C   sT   | 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 yetÚ3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxN)rV   r"   r9   rW   r   r   rY   r	   r   r   r   ÚtestTriggerPauseB  s   
z&BufferedConsumerTests.testTriggerPausec                 C   sR   | 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)	rV   r"   r   rY   rW   r   r   r9   ÚproducerPausedr	   r   r   r   ÚtestTriggerResumeM  s   

z'BufferedConsumerTests.testTriggerResumeN)r   r   r   r   r   rR   r0   r2   rs   rt   ru   rw   rz   r   r   r   r   rm   $  s    rm   c                   @   s6   e Zd ZG dd„ dejƒZdd„ Zdd„ Zdd„ Zd	S )
ÚBufferedPullTestsc                   @   s   e Zd ZdZdd„ ZdS )zBufferedPullTests.proxyClassFc                 C   s$   t j | |d d… ¡ tt|ƒdƒS )Nro   )r   rR   Ú_writeSomeDataÚminrH   r   r   r   r   r|   ]  s   z+BufferedPullTests.proxyClass._writeSomeDataN)r   r   r   ri   r|   r   r   r   r   r0   Z  s    r0   c                 C   rn   )Nro   Frp   r	   r   r   r   r2   a  rr   zBufferedPullTests.setUpc                 C   s$   d| j _| j ¡  |  | j j¡ d S r=   )rW   r   rV   r   rY   r	   r   r   r   ÚtestResumePulli  s   
z BufferedPullTests.testResumePullc                 C   s>   | j  ¡  | j  d¡ |  | j ¡ d¡ |  | j jdg¡ d S )NÚidatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumÚddatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumÚdatum)rV   r   r   rA   r/   r   Ú_bufferr	   r   r   r   ÚtestLateWriteBufferingp  s   
z(BufferedPullTests.testLateWriteBufferingN)	r   r   r   r   rR   r0   r2   r~   rƒ   r   r   r   r   r{   Y  s
    r{   N)Ú__version__Útwisted.protocolsr   Útwisted.trialr   r   r   r%   ÚTestCaser-   r7   r@   rM   rP   rS   rT   rU   r[   r\   rf   rl   rm   r{   r   r   r   r   Ú<module>   s(   .2%5