This is an automated email from the ASF dual-hosted git repository. ralaoui pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-vysper.git
The following commit(s) were added to refs/heads/master by this push: new 42fd131 Pass the current SessionContext to the StanzaRelay 42fd131 is described below commit 42fd1318b3fffcf65fc55e520cf72022f552e1ed Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Sat Aug 31 20:06:01 2019 +0200 Pass the current SessionContext to the StanzaRelay --- .../vysper/xmpp/delivery/RecordingStanzaRelay.java | 3 +- .../vysper/xmpp/delivery/StanzaReceiverRelay.java | 3 +- .../apache/vysper/xmpp/delivery/StanzaRelay.java | 27 +++++++----- .../vysper/xmpp/delivery/StanzaRelayBroker.java | 7 ++-- .../DeliveringExternalInboundStanzaRelay.java | 3 +- .../DeliveringInternalInboundStanzaRelay.java | 24 ++++++----- .../vysper/xmpp/protocol/SimpleStanzaBroker.java | 2 +- .../components/ComponentStanzaProcessor.java | 48 +--------------------- .../xmpp/delivery/StanzaRelayBrokerTestCase.java | 26 ++++++------ ...liveringExternalInboundStanzaRelayTestCase.java | 21 ++++++---- ...eliveringInteralInboundStanzaRelayTestCase.java | 17 ++++---- .../ComponentStanzaProcessorTestCase.java | 36 ++++++++++------ 12 files changed, 104 insertions(+), 113 deletions(-) diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/RecordingStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/RecordingStanzaRelay.java index 653a650..ab8ebf2 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/RecordingStanzaRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/RecordingStanzaRelay.java @@ -27,6 +27,7 @@ import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.delivery.failure.DeliveryException; import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; /** @@ -42,7 +43,7 @@ public class RecordingStanzaRelay implements StanzaRelay { protected final AtomicBoolean isRelaying = new AtomicBoolean(true); - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) + public void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { if (!isRelaying()) throw new ServiceNotAvailableException("recording stanza relay is not relaying"); entityStanzaPairs.add(new Triple(receiver, stanza, deliveryFailureStrategy)); diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaReceiverRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaReceiverRelay.java index ec4d230..24bcef8 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaReceiverRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaReceiverRelay.java @@ -29,6 +29,7 @@ import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.LocalRecipientOfflineException; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; /** @@ -62,7 +63,7 @@ public class StanzaReceiverRelay implements StanzaRelay { receiverMap.put(receiverID, receiver); } - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) + public void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { if (!isRelaying()) { throw new ServiceNotAvailableException("relay is not relaying"); diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java index e2b8451..fa719a2 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java @@ -23,6 +23,7 @@ package org.apache.vysper.xmpp.delivery; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.delivery.failure.DeliveryException; import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; /** @@ -34,22 +35,28 @@ public interface StanzaRelay { /** * relaying a stanza - * @param receiver the stanza receiver - * @param stanza the payload - * @param deliveryFailureStrategy what to do in case of errors - * @throws ServiceNotAvailableException relaying is stopped - * @throws DeliveryException error while relaying + * + * @param sessionContext + * The current session context. Can be null. + * @param receiver + * the stanza receiver + * @param stanza + * the payload + * @param deliveryFailureStrategy + * what to do in case of errors + * @throws DeliveryException + * error while relaying */ - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) - throws DeliveryException; + void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, + DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException; /** * @return TRUE iff the relay is live (started and not stopped) */ - public boolean isRelaying(); - + boolean isRelaying(); + /** * Shutdown this relay and prevent it from accepting any further stanzas. */ - public void stop(); + void stop(); } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelayBroker.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelayBroker.java index 7270b73..d898fe8 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelayBroker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelayBroker.java @@ -25,6 +25,7 @@ import org.apache.vysper.xmpp.delivery.failure.DeliveryException; import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.resources.ManagedThreadPool; import org.apache.vysper.xmpp.stanza.Stanza; @@ -67,7 +68,7 @@ public class StanzaRelayBroker implements StanzaRelay { this.serverRuntimeContext = serverRuntimeContext; } - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) + public void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { if (!isRelaying()) { @@ -92,11 +93,11 @@ public class StanzaRelayBroker implements StanzaRelay { boolean relayToExternal = serverRuntimeContext.getServerFeatures().isRelayingToFederationServers(); if (EntityUtils.isAddressingServer(receiver, serverRuntimeContext.getServerEntity()) || toComponent) { - internalRelay.relay(receiver, stanza, deliveryFailureStrategy); + internalRelay.relay(sessionContext, receiver, stanza, deliveryFailureStrategy); } else { if (!relayToExternal) throw new IllegalStateException("this server is not relaying to external currently"); - externalRelay.relay(receiver, stanza, deliveryFailureStrategy); + externalRelay.relay(sessionContext, receiver, stanza, deliveryFailureStrategy); } } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java index 7869daf..d6c50cb 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java @@ -39,6 +39,7 @@ import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.protocol.NamespaceURIs; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.resources.ManagedThreadPool; import org.apache.vysper.xmpp.server.resources.ManagedThreadPoolUtil; import org.apache.vysper.xmpp.server.s2s.XMPPServerConnector; @@ -136,7 +137,7 @@ public class DeliveringExternalInboundStanzaRelay implements StanzaRelay, Manage lastCompleted = completedTaskCount; } - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) + public void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { if (!isRelaying()) { diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java index 998f50c..5b20df1 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java @@ -151,8 +151,7 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage this.serverRuntimeContext = serverRuntimeContext; } - public void setStanzaHandlerExecutorFactory( - StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + public void setStanzaHandlerExecutorFactory(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { this.inboundStanzaProtocolWorker = new InboundStanzaProtocolWorker(stanzaHandlerExecutorFactory); } @@ -195,13 +194,14 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage lastCompleted = completedTaskCount; } - public void relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) - throws DeliveryException { + public void relay(SessionContext sessionContext, Entity receiver, Stanza stanza, + DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { if (!isRelaying()) { throw new ServiceNotAvailableException("internal inbound relay is not relaying"); } - Future<RelayResult> resultFuture = executor.submit(new Relay(receiver, stanza, deliveryFailureStrategy)); + executor + .submit(new Relay(sessionContext, receiver, stanza, deliveryFailureStrategy)); if (this.logStorageProvider != null) { this.logStorageProvider.logStanza(receiver, stanza); } @@ -216,15 +216,19 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage } private class Relay implements Callable<RelayResult> { - private Entity receiver; + private final SessionContext sessionContext; - private Stanza stanza; + private final Entity receiver; - private DeliveryFailureStrategy deliveryFailureStrategy; + private final Stanza stanza; + + private final DeliveryFailureStrategy deliveryFailureStrategy; protected final UnmodifyableSessionStateHolder sessionStateHolder = new UnmodifyableSessionStateHolder(); - Relay(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) { + Relay(SessionContext sessionContext, Entity receiver, Stanza stanza, + DeliveryFailureStrategy deliveryFailureStrategy) { + this.sessionContext = sessionContext; this.receiver = receiver; this.stanza = stanza; this.deliveryFailureStrategy = deliveryFailureStrategy; @@ -286,7 +290,7 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage "cannot retrieve component stanza processor for" + receiverDomain)); } - processor.processStanza(serverRuntimeContext, null, stanza, null); + processor.processStanza(serverRuntimeContext, sessionContext, stanza, sessionStateHolder); return new RelayResult().setProcessed(); } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java index 938ec25..5a54b39 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java @@ -45,7 +45,7 @@ public class SimpleStanzaBroker implements StanzaBroker { @Override public void write(Entity receiver, Stanza stanza, DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException { - stanzaRelay.relay(receiver, stanza, deliveryFailureStrategy); + stanzaRelay.relay(sessionContext, receiver, stanza, deliveryFailureStrategy); } @Override diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java index 0ef52d1..36737ca 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java @@ -21,17 +21,12 @@ package org.apache.vysper.xmpp.server.components; import static java.util.Objects.requireNonNull; -import java.util.List; - -import org.apache.vysper.xmpp.delivery.failure.DeliveryException; -import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy; import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary; import org.apache.vysper.xmpp.protocol.ProtocolException; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; +import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; -import org.apache.vysper.xmpp.protocol.StanzaBroker; import org.apache.vysper.xmpp.protocol.StanzaHandler; -import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutor; import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.server.ServerRuntimeContext; @@ -86,50 +81,11 @@ public class ComponentStanzaProcessor implements StanzaProcessor { if (responseStanzaContainer == null) { return; } - List<Stanza> responseStanzas = responseStanzaContainer.getResponseStanzas(); - try { - // module - StanzaHandlerExecutor executor = stanzaHandlerExecutorFactory.build(new RelayingStanzaHandler()); - for (Stanza responseStanza : responseStanzas) { - executor.execute(responseStanza, serverRuntimeContext, false, sessionContext, sessionStateHolder); - } - } catch (ProtocolException e) { - throw new RuntimeException(e); - } + ResponseWriter.writeResponse(sessionContext, responseStanzaContainer); } public void processTLSEstablished(SessionContext sessionContext, SessionStateHolder sessionStateHolder) { throw new RuntimeException("should not be called for components, which only acts as an established session"); } - - private static class RelayingStanzaHandler implements StanzaHandler { - - @Override - public String getName() { - return null; - } - - @Override - public boolean verify(Stanza stanza) { - return false; - } - - @Override - public boolean isSessionRequired() { - return false; - } - - @Override - public ResponseStanzaContainer execute(Stanza stanza, ServerRuntimeContext serverRuntimeContext, - boolean isOutboundStanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder, - StanzaBroker stanzaBroker) { - try { - stanzaBroker.write(stanza.getTo(), stanza, IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY); - } catch (DeliveryException e) { - throw new RuntimeException(e); - } - return null; - } - } } diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/StanzaRelayBrokerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/StanzaRelayBrokerTestCase.java index c40baa8..1e12e11 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/StanzaRelayBrokerTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/StanzaRelayBrokerTestCase.java @@ -28,6 +28,7 @@ import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.server.ServerFeatures; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; import org.junit.Before; @@ -52,6 +53,7 @@ public class StanzaRelayBrokerTestCase extends Mockito { private StanzaRelay internalRelay = mock(StanzaRelay.class); private StanzaRelay externalRelay = mock(StanzaRelay.class); + private SessionContext sessionContext = mock(SessionContext.class); private ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class); private ServerFeatures serverFeatures = mock(ServerFeatures.class); @@ -72,9 +74,9 @@ public class StanzaRelayBrokerTestCase extends Mockito { @Test public void toInternal() throws DeliveryException { - broker.relay(INTERNAL, stanza, failureStrategy); + broker.relay(sessionContext, INTERNAL, stanza, failureStrategy); - verify(internalRelay).relay(INTERNAL, stanza, failureStrategy); + verify(internalRelay).relay(sessionContext, INTERNAL, stanza, failureStrategy); verifyZeroInteractions(externalRelay); } @@ -82,19 +84,19 @@ public class StanzaRelayBrokerTestCase extends Mockito { public void toExternalWithFederation() throws DeliveryException { when(serverFeatures.isRelayingToFederationServers()).thenReturn(true); - broker.relay(EXTERNAL, stanza, failureStrategy); + broker.relay(sessionContext, EXTERNAL, stanza, failureStrategy); verifyZeroInteractions(internalRelay); - verify(externalRelay).relay(EXTERNAL, stanza, failureStrategy); + verify(externalRelay).relay(sessionContext, EXTERNAL, stanza, failureStrategy); } @Test public void toComponent() throws DeliveryException { when(serverFeatures.isRelayingToFederationServers()).thenReturn(true); - broker.relay(COMPONENT, stanza, failureStrategy); + broker.relay(sessionContext, COMPONENT, stanza, failureStrategy); - verify(internalRelay).relay(COMPONENT, stanza, failureStrategy); + verify(internalRelay).relay(sessionContext, COMPONENT, stanza, failureStrategy); verifyZeroInteractions(externalRelay); } @@ -102,9 +104,9 @@ public class StanzaRelayBrokerTestCase extends Mockito { public void toComponentUser() throws DeliveryException { when(serverFeatures.isRelayingToFederationServers()).thenReturn(true); - broker.relay(COMPONENT_USER, stanza, failureStrategy); + broker.relay(sessionContext, COMPONENT_USER, stanza, failureStrategy); - verify(internalRelay).relay(COMPONENT_USER, stanza, failureStrategy); + verify(internalRelay).relay(sessionContext, COMPONENT_USER, stanza, failureStrategy); verifyZeroInteractions(externalRelay); } @@ -112,17 +114,17 @@ public class StanzaRelayBrokerTestCase extends Mockito { public void toExternalWithoutFederation() throws DeliveryException { when(serverFeatures.isRelayingToFederationServers()).thenReturn(false); - broker.relay(EXTERNAL, stanza, failureStrategy); + broker.relay(sessionContext, EXTERNAL, stanza, failureStrategy); } @Test(expected=RuntimeException.class) public void toServer() throws DeliveryException { - broker.relay(SERVER, stanza, failureStrategy); + broker.relay(sessionContext, SERVER, stanza, failureStrategy); } @Test(expected=RuntimeException.class) public void toNullReceiver() throws DeliveryException { - broker.relay(null, stanza, failureStrategy); + broker.relay(sessionContext, null, stanza, failureStrategy); } @Test @@ -132,7 +134,7 @@ public class StanzaRelayBrokerTestCase extends Mockito { Assert.assertFalse(broker.isRelaying()); try { - broker.relay(INTERNAL, stanza, null); + broker.relay(sessionContext, INTERNAL, stanza, null); Assert.fail("ServiceNotAvailableException expected"); } catch (ServiceNotAvailableException e) { // test succeeds diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java index 15abbee..c304823 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java @@ -30,6 +30,7 @@ import org.apache.vysper.xmpp.delivery.failure.RemoteServerNotFoundException; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.protocol.NamespaceURIs; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.s2s.XMPPServerConnector; import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry; import org.apache.vysper.xmpp.stanza.Stanza; @@ -41,6 +42,8 @@ import org.mockito.Mockito; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import static org.mockito.Mockito.mock; + /** */ public class DeliveringExternalInboundStanzaRelayTestCase extends TestCase { @@ -57,19 +60,21 @@ public class DeliveringExternalInboundStanzaRelayTestCase extends TestCase { private static final Stanza STANZA = XMPPCoreStanza.getWrapper(StanzaBuilder.createMessageStanza(FROM, TO, LANG, BODY).build()); + + private SessionContext sessionContext = mock(SessionContext.class); public void testRemoteServerError() throws Exception { - XMPPServerConnectorRegistry registry = Mockito.mock(XMPPServerConnectorRegistry.class); + XMPPServerConnectorRegistry registry = mock(XMPPServerConnectorRegistry.class); Mockito.when(registry.connect(SERVER)).thenThrow(new RemoteServerNotFoundException()); - ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class); + ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class); Mockito.when(serverRuntimeContext.getServerConnectorRegistry()).thenReturn(registry); DeliveringExternalInboundStanzaRelay relay = new DeliveringExternalInboundStanzaRelay(new TestExecutorService()); relay.setServerRuntimeContext(serverRuntimeContext); RecordingDeliveryFailureStrategy deliveryFailureStrategy = new RecordingDeliveryFailureStrategy(); - relay.relay(TO, STANZA, deliveryFailureStrategy); + relay.relay(sessionContext, TO, STANZA, deliveryFailureStrategy); Stanza failedStanza = deliveryFailureStrategy.getRecordedStanza(); Assert.assertNotNull(failedStanza); @@ -81,19 +86,19 @@ public class DeliveringExternalInboundStanzaRelayTestCase extends TestCase { } public void testSuccessfulRelay() throws Exception { - XMPPServerConnector connector = Mockito.mock(XMPPServerConnector.class); + XMPPServerConnector connector = mock(XMPPServerConnector.class); - XMPPServerConnectorRegistry registry = Mockito.mock(XMPPServerConnectorRegistry.class); + XMPPServerConnectorRegistry registry = mock(XMPPServerConnectorRegistry.class); Mockito.when(registry.connect(SERVER)).thenReturn(connector); - ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class); + ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class); Mockito.when(serverRuntimeContext.getServerConnectorRegistry()).thenReturn(registry); DeliveringExternalInboundStanzaRelay relay = new DeliveringExternalInboundStanzaRelay(new TestExecutorService()); relay.setServerRuntimeContext(serverRuntimeContext); RecordingDeliveryFailureStrategy deliveryFailureStrategy = new RecordingDeliveryFailureStrategy(); - relay.relay(TO, STANZA, deliveryFailureStrategy); + relay.relay(sessionContext, TO, STANZA, deliveryFailureStrategy); Assert.assertNull(deliveryFailureStrategy.getRecordedStanza()); @@ -119,7 +124,7 @@ public class DeliveringExternalInboundStanzaRelayTestCase extends TestCase { Assert.assertTrue(testExecutorService.isShutdown()); try { - relay.relay(TO, STANZA, null); + relay.relay(sessionContext, TO, STANZA, null); Assert.fail("ServiceNotAvailableException expected"); } catch (ServiceNotAvailableException e) { // test succeeds diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java index 38aa8ec..4d44192 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java @@ -36,6 +36,7 @@ import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.server.TestSessionContext; import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry; @@ -61,6 +62,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { protected AccountManagement accountVerification; protected DeliveringInternalInboundStanzaRelay stanzaRelay; + + private SessionContext sessionContext = mock(SessionContext.class); static class AccountVerificationMock implements AccountManagement { public void addUser(Entity username, String password) throws AccountCreationException { @@ -101,7 +104,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "Hello").build(); try { - stanzaRelay.relay(TO_ENTITY, stanza, new IgnoreFailureStrategy()); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, new IgnoreFailureStrategy()); Stanza recordedStanza = sessionContext.getNextRecordedResponse(1000); assertNotNull("stanza delivered", recordedStanza); assertEquals("Hello", recordedStanza.getSingleInnerElementsNamed("body").getSingleInnerText().getText()); @@ -119,7 +122,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "Hello").build(); try { - stanzaRelay.relay(TO_ENTITY, stanza, new IgnoreFailureStrategy()); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, new IgnoreFailureStrategy()); Stanza recordedStanza = sessionContext.getNextRecordedResponse(1000); assertNull("stanza not delivered to unbound", recordedStanza); } catch (DeliveryException e) { @@ -147,7 +150,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "Hello").build(); try { - stanzaRelay.relay(TO_ENTITY, stanza, new IgnoreFailureStrategy()); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, new IgnoreFailureStrategy()); Stanza recordedStanza_1 = sessionContextTO_ENTITY_1_prio3.getNextRecordedResponse(100); assertNotNull("stanza 1 delivered", recordedStanza_1); Stanza recordedStanza_2 = sessionContextTO_ENTITY_2_prio0.getNextRecordedResponse(100); @@ -181,7 +184,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "Hello").build(); try { - stanzaRelay.relay(TO_ENTITY, stanza, new IgnoreFailureStrategy()); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, new IgnoreFailureStrategy()); Stanza recordedStanza_1 = sessionContextTO_ENTITY_1_prio3.getNextRecordedResponse(100); assertNotNull("stanza 1 delivered", recordedStanza_1); Stanza recordedStanza_2 = sessionContextTO_ENTITY_2_prio0.getNextRecordedResponse(100); @@ -215,7 +218,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "Hello").build(); try { - relay.relay(TO_ENTITY, stanza, null); + relay.relay(sessionContext, TO_ENTITY, stanza, null); Assert.fail("ServiceNotAvailableException expected"); } catch (ServiceNotAvailableException e) { // test succeeds @@ -237,7 +240,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { for (int i = 0; i < STANZA_COUNT; i++) { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "" + i).build(); - stanzaRelay.relay(TO_ENTITY, stanza, null); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, null); } for (int i = 0; i < STANZA_COUNT; i++) { final Stanza nextResponse = sessionContext.getNextRecordedResponse(100); @@ -261,7 +264,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { for (int i = 0; i < STANZA_COUNT; i++) { Stanza stanza = StanzaBuilder.createMessageStanza(FROM_ENTITY, TO_ENTITY, "en", "" + i).build(); - stanzaRelay.relay(TO_ENTITY, stanza, null); + stanzaRelay.relay(sessionContext, TO_ENTITY, stanza, null); } /* diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java index 2d3c514..f801ba9 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java @@ -35,10 +35,16 @@ import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; +import org.apache.vysper.xmpp.writer.StanzaWriter; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** */ public class ComponentStanzaProcessorTestCase { @@ -47,15 +53,15 @@ public class ComponentStanzaProcessorTestCase { private static final Entity TO = EntityImpl.parseUnchecked("vysper.org"); - private ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class); + private ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class); - private SessionContext sessionContext = Mockito.mock(SessionContext.class); + private SessionContext sessionContext = mock(SessionContext.class); private SessionStateHolder sessionStateHolder = new SessionStateHolder(); - private StanzaRelay stanzaRelay = Mockito.mock(StanzaRelay.class); + private StanzaRelay stanzaRelay = mock(StanzaRelay.class); - private StanzaHandler handler = Mockito.mock(StanzaHandler.class); + private StanzaHandler handler = mock(StanzaHandler.class); private Stanza stanza = StanzaBuilder.createMessageStanza(FROM, TO, null, "body").build(); @@ -65,11 +71,16 @@ public class ComponentStanzaProcessorTestCase { private ComponentStanzaProcessor processor = new ComponentStanzaProcessor( new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); + + private StanzaWriter sessionContextStanzaWriter; @Before public void before() { - Mockito.when(handler.verify(stanza)).thenReturn(true); - Mockito.when(handler.getName()).thenReturn("message"); + when(handler.verify(stanza)).thenReturn(true); + when(handler.getName()).thenReturn("message"); + + sessionContextStanzaWriter = mock(StanzaWriter.class); + when(sessionContext.getResponseWriter()).thenReturn(sessionContextStanzaWriter); } @Test(expected = RuntimeException.class) @@ -99,19 +110,19 @@ public class ComponentStanzaProcessorTestCase { @Test public void processSuccessfulWithResponse() throws ProtocolException, DeliveryException { - Mockito.when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, + when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext))).thenReturn(container); processor.addHandler(handler); processor.processStanza(serverRuntimeContext, sessionContext, stanza, sessionStateHolder); - Mockito.verify(stanzaRelay).relay(FROM, responseStanza, IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY); + verify(sessionContextStanzaWriter).write(responseStanza); } @Test public void handlerThrowsException() throws ProtocolException, DeliveryException { - Mockito.when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, + when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext))).thenThrow(new ProtocolException()); processor.addHandler(handler); @@ -122,11 +133,10 @@ public class ComponentStanzaProcessorTestCase { } @Test(expected = RuntimeException.class) - public void processThenFailRelaying() throws ProtocolException, DeliveryException { - Mockito.when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, + public void processThenFailRelaying() throws ProtocolException { + when(handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext))).thenReturn(container); - Mockito.doThrow(new DeliveryException()).when(stanzaRelay).relay(FROM, responseStanza, - IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY); + doThrow(new RuntimeException()).when(sessionContextStanzaWriter).write(responseStanza); processor.addHandler(handler);