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));
        }
Example #2
0
        public void applySequenceEnabled()
        {
            IApplicationContext     ctx     = TestUtils.GetContext(@"Config\PublishSubscribeChannelParserTests.xml");
            PublishSubscribeChannel channel = (PublishSubscribeChannel)ctx.GetObject("channelWithApplySequenceEnabled");

            BroadcastingDispatcher dispatcher = TestUtils.GetPropertyValue <BroadcastingDispatcher>(channel, "Dispatcher");

            Assert.IsTrue(TestUtils.GetFieldValue <bool>(dispatcher, "_applySequence"));
        }
        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));
        }
Example #4
0
        public void DefaultChannel()
        {
            IApplicationContext     ctx     = TestUtils.GetContext(@"Config\PublishSubscribeChannelParserTests.xml");
            PublishSubscribeChannel channel = (PublishSubscribeChannel)ctx.GetObject("defaultChannel");

            BroadcastingDispatcher dispatcher = TestUtils.GetPropertyValue <BroadcastingDispatcher>(channel, "Dispatcher");
            IExecutor taskExecutor            = TestUtils.GetPropertyValue <IExecutor>(dispatcher, "TaskExecutor");

            Assert.IsNull(taskExecutor);
            Assert.IsFalse(TestUtils.GetFieldValue <bool>(dispatcher, "_applySequence"));
        }
        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.GetService <IApplicationContext>());

            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 RemoveConsumerBetweenSends()
        {
            var dispatcher = new BroadcastingDispatcher(provider);

            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 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));
        }