§
    ÉtºfR6  ã                   ó¼  — d Z ddlmZ ddlmZ ddl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 dd	lmZ  G d
„ d¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ de
j        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )z7
Tests for L{twisted.words.protocols.jabber.component}
é    )Úsha1)ÚverifyObject)Úfailure)Úunittest)Ú	componentÚijabberÚ	xmlstream)ÚJID)Údomish)ÚXmlPipec                   ó   — e Zd Zd„ Zd„ ZdS )ÚDummyTransportc                 ó   — || _         d S ©N)Úlist)Úselfr   s     úf/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/words/test/test_jabbercomponent.pyÚ__init__zDummyTransport.__init__   s   € ØˆŒ	ˆ	ˆ	ó    c                 ó:   — | j                              |¦  «         d S r   )r   Úappend)r   Úbytess     r   ÚwritezDummyTransport.write   s   € ØŒ	×Ò˜ÑÔÐÐÐr   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ðð ð ð ð  ð  ð  ð  r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú#ComponentInitiatingInitializerTestsc                 ó–  — g | _         t          j        ¦   «         | _        d| j        _        t          j        | j        ¦  «        | _        d| j        _        | j         j        | j        _        | j         	                    ¦   «          | j         
                    d¦  «         d| j        _        t          j        | j        ¦  «        | _        d S )NÚsecretútest:componentz‚<stream:stream xmlns='test:component' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>Ú12345)Úoutputr	   ÚAuthenticatorÚauthenticatorÚpasswordÚ	XmlStreamÚ	namespacer   ÚsendÚconnectionMadeÚdataReceivedÚsidr   ÚComponentInitiatingInitializerÚinit©r   s    r   ÚsetUpz)ComponentInitiatingInitializerTests.setUp   sª   € ØˆŒå&Ô4Ñ6Ô6ˆÔØ&.ˆÔÔ#Ý"Ô,¨TÔ-?Ñ@Ô@ˆŒØ#3ˆŒÔ Ø"œkÔ0ˆŒÔØŒ×%Ò%Ñ'Ô'Ð'ØŒ×#Ò#ð;ñ	
ô 	
ð 	
ð
 %ˆŒÔÝÔ<¸T¼^ÑLÔLˆŒ	ˆ	ˆ	r   c                 ó¨  — | j                              ¦   «         }| j        d         }|                      d|j        ¦  «         |                      d|j        ¦  «         |                      t          d¦  «                             ¦   «         t          |¦  «        ¦  «         g |_	        | j
                             |                     ¦   «         ¦  «         |S )z?
        Test basic operations of component handshake.
        éÿÿÿÿÚ	handshaker"   ó   12345secret)r/   Ú
initializer$   ÚassertEqualÚnameÚurir   Ú	hexdigestÚstrÚchildrenr	   r,   ÚtoXml)r   Údr4   s      r   ÚtestHandshakez1ComponentInitiatingInitializerTests.testHandshake-   sµ   € ð
 ŒI× Ò Ñ"Ô"ˆð ”K ”Oˆ	Ø×Ò˜ i¤nÑ5Ô5Ð5Ø×ÒÐ)¨9¬=Ñ9Ô9Ð9Ø×Ò�Ð2Ñ3Ô3×=Ò=Ñ?Ô?ÅÀYÁÄÑPÔPÐPð  ˆ	ÔØŒ×#Ò# I§O¢OÑ$5Ô$5Ñ6Ô6Ð6àˆr   N)r   r   r   r1   r?   r   r   r   r   r      s5   € € € € € ðMð Mð Mð"ð ð ð ð r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚComponentAuthTestsc                 ó   — d| _         d S ©NT)ÚauthComplete)r   Ústreams     r   Ú
authPassedzComponentAuthTests.authPassedD   s   € Ø ˆÔÐÐr   c                 ó:  — d| _         g }t          j        dd¦  «        }t          j        |¦  «        }t          |¦  «        |_        |                     t          j        | j	        ¦  «         | 
                    ¦   «          |                     d¦  «         t          d¦  «                             ¦   «                              d¦  «        }|                      |d         d|z   d	z   ¦  «         |                     d
¦  «         |                      | j         d¦  «         d S )NFÚcjidr!   sv   <stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' from='cjid' id='12345'>r5   Úasciié   s   <handshake>s   </handshake>ú<handshake/>T)rD   r   ÚConnectComponentAuthenticatorr	   r(   r   Ú	transportÚaddObserverÚSTREAM_AUTHD_EVENTrF   r+   r,   r   r:   Úencoder7   )r   ÚoutlistÚcaÚxsÚhvs        r   ÚtestAuthzComponentAuthTests.testAuthG   s  € Ø!ˆÔØˆåÔ4°V¸XÑFÔFˆÝÔ  Ñ$Ô$ˆÝ% gÑ.Ô.ˆŒà
�Š•yÔ3°T´_ÑEÔEÐEð 	×ÒÑÔÐØ
�Šð Fñ	
ô 	
ð 	
õ
 Ð&Ñ'Ô'×1Ò1Ñ3Ô3×:Ò:¸7ÑCÔCˆà×Ò˜ œ ^°bÑ%8¸?Ñ%JÑKÔKÐKà
�Š˜Ñ'Ô'Ð'à×Ò˜Ô*¨DÑ1Ô1Ð1Ð1Ð1r   N)r   r   r   rF   rU   r   r   r   rA   rA   C   s2   € € € € € ð!ð !ð !ð2ð 2ð 2ð 2ð 2r   rA   c                   ó   — e Zd ZdZd„ ZdS )ÚServiceTestsz)
    Tests for L{component.Service}.
    c                 ó`   — t          j        ¦   «         }t          t          j        |¦  «         dS )zF
        L{component.Service} implements L{ijabber.IService}.
        N)r   ÚServicer   r   ÚIService)r   Úservices     r   Útest_interfacezServiceTests.test_interfacef   s+   € õ Ô#Ñ%Ô%ˆÝ•WÔ% wÑ/Ô/Ð/Ð/Ð/r   N)r   r   r   Ú__doc__r\   r   r   r   rW   rW   a   s-   € € € € € ðð ð0ð 0ð 0ð 0ð 0r   rW   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚJabberServiceHarnessc                 ó0   — d| _         d| _        d| _        d S )NF)ÚcomponentConnectedFlagÚcomponentDisconnectedFlagÚtransportConnectedFlagr0   s    r   r   zJabberServiceHarness.__init__o   s    € Ø&+ˆÔ#Ø).ˆÔ&Ø&+ˆÔ#Ð#Ð#r   c                 ó   — d| _         d S rC   )ra   ©r   r	   s     r   ÚcomponentConnectedz'JabberServiceHarness.componentConnectedt   ó   € Ø&*ˆÔ#Ð#Ð#r   c                 ó   — d| _         d S rC   )rb   r0   s    r   ÚcomponentDisconnectedz*JabberServiceHarness.componentDisconnectedw   s   € Ø)-ˆÔ&Ð&Ð&r   c                 ó   — d| _         d S rC   )rc   re   s     r   ÚtransportConnectedz'JabberServiceHarness.transportConnectedz   rg   r   N)r   r   r   r   rf   ri   rk   r   r   r   r_   r_   n   sP   € € € € € ð,ð ,ð ,ð
+ð +ð +ð.ð .ð .ð+ð +ð +ð +ð +r   r_   c                   ó   — e Zd Zd„ ZdS )ÚJabberServiceManagerTestsc                 ó,  — t          j        dd¦  «        }t          ¦   «         }|                     |¦  «         g }|                     ¦   «                              d ¦  «        }| |_        |j        |j        _        | 	                    ¦   «          |  
                    d|j        ¦  «         |                     |t          j        ¦  «         |  
                    d|j        ¦  «         |                     d ¦  «         |  
                    d|j        ¦  «         d S )NÚfoor'   T)r   ÚServiceManagerr_   ÚsetServiceParentÚ
getFactoryÚbuildProtocolrM   r   r   r+   r7   rc   Údispatchr	   rO   ra   ÚconnectionLostrb   )r   ÚsmÚsvcÚwlistrS   s        r   ÚtestSMz JabberServiceManagerTests.testSM   s  € åÔ% e¨ZÑ8Ô8ˆÝ"Ñ$Ô$ˆØ×Ò˜RÑ Ô Ð ð ˆð �]Š]‰_Œ_×*Ò*¨4Ñ0Ô0ˆØˆŒØ"œ\ˆŒÔð 	×ÒÑÔÐð 	×Ò˜˜sÔ9Ñ:Ô:Ð:ð 	�Š�B�	Ô4Ñ5Ô5Ð5ð 	×Ò˜˜sÔ9Ñ:Ô:Ð:ð 	×Ò˜$ÑÔÐð 	×Ò˜˜sÔ<Ñ=Ô=Ð=Ð=Ð=r   N)r   r   r   ry   r   r   r   rm   rm   ~   s#   € € € € € ð>ð >ð >ð >ð >r   rm   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚRouterTestsz(
    Tests for L{component.Router}.
    c                 ó¾  ‡— t          j        ¦   «         }g Šˆfd„|_        t          ¦   «         }|                     d|j        ¦  «         |                      dt          |j        ¦  «        ¦  «         |                      |j        |j        d         ¦  «         t          j
        d¦  «        }|j                             |¦  «         |                      |g‰¦  «         dS )zJ
        Test route registration and routing on incoming stanzas.
        c                 ó.   •— ‰                      | ¦  «        S r   ©r   )ÚelementÚrouteds    €r   ú<lambda>z+RouterTests.test_addRoute.<locals>.<lambda>«   s   ø€  v§}¢}°WÑ'=Ô'=€ r   zexample.orgrJ   )ÚtestnsÚtestN)r   ÚRouterÚrouter   ÚaddRouteÚsinkr7   ÚlenÚroutesr   ÚElementÚsourcer*   )r   ÚrouterÚpiper   r€   s       @r   Útest_addRoutezRouterTests.test_addRoute¥   sÊ   ø€ õ Ô!Ñ#Ô#ˆØˆØ=Ð=Ð=Ð=ˆŒå‰yŒyˆØ�Š˜ t¤yÑ1Ô1Ð1Ø×Ò˜�C ¤Ñ.Ô.Ñ/Ô/Ð/Ø×Ò˜œ F¤M°-Ô$@ÑAÔAÐAå”.Ð!3Ñ4Ô4ˆØŒ×Ò˜Ñ!Ô!Ð!Ø×Ò˜'˜ FÑ+Ô+Ð+Ð+Ð+r   c                 ó°  ‡— t          ¦   «         }t          ¦   «         }t          j        ¦   «         }|                     d|j        ¦  «         |                     d|j        ¦  «         g Š|j                             dˆfd„¦  «         t          j        d¦  «        }d|d<   d|d<   |j         	                    |¦  «         |  
                    |g‰¦  «         dS )	z,
        Test routing of a message.
        úcomponent1.example.orgzcomponent2.example.orgú/*c                 ó.   •— ‰                      | ¦  «        S r   r~   ©r   Úoutgoings    €r   r�   z(RouterTests.test_route.<locals>.<lambda>Á   s   ø€ ¸H¿OºOÈGÑ<TÔ<T€ r   ©NÚpresenceÚfromÚtoN©r   r   r„   r†   r‡   r‹   rN   r   rŠ   r*   r7   )r   Ú
component1Ú
component2rŒ   Ústanzar”   s        @r   Ú
test_routezRouterTests.test_route¶   sÒ   ø€ õ ‘Y”Yˆ
Ý‘Y”Yˆ
ÝÔ!Ñ#Ô#ˆØ�ŠÐ0°*´/ÑBÔBÐBØ�ŠÐ0°*´/ÑBÔBÐBàˆØÔ×%Ò% dÐ,TÐ,TÐ,TÐ,TÑUÔUÐUÝ”Ð 2Ñ3Ô3ˆØ1ˆˆv‰Ø/ˆˆt‰ØÔ×Ò˜vÑ&Ô&Ð&Ø×Ò˜&˜ 8Ñ,Ô,Ð,Ð,Ð,r   c                 ó°  ‡— t          ¦   «         }t          ¦   «         }t          j        ¦   «         }|                     d|j        ¦  «         |                     d|j        ¦  «         g Š|j                             dˆfd„¦  «         t          j        d¦  «        }d|d<   d|d<   |j         	                    |¦  «         |  
                    |g‰¦  «         dS )	a  
        Test routing of a message using the default route.

        The default route is the one with L{None} as its key in the
        routing table. It is taken when there is no more specific route
        in the routing table that matches the stanza's destination.
        r�   Nr‘   c                 ó.   •— ‰                      | ¦  «        S r   r~   r“   s    €r   r�   z/RouterTests.test_routeDefault.<locals>.<lambda>×   s   ø€ °X·_²_ÀWÑ5MÔ5M€ r   r•   r—   zexample.comr˜   r™   )r   rš   Ús2srŒ   rœ   r”   s        @r   Útest_routeDefaultzRouterTests.test_routeDefaultÈ   sÐ   ø€ õ ‘Y”Yˆ
Ý‰iŒiˆÝÔ!Ñ#Ô#ˆØ�ŠÐ0°*´/ÑBÔBÐBØ�Š˜˜cœhÑ'Ô'Ð'àˆØŒ
×Ò˜tÐ%MÐ%MÐ%MÐ%MÑNÔNÐNÝ”Ð 2Ñ3Ô3ˆØ1ˆˆv‰Ø$ˆˆt‰ØÔ×Ò˜vÑ&Ô&Ð&Ø×Ò˜&˜ 8Ñ,Ô,Ð,Ð,Ð,r   N)r   r   r   r]   rŽ   r�   r¡   r   r   r   r{   r{       sK   € € € € € ðð ð,ð ,ð ,ð"-ð -ð -ð$-ð -ð -ð -ð -r   r{   c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )Ú!ListenComponentAuthenticatorTestsz>
    Tests for L{component.ListenComponentAuthenticator}.
    c                 óš   — g | _         t          j        d¦  «        }t          j        |¦  «        | _        | j         j        | j        _        d S )Nr!   )r$   r   ÚListenComponentAuthenticatorr	   r(   r   r*   )r   r&   s     r   r1   z'ListenComponentAuthenticatorTests.setUpä   s@   € ØˆŒÝ!Ô>¸xÑHÔHˆÝ"Ô,¨]Ñ;Ô;ˆŒØ"œkÔ0ˆŒÔÐÐr   c                 ó:   — | j                              d¦  «         dS )zA
        Stub loseConnection because we are a transport.
        z	no reasonN)r	   ru   r0   s    r   ÚloseConnectionz0ListenComponentAuthenticatorTests.loseConnectionê   s    € ð 	Œ×%Ò% kÑ2Ô2Ð2Ð2Ð2r   c                 óà  ‡— g Šˆfd„}| j         }||_        |                     | ¦  «         |                      d|j        ¦  «         |                      |j        ¦  «         |                     d¦  «         |                      d|j	        ¦  «         |  
                    d|j        ¦  «         |                      |j        ¦  «         |                      d|j        j        f‰d         ¦  «         dS )zK
        The received stream header should set several attributes.
        c                 ó6   •— ‰                      | |f¦  «         d S r   r~   )ÚeventÚ
observerfnÚ	observerss     €r   ÚaddOnetimeObserverzPListenComponentAuthenticatorTests.test_streamStarted.<locals>.addOnetimeObserverö   s"   ø€ Ø×Ò˜e ZÐ0Ñ1Ô1Ð1Ð1Ð1r   Nzz<stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' to='component.example.org'>)r   r   r‘   r3   )r	   r­   ÚmakeConnectionÚassertIdenticalr-   ÚassertFalseÚ_headerSentr,   r7   ÚversionÚassertNotIdenticalÚ
assertTruer&   Ú	onElement)r   r­   rS   r¬   s      @r   Útest_streamStartedz4ListenComponentAuthenticatorTests.test_streamStartedð   s  ø€ ð ˆ	ð	2ð 	2ð 	2ð 	2ð 	2ð Œ^ˆØ 2ˆÔà
×Ò˜$ÑÔÐØ×Ò˜T 2¤6Ñ*Ô*Ð*Ø×Ò˜œÑ(Ô(Ð(à
�Šð*ñ	
ô 	
ð 	
ð
 	×Ò˜ ¤Ñ,Ô,Ð,Ø×Ò  b¤fÑ-Ô-Ð-Ø�Š˜œÑ'Ô'Ð'Ø×Ò˜$ Ô 0Ô :Ð;¸YÀr¼]ÑKÔKÐKÐKÐKr   c                 ó  — g }| j         }|j        |_        |                     | ¦  «         |                     d¦  «         |                      dt          |¦  «        ¦  «         |                      d|d         j        ¦  «         dS )zM
        The received stream header should have a correct namespace.
        zp<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='component.example.org'>rJ   zinvalid-namespacer3   N©r	   r   ÚsendStreamErrorr®   r,   r7   rˆ   Ú	condition©r   ÚstreamErrorsrS   s      r   Ú test_streamStartedWrongNamespacezBListenComponentAuthenticatorTests.test_streamStartedWrongNamespace
  s�   € ð ˆàŒ^ˆØ)Ô0ˆÔØ
×Ò˜$ÑÔÐØ
�Šð*ñ	
ô 	
ð 	
ð
 	×Ò˜�C Ñ-Ô-Ñ.Ô.Ð.Ø×ÒÐ,¨l¸2Ô.>Ô.HÑIÔIÐIÐIÐIr   c                 ó  — g }| j         }|j        |_        |                     | ¦  «         |                     d¦  «         |                      dt          |¦  «        ¦  «         |                      d|d         j        ¦  «         dS )zJ
        The received stream header should have a 'to' attribute.
        z_<stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams'>rJ   zimproper-addressingr3   Nr¸   r»   s      r   Útest_streamStartedNoToz8ListenComponentAuthenticatorTests.test_streamStartedNoTo  s�   € ð ˆàŒ^ˆØ)Ô0ˆÔØ
×Ò˜$ÑÔÐØ
�Šð?ñ	
ô 	
ð 	
ð 	×Ò˜�C Ñ-Ô-Ñ.Ô.Ð.Ø×ÒÐ.°¸RÔ0@Ô0JÑKÔKÐKÐKÐKr   c                 óø   — g }| j         }|j        |j        _        t	          j        d¦  «        }|                     d¦  «         |j                             |¦  «         |                      d|d         ¦  «         dS )z<
        We expect a handshake element with a hash.
        )újabber:component:acceptr4   Ú1234r3   N)	r	   r   r&   ÚonHandshaker   rŠ   Ú
addContentrµ   r7   )r   Ú
handshakesrS   r4   s       r   Útest_onElementz0ListenComponentAuthenticatorTests.test_onElement+  sy   € ð ˆ
àŒ^ˆØ'1Ô'8ˆÔÔ$å”NÐ#KÑLÔLˆ	Ø×Ò˜VÑ$Ô$Ð$Ø
Ô×"Ò" 9Ñ-Ô-Ð-Ø×Ò˜ ¨B¤Ñ0Ô0Ð0Ð0Ð0r   c                 ó  — g }g }| j         }|j        |j        _        |j        |_        t          j        d¦  «        }|j                             |¦  «         |                      |¦  «         |  	                    d|d         j
        ¦  «         dS )z9
        Reject elements that are not handshakes
        )rÁ   Úmessageúnot-authorizedr3   N)r	   r   r&   rÃ   r¹   r   rŠ   rµ   r°   r7   rº   )r   rÅ   r¼   rS   r   s        r   Útest_onElementNotHandshakez<ListenComponentAuthenticatorTests.test_onElementNotHandshake9  sŽ   € ð ˆ
ØˆàŒ^ˆØ'1Ô'8ˆÔÔ$Ø)Ô0ˆÔå”.Ð!GÑHÔHˆØ
Ô×"Ò" 7Ñ+Ô+Ð+Ø×Ò˜Ñ$Ô$Ð$Ø×ÒÐ)¨<¸Ô+;Ô+EÑFÔFÐFÐFÐFr   c                 ó2  ‡— g Šˆfd„}| j         }|                     t           j        |¦  «         d|_        d}|j                             |¦  «         |                      d| j        d         ¦  «         |                      dt          ‰¦  «        ¦  «         dS )zU
        Receiving a handshake matching the secret authenticates the stream.
        c                 ó2   •— ‰                      | ¦  «         d S r   r~   ©rS   Úauthds    €r   ÚauthenticatedzIListenComponentAuthenticatorTests.test_onHandshake.<locals>.authenticatedO  ó   ø€ Ø�LŠL˜ÑÔÐÐÐr   rÂ   Ú(32532c0f7dbf1253c095b18b18e36d38d94c1256rK   r3   rJ   N)	r	   r­   rO   r-   r&   rÃ   r7   r$   rˆ   )r   rÏ   rS   ÚtheHashrÎ   s       @r   Útest_onHandshakez2ListenComponentAuthenticatorTests.test_onHandshakeI  s¦   ø€ ð ˆð	ð 	ð 	ð 	ð 	ð Œ^ˆØ
×Ò�iÔ:¸MÑJÔJÐJØˆŒØ<ˆØ
Ô×$Ò$ WÑ-Ô-Ð-Ø×Ò˜¨¬°R¬Ñ9Ô9Ð9Ø×Ò˜�C ™JœJÑ'Ô'Ð'Ð'Ð'r   c                 óN  ‡— g }g Šˆfd„}| j         }|                     t           j        |¦  «         |j        |_        d|_        d}|j                             |¦  «         |                      d|d         j	        ¦  «         |                      dt          ‰¦  «        ¦  «         dS )zH
        Receiving a bad handshake should yield a stream error.
        c                 ó2   •— ‰                      | ¦  «         d S r   r~   rÍ   s    €r   rÏ   zRListenComponentAuthenticatorTests.test_onHandshakeWrongHash.<locals>.authenticateda  rÐ   r   rÂ   rÉ   r3   r   N)r	   r­   rO   r   r¹   r-   r&   rÃ   r7   rº   rˆ   )r   r¼   rÏ   rS   rÒ   rÎ   s        @r   Útest_onHandshakeWrongHashz;ListenComponentAuthenticatorTests.test_onHandshakeWrongHashZ  s¹   ø€ ð ˆØˆð	ð 	ð 	ð 	ð 	ð Œ^ˆØ
×Ò�iÔ:¸MÑJÔJÐJØ)Ô0ˆÔàˆŒØˆØ
Ô×$Ò$ WÑ-Ô-Ð-Ø×ÒÐ)¨<¸Ô+;Ô+EÑFÔFÐFØ×Ò˜�C ™JœJÑ'Ô'Ð'Ð'Ð'r   N)r   r   r   r]   r1   r§   r¶   r½   r¿   rÆ   rÊ   rÓ   rÖ   r   r   r   r£   r£   ß   s±   € € € € € ðð ð1ð 1ð 1ð3ð 3ð 3ðLð Lð Lð4Jð Jð Jð"Lð Lð Lð 1ð 1ð 1ðGð Gð Gð (ð (ð (ð"(ð (ð (ð (ð (r   r£   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚXMPPComponentServerFactoryTestsz<
    Tests for L{component.XMPPComponentServerFactory}.
    c                 óä   — t          j        ¦   «         | _        t          j        | j        d¦  «        | _        | j                             d ¦  «        | _        t          d¦  «        | j        _        d S )Nr!   úcomponent.example.org)	r   r„   rŒ   ÚXMPPComponentServerFactoryÚfactoryrs   r	   r
   Ú
thisEntityr0   s    r   r1   z%XMPPComponentServerFactoryTests.setUpt  sX   € ÝÔ&Ñ(Ô(ˆŒÝ Ô;¸D¼KÈÑRÔRˆŒØœ×3Ò3°DÑ9Ô9ˆŒÝ$'Ð(?Ñ$@Ô$@ˆŒÔ!Ð!Ð!r   c                 óZ  — | j                              | j         t           j        ¦  «         |                      d| j         j        ¦  «         |                      d| j        j        ¦  «         |                      d| j         j        ¦  «         |                      d| j         j        ¦  «         dS )zY
        A new connection increases the stream serial count. No logs by default.
        r   rJ   N)	r	   rt   ÚSTREAM_CONNECTED_EVENTr7   ÚserialrÜ   r¯   ÚrawDataInFnÚrawDataOutFnr0   s    r   Útest_makeConnectionz3XMPPComponentServerFactoryTests.test_makeConnectionz  s“   € ð 	Œ×Ò ¤µ	Ô0PÑQÔQÐQØ×Ò˜˜DœNÔ1Ñ2Ô2Ð2Ø×Ò˜˜DœLÔ/Ñ0Ô0Ð0Ø×Ò˜T 4¤>Ô#=Ñ>Ô>Ð>Ø×Ò˜T 4¤>Ô#>Ñ?Ô?Ð?Ð?Ð?r   c                 óò   — d| j         _        | j                             | j        t          j        ¦  «         |                      d| j        j        ¦  «         |                      d| j        j        ¦  «         dS )zD
        Setting logTraffic should set up raw data loggers.
        TN)rÜ   Ú
logTrafficr	   rt   rß   r³   rá   râ   r0   s    r   Útest_makeConnectionLogTrafficz=XMPPComponentServerFactoryTests.test_makeConnectionLogTraffic„  sg   € ð #'ˆŒÔØŒ×Ò ¤µ	Ô0PÑQÔQÐQØ×Ò  d¤nÔ&@ÑAÔAÐAØ×Ò  d¤nÔ&AÑBÔBÐBÐBÐBr   c                 ón  — | j                              | j         t           j        ¦  «          G d„ dt          ¦  «        }t	          j         |¦   «         ¦  «        }| j                              |t           j        ¦  «         |                      dt          |  	                    |¦  «        ¦  «        ¦  «         dS )zQ
        An observer for stream errors should trigger onError to log it.
        c                   ó   — e Zd ZdS )ú?XMPPComponentServerFactoryTests.test_onError.<locals>.TestErrorN)r   r   r   r   r   r   Ú	TestErrorré   “  s   € € € € € ØˆDr   rê   rJ   N)
r	   rt   rß   Ú	Exceptionr   ÚFailureÚSTREAM_ERROR_EVENTr7   rˆ   ÚflushLoggedErrors)r   rê   Úreasons      r   Útest_onErrorz,XMPPComponentServerFactoryTests.test_onError�  s¯   € ð 	Œ×Ò ¤µ	Ô0PÑQÔQÐQð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	õ ”  ¡¤Ñ-Ô-ˆØŒ×Ò ­	Ô(DÑEÔEÐEØ×Ò˜�C × 6Ò 6°yÑ AÔ AÑBÔBÑCÔCÐCÐCÐCr   c                 óð   — | j                              | j         t           j        ¦  «         |                      d| j        j        ¦  «         |                      | j         | j        j        d         ¦  «         dS )zG
        Make sure a new stream is added to the routing table.
        rÚ   N)r	   rt   rO   ÚassertInrŒ   r‰   r¯   r0   s    r   Útest_connectionInitializedz:XMPPComponentServerFactoryTests.test_connectionInitializedš  so   € ð 	Œ×Ò ¤µ	Ô0LÑMÔMÐMØ�ŠÐ-¨t¬{Ô/AÑBÔBÐBØ×ÒØŒN˜DœKÔ.Ð/FÔGñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óä   — | j                              | j         t           j        ¦  «         | j                              dt           j        ¦  «         |                      d| j        j        ¦  «         dS )zU
        Make sure a stream is removed from the routing table on disconnect.
        NrÚ   )r	   rt   rO   ÚSTREAM_END_EVENTÚassertNotInrŒ   r‰   r0   s    r   Útest_connectionLostz3XMPPComponentServerFactoryTests.test_connectionLost¤  s^   € ð 	Œ×Ò ¤µ	Ô0LÑMÔMÐMØŒ×Ò ¥iÔ&@ÑAÔAÐAØ×ÒÐ0°$´+Ô2DÑEÔEÐEÐEÐEr   N)
r   r   r   r]   r1   rã   ræ   rð   ró   r÷   r   r   r   rØ   rØ   o  s‰   € € € € € ðð ðAð Að Að@ð @ð @ðCð Cð CðDð Dð Dð
ð 
ð 
ðFð Fð Fð Fð Fr   rØ   N)r]   Úhashlibr   Úzope.interface.verifyr   Útwisted.pythonr   Útwisted.trialr   Útwisted.words.protocols.jabberr   r   r	   Ú"twisted.words.protocols.jabber.jidr
   Útwisted.words.xishr   Útwisted.words.xish.utilityr   r   ÚTestCaser   rA   rW   rY   r_   rm   r{   r£   rØ   r   r   r   ú<module>r     s]  ððð ð Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .à "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ø .Ð .Ð .Ð .Ð .Ð .ð ð  ð  ð  ð  ñ  ô  ð  ð%ð %ð %ð %ð %¨(Ô*;ñ %ô %ð %ðP2ð 2ð 2ð 2ð 2˜Ô*ñ 2ô 2ð 2ð<
0ð 
0ð 
0ð 
0ð 
0�8Ô$ñ 
0ô 
0ð 
0ð+ð +ð +ð +ð +˜9Ô,ñ +ô +ð +ð >ð >ð >ð >ð > Ô 1ñ >ô >ð >ðD<-ð <-ð <-ð <-ð <-�(Ô#ñ <-ô <-ð <-ð~M(ð M(ð M(ð M(ð M(¨Ô(9ñ M(ô M(ð M(ð`;Fð ;Fð ;Fð ;Fð ;F hÔ&7ñ ;Fô ;Fð ;Fð ;Fð ;Fr   