示例#1
0
        public void should_instanciate_new_message_context_aware_bus_for_every_handler_without_race_conditions()
        {
            var handlerData = new TestAsyncHandlerHelper();

            var container = new Container(x =>
            {
                x.ForSingletonOf <IBus>().Use(new TestBus());
                x.ForSingletonOf <TestAsyncHandlerHelper>().Use(handlerData);
            });

            var invoker = new AsyncMessageHandlerInvoker(container, typeof(TestAsyncHandler), typeof(ScanCommand1));

            var messageContext1 = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var messageContext2 = MessageContext.CreateOverride(new PeerId("Abc.Testing.1"), null);

            var handler1 = Task.Run(() => (TestAsyncHandler)invoker.CreateHandler(messageContext1)).WaitForActivation();
            var handler2 = Task.Run(() => (TestAsyncHandler)invoker.CreateHandler(messageContext2)).WaitForActivation();

            Wait.Until(() => handlerData.WaitingHandlerCount == 2, 10.Seconds());
            handlerData.Release();

            Task.WaitAll(new Task[] { handler1, handler2 }, 10.Seconds());

            handler1.Result.Bus.ShouldNotEqual(handler2.Result.Bus);
            ((MessageContextAwareBus)handler1.Result.Bus).InnerBus.ShouldEqual(((MessageContextAwareBus)handler2.Result.Bus).InnerBus);
        }
        public void should_proxy_bus_with_message_context_aware_bus()
        {
            var busMock           = new Mock <IBus>();
            var configurationMock = new Mock <IBusConfiguration>();
            var equalityComparer  = StringComparer.OrdinalIgnoreCase;
            var container         = new Container(x =>
            {
                x.ForSingletonOf <IBus>().Use(busMock.Object);
                x.ForSingletonOf <IBusConfiguration>().Use(configurationMock.Object);
                x.For <IEqualityComparer <string> >().Use(equalityComparer);
            });

            var invoker        = new SyncMessageHandlerInvoker(container, typeof(CommandHandlerWithThreeConstructorArguments), typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);

            var handler = (CommandHandlerWithThreeConstructorArguments)invoker.CreateHandler(messageContext);

            handler.Bus.ShouldNotEqual(busMock.Object);
            handler.Configuration.ShouldEqual(configurationMock.Object);
            handler.EqualityComparerFunc().ShouldEqual(equalityComparer);

            var bus = handler.Bus.ShouldBe <MessageContextAwareBus>();

            bus.InnerBus.ShouldEqual(busMock.Object);
        }
示例#3
0
        protected virtual void HandleLocalMessage(IMessage message, TaskCompletionSource <CommandResult> taskCompletionSource)
        {
            _messageLogger.DebugFormat("RECV local: {0}", message);

            var context  = MessageContext.CreateOverride(PeerId, EndPoint);
            var dispatch = new MessageDispatch(context, message, GetOnLocalMessageDispatchedContinuation(taskCompletionSource));

            _messageDispatcher.Dispatch(dispatch);
        }
        private static void MeasureHandlerCreationPerformances(Container container, Type handlerType)
        {
            var invoker        = new SyncMessageHandlerInvoker(container, handlerType, typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);

            invoker.CreateHandler(messageContext);

            Measure.Execution(500000, () => invoker.CreateHandler(messageContext));
        }
示例#5
0
        public void Setup()
        {
            _sender = new Peer(new PeerId("Abc.Testing.Sender.0"), "tcp://abctest:123");

            _messageReplayerRepositoryMock = new Mock <IMessageReplayerRepository>();
            _handler = new StartMessageReplayCommandHandler(_messageReplayerRepositoryMock.Object)
            {
                Context = MessageContext.CreateOverride(_sender.Id, _sender.EndPoint),
            };

            _messageReplayerRepositoryMock.Setup(x => x.CreateMessageReplayer(It.IsAny <Peer>(), It.IsAny <Guid>())).Returns(new Mock <IMessageReplayer>().Object);
        }
        public void should_inject_context_in_handler_constructor()
        {
            var container      = new Container(x => x.For <IBus>().Use(new Mock <IBus>().Object));
            var invoker        = new SyncMessageHandlerInvoker(container, typeof(CommandHandlerWithMessageContextInConstructor), typeof(CommandHandlerWithMessageContextInConstructorCommand));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var command        = new CommandHandlerWithMessageContextInConstructorCommand();
            var invocation     = command.ToInvocation(messageContext);

            invoker.InvokeMessageHandler(invocation);

            command.Context.ShouldEqual(messageContext);
        }
示例#7
0
        public void should_insert_message_ack()
        {
            var inMemoryMessageMatcher = MockContainer.GetMock <IInMemoryMessageMatcher>();

            var messageId = MessageId.NextId();

            Handler.Context = MessageContext.CreateOverride(_targetPeerId, null);

            Handler.Handle(new MessageHandled(messageId));

            inMemoryMessageMatcher.Verify(x => x.EnqueueAck(_targetPeerId, messageId));
        }
示例#8
0
        public void should_forward_MessageHandled_to_active_replayers()
        {
            var messageReplayerMock = new Mock <IMessageReplayer>();

            MockContainer.GetMock <IMessageReplayerRepository>().Setup(x => x.GetActiveMessageReplayer(_targetPeerId)).Returns(messageReplayerMock.Object);

            Handler.Context = MessageContext.CreateOverride(_targetPeerId, null);
            var messageHandled = new MessageHandled(MessageId.NextId());

            Handler.Handle(messageHandled);

            messageReplayerMock.Verify(x => x.Handle(messageHandled));
        }
        public void Setup()
        {
            _contextScope = MessageContext.SetCurrent(MessageContext.CreateTest());

            _configurationMock = new Mock <IDirectoryConfiguration>();
            _configurationMock.SetupGet(conf => conf.BlacklistedMachines).Returns(new[] { "ANOTHER_BLACKLISTEDMACHINE", "BLACKlistedMACHINE" });
            _repositoryMock = new Mock <IPeerRepository>();
            _bus            = new TestBus();
            _speedReporter  = new Mock <IDirectorySpeedReporter>();
            _handler        = new DirectoryCommandsHandler(_bus, _repositoryMock.Object, _configurationMock.Object, _speedReporter.Object)
            {
                Context = MessageContext.CreateOverride(_sender.Id, _sender.EndPoint)
            };
        }
示例#10
0
        public void should_return_a_faulted_task_if_a_handler_throws()
        {
            var container = new Container(x =>
            {
                x.For <IBus>().Use(new Mock <IBus>().Object);
                x.ForSingletonOf <ErroringAsyncHandler>().Use(new ErroringAsyncHandler());
            });
            var handlerInvoker = new AsyncMessageHandlerInvoker(container, typeof(ErroringAsyncHandler), typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var invocation     = new ScanCommand1().ToInvocation(messageContext);

            var invocationTask = handlerInvoker.InvokeMessageHandlerAsync(invocation);

            Wait.Until(() => invocationTask.Status == TaskStatus.Faulted, 1.Second());
        }
        public void should_instanciate_new_message_context_aware_bus_for_every_handler()
        {
            var busMock   = new Mock <IBus>();
            var container = new Container(x => x.ForSingletonOf <IBus>().Use(busMock.Object));

            var invoker = new SyncMessageHandlerInvoker(container, typeof(CommandHandlerWithOneConstructorArgument), typeof(ScanCommand1));

            var messageContext1 = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var handler1        = (CommandHandlerWithOneConstructorArgument)invoker.CreateHandler(messageContext1);

            var messageContext2 = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var handler2        = (CommandHandlerWithOneConstructorArgument)invoker.CreateHandler(messageContext2);

            handler1.Bus.ShouldNotEqual(handler2.Bus);
            ((MessageContextAwareBus)handler1.Bus).InnerBus.ShouldEqual(((MessageContextAwareBus)handler2.Bus).InnerBus);
        }
        public void should_preserve_life_cycle()
        {
            var busMock   = new Mock <IBus>();
            var container = new Container(x =>
            {
                x.ForSingletonOf <IBus>().Use(busMock.Object);
                x.ForSingletonOf <CommandHandlerWithOneConstructorArgument>().Use <CommandHandlerWithOneConstructorArgument>();
            });

            var invoker        = new SyncMessageHandlerInvoker(container, typeof(CommandHandlerWithOneConstructorArgument), typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);

            var handler1 = (CommandHandlerWithOneConstructorArgument)invoker.CreateHandler(messageContext);
            var handler2 = (CommandHandlerWithOneConstructorArgument)invoker.CreateHandler(messageContext);

            ReferenceEquals(handler1, handler2).ShouldBeTrue("references should be equal");
        }
        public void should_apply_context()
        {
            var busMock   = new Mock <IBus>();
            var handler   = new MessageContextAwareCommandHandler();
            var container = new Container(x =>
            {
                x.For <IBus>().Use(busMock.Object);
                x.ForSingletonOf <MessageContextAwareCommandHandler>().Use(handler);
            });

            var invoker        = new SyncMessageHandlerInvoker(container, typeof(MessageContextAwareCommandHandler), typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);
            var invocation     = new ScanCommand1().ToInvocation(messageContext);

            invoker.InvokeMessageHandlerAsync(invocation).RunSynchronously();

            invocation.ApplyContextCalled.ShouldBeTrue();
        }
        public void should_apply_context()
        {
            var busMock   = new Mock <IBus>();
            var handler   = new MessageContextAwareCommandHandler();
            var container = new Container(x =>
            {
                x.For <IBus>().Use(busMock.Object);
                x.ForSingletonOf <MessageContextAwareCommandHandler>().Use(handler);
            });

            var invoker        = new SyncMessageHandlerInvoker(container, typeof(MessageContextAwareCommandHandler), typeof(ScanCommand1));
            var messageContext = MessageContext.CreateOverride(new PeerId("Abc.Testing.0"), null);

            var invocationMock = new Mock <IMessageHandlerInvocation>();

            invocationMock.SetupGet(x => x.Context).Returns(messageContext);
            invocationMock.SetupGet(x => x.Message).Returns(new ScanCommand1());

            invoker.InvokeMessageHandlerAsync(invocationMock.Object).RunSynchronously();

            invocationMock.Verify(x => x.SetupForInvocation(handler));
        }
示例#15
0
        public void should_not_throw_exception_if_no_replayer_for_given_MessageHandled()
        {
            Handler.Context = MessageContext.CreateOverride(_targetPeerId, null);

            Assert.DoesNotThrow(() => Handler.Handle(new MessageHandled(MessageId.NextId())));
        }