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