§
    Ètºfñ7  ã                   ól  — d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ  G d	„ d
ej        ¦  «        Z G d„ de¦  «        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j        ¦  «        ZdS )z.
Test case for L{twisted.protocols.loopback}.
é    )Úimplementer)ÚdeferÚ
interfacesÚreactor)ÚDeferred)ÚIAddressÚIPullProducerÚIPushProducer)ÚProtocol)ÚbasicÚloopback)Úunittestc                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚSimpleProtocolc                 óR   — t          j        ¦   «         | _        g | _        g | _        d S ©N)r   r   ÚconnÚlinesÚconnLost©Úselfs    úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_loopback.pyÚ__init__zSimpleProtocol.__init__   s#   € Ý”NÑ$Ô$ˆŒ	ØˆŒ
ØˆŒˆˆó    c                 ó:   — | j                              d ¦  «         d S r   )r   Úcallbackr   s    r   ÚconnectionMadezSimpleProtocol.connectionMade   s   € ØŒ	×Ò˜4Ñ Ô Ð Ð Ð r   c                 ó:   — | j                              |¦  «         d S r   )r   Úappend©r   Úlines     r   ÚlineReceivedzSimpleProtocol.lineReceived   s   € ØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r   )r   r   )r   Úreasons     r   ÚconnectionLostzSimpleProtocol.connectionLost   s   € ØŒ×Ò˜VÑ$Ô$Ð$Ð$Ð$r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r%   © r   r   r   r      sP   € € € € € ðð ð ð
!ð !ð !ð ð  ð  ð%ð %ð %ð %ð %r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚDoomProtocolr   c                 ó  — | xj         dz  c_         | j         dk     r|                      d| j         fz  ¦  «         t                               | |¦  «         | j        d         dk    r| j                             ¦   «          d S d S )Né   é   s   Hello %déÿÿÿÿó   Hello 3)ÚiÚsendLiner   r"   r   Ú	transportÚloseConnectionr    s     r   r"   zDoomProtocol.lineReceived&   s‚   € ØˆŒ�!‰ˆŒØŒ6�AŠ:ˆ:ð �MŠM˜+¨¬¨	Ñ1Ñ2Ô2Ð2Ý×#Ò# D¨$Ñ/Ô/Ð/ØŒ:�bŒ>˜ZÒ'Ð'ØŒN×)Ò)Ñ+Ô+Ð+Ð+Ð+ð (Ð'r   N)r&   r'   r(   r1   r"   r)   r   r   r+   r+   #   s(   € € € € € Ø	€Að,ð ,ð ,ð ,ð ,r   r+   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚLoopbackTestCaseMixinc                 óð   ‡ ‡‡— t          ¦   «         Št          ¦   «         Šˆfd„}‰j                             |¦  «         ˆˆˆ fd„}t          j        ‰ j        ‰‰¦  «        }|                     |¦  «         |S )Nc                 ód   •— ‰                      d¦  «         ‰j                             ¦   «          d S )Nó   THIS IS LINE ONE!)r2   r3   r4   ©ÚresultÚss    €r   Ú	sendALinez<LoopbackTestCaseMixin.testRegularFunction.<locals>.sendALine6   s0   ø€ Ø�JŠJÐ+Ñ,Ô,Ð,ØŒK×&Ò&Ñ(Ô(Ð(Ð(Ð(r   c                 óà   •— ‰                      ‰j        dg¦  «         ‰                      t          ‰j        ¦  «        d¦  «         ‰                      t          ‰j        ¦  «        d¦  «         d S )Nr9   r-   ©ÚassertEqualr   Úlenr   ©ÚignoredÚcr<   r   s    €€€r   Úcheckz8LoopbackTestCaseMixin.testRegularFunction.<locals>.check<   sa   ø€ Ø×Ò˜QœWÐ';Ð&<Ñ=Ô=Ð=Ø×Ò�S ¤™_œ_¨aÑ0Ô0Ð0Ø×Ò�S ¤™_œ_¨aÑ0Ô0Ð0Ð0Ð0r   )r   r   ÚaddCallbackr   ÚmaybeDeferredÚloopbackFunc©r   r=   rE   ÚdrD   r<   s   `   @@r   ÚtestRegularFunctionz)LoopbackTestCaseMixin.testRegularFunction2   sŸ   øøø€ ÝÑÔˆÝÑÔˆð	)ð 	)ð 	)ð 	)ð 	)ð 	
Œ×Ò˜9Ñ%Ô%Ð%ð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ
 Ô Ô 1°1°aÑ8Ô8ˆØ	�Š�eÑÔÐØˆr   c                 óð   ‡ ‡‡— t          ¦   «         Št          ¦   «         Šˆfd„}‰j                             |¦  «         ˆˆˆ fd„}t          j        ‰ j        ‰‰¦  «        }|                     |¦  «         |S )Nc                 ó2   •— ‰                      d¦  «         d S )Nó	   DOOM LINE)r2   r:   s    €r   r=   z=LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.sendALineI   s   ø€ Ø�JŠJ�|Ñ$Ô$Ð$Ð$Ð$r   c                 ó  •— ‰                      ‰j        g d¢¦  «         ‰                      ‰j        g d¢¦  «         ‰                      t          ‰j        ¦  «        d¦  «         ‰                      t          ‰j        ¦  «        d¦  «         d S )N)ó   Hello 1ó   Hello 2r0   )rN   rP   rQ   r0   r-   r?   rB   s    €€€r   rE   z9LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.checkN   sŒ   ø€ Ø×Ò˜QœWÐ&JÐ&JÐ&JÑKÔKÐKØ×ÒØ”ÐKÐKÐKñô ð ð ×Ò�S ¤™_œ_¨aÑ0Ô0Ð0Ø×Ò�S ¤™_œ_¨aÑ0Ô0Ð0Ð0Ð0r   )r+   r   rF   r   rG   rH   rI   s   `   @@r   ÚtestSneakyHiddenDoomz*LoopbackTestCaseMixin.testSneakyHiddenDoomE   s›   øøø€ Ý‰NŒNˆÝ‰NŒNˆð	%ð 	%ð 	%ð 	%ð 	%ð 	
Œ×Ò˜9Ñ%Ô%Ð%ð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ Ô Ô 1°1°aÑ8Ô8ˆØ	�Š�eÑÔÐØˆr   N)r&   r'   r(   rK   rR   r)   r   r   r6   r6   1   s2   € € € € € ðð ð ð&ð ð ð ð r   r6   c                   óž   — e Zd Z eej        ¦  «        Zd„ Zd„ Zd„ Z	d„ Z
dd„Zd„ Zd„ Zd	„ Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚLoopbackAsyncTestsc                 óæ   —  G d„ dt           ¦  «        } |¦   «         } |¦   «         }t          j        ||¦  «         |                      |j        ¦  «         |                      |j        ¦  «         dS )z}
        Test that the client and server protocol both have makeConnection
        invoked on them by loopbackAsync.
        c                   ó   — e Zd ZdZd„ ZdS )ú<LoopbackAsyncTests.test_makeConnection.<locals>.TestProtocolNc                 ó   — || _         d S r   )r3   ©r   r3   s     r   ÚmakeConnectionzKLoopbackAsyncTests.test_makeConnection.<locals>.TestProtocol.makeConnectiong   ó   € Ø!*�”��r   )r&   r'   r(   r3   rZ   r)   r   r   ÚTestProtocolrW   d   s(   € € € € € ØˆIð+ð +ð +ð +ð +r   r\   N)r   r   ÚloopbackAsyncÚassertIsNotNoner3   )r   r\   ÚserverÚclients       r   Útest_makeConnectionz&LoopbackAsyncTests.test_makeConnection^   s‹   € ð	+ð 	+ð 	+ð 	+ð 	+�8ñ 	+ô 	+ð 	+ð �‘”ˆØ�‘”ˆÝÔ˜v vÑ.Ô.Ð.Ø×Ò˜VÔ-Ñ.Ô.Ð.Ø×Ò˜VÔ-Ñ.Ô.Ð.Ð.Ð.r   c                 óF  ‡ ‡—  G d„ dt           ¦  «        }|r. |¦   «         }t          ¦   «         x}|_        t          ¦   «         }n-t          ¦   «         } |¦   «         }t          ¦   «         x}|_        t          j        ||¦  «         ˆˆ fd„}|                     |¦  «        S )zJ
        Test one of the permutations of client/server host/peer.
        c                   ó   — e Zd Zd„ ZdS )ú6LoopbackAsyncTests._hostpeertest.<locals>.TestProtocolc                 ód   — t          j        | |¦  «         | j                             |¦  «         d S r   )r   rZ   ÚonConnectionr   rY   s     r   rZ   zELoopbackAsyncTests._hostpeertest.<locals>.TestProtocol.makeConnectionv   s2   € ÝÔ'¨¨iÑ8Ô8Ð8ØÔ!×*Ò*¨9Ñ5Ô5Ð5Ð5Ð5r   N)r&   r'   r(   rZ   r)   r   r   r\   rd   u   s#   € € € € € ð6ð 6ð 6ð 6ð 6r   r\   c                 ó†   •—  t          | ‰¦  «        ¦   «         }‰                     t          j        |¦  «        ¦  «         d S r   )ÚgetattrÚ
assertTruer   Ú
providedBy)r3   ÚhostÚgetr   s     €€r   Ú	connectedz3LoopbackAsyncTests._hostpeertest.<locals>.connected…   s=   ø€ Ø*•7˜9 cÑ*Ô*Ñ,Ô,ˆDØ�OŠO�HÔ/°Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6r   )r   r   rf   r   r]   rF   )r   rl   Ú
testServerr\   r_   rJ   r`   rm   s   ``      r   Ú_hostpeertestz LoopbackAsyncTests._hostpeertestp   sÉ   øø€ ð
	6ð 	6ð 	6ð 	6ð 	6�8ñ 	6ô 	6ð 	6ð
 ð 	1Ø!�\‘^”^ˆFÝ&.¡j¤jÐ0ˆA�Ô#Ý‘Z”ZˆFˆFå‘Z”ZˆFØ!�\‘^”^ˆFÝ&.¡j¤jÐ0ˆA�Ô#åÔ˜v vÑ.Ô.Ð.ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð �}Š}˜YÑ'Ô'Ð'r   c                 ó.   — |                       dd¦  «        S )z„
        Test that the server gets a transport with a properly functioning
        implementation of L{ITransport.getHost}.
        ÚgetHostT©ro   r   s    r   Útest_serverHostz"LoopbackAsyncTests.test_serverHost‹   s   € ð
 ×!Ò! )¨TÑ2Ô2Ð2r   c                 ó.   — |                       dd¦  «        S )zG
        Like C{test_serverHost} but for L{ITransport.getPeer}
        ÚgetPeerTrr   r   s    r   Útest_serverPeerz"LoopbackAsyncTests.test_serverPeer’   s   € ð ×!Ò! )¨TÑ2Ô2Ð2r   rq   c                 ó.   — |                       dd¦  «        S )z„
        Test that the client gets a transport with a properly functioning
        implementation of L{ITransport.getHost}.
        rq   Frr   )r   rl   s     r   Útest_clientHostz"LoopbackAsyncTests.test_clientHost˜   s   € ð
 ×!Ò! )¨UÑ3Ô3Ð3r   c                 ó.   — |                       dd¦  «        S )zH
        Like C{test_clientHost} but for L{ITransport.getPeer}.
        ru   Frr   r   s    r   Útest_clientPeerz"LoopbackAsyncTests.test_clientPeerŸ   s   € ð ×!Ò! )¨UÑ3Ô3Ð3r   c                 ó,  ‡—  G d„ dt           ¦  «        } G ˆfd„dt           ¦  «        }|r* |¦   «         } |¦   «         }t          ¦   «         x}|_        n) |¦   «         }t          ¦   «         x}|_         |¦   «         }t          j        ||¦  «         |S )z¹
        Test one of the permutations of write/writeSequence client/server.

        @param write: The name of the method to test, C{"write"} or
            C{"writeSequence"}.
        c                   ó   — e Zd ZdZd„ ZdS )ú9LoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocolr   c                 ót   — | xj         |z  c_         | j         dk    r| j                             d ¦  «         d S d S ©Nó   bytes)ÚbytesÚreceivedr   ©r   r�   s     r   ÚdataReceivedzFLoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocol.dataReceived°   sC   € Ø�
”
˜eÑ#�
”
Ø”: Ò)Ð)Ø”M×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0ð *Ð)r   N©r&   r'   r(   r�   r„   r)   r   r   ÚGreeteeProtocolr}   ­   s(   € € € € € ØˆEð1ð 1ð 1ð 1ð 1r   r†   c                   ó   •— e Zd Zˆ fd„ZdS )ú9LoopbackAsyncTests._greetingtest.<locals>.GreeterProtocolc                 ó„   •— ‰dk    r| j                              d¦  «         d S | j                              ddg¦  «         d S )NÚwriter€   s   byts   es)r3   rŠ   ÚwriteSequence©r   rŠ   s    €r   r   zHLoopbackAsyncTests._greetingtest.<locals>.GreeterProtocol.connectionMade¶   sJ   ø€ Ø˜GÒ#Ð#Ø”N×(Ò(¨Ñ2Ô2Ð2Ð2Ð2à”N×0Ò0°&¸%°ÑAÔAÐAÐAÐAr   N©r&   r'   r(   r   ©rŠ   s   €r   ÚGreeterProtocolrˆ   µ   s5   ø€ € € € € ðBð Bð Bð Bð Bð Bð Br   r�   )r   r   r‚   r   r]   )r   rŠ   rn   r†   r�   r_   r`   rJ   s    `      r   Ú_greetingtestz LoopbackAsyncTests._greetingtest¥   sã   ø€ ð	1ð 	1ð 	1ð 	1ð 	1�hñ 	1ô 	1ð 	1ð	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	B�hñ 	Bô 	Bð 	Bð ð 	'Ø$�_Ñ&Ô&ˆFØ$�_Ñ&Ô&ˆFÝ"*¡*¤*Ð,ˆA�”�à$�_Ñ&Ô&ˆFÝ"*¡*¤*Ð,ˆA�”Ø$�_Ñ&Ô&ˆFåÔ˜v vÑ.Ô.Ð.Øˆr   c                 ó.   — |                       dd¦  «        S )z„
        Test that on a connection where the client speaks first, the server
        receives the bytes sent by the client.
        rŠ   F©r�   r   s    r   Útest_clientGreetingz&LoopbackAsyncTests.test_clientGreetingÈ   s   € ð
 ×!Ò! '¨5Ñ1Ô1Ð1r   c                 ó.   — |                       dd¦  «        S )zz
        Like C{test_clientGreeting}, but use C{writeSequence} instead of
        C{write} to issue the greeting.
        r‹   Fr’   r   s    r   Útest_clientGreetingSequencez.LoopbackAsyncTests.test_clientGreetingSequenceÏ   s   € ð
 ×!Ò! /°5Ñ9Ô9Ð9r   rŠ   c                 ó.   — |                       dd¦  «        S )z„
        Test that on a connection where the server speaks first, the client
        receives the bytes sent by the server.
        rŠ   Tr’   rŒ   s     r   Útest_serverGreetingz&LoopbackAsyncTests.test_serverGreetingÖ   s   € ð
 ×!Ò! '¨4Ñ0Ô0Ð0r   c                 ó.   — |                       dd¦  «        S )zz
        Like C{test_serverGreeting}, but use C{writeSequence} instead of
        C{write} to issue the greeting.
        r‹   Tr’   r   s    r   Útest_serverGreetingSequencez.LoopbackAsyncTests.test_serverGreetingSequenceÝ   s   € ð
 ×!Ò! /°4Ñ8Ô8Ð8r   c                 ó  ‡‡‡‡— d„ t          dd¦  «        D ¦   «         Š G ˆˆfd„dt          ¦  «        } G ˆˆˆfd„dt          ¦  «        } |¦   «         Š |¦   «         Št          ¦   «         ‰_        t	          j        ‰‰¦  «         ‰j        S )Nc                 ó   — g | ]}d |fz  ‘Œ	S )s   %dr)   )Ú.0r1   s     r   ú
<listcomp>z4LoopbackAsyncTests._producertest.<locals>.<listcomp>å   s   € Ð8Ð8Ð8 a�U˜a˜T‘\Ð8Ð8Ð8r   r   é
   c                   ó   •— e Zd Zˆ ˆfd„ZdS )ú;LoopbackAsyncTests._producertest.<locals>.ProducingProtocolc                 ó€   •—  ‰t          ‰¦  «        ¦  «        | _        | j                             | j        ¦  «         d S r   )ÚlistÚproducerÚstartr3   )r   ÚproducerClassÚ	toProduces    €€r   r   zJLoopbackAsyncTests._producertest.<locals>.ProducingProtocol.connectionMadeè   s8   ø€ Ø - ­d°9©o¬oÑ >Ô >�”Ø”×#Ò# D¤NÑ3Ô3Ð3Ð3Ð3r   Nr�   )r¥   r¦   s   €€r   ÚProducingProtocolr    ç   s3   ø€ € € € € ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r   r§   c                   ó"   •— e Zd ZdZˆ ˆˆfd„ZdS )ú;LoopbackAsyncTests._producertest.<locals>.ReceivingProtocolr   c                 ó    •— | xj         |z  c_         | j         d                     ‰¦  «        k    r| j                             ‰‰f¦  «         d S d S )Nr   )r�   Újoinr‚   r   )r   Údatar`   r_   r¦   s     €€€r   r„   zHLoopbackAsyncTests._producertest.<locals>.ReceivingProtocol.dataReceivedï   sU   ø€ Ø�
”
˜dÑ"�
”
Ø”: §¢¨)Ñ!4Ô!4Ò4Ð4Ø”M×*Ò*¨F°FÐ+;Ñ<Ô<Ð<Ð<Ð<ð 5Ð4r   Nr…   )r`   r_   r¦   s   €€€r   ÚReceivingProtocolr©   ì   s=   ø€ € € € € ØˆEð=ð =ð =ð =ð =ð =ð =ð =ð =r   r­   )Úranger   r   r‚   r   r]   )r   r¥   r§   r­   r`   r_   r¦   s    `  @@@r   Ú_producertestz LoopbackAsyncTests._producertestä   sÜ   øøøø€ Ø8Ð8­5°°B©<¬<Ð8Ñ8Ô8ˆ	ð	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4¥ñ 	4ô 	4ð 	4ð
	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=¥ñ 	=ô 	=ð 	=ð #Ð"Ñ$Ô$ˆØ"Ð"Ñ$Ô$ˆÝ"™*œ*ˆŒåÔ˜v vÑ.Ô.Ð.ØŒÐr   c                 ó´   ‡ — t          t          ¦  «         G d„ d¦  «        ¦   «         }‰                      |¦  «        }ˆ fd„}|                     |¦  «         |S )zO
        Test a push producer registered against a loopback transport.
        c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ú:LoopbackAsyncTests.test_pushProducer.<locals>.PushProducerFc                 ó   — || _         d S r   ©r¦   ©r   r¦   s     r   r   zCLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.__init__  r[   r   c                 ó   — d| _         d S ©NT)Úresumedr   s    r   ÚresumeProducingzJLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.resumeProducing  s   € Ø#�”��r   c                 óh   — || _         |                     | d¦  «         |                      ¦   «          d S r·   )ÚconsumerÚregisterProducerÚ_produceAndSchedule©r   r»   s     r   r¤   z@LoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.start
  s7   € Ø (�”Ø×)Ò)¨$°Ñ5Ô5Ð5Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*r   c                 óâ   — | j         rN| j                             | j                              d¦  «        ¦  «         t	          j        d| j        ¦  «         d S | j                             ¦   «          d S ©Nr   )r¦   r»   rŠ   Úpopr   Ú	callLaterr½   ÚunregisterProducerr   s    r   r½   zNLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer._produceAndSchedule  sh   € Ø”>ð 7Ø”M×'Ò'¨¬×(:Ò(:¸1Ñ(=Ô(=Ñ>Ô>Ð>ÝÔ% a¨Ô)AÑBÔBÐBÐBÐBà”M×4Ò4Ñ6Ô6Ð6Ð6Ð6r   N)r&   r'   r(   r¸   r   r¹   r¤   r½   r)   r   r   ÚPushProducerr²      sU   € € € € € àˆGð+ð +ð +ð$ð $ð $ð+ð +ð +ð
7ð 7ð 7ð 7ð 7r   rÄ   c                 óR   •— | \  }}‰                      |j        j        d¦  «         d S )Nz0Streaming producer should not have been resumed.)ÚassertFalser£   r¸   )Úresultsr`   r_   r   s      €r   Úfinishedz6LoopbackAsyncTests.test_pushProducer.<locals>.finished  s:   ø€ Ø&ÑˆV�VØ×ÒØ”Ô'ØBñô ð ð ð r   )r   r
   r¯   rF   )r   rÄ   rJ   rÈ   s   `   r   Útest_pushProducerz$LoopbackAsyncTests.test_pushProducerû   s‡   ø€ õ
 
•]Ñ	#Ô	#ð	7ð 	7ð 	7ð 	7ð 	7ñ 	7ô 	7ñ 
$Ô	#ð	7ð* ×Ò˜|Ñ,Ô,ˆð	ð 	ð 	ð 	ð 	ð 	
�Š�hÑÔÐØˆr   c                 óz   — t          t          ¦  «         G d„ d¦  «        ¦   «         }|                      |¦  «        S )zO
        Test a pull producer registered against a loopback transport.
        c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ú:LoopbackAsyncTests.test_pullProducer.<locals>.PullProducerc                 ó   — || _         d S r   r´   rµ   s     r   r   zCLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.__init__)  r[   r   c                 óJ   — || _         | j                              | d¦  «         d S )NF)r»   r¼   r¾   s     r   r¤   z@LoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.start,  s'   € Ø (�”Ø”×.Ò.¨t°UÑ;Ô;Ð;Ð;Ð;r   c                 ó®   — | j                              | j                             d¦  «        ¦  «         | j        s| j                              ¦   «          d S d S rÀ   )r»   rŠ   r¦   rÁ   rÃ   r   s    r   r¹   zJLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.resumeProducing0  sV   € Ø”×#Ò# D¤N×$6Ò$6°qÑ$9Ô$9Ñ:Ô:Ð:Ø”~ð 7Ø”M×4Ò4Ñ6Ô6Ð6Ð6Ð6ð7ð 7r   N)r&   r'   r(   r   r¤   r¹   r)   r   r   ÚPullProducerrÌ   '  sA   € € € € € ð+ð +ð +ð<ð <ð <ð7ð 7ð 7ð 7ð 7r   rÐ   )r   r	   r¯   )r   rÐ   s     r   Útest_pullProducerz$LoopbackAsyncTests.test_pullProducer"  sU   € õ
 
•]Ñ	#Ô	#ð	7ð 	7ð 	7ð 	7ð 	7ñ 	7ô 	7ñ 
$Ô	#ð	7ð ×!Ò! ,Ñ/Ô/Ð/r   c                 óÞ   ‡ ‡—  G d„ dt           ¦  «        } G d„ dt           ¦  «        } |¦   «         } |¦   «         Št          j        ‰|¦  «        }ˆˆ fd„}|                     |¦  «         |S )zº
        L{loopback.loopbackAsync} does not call a protocol's C{dataReceived}
        method while that protocol's transport's C{write} method is higher up
        on the stack.
        c                   ó   — e Zd Zd„ ZdS )ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.Serverc                 ó:   — | j                              d¦  «         d S r   )r3   rŠ   rƒ   s     r   r„   zFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Server.dataReceived?  s   € Ø”×$Ò$ XÑ.Ô.Ð.Ð.Ð.r   N)r&   r'   r(   r„   r)   r   r   ÚServerrÔ   >  s#   € € € € € ð/ð /ð /ð /ð /r   rÖ   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.ClientFc                 ó:   — t          j        d| j        ¦  «         d S rÀ   )r   rÂ   Úgor   s    r   r   zHLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.connectionMadeE  s   € ÝÔ! ! T¤WÑ-Ô-Ð-Ð-Ð-r   c                 óH   — | j                              d¦  «         d| _        d S )Nó   fooT)r3   rŠ   Úreadyr   s    r   rÚ   z<LoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.goH  s#   € Ø”×$Ò$ VÑ,Ô,Ð,Ø!�”
�
�
r   c                 óP   — | j         | _        | j                             ¦   «          d S r   )rÝ   ÚwasReadyr3   r4   rƒ   s     r   r„   zFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.dataReceivedL  s%   € Ø $¤
�”Ø”×-Ò-Ñ/Ô/Ð/Ð/Ð/r   N)r&   r'   r(   rÝ   r   rÚ   r„   r)   r   r   ÚClientrØ   B  sF   € € € € € ØˆEð.ð .ð .ð"ð "ð "ð0ð 0ð 0ð 0ð 0r   rà   c                 ó<   •— ‰                      ‰j        ¦  «         d S r   )ri   rß   )rC   r`   r   s    €€r   Ú
cbFinishedz=LoopbackAsyncTests.test_writeNotReentrant.<locals>.cbFinishedT  s   ø€ Ø�OŠO˜FœOÑ,Ô,Ð,Ð,Ð,r   )r   r   r]   rF   )r   rÖ   rà   r_   rJ   râ   r`   s   `     @r   Útest_writeNotReentrantz)LoopbackAsyncTests.test_writeNotReentrant7  s¹   øø€ ð	/ð 	/ð 	/ð 	/ð 	/•Xñ 	/ô 	/ð 	/ð	0ð 	0ð 	0ð 	0ð 	0•Xñ 	0ô 	0ð 	0ð �‘”ˆØ�‘”ˆÝÔ" 6¨6Ñ2Ô2ˆð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	
�Š�jÑ!Ô!Ð!Øˆr   c                 óè  ‡ ‡‡‡— g Šˆfd„}t          ¦   «         Št          ¦   «         Št          j        ‰‰|¦  «        }‰                      ‰g ¦  «         ‰j                             d¦  «         ‰j                             d¦  «         ‰j                             d¦  «         ‰j                             d¦  «         ‰j                             ¦   «          ˆˆˆ ˆfd„}|                     |¦  «         |S )zÜ
        The callable passed as the value for the C{pumpPolicy} parameter to
        L{loopbackAsync} is called with a L{_LoopbackQueue} of pending bytes
        and a protocol to which they should be delivered.
        c                 ó�   •— g }| r)|                      |                      ¦   «         ¦  «         | °)‰                      ||f¦  «         d S r   )r   rl   )ÚqueueÚtargetr�   Ú	pumpCallss      €r   ÚdummyPolicyz7LoopbackAsyncTests.test_pumpPolicy.<locals>.dummyPolicyb  sR   ø€ ØˆEØð *Ø—’˜UŸYšY™[œ[Ñ)Ô)Ð)ð ð *à×Ò˜f e˜_Ñ-Ô-Ð-Ð-Ð-r   rÜ   ó   baró   bazó   quuxc                 óH   •— ‰                      ‰‰g d¢f‰ddgfg¦  «         d S )N)rë   rì   NrÜ   rê   )r@   )rC   r`   rè   r   r_   s    €€€€r   Ú
cbCompletez6LoopbackAsyncTests.test_pumpPolicy.<locals>.cbCompletet  sH   ø€ Ø×ÒØð Ð1Ð1Ð1Ð2°V¸fÀfÐ=MÐ4NÐOñ	ô ð ð ð r   )r   r   r]   r@   r3   rŠ   r4   rF   )r   ré   rÈ   rî   r`   rè   r_   s   `   @@@r   Útest_pumpPolicyz"LoopbackAsyncTests.test_pumpPolicyZ  s  øøøø€ ð ˆ	ð	.ð 	.ð 	.ð 	.ð 	.õ ‘”ˆÝ‘”ˆåÔ)¨&°&¸+ÑFÔFˆØ×Ò˜ BÑ'Ô'Ð'àÔ×Ò˜vÑ&Ô&Ð&ØÔ×Ò˜vÑ&Ô&Ð&ØÔ×Ò˜vÑ&Ô&Ð&ØÔ×Ò˜wÑ'Ô'Ð'ØÔ×'Ò'Ñ)Ô)Ð)ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	×Ò˜ZÑ(Ô(Ð(Øˆr   c                 ó<  — g }t          ¦   «         }|j        |_        t          j        ¦   «         }|                     d¦  «         |                     d¦  «         |                     d¦  «         t          j        ||¦  «         |                      |ddg¦  «         dS )zŸ
        L{identityPumpPolicy} is a pump policy which calls the target's
        C{dataReceived} method one for each string in the queue passed to it.
        rÜ   rê   N)r   r   r„   r   Ú_LoopbackQueueÚputÚidentityPumpPolicyr@   ©r   r�   r`   ræ   s       r   Útest_identityPumpPolicyz*LoopbackAsyncTests.test_identityPumpPolicy  s‘   € ð
 ˆÝ‘”ˆØ#œlˆÔÝÔ'Ñ)Ô)ˆØ�	Š	�&ÑÔÐØ�	Š	�&ÑÔÐØ�	Š	�$‰ŒˆåÔ# E¨6Ñ2Ô2Ð2à×Ò˜ ¨Ð 0Ñ1Ô1Ð1Ð1Ð1r   c                 ó:  — g }t          ¦   «         }|j        |_        t          j        ¦   «         }|                     d¦  «         |                     d¦  «         |                     d¦  «         t          j        ||¦  «         |                      |dg¦  «         dS )zÀ
        L{collapsingPumpPolicy} is a pump policy which calls the target's
        C{dataReceived} only once with all of the strings in the queue passed
        to it joined together.
        rÜ   rê   Ns   foobar)r   r   r„   r   rñ   rò   ÚcollapsingPumpPolicyr@   rô   s       r   Útest_collapsingPumpPolicyz,LoopbackAsyncTests.test_collapsingPumpPolicy�  sŽ   € ð ˆÝ‘”ˆØ#œlˆÔÝÔ'Ñ)Ô)ˆØ�	Š	�&ÑÔÐØ�	Š	�&ÑÔÐØ�	Š	�$‰ŒˆåÔ% e¨VÑ4Ô4Ð4à×Ò˜  Ñ,Ô,Ð,Ð,Ð,r   N)rq   rŽ   )r&   r'   r(   Ústaticmethodr   r]   rH   ra   ro   rs   rv   rx   rz   r�   r“   r•   r—   r™   r¯   rÉ   rÑ   rã   rï   rõ   rø   r)   r   r   rT   rT   [   sB  € € € € € Ø�< Ô 6Ñ7Ô7€Lð/ð /ð /ð$(ð (ð (ð63ð 3ð 3ð3ð 3ð 3ð4ð 4ð 4ð 4ð4ð 4ð 4ð!ð !ð !ðF2ð 2ð 2ð:ð :ð :ð1ð 1ð 1ð 1ð9ð 9ð 9ðð ð ð.%ð %ð %ðN0ð 0ð 0ð*!ð !ð !ðF#ð #ð #ðJ2ð 2ð 2ð"-ð -ð -ð -ð -r   rT   c                   ó.   — e Zd Z eej        ¦  «        ZdS )ÚLoopbackTCPTestsN)r&   r'   r(   rù   r   ÚloopbackTCPrH   r)   r   r   rû   rû   £  s    € € € € € Ø�< Ô 4Ñ5Ô5€L€L€Lr   rû   c                   óX   — e Zd Z eej        ¦  «        Z ej        e	d¦  «        €dZ
dS dS )ÚLoopbackUNIXTestsNz-Current reactor does not support UNIX sockets)r&   r'   r(   rù   r   ÚloopbackUNIXrH   r   ÚIReactorUNIXr   Úskipr)   r   r   rþ   rþ   §  sB   € € € € € Ø�< Ô 5Ñ6Ô6€Là€zÔ˜w¨Ñ-Ô-Ð5Ø>ˆˆˆð 6Ð5r   rþ   c                   ó:   — e Zd ZdZ G d„ de¦  «        Zd„ Zd„ ZdS )ÚLoopbackRelayTestz>
    Test for L{twisted.protocols.loopback.LoopbackRelay}
    c                   ó   — e Zd ZdZdZd„ ZdS )úLoopbackRelayTest.ReceiverzF
        Simple Receiver class used for testing LoopbackRelay
        r   c                 ó&   — | xj         |z  c_         dS )z)Accumulate received data for verificationN)r¬   )r   r¬   s     r   r„   z'LoopbackRelayTest.Receiver.dataReceivedº  s   € àˆIŒI˜ÑˆIŒIˆIˆIr   N)r&   r'   r(   Ú__doc__r¬   r„   r)   r   r   ÚReceiverr  ³  s4   € € € € € ð	ð 	ð ˆð	ð 	ð 	ð 	ð 	r   r  c                 ó>  — |                       ¦   «         }t          j        |¦  «        }|                     d¦  «         |                     d¦  «         |                      |j        d¦  «         |                     ¦   «          |                      |j        d¦  «         dS )z8Test to verify that the write function works as expecteds   abcs   defr   s   abcdefN)r  r   ÚLoopbackRelayrŠ   r@   r¬   ÚclearBuffer©r   ÚreceiverÚrelays      r   Ú
test_writezLoopbackRelayTest.test_write¾  s‹   € à—=’=‘?”?ˆÝÔ& xÑ0Ô0ˆØ�Š�FÑÔÐØ�Š�FÑÔÐØ×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒÑÔÐØ×Ò˜œ¨	Ñ2Ô2Ð2Ð2Ð2r   c                 óF  — |                       ¦   «         }t          j        |¦  «        }|                     g d¢¦  «         |                     g d¢¦  «         |                      |j        d¦  «         |                     ¦   «          |                      |j        d¦  «         dS )z@Test to verify that the writeSequence function works as expected)s   The s   quick s   brown s   fox )s   jumps s   over s   the lazy dogr   s+   The quick brown fox jumps over the lazy dogN)r  r   r
  r‹   r@   r¬   r  r  s      r   Útest_writeSequencez$LoopbackRelayTest.test_writeSequenceÈ  sž   € à—=’=‘?”?ˆÝÔ& xÑ0Ô0ˆØ×ÒÐDÐDÐDÑEÔEÐEØ×ÒÐBÐBÐBÑCÔCÐCØ×Ò˜œ¨Ñ,Ô,Ð,Ø×ÒÑÔÐØ×Ò˜œÐ(VÑWÔWÐWÐWÐWr   N)r&   r'   r(   r  r   r  r  r  r)   r   r   r  r  ®  sk   € € € € € ðð ð	ð 	ð 	ð 	ð 	�8ñ 	ô 	ð 	ð3ð 3ð 3ðXð Xð Xð Xð Xr   r  N)r  Úzope.interfacer   Útwisted.internetr   r   r   Útwisted.internet.deferr   Útwisted.internet.interfacesr   r	   r
   Útwisted.internet.protocolr   Útwisted.protocolsr   r   Útwisted.trialr   ÚLineReceiverr   r+   r6   ÚTestCaserT   rû   rþ   r  r)   r   r   ú<module>r     s  ððð ð
 'Ð &Ð &Ð &Ð &Ð &à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ .Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø "Ð "Ð "Ð "Ð "Ð "ð%ð %ð %ð %ð %�UÔ'ñ %ô %ð %ð ,ð ,ð ,ð ,ð ,�>ñ ,ô ,ð ,ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ðTE-ð E-ð E-ð E-ð E-Ð.°Ô0Añ E-ô E-ð E-ðP
6ð 6ð 6ð 6ð 6Ð,¨hÔ.?ñ 6ô 6ð 6ð?ð ?ð ?ð ?ð ?Ð-¨xÔ/@ñ ?ô ?ð ?ð"Xð "Xð "Xð "Xð "X˜Ô)ñ "Xô "Xð "Xð "Xð "Xr   