o
    Óó·ið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   ú[C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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&   Z	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)r0   r   r	   r   r   r   Ú	testWriteX   r   z!TransportInterfaceTests.testWriteN)r   r   r   r   ÚBasicProducerConsumerProxyr/   r1   r4   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.   r/   r   r   r&   r	   r   r   r   r1   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   r8   r	   r   r   r   ÚtestUnregisterv   s
   

z$ConsumerInterfaceTest.testUnregisterc                 C   r;   r<   )r   r'   r&   r+   r   r   r8   r	   r   r   r   Ú
testFinish�   s
   

z ConsumerInterfaceTest.testFinishN)r   r   r   r   r1   r9   r=   r>   r   r   r   r   r6   \   s    r6   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   r/   r&   r	   r   r   r   r1   “   r2   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   r8   r   r   r	   r   r   r   Ú	testPauseš   ó
   

ÿzProducerInterfaceTest.testPausec                 C   s6   | j  ¡  | j  ¡  | j  d¡ |  | j ¡ d¡ d S )NrC   )r&   r"   r   r   r@   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   r@   Ú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   r@   r   r   r	   r   r   r   ÚtestResumeBuffer®   s   

z&ProducerInterfaceTest.testResumeBufferc                 C   rB   )NrC   z+Stopped producer should not have sent data.)r&   r$   r   r8   r   r   r	   r   r   r   ÚtestStop´   rE   zProducerInterfaceTest.testStopN)r   r   r   r   r1   rA   rD   rF   rH   rI   rJ   r   r   r   r   r?   Š   s    r?   c                   @   ó   e Zd ZejZdS )ÚPCP_ConsumerInterfaceTestsN©r   r   r   r   r5   r/   r   r   r   r   rL   ¼   ó    
rL   c                   @   rK   )ÚPCPII_ConsumerInterfaceTestsN©r   r   r   r   ÚProducerConsumerProxyr/   r   r   r   r   rO   À   rN   rO   c                   @   rK   )ÚPCP_ProducerInterfaceTestsNrM   r   r   r   r   rR   Ä   rN   rR   c                   @   rK   )ÚPCPII_ProducerInterfaceTestsNrP   r   r   r   r   rS   È   rN   rS   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!   )r/   Úproxyr   ÚparentProducerr'   r	   r   r   r   r1   Ñ   s   zProducerProxyTests.setUpc                 C   ó   | j  ¡  |  | jj¡ d S r   )rU   r$   Ú
assertTruerV   r#   r	   r   r   r   rJ   Ö   ó   
zProducerProxyTests.testStopN)	r   r   r   r   r   r5   r/   r1   rJ   r   r   r   r   rT   Ì   s
    rT   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.   r/   r   r	   r   r   r   r1   à   r2   zConsumerProxyTests.setUpc                 C   s"   | j  d¡ |  | j ¡ d¡ d S r3   )r   r   r@   r.   r   r	   r   r   r   r4   ä   s   zConsumerProxyTests.testWritec                 C   rW   r   )r   r+   rX   r.   r*   r	   r   r   r   r>   é   rY   zConsumerProxyTests.testFinishc                 C   rW   r   )r   r)   rX   r.   r(   r	   r   r   r   r=   í   rY   z!ConsumerProxyTests.testUnregisterN)r   r   r   r   r   r5   r/   r1   r4   r>   r=   r   r   r   r   rZ   Û   s    rZ   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.   r/   rU   r   rV   r'   r	   r   r   r   r1   ó   s   zPullProducerTest.setUpc                 C   s"   | j  d¡ |  | j ¡ d¡ d S )NÚhelloz+Pulling Consumer got data before it pulled.)rU   r   r8   r.   r   r	   r   r   r   ÚtestHoldWritesù   s   
ÿzPullProducerTest.testHoldWritesc                 C   s,   | j  d¡ | j  ¡  |  | j ¡ d¡ d S )Nr\   )rU   r   r   r@   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 Zsunshineé   z(Pull resulted in %d writes instead of 1.zhello sunshine)rU   r   r   rG   r.   r   r@   r   )r
   Znwritesr   r   r   ÚtestMergeWrites  s   
ÿz PullProducerTest.testMergeWritesc                 C   s,   | j  ¡  | j  d¡ |  | j ¡ d¡ d S )Nr   )rU   r   r   r@   r.   r   r	   r   r   r   ÚtestLateWrite  s   
zPullProducerTest.testLateWriteN)r   r   r   r1   r]   r^   r`   ra   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   r/     ó    r/   NrM   r   r   r   r   rc     ó    rc   c                   @   rb   )ÚPCPII_PullProducerTestsc                   @   rd   )z"PCPII_PullProducerTests.proxyClassFNre   r   r   r   r   r/     rg   r/   NrP   r   r   r   r   ri     rh   ri   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.   r/   rU   Z
bufferSizer   rV   r'   r	   r   r   r   r1   )  ó
   zBufferedConsumerTests.setUpc                 C   r7   r<   )rU   r'   rV   rX   r   r	   r   r   r   ÚtestRegisterPull1  r:   z&BufferedConsumerTests.testRegisterPullc                 C   rW   r   )rU   r"   r8   rV   r   r	   r   r   r   ÚtestPauseIntercept6  rY   z(BufferedConsumerTests.testPauseInterceptc                 C   s&   | j  ¡  | j  ¡  |  | jj¡ d S r   )rU   r"   r   r8   rV   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 yetZ3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxN)rU   r"   r8   rV   r   r   rX   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.Zfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzshould be pausedzProducer should have resumed.N)	rU   r"   r   rX   rV   r   r   r8   ZproducerPausedr	   r   r   r   ÚtestTriggerResumeM  s   

z'BufferedConsumerTests.testTriggerResumeN)r   r   r   r   r   rQ   r/   r1   ro   rp   rq   rr   rs   r   r   r   r   rj   $  s    rj   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 )Nrl   )r   rQ   Ú_writeSomeDataÚminrG   r   r   r   r   ru   ]  s   z+BufferedPullTests.proxyClass._writeSomeDataN)r   r   r   rf   ru   r   r   r   r   r/   Z  s    r/   c                 C   rk   )Nrl   Frm   r	   r   r   r   r1   a  rn   zBufferedPullTests.setUpc                 C   s$   d| j _| j ¡  |  | j j¡ d S r<   )rV   r   rU   r   rX   r	   r   r   r   ÚtestResumePulli  s   
z BufferedPullTests.testResumePullc                 C   s>   | j  ¡  | j  d¡ |  | j ¡ d¡ |  | j jdg¡ d S )NZidatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumZddatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumdatumZdatum)rU   r   r   r@   r.   r   Ú_bufferr	   r   r   r   ÚtestLateWriteBufferingp  s   
z(BufferedPullTests.testLateWriteBufferingN)	r   r   r   r   rQ   r/   r1   rw   ry   r   r   r   r   rt   Y  s
    rt   N)Ú__version__Ztwisted.protocolsr   Ztwisted.trialr   r   r   r%   ZTestCaser,   r6   r?   rL   rO   rR   rS   rT   rZ   r[   rc   ri   rj   rt   r   r   r   r   Ú<module>   s(   .2%5