
    h                     &   S r SSKJrJrJrJr  SSKJrJr  SSK	J
r
  SSKJr  SSKJr   " S S\R                  5      r " S	 S
\R"                  5      r " S S\R&                  5      r " S S\R                  5      r " S S\R                  5      rg)z+
Test cases for twisted.protocols package.
    )addressdeferprotocolreactor)portforwardwire)	iterbytes)proto_helpers)unittestc                   0    \ rS rSrSrS rS rS rS rSr	g)		WireTests   z
Test wire protocols.
c                 d   [         R                  " 5       n[        R                  " 5       nUR	                  U5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        U R                  UR                  5       S5        g)zD
Test wire.Echo protocol: send some data and check it send it back.
   hello   world   how   are   yous   helloworldhowareyouN)r
   StringTransportr   EchomakeConnectiondataReceivedassertEqualvalueselftas      b/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/test/test_protocols.py	test_echoWireTests.test_echo   s~     ))+IIK		x 	x 	v	v	v$:;    c                     [         R                  " 5       n[        R                  " 5       nUR	                  U5        U R                  UR                  5       S5        g)z
Test wire.Who protocol.
s   root
N)r
   r   r   Whor   r   r   r   s      r   test_whoWireTests.test_who"   sA     ))+HHJ	K0r"   c                     [         R                  " 5       n[        R                  " 5       nUR	                  U5        U R                  UR                  5       S5        g)z
Test wire.QOTD protocol.
s'   An apple a day keeps the doctor away.
N)r
   r   r   QOTDr   r   r   r   s      r   	test_QOTDWireTests.test_QOTD+   sB     ))+IIK	$PQr"   c                 d   [         R                  " 5       n[        R                  " 5       nUR	                  U5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        U R                  UR                  5       S5        g)z
Test wire.Discard protocol.
r   r   r   r   r   r"   N)r
   r   r   Discardr   r   r   r   r   s      r   test_discardWireTests.test_discard4   s}     ))+LLN		x 	x 	v	v	vC(r"    N)
__name__
__module____qualname____firstlineno____doc__r    r%   r)   r-   __static_attributes__r/   r"   r   r   r      s    <1R)r"   r   c                       \ rS rSrSrS rSrg)TestableProxyClientFactoryC   z
Test proxy client factory that keeps the last created protocol instance.

@ivar protoInstance: the last instance of the protocol.
@type protoInstance: L{portforward.ProxyClient}
c                 P    [         R                  R                  X5      nX l        U$ )z5
Create the protocol instance and keeps track of it.
)r   ProxyClientFactorybuildProtocolprotoInstancer   addrprotos      r   r;   (TestableProxyClientFactory.buildProtocolK   s%     ..<<TH"r"   )r<   Nr0   r1   r2   r3   r4   r;   r5   r/   r"   r   r7   r7   C   s    r"   r7   c                       \ rS rSrSrS rSrg)TestableProxyFactoryT   aP  
Test proxy factory that keeps the last created protocol instance.

@ivar protoInstance: the last instance of the protocol.
@type protoInstance: L{portforward.ProxyServer}

@ivar clientFactoryInstance: client factory used by C{protoInstance} to
    create forward connections.
@type clientFactoryInstance: L{TestableProxyClientFactory}
c                    ^  [         R                  R                  T U5      n[        5       T l        U 4S jUl        UT l        U$ )zo
Create the protocol instance, keeps track of it, and makes it use
C{clientFactoryInstance} as client factory.
c                     > T R                   $ N)clientFactoryInstancer   s   r   <lambda>4TestableProxyFactory.buildProtocol.<locals>.<lambda>h   s    d.H.Hr"   )r   ProxyFactoryr;   r7   rH   clientProtocolFactoryr<   r=   s   `  r   r;   "TestableProxyFactory.buildProtocol`   s=    
 ((66tTB%?%A"&H#"r"   )rH   r<   NrA   r/   r"   r   rC   rC   T   s    	
r"   rC   c                   0    \ rS rSrSrS rS rS rS rSr	g)	PortforwardingTestsm   z
Test port forwarding.
c                 z    [         R                  " 5       U l        [        R                  " 5       U l        / U l        g rG   )r   r   serverProtocolr   ProtocolclientProtocol	openPortsrI   s    r   setUpPortforwardingTests.setUpr   s(    "iik&//1r"   c                     U R                   R                  R                  R                  5          U R                   R
                  R                  nUR                  R                  5          U R                  R                  R                  5          U R                  R                  R                  5         [        R                  " U R                   Vs/ s H#  n[        R                  " UR                  5      PM%     sn5      $ ! [         a     Nf = f! [         a     Nf = f! [         a     Nf = f! [         a     Nf = fs  snf rG   )proxyServerFactoryr<   	transportloseConnectionAttributeErrorrH   rU   rS   r   gatherResultsrV   maybeDeferredstopListening)r   pips      r   tearDownPortforwardingTests.tearDownw   s   	##11;;JJL	((>>LLBLL'')	))88:	))88: "";?>>J>aU  1>J
 	
  		
  		  		  		 KsL   .D :D ,$D$ $D4 *E
DD
D! D!$
D10D14
E Ec                   ^ ^^^	 [         R                  " 5       nU 4S jUl         [        R                  " SUSS9nT R                  R                  U5        [        SUR                  5       R                  5      T l	        [        R                  " ST R                  SS9nT R                  R                  U5        Sm/ m	[        R                  " 5       mUUU	U 4S jnUT R                  l        UU 4S jnUT R                  l        [         R                  " 5       nU 4S jUl         [        R                   " SUR                  5       R                  U5        T$ )	z-
Test port forwarding through Echo protocol.
c                     > T R                   $ rG   )rS   rI   s   r   rJ   6PortforwardingTests.test_portforward.<locals>.<lambda>   s    T-@-@r"   r   	127.0.0.1)	interfacei  c                    > TR                  [        U 5      5        [        T5      T:  a6  TR                  SR	                  T5      ST-  5        TR                  S 5        g g )Nr"      x)extendr	   lenr   joincallback)datadnBytesreceivedr   s    r   testDataReceived>PortforwardingTests.test_portforward.<locals>.testDataReceived   sM    OOIdO,8}&  (!3TF]C

4  'r"   c                  V   > TR                   R                  R                  ST -  5        g )Nrk   )rU   r[   write)rr   r   s   r   testConnectionMade@PortforwardingTests.test_portforward.<locals>.testConnectionMade   s!    ))//v>r"   c                     > T R                   $ rG   )rU   rI   s   r   rJ   rg      s    )<)<r"   )r   ServerFactoryr   	listenTCPrV   appendrC   getHostportrZ   r   DeferredrU   r   connectionMadeClientFactory
connectTCP)
r   realServerFactoryrealServerPortproxyServerPortrt   rx   clientFactoryrq   rr   rs   s
   `      @@@r   test_portforward$PortforwardingTests.test_portforward   s    %224%@" **1.?;Wn-"6//166#
 "++t&&+
 	o.NN	! 	! ,<(	? .@* ..0!<;(?(?(A(F(FVr"   c                    [         R                  " SSS5      n[        R                  " SS5      R	                  U5      n[
        R                  " 5       nX2l        [
        R                  " 5       nUR                  U5        U R                  [        UR                  5      S5        UR                  S   u  pVpxn	U R                  U[        R                  5        UR	                  U5      n
[
        R                  " 5       nU
R                  U5        U R                  UR                   U5        U R                  UR                   U5        U R#                  UR$                  5        U R#                  UR$                  5        g)zU
The proxy client registers itself as a producer of the proxy server and
vice versa.
TCPrh   r      N)r   IPv4Addressr   rL   r;   r
   MemoryReactorr   r   r   r   rm   
tcpClientsassertIsInstancer:   assertIsproducer
assertTrue	streaming)r   r>   serverr   serverTransporthostr   r   timeout_clientclientTransports               r   test_registerProducers*PortforwardingTests.test_registerProducers   s.    ""5+q9))+q9GGM  --/  (779o. 	W//0!4070B0B10E-MAm[-K-KL ,,T2'779o. 	o..@o..@112112r"   )rU   rV   rZ   rS   N)
r0   r1   r2   r3   r4   rW   rc   r   r   r5   r/   r"   r   rP   rP   m   s    

,&P!3r"   rP   c                       \ rS rSrSrS rSrg)StringTransportTests   z9
Test L{proto_helpers.StringTransport} helper behaviour.
c                 p    [         R                  " 5       nU R                  [        UR                  S5        g)zI
Test that L{proto_helpers.StringTransport} doesn't accept unicode data.
fooN)r
   r   assertRaises	TypeErrorrw   )r   ss     r   test_noUnicode#StringTransportTests.test_noUnicode   s(     ))+)QWWe4r"   r/   N)r0   r1   r2   r3   r4   r   r5   r/   r"   r   r   r      s    5r"   r   N)r4   twisted.internetr   r   r   r   twisted.protocolsr   r   twisted.python.compatr	   twisted.testr
   twisted.trialr   TestCaser   r:   r7   rL   rC   rP   r   r/   r"   r   <module>r      s|    ? > / + & "1)!! 1)h!?!? ";33 2i3(++ i3X
58,, 
5r"   