+
    üÐjR6  ã                   óÖ  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt  ! R	 R
4      t ! R R]P(                  4      t ! R R]P(                  4      t ! R R]P(                  4      t ! R R]
P0                  4      t ! R R]P(                  4      t ! R R]P(                  4      t ! R R]P(                  4      t ! R R]P(                  4      tR# )z7
Tests for L{twisted.words.protocols.jabber.component}
)Úsha1)ÚverifyObject)Úfailure)Úunittest)Ú	componentÚijabberÚ	xmlstream)ÚJID)Údomish)ÚXmlPipec                   ó,   a € ] tR t^t o R tR tRtV tR# )ÚDummyTransportc                ó   € Wn         R # ©N©Úlist)Úselfr   s   &&ÚI/usr/lib/python3/dist-packages/twisted/words/test/test_jabbercomponent.pyÚ__init__ÚDummyTransport.__init__   s   € ØŽ	ó    c                ó<   € V P                   P                  V4       R # r   )r   Úappend)r   Úbytess   &&r   ÚwriteÚDummyTransport.write   s   € Ø�	‰	×Ñ˜Ör   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € ò÷ ð  r   r   c                   ó,   a € ] tR t^t o R tR tRtV tR# )Ú#ComponentInitiatingInitializerTestsc                óö  € . V n         \        P                  ! 4       V n        R V P                  n        \        P
                  ! V P                  4      V n        RV P                  n        V P                   P                  V P                  n        V P                  P                  4        V P                  P                  R4       RV P                  n        \        P                  ! V P                  4      V n        R# )Úsecretútest:componentz‚<stream:stream xmlns='test:component' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='12345' version='1.0'>Ú12345N)Úoutputr   ÚAuthenticatorÚauthenticatorÚpasswordÚ	XmlStreamÚ	namespacer   ÚsendÚconnectionMadeÚdataReceivedÚsidr   ÚComponentInitiatingInitializerÚinit©r   s   &r   ÚsetUpÚ)ComponentInitiatingInitializerTests.setUp   s­   € ØˆŒä&×4Ò4Ó6ˆÔØ&.ˆ×ÑÔ#Ü"×,Ò,¨T×-?Ñ-?Ó@ˆŒØ#3ˆ�‰Ô Ø"Ÿk™k×0Ñ0ˆ�‰ÔØ�‰×%Ñ%Ô'Ø�‰×#Ñ#ð;ô	
ð
 %ˆ�‰ÔÜ×<Ò<¸T¿^¹^ÓLˆŽ	r   c                ó”  € V P                   P                  4       pV P                  R,          pV P                  RVP                  4       V P                  RVP
                  4       V P                  \        R4      P                  4       \        V4      4       . Vn	        V P                  P                  VP                  4       4       V# )z/
Test basic operations of component handshake.
Ú	handshaker(   éÿÿÿÿó   12345secret)r5   Ú
initializer*   ÚassertEqualÚnameÚurir   Ú	hexdigestÚstrÚchildrenr   r2   ÚtoXml)r   Údr:   s   &  r   ÚtestHandshakeÚ1ComponentInitiatingInitializerTests.testHandshake-   s™   € ð
 �I‰I× Ñ Ó"ˆð —K‘K •Oˆ	Ø×Ñ˜ i§n¡nÔ5Ø×ÑÐ)¨9¯=©=Ô9Ø×ÑœÐ2Ó3×=Ñ=Ó?ÄÀYÃÔPð  ˆ	ÔØ�‰×#Ñ# I§O¡OÓ$5Ô6àˆr   )r,   r5   r*   r   N)r   r   r   r   r7   rF   r    r!   r"   s   @r   r%   r%      s   ø‡ € òM÷"ð r   r%   c                   ó,   a € ] tR t^Ct o R tR tRtV tR# )ÚComponentAuthTestsc                ó   € R V n         R# ©TN©ÚauthComplete)r   Ústreams   &&r   Ú
authPassedÚComponentAuthTests.authPassedD   s
   € Ø ˆÖr   c                ó   € R V n         . p\        P                  ! RR4      p\        P                  ! V4      p\        V4      Vn        VP                  \        P                  V P                  4       VP                  4        VP                  R4       \        R
4      P                  4       P                  R4      pV P                  V^,          RV,           R,           4       VP                  R4       V P                  V P                   R4       R	# )FÚcjidr'   sv   <stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' from='cjid' id='12345'>Úasciis   <handshake>s   </handshake>ú<handshake/>TNr<   )rM   r   ÚConnectComponentAuthenticatorr   r.   r   Ú	transportÚaddObserverÚSTREAM_AUTHD_EVENTrO   r1   r2   r   rA   Úencoder>   )r   ÚoutlistÚcaÚxsÚhvs   &    r   ÚtestAuthÚComponentAuthTests.testAuthG   sÖ   € Ø!ˆÔØˆä×4Ò4°V¸XÓFˆÜ× Ò  Ó$ˆÜ% gÓ.ˆŒà
�‰”y×3Ñ3°T·_±_ÔEð 	×ÑÔØ
�‰ð Fô	
ô
 Ð&Ó'×1Ñ1Ó3×:Ñ:¸7ÓCˆà×Ñ˜ � ^°bÕ%8¸?Õ%JÔKà
�‰˜Ô'à×Ñ˜×*Ñ*¨DÖ1r   rL   N)r   r   r   r   rO   r^   r    r!   r"   s   @r   rI   rI   C   s   ø‡ € ò!÷2ð 2r   rI   c                   ó*   a € ] tR t^at o RtR tRtV tR# )ÚServiceTestsz!
Tests for L{component.Service}.
c                ód   € \         P                  ! 4       p\        \        P                  V4       R# )z6
L{component.Service} implements L{ijabber.IService}.
N)r   ÚServicer   r   ÚIService)r   Úservices   & r   Útest_interfaceÚServiceTests.test_interfacef   s"   € ô ×#Ò#Ó%ˆÜ”W×%Ñ% wÖ/r   © N)r   r   r   r   Ú__doc__rf   r    r!   r"   s   @r   ra   ra   a   s   ø‡ € ñ÷0ð 0r   ra   c                   ó8   a € ] tR t^nt o R tR tR tR tRtV t	R# )ÚJabberServiceHarnessc                ó0   € R V n         R V n        R V n        R# )FN©ÚcomponentConnectedFlagÚcomponentDisconnectedFlagÚtransportConnectedFlagr6   s   &r   r   ÚJabberServiceHarness.__init__o   s   € Ø&+ˆÔ#Ø).ˆÔ&Ø&+ˆÖ#r   c                ó   € R V n         R# rK   )rn   ©r   r   s   &&r   ÚcomponentConnectedÚ'JabberServiceHarness.componentConnectedt   ó
   € Ø&*ˆÖ#r   c                ó   € R V n         R# rK   )ro   r6   s   &r   ÚcomponentDisconnectedÚ*JabberServiceHarness.componentDisconnectedw   s
   € Ø)-ˆÖ&r   c                ó   € R V n         R# rK   )rp   rs   s   &&r   ÚtransportConnectedÚ'JabberServiceHarness.transportConnectedz   rv   r   rm   N)
r   r   r   r   r   rt   rx   r{   r    r!   r"   s   @r   rk   rk   n   s   ø‡ € ò,ò
+ò.÷+ð +r   rk   c                   ó&   a € ] tR t^~t o R tRtV tR# )ÚJabberServiceManagerTestsc                ó  € \         P                  ! R R4      p\        4       pVP                  V4       . pVP	                  4       P                  R4      pWn        VP                  VP                  n        VP                  4        V P                  RVP                  4       VP                  V\        P                  4       V P                  RVP                  4       VP!                  R4       V P                  RVP"                  4       R# )Úfoor-   NT)r   ÚServiceManagerrk   ÚsetServiceParentÚ
getFactoryÚbuildProtocolrV   r   r   r1   r>   rp   Údispatchr   rX   rn   ÚconnectionLostro   )r   ÚsmÚsvcÚwlistr\   s   &    r   ÚtestSMÚ JabberServiceManagerTests.testSM   sÚ   € ä×%Ò% e¨ZÓ8ˆÜ"Ó$ˆØ×Ñ˜RÔ ð ˆð �]‰]‹_×*Ñ*¨4Ó0ˆØŒØ"Ÿ\™\ˆ�‰Ôð 	×ÑÔð 	×Ñ˜˜s×9Ñ9Ô:ð 	�‰�Bœ	×4Ñ4Ô5ð 	×Ñ˜˜s×9Ñ9Ô:ð 	×Ñ˜$Ôð 	×Ñ˜˜s×<Ñ<Ö=r   rh   N)r   r   r   r   rŠ   r    r!   r"   s   @r   r~   r~   ~   s   ø‡ € ÷>ð >r   r~   c                   ó6   a € ] tR t^ t o RtR tR tR tRtV t	R# )ÚRouterTestsz 
Tests for L{component.Router}.
c                óÄ  a€ \         P                  ! 4       p. oV3R lVn        \        4       pVP	                  RVP
                  4       V P                  ^\        VP                  4      4       V P                  VP
                  VP                  R,          4       \        P                  ! R4      pVP                  P                  V4       V P                  V.S4       R# )z:
Test route registration and routing on incoming stanzas.
c                 ó&   <€ SP                  V 4      # r   ©r   )ÚelementÚrouteds   &€r   Ú<lambda>Ú+RouterTests.test_addRoute.<locals>.<lambda>«   s   ø€  v§}¡}°WÔ'=r   zexample.orgN)ÚtestnsÚtest)r   ÚRouterÚrouter   ÚaddRouteÚsinkr>   ÚlenÚroutesr
   ÚElementÚsourcer0   )r   ÚrouterÚpiper‘   r’   s   &   @r   Útest_addRouteÚRouterTests.test_addRoute¥   s¡   ø€ ô ×!Ò!Ó#ˆØˆÜ=ˆŒä‹yˆØ�‰˜ t§y¡yÔ1Ø×Ñ˜œC §¡Ó.Ô/Ø×Ñ˜Ÿ™ F§M¡M°-Õ$@ÔAä—.’.Ð!3Ó4ˆØ�‰×Ñ˜Ô!Ø×Ñ˜'˜ FÖ+r   c                óª  a€ \        4       p\        4       p\        P                  ! 4       pVP                  RVP                  4       VP                  RVP                  4       . oVP
                  P                  RV3R l4       \        P                  ! R4      pRVR&   RVR&   VP
                  P                  V4       V P                  V.S4       R# )	z
Test routing of a message.
úcomponent1.example.orgzcomponent2.example.orgú/*c                 ó&   <€ SP                  V 4      # r   r�   ©r‘   Úoutgoings   &€r   r“   Ú(RouterTests.test_route.<locals>.<lambda>Á   s   ø€ ¸H¿O¹OÈGÔ<Tr   NÚfromÚto©NÚpresence©r   r   r—   r™   rš   rž   rW   r
   r�   r0   r>   )r   Ú
component1Ú
component2rŸ   Ústanzar¨   s   &    @r   Ú
test_routeÚRouterTests.test_route¶   sª   ø€ ô “Yˆ
Ü“Yˆ
Ü×!Ò!Ó#ˆØ�‰Ð0°*·/±/ÔBØ�‰Ð0°*·/±/ÔBàˆØ×Ñ×%Ñ% dÔ,TÔUÜ—’Ð 2Ó3ˆØ1ˆˆv‰Ø/ˆˆt‰Ø×Ñ×Ñ˜vÔ&Ø×Ñ˜&˜ 8Ö,r   c                óª  a€ \        4       p\        4       p\        P                  ! 4       pVP                  RVP                  4       VP                  RVP                  4       . oVP
                  P                  RV3R l4       \        P                  ! R4      pRVR&   RVR&   VP
                  P                  V4       V P                  V.S4       R# )	zí
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P                  V 4      # r   r�   r§   s   &€r   r“   Ú/RouterTests.test_routeDefault.<locals>.<lambda>×   s   ø€ °X·_±_ÀWÔ5Mr   rª   zexample.comr«   r¬   r®   )r   r¯   Ús2srŸ   r±   r¨   s   &    @r   Útest_routeDefaultÚRouterTests.test_routeDefaultÈ   s§   ø€ ô “Yˆ
Ü‹iˆÜ×!Ò!Ó#ˆØ�‰Ð0°*·/±/ÔBØ�‰˜˜cŸh™hÔ'àˆØ�
‰
×Ñ˜tÔ%MÔNÜ—’Ð 2Ó3ˆØ1ˆˆv‰Ø$ˆˆt‰Ø×Ñ×Ñ˜vÔ&Ø×Ñ˜&˜ 8Ö,r   rh   N)
r   r   r   r   ri   r¡   r²   r¸   r    r!   r"   s   @r   r�   r�       s   ø‡ € ñò,ò"-÷$-ð -r   r�   c                   óZ   a € ] tR t^ßt o RtR tR tR tR tR t	R t
R tR	 tR
 tRtV tR# )Ú!ListenComponentAuthenticatorTestsz6
Tests for L{component.ListenComponentAuthenticator}.
c                óÀ   € . V n         \        P                  ! R 4      p\        P                  ! V4      V n        V P                   P
                  V P                  n        R# )r'   N)r*   r   ÚListenComponentAuthenticatorr   r.   r   r0   )r   r,   s   & r   r7   Ú'ListenComponentAuthenticatorTests.setUpä   sA   € ØˆŒÜ!×>Ò>¸xÓHˆÜ"×,Ò,¨]Ó;ˆŒØ"Ÿk™k×0Ñ0ˆ�‰Ör   c                ó<   € V P                   P                  R4       R# )z1
Stub loseConnection because we are a transport.
z	no reasonN)r   r†   r6   s   &r   ÚloseConnectionÚ0ListenComponentAuthenticatorTests.loseConnectionê   s   € ð 	�‰×%Ñ% kÖ2r   c                óò  a€ . oV3R lpV P                   pWn        VP                  V 4       V P                  RVP                  4       V P                  VP                  4       VP                  R4       V P                  RVP                  4       V P                  RVP                  4       V P                  VP                  4       V P                  RVP                  P                  3SR,          4       R# )z;
The received stream header should set several attributes.
c                 ó,   <€ SP                  W34       R # r   r�   )ÚeventÚ
observerfnÚ	observerss   &&€r   ÚaddOnetimeObserverÚPListenComponentAuthenticatorTests.test_streamStarted.<locals>.addOnetimeObserverö   s   ø€ Ø×Ñ˜eÐ0Ö1r   Nzz<stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' to='component.example.org'>r¥   )é    rÉ   r;   )r   rÇ   ÚmakeConnectionÚassertIdenticalr3   ÚassertFalseÚ_headerSentr2   r>   ÚversionÚassertNotIdenticalÚ
assertTruer,   Ú	onElement)r   rÇ   r\   rÆ   s   &  @r   Útest_streamStartedÚ4ListenComponentAuthenticatorTests.test_streamStartedð   sÄ   ø€ ð ˆ	õ	2ð �^‰^ˆØ 2Ôà
×Ñ˜$ÔØ×Ñ˜T 2§6¡6Ô*Ø×Ñ˜Ÿ™Ô(à
�‰ð*ô	
ð
 	×Ñ˜ §¡Ô,Ø×Ñ  b§f¡fÔ-Ø�‰˜Ÿ™Ô'Ø×Ñ˜$ × 0Ñ 0× :Ñ :Ð;¸YÀr½]ÖKr   c                ó  € . pV P                   pVP                  Vn        VP                  V 4       VP	                  R4       V P                  ^\        V4      4       V P                  RVR,          P                  4       R# )z=
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'>zinvalid-namespaceNr;   ©r   r   ÚsendStreamErrorrÊ   r2   r>   r›   Ú	condition©r   ÚstreamErrorsr\   s   &  r   Ú test_streamStartedWrongNamespaceÚBListenComponentAuthenticatorTests.test_streamStartedWrongNamespace
  sr   € ð ˆà�^‰^ˆØ)×0Ñ0ˆÔØ
×Ñ˜$ÔØ
�‰ð*ô	
ð
 	×Ñ˜œC Ó-Ô.Ø×ÑÐ,¨l¸2Õ.>×.HÑ.HÖIr   c                ó  € . pV P                   pVP                  Vn        VP                  V 4       VP	                  R4       V P                  ^\        V4      4       V P                  RVR,          P                  4       R# )z:
The received stream header should have a 'to' attribute.
z_<stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams'>zimproper-addressingNr;   rÕ   rØ   s   &  r   Útest_streamStartedNoToÚ8ListenComponentAuthenticatorTests.test_streamStartedNoTo  sr   € ð ˆà�^‰^ˆØ)×0Ñ0ˆÔØ
×Ñ˜$ÔØ
�‰ð?ô	
ð 	×Ñ˜œC Ó-Ô.Ø×ÑÐ.°¸RÕ0@×0JÑ0JÖKr   c                ó  € . pV P                   pVP                  VP                  n        \        P
                  ! R4      pVP                  R4       VP                  P                  V4       V P                  RVR,          4       R# )z,
We expect a handshake element with a hash.
Ú1234N)újabber:component:acceptr:   r;   )	r   r   r,   ÚonHandshaker
   r�   Ú
addContentrÑ   r>   )r   Ú
handshakesr\   r:   s   &   r   Útest_onElementÚ0ListenComponentAuthenticatorTests.test_onElement+  sk   € ð ˆ
à�^‰^ˆØ'1×'8Ñ'8ˆ×ÑÔ$ä—N’NÐ#KÓLˆ	Ø×Ñ˜VÔ$Ø
×Ñ×"Ñ" 9Ô-Ø×Ñ˜ ¨B¥Ö0r   c                óH  € . p. pV P                   pVP                  VP                  n        VP                  Vn        \
        P                  ! R4      pVP                  P                  V4       V P                  V4       V P                  RVR,          P                  4       R# )z)
Reject elements that are not handshakes
únot-authorizedN)rá   Úmessager;   )r   r   r,   râ   rÖ   r
   r�   rÑ   rÌ   r>   r×   )r   rä   rÙ   r\   r‘   s   &    r   Útest_onElementNotHandshakeÚ<ListenComponentAuthenticatorTests.test_onElementNotHandshake9  s†   € ð ˆ
Øˆà�^‰^ˆØ'1×'8Ñ'8ˆ×ÑÔ$Ø)×0Ñ0ˆÔä—.’.Ð!GÓHˆØ
×Ñ×"Ñ" 7Ô+Ø×Ñ˜Ô$Ø×ÑÐ)¨<¸Õ+;×+EÑ+EÖFr   c                ó4  a€ . oV3R lpV P                   pVP                  \         P                  V4       RVn        RpVP                  P                  V4       V P                  RV P                  R,          4       V P                  ^\        S4      4       R# )zE
Receiving a handshake matching the secret authenticates the stream.
c                 ó*   <€ SP                  V 4       R # r   r�   ©r\   Úauthds   &€r   ÚauthenticatedÚIListenComponentAuthenticatorTests.test_onHandshake.<locals>.authenticatedO  ó   ø€ Ø�L‰L˜Ör   rà   Ú(32532c0f7dbf1253c095b18b18e36d38d94c1256rT   Nr;   )	r   rÇ   rX   r3   r,   râ   r>   r*   r›   )r   rð   r\   ÚtheHashrï   s   &   @r   Útest_onHandshakeÚ2ListenComponentAuthenticatorTests.test_onHandshakeI  s|   ø€ ð ˆõ	ð �^‰^ˆØ
×Ñœi×:Ñ:¸MÔJØˆŒØ<ˆØ
×Ñ×$Ñ$ WÔ-Ø×Ñ˜¨¯©°R­Ô9Ø×Ñ˜œC ›JÖ'r   c                óZ  a€ . p. oV3R lpV P                   pVP                  \         P                  V4       VP                  Vn        RVn        RpVP                  P                  V4       V P                  RVR,          P                  4       V P                  ^ \        S4      4       R# )z8
Receiving a bad handshake should yield a stream error.
c                 ó*   <€ SP                  V 4       R # r   r�   rî   s   &€r   rð   ÚRListenComponentAuthenticatorTests.test_onHandshakeWrongHash.<locals>.authenticateda  rò   r   rà   rè   Nr;   )r   rÇ   rX   r   rÖ   r3   r,   râ   r>   r×   r›   )r   rÙ   rð   r\   rô   rï   s   &    @r   Útest_onHandshakeWrongHashÚ;ListenComponentAuthenticatorTests.test_onHandshakeWrongHashZ  s“   ø€ ð ˆØˆõ	ð �^‰^ˆØ
×Ñœi×:Ñ:¸MÔJØ)×0Ñ0ˆÔàˆŒØˆØ
×Ñ×$Ñ$ WÔ-Ø×ÑÐ)¨<¸Õ+;×+EÑ+EÔFØ×Ñ˜œC ›JÖ'r   )r*   r   N)r   r   r   r   ri   r7   rÀ   rÒ   rÚ   rÝ   rå   rê   rõ   rú   r    r!   r"   s   @r   r»   r»   ß   s@   ø‡ € ñò1ò3òLò4Jò"Lò 1òGò (÷"(ð (r   r»   c                   óH   a € ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )ÚXMPPComponentServerFactoryTestsio  z4
Tests for L{component.XMPPComponentServerFactory}.
c                óú   € \         P                  ! 4       V n        \         P                  ! V P                  R 4      V n        V P                  P                  R4      V n        \        R4      V P                  n        R# )r'   Núcomponent.example.org)	r   r—   rŸ   ÚXMPPComponentServerFactoryÚfactoryr„   r   r	   Ú
thisEntityr6   s   &r   r7   Ú%XMPPComponentServerFactoryTests.setUpt  sR   € Ü×&Ò&Ó(ˆŒÜ ×;Ò;¸D¿K¹KÈÓRˆŒØŸ™×3Ñ3°DÓ9ˆŒÜ$'Ð(?Ó$@ˆ�‰Ö!r   c                óž  € V P                   P                  V P                   \         P                  4       V P                  ^ V P                   P                  4       V P                  ^V P
                  P                  4       V P                  RV P                   P                  4       V P                  RV P                   P                  4       R# )zI
A new connection increases the stream serial count. No logs by default.
N)	r   r…   ÚSTREAM_CONNECTED_EVENTr>   Úserialr  rË   ÚrawDataInFnÚrawDataOutFnr6   s   &r   Útest_makeConnectionÚ3XMPPComponentServerFactoryTests.test_makeConnectionz  sŠ   € ð 	�‰×Ñ §¡´	×0PÑ0PÔQØ×Ñ˜˜DŸN™N×1Ñ1Ô2Ø×Ñ˜˜DŸL™L×/Ñ/Ô0Ø×Ñ˜T 4§>¡>×#=Ñ#=Ô>Ø×Ñ˜T 4§>¡>×#>Ñ#>Ö?r   c                ó(  € RV P                   n        V P                  P                  V P                  \        P                  4       V P                  RV P                  P                  4       V P                  RV P                  P                  4       R# )z4
Setting logTraffic should set up raw data loggers.
TN)r  Ú
logTrafficr   r…   r  rÏ   r  r  r6   s   &r   Útest_makeConnectionLogTrafficÚ=XMPPComponentServerFactoryTests.test_makeConnectionLogTraffic„  sb   € ð #'ˆ�‰ÔØ�‰×Ñ §¡´	×0PÑ0PÔQØ×Ñ  d§n¡n×&@Ñ&@ÔAØ×Ñ  d§n¡n×&AÑ&AÖBr   c                ój  € V P                   P                  V P                   \         P                  4        ! R R\        4      p\        P
                  ! V! 4       4      pV P                   P                  V\         P                  4       V P                  ^\        V P                  V4      4      4       R# )zA
An observer for stream errors should trigger onError to log it.
c                   ó   € ] tR tRtRtR# )Ú?XMPPComponentServerFactoryTests.test_onError.<locals>.TestErrori“  rh   N)r   r   r   r   r    rh   r   r   Ú	TestErrorr  “  s   † Ûr   r  N)
r   r…   r  Ú	Exceptionr   ÚFailureÚSTREAM_ERROR_EVENTr>   r›   ÚflushLoggedErrors)r   r  Úreasons   &  r   Útest_onErrorÚ,XMPPComponentServerFactoryTests.test_onError�  sz   € ð 	�‰×Ñ §¡´	×0PÑ0PÔQô	œ	ô 	ô —’¡£Ó-ˆØ�‰×Ñ ¬	×(DÑ(DÔEØ×Ñ˜œC × 6Ñ 6°yÓ AÓBÖCr   c                ó(  € V P                   P                  V P                   \         P                  4       V P                  RV P                  P
                  4       V P                  V P                   V P                  P
                  R,          4       R# )z7
Make sure a new stream is added to the routing table.
rÿ   N)r   r…   rX   ÚassertInrŸ   rœ   rË   r6   s   &r   Útest_connectionInitializedÚ:XMPPComponentServerFactoryTests.test_connectionInitializedš  sb   € ð 	�‰×Ñ §¡´	×0LÑ0LÔMØ�‰Ð-¨t¯{©{×/AÑ/AÔBØ×ÑØ�N‰N˜DŸK™K×.Ñ.Ð/FÕGö	
r   c                ó  € V P                   P                  V P                   \         P                  4       V P                   P                  R\         P                  4       V P	                  RV P
                  P                  4       R# )zE
Make sure a stream is removed from the routing table on disconnect.
Nrÿ   )r   r…   rX   ÚSTREAM_END_EVENTÚassertNotInrŸ   rœ   r6   s   &r   Útest_connectionLostÚ3XMPPComponentServerFactoryTests.test_connectionLost¤  sW   € ð 	�‰×Ñ §¡´	×0LÑ0LÔMØ�‰×Ñ ¤i×&@Ñ&@ÔAØ×ÑÐ0°$·+±+×2DÑ2DÖEr   )r  rŸ   r   N)r   r   r   r   ri   r7   r	  r  r  r  r!  r    r!   r"   s   @r   rý   rý   o  s3   ø‡ € ñòAò@òCòDò
÷Fð Fr   rý   N)ri   Ú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%   rI   ra   rc   rk   r~   r�   r»   rý   rh   r   r   Ú<module>r,     sÉ   ðñõ å .å "Ý "ß HÑ HÝ 2Ý %Ý .÷ ñ  ô%¨(×*;Ñ*;ô %ôP2˜×*Ñ*ô 2ô<
0�8×$Ñ$ô 
0ô+˜9×,Ñ,ô +ô > × 1Ñ 1ô >ôD<-�(×#Ñ#ô <-ô~M(¨×(9Ñ(9ô M(ô`;F h×&7Ñ&7ö ;Fr   