public void RemoveConsumerBetweenSends() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.Dispatch(messageMock.Object); dispatcher.RemoveHandler(targetMock2.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object), Times.Exactly(2)); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object), Times.Exactly(1)); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object), Times.Exactly(2)); }
public void SingleTargetWithoutTaskExecutor() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.AddHandler(targetMock1.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void NoDuplicateSubscription() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock1.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void MultipleTargetsWithoutTaskExecutor() { var dispatcher = new BroadcastingDispatcher(provider); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void SingleTargetWithTaskExecutor() { var latch = new CountdownEvent(1); targetMock1.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>(), TaskScheduler.Default); dispatcher.AddHandler(targetMock1.Object); dispatcher.Dispatch(messageMock.Object); Assert.True(latch.Wait(3000)); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void MultipleTargetsAllFail() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>(), new PartialFailingTaskScheduler(false, false, false)); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object), Times.Never()); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object), Times.Never()); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object), Times.Never()); }
public void RemoveConsumerBeforeSend() { var dispatcher = new BroadcastingDispatcher(provider); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.RemoveHandler(targetMock2.Object); dispatcher.Dispatch(messageMock.Object); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object), Times.Never()); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void TestNoHandlerWithExecutorWithRequiredSubscriber() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>(), TaskScheduler.Default, true); try { dispatcher.Dispatch(messageMock.Object); new Exception("Expected Exception"); } catch (MessageDispatchingException exception) { Assert.Equal(messageMock.Object, exception.FailedMessage); } }
public void TestNoHandlerWithRequiredSubscriber() { var dispatcher = new BroadcastingDispatcher(provider, true); try { dispatcher.Dispatch(messageMock.Object); new Exception("Expected Exception"); } catch (MessageDispatchingException exception) { Assert.Equal(messageMock.Object, exception.FailedMessage); } }
public void TestExceptionEnhancement() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.AddHandler(targetMock1.Object); targetMock1.Setup((h) => h.HandleMessage(messageMock.Object)).Throws(new MessagingException("Mock Exception")); try { dispatcher.Dispatch(messageMock.Object); throw new Exception("Expected Exception"); } catch (MessagingException e) { Assert.Equal(messageMock.Object, e.FailedMessage); } }
public void MultipleTargetsPartialFailureLast() { var latch = new CountdownEvent(2); targetMock1.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); targetMock2.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); targetMock3.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>(), new PartialFailingTaskScheduler(true, true, false)); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.Dispatch(messageMock.Object); Assert.True(latch.Wait(3000)); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object), Times.Never()); }
public void MultipleTargetsWithTaskExecutor() { var latch = new CountdownEvent(3); targetMock1.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); targetMock2.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); targetMock3.Setup((h) => h.HandleMessage(messageMock.Object)).Callback(() => latch.Signal()); var dispatcher = new BroadcastingDispatcher(provider, TaskScheduler.Default); dispatcher.AddHandler(targetMock1.Object); dispatcher.AddHandler(targetMock2.Object); dispatcher.AddHandler(targetMock3.Object); dispatcher.Dispatch(messageMock.Object); Assert.True(latch.Wait(3000)); targetMock1.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock2.Verify((h) => h.HandleMessage(messageMock.Object)); targetMock3.Verify((h) => h.HandleMessage(messageMock.Object)); }
public void ApplySequenceEnabled() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.ApplySequence = true; var messages = new ConcurrentQueue <IMessage>(); var target1 = new MessageStoringTestEndpoint(messages); var target2 = new MessageStoringTestEndpoint(messages); var target3 = new MessageStoringTestEndpoint(messages); dispatcher.AddHandler(target1); dispatcher.AddHandler(target2); dispatcher.AddHandler(target3); IMessage inputMessage = Message.Create("test"); var originalId = inputMessage.Headers.Id; dispatcher.Dispatch(inputMessage); Assert.Equal(3, messages.Count); Assert.True(messages.TryDequeue(out var message)); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, out var value); Assert.Equal(1, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, out value); Assert.Equal(3, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.CORRELATION_ID, out value); Assert.Equal(originalId, value); Assert.True(messages.TryDequeue(out message)); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, out value); Assert.Equal(2, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, out value); Assert.Equal(3, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.CORRELATION_ID, out value); Assert.Equal(originalId, value); Assert.True(messages.TryDequeue(out message)); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, out value); Assert.Equal(3, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, out value); Assert.Equal(3, value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.CORRELATION_ID, out value); Assert.Equal(originalId, value); }
public void TestNoExceptionEnhancement() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); dispatcher.AddHandler(targetMock1.Object); targetMock1.Object.HandleMessage(messageMock.Object); var dontReplaceThisMessage = Support.IntegrationMessageBuilder.WithPayload("x").Build(); targetMock1.Setup((h) => h.HandleMessage(messageMock.Object)).Throws(new MessagingException(dontReplaceThisMessage, "Mock Exception")); try { dispatcher.Dispatch(messageMock.Object); throw new Exception("Expected Exception"); } catch (MessagingException e) { Assert.Equal(dontReplaceThisMessage, e.FailedMessage); } }
public void ApplySequenceDisabledByDefault() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>()); var messages = new ConcurrentQueue <IMessage>(); var target1 = new MessageStoringTestEndpoint(messages); var target2 = new MessageStoringTestEndpoint(messages); dispatcher.AddHandler(target1); dispatcher.AddHandler(target2); dispatcher.Dispatch(Message.Create("test")); Assert.Equal(2, messages.Count); Assert.True(messages.TryDequeue(out var message)); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, out var value); Assert.Null(value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, out value); Assert.Null(value); Assert.True(messages.TryDequeue(out message)); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, out value); Assert.Null(value); message.Headers.TryGetValue(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, out value); Assert.Null(value); }
public void TestNoHandlerWithExecutor() { var dispatcher = new BroadcastingDispatcher(provider, TaskScheduler.Default); Assert.True(dispatcher.Dispatch(messageMock.Object)); }
public void TestNoHandlerWithExecutor() { var dispatcher = new BroadcastingDispatcher(provider.GetService <IApplicationContext>(), TaskScheduler.Default); Assert.True(dispatcher.Dispatch(messageMock.Object)); }
public void TestNoHandler() { var dispatcher = new BroadcastingDispatcher(provider); Assert.True(dispatcher.Dispatch(messageMock.Object)); }