public MessageDispatcherShutConnectionTests()
        {
            var channel = new FakeChannel();
            IAmACommandProcessor commandProcessor = new SpyCommandProcessor();

            var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(() => new MyEventMessageMapper()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();

            _connection = new Connection <MyEvent>(new ConnectionName("test"), noOfPerformers: 3, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(channel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));
            _dispatcher = new Dispatcher(commandProcessor, messageMapperRegistry, new List <Connection> {
                _connection
            });

            var @event  = new MyEvent();
            var message = new MyEventMessageMapper().MapToMessage(@event);

            for (var i = 0; i < 6; i++)
            {
                channel.Add(message);
            }

            _dispatcher.State.Should().Be(DispatcherState.DS_AWAITING);
            _dispatcher.Receive();
        }
Пример #2
0
        public MessagePumpDispatchTests()
        {
            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <MyEvent, MyEventHandler>();

            var handlerFactory = new TestHandlerFactory <MyEvent, MyEventHandler>(() => new MyEventHandler(_receivedMessages));

            var commandProcessor = new CommandProcessor(
                subscriberRegistry,
                handlerFactory,
                new InMemoryRequestContextFactory(),
                new PolicyRegistry());

            PipelineBuilder <MyEvent> .ClearPipelineCache();

            var channel = new FakeChannel();
            var mapper  = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(commandProcessor, mapper)
            {
                Channel = channel, TimeoutInMilliseconds = 5000
            };

            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)));

            channel.Enqueue(message);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            channel.Enqueue(quitMessage);
        }
        public MessagePumpDispatchAsyncTests()
        {
            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.RegisterAsync <MyEvent, MyEventHandlerAsyncWithContinuation>();

            var handlerFactory   = new TestHandlerFactoryAsync <MyEvent, MyEventHandlerAsyncWithContinuation>(() => new MyEventHandlerAsyncWithContinuation());
            var commandProcessor = new CommandProcessor(
                subscriberRegistry,
                handlerFactory,
                new InMemoryRequestContextFactory(),
                new PolicyRegistry());

            var channel = new FakeChannel();
            var mapper  = new MyEventMessageMapper();

            _messagePump = new MessagePumpAsync <MyEvent>(commandProcessor, mapper)
            {
                Channel = channel, TimeoutInMilliseconds = 5000
            };

            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(_myEvent)));

            channel.Add(message);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            channel.Add(quitMessage);
        }
        public MessageDispatcherRoutingTests()
        {
            _channel          = new FakeChannel();
            _commandProcessor = new SpyCommandProcessor();

            var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();

            var connection = new Subscription <MyEvent>(
                new SubscriptionName("test"),
                noOfPerformers: 1,
                timeoutInMilliseconds: 1000,
                channelFactory: new InMemoryChannelFactory(_channel),
                channelName: new ChannelName("fakeChannel"),
                routingKey: new RoutingKey("fakekey"));

            _dispatcher = new Dispatcher(_commandProcessor, messageMapperRegistry, new List <Subscription> {
                connection
            });

            var @event  = new MyEvent();
            var message = new MyEventMessageMapper().MapToMessage(@event);

            _channel.Enqueue(message);

            _dispatcher.State.Should().Be(DispatcherState.DS_AWAITING);
            _dispatcher.Receive();
        }
        public DispatcherRestartConnectionTests()
        {
            _channel          = new FakeChannel();
            _commandProcessor = new SpyCommandProcessor();

            var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();

            _connection    = new Connection <MyEvent>(new ConnectionName("test"), noOfPerformers: 1, timeoutInMilliseconds: 100, channelFactory: new InMemoryChannelFactory(_channel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));
            _newConnection = new Connection <MyEvent>(new ConnectionName("newTest"), noOfPerformers: 1, timeoutInMilliseconds: 100, channelFactory: new InMemoryChannelFactory(_channel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));
            _dispatcher    = new Dispatcher(_commandProcessor, messageMapperRegistry, new List <Connection> {
                _connection, _newConnection
            });

            var @event  = new MyEvent();
            var message = new MyEventMessageMapper().MapToMessage(@event);

            _channel.Enqueue(message);

            _dispatcher.State.Should().Be(DispatcherState.DS_AWAITING);
            _dispatcher.Receive();
            Task.Delay(250).Wait();
            _dispatcher.Shut("test");
            _dispatcher.Shut("newTest");
            Task.Delay(1000).Wait();
            _dispatcher.Consumers.Should().HaveCount(0);
        }
Пример #6
0
        public void Establish()
        {
            _channel          = new FakeChannel();
            _commandProcessor = new SpyCommandProcessor();

            var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(() => new MyEventMessageMapper()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();

            var connection = new Connection(
                name: new ConnectionName("test"),
                dataType: typeof(MyEvent),
                noOfPerformers: 1,
                timeoutInMilliseconds: 1000,
                channelFactory: new InMemoryChannelFactory(_channel),
                channelName: new ChannelName("fakeChannel"),
                routingKey: "fakekey");

            _dispatcher = new Dispatcher(_commandProcessor, messageMapperRegistry, new List <Connection> {
                connection
            });

            var @event  = new MyEvent();
            var message = new MyEventMessageMapper().MapToMessage(@event);

            _channel.Add(message);

            Assert.AreEqual(DispatcherState.DS_AWAITING, _dispatcher.State);
            _dispatcher.Receive();
        }
Пример #7
0
        public void Establish()
        {
            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <MyEvent, MyEventHandler>();

            _commandProcessor = new CommandProcessor(
                subscriberRegistry,
                new CheapHandlerFactory(),
                new InMemoryRequestContextFactory(),
                new PolicyRegistry());

            _channel = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000
            };

            _event = new MyEvent();

            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(_event)));

            _channel.Add(message);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Add(quitMessage);
        }
Пример #8
0
        public void MovieAgentConstructorTest()
        {
            HttpClientChannel httpClientChannel = new FakeChannel <Movie>(new Movie());
            var target = new MovieAgent(httpClientChannel);

            target.Should().NotBeNull();
        }
Пример #9
0
 public void SetUp()
 {
     receiver = new FakeReceiver();
     channel  = new FakeChannel();
     config   = new N2.Configuration.HostSection();
     config.Messaging.Targets.Add(new N2.Configuration.MessageTargetElement {
         Name = "Remote", Address = "http://nowhere/"
     });
     broker = new MessageBroker(channel, new Fakes.FakeWorker(), new[] { receiver }, config);
 }
        public void Setup()
        {
            It = new FakeChannel();
            var registerTask = new RegisterTask(It, new FakeChannel());

            try
            {
                registerTask.Process();
            }
            catch(Exception err)
            {
                ActualException = err;
            }
        }
Пример #11
0
        public MessagePumpUnacceptableMessageTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_UNACCEPTABLE), new MessageBody(""));

            _channel.Add(unacceptableMessage);
        }
        public MessagePumpFailingMessageTranslationTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new FailingEventMessageMapper();

            _messagePump = new MessagePumpBlocking <MyFailingMapperEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3, UnacceptableMessageLimit = 3
            };

            var unmappableMessage = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }"));

            _channel.Enqueue(unmappableMessage);
        }
        public MessagePumpEventProcessingExceptionTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePumpBlocking <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = _requeueCount
            };

            var msg = mapper.MapToMessage(new MyEvent());

            _channel.Enqueue(msg);
        }
Пример #14
0
        public void doesnt_throw_if_receive_only_fails_intermittently()
        {
            var channel = new FakeChannel { StopAfter = 20 };
            var node = new ChannelNode
            {
                Channel = channel,
                Scheduler = new FakeScheduler()
            };

            var logger = new RecordingLogger();
            var receiver = new RecordingReceiver();
            node.StartReceiving(receiver, logger);

            channel.HitCount.ShouldBe(20);
        }
Пример #15
0
        public void doesnt_throw_if_receive_only_fails_intermittently()
        {
            var channel = new FakeChannel {
                StopAfter = 20
            };
            var node = new ChannelNode
            {
                Channel   = channel,
                Scheduler = new FakeScheduler()
            };

            var logger   = new RecordingLogger();
            var receiver = new RecordingReceiver();

            node.StartReceiving(receiver, logger);

            channel.HitCount.ShouldBe(20);
        }
        public MessagePumpEventRequeueCountThresholdTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            _event = new MyEvent();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(_event)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(_event)));

            _channel.Add(message1);
            _channel.Add(message2);
        }
Пример #17
0
        public MessagePumpCommandRequeueCountThresholdTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePumpBlocking <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            _command = new MyCommand();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message1);
            _channel.Enqueue(message2);
        }
Пример #18
0
        public void Establish()
        {
            _commandProcessor = new SpyCommandProcessor();
            _channel          = new FakeChannel();
            var mapper      = new MyEventMessageMapper();
            var messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper);

            messagePump.Channel = _channel;
            messagePump.TimeoutInMilliseconds = 5000;

            var @event  = new MyEvent();
            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(@event)));

            _channel.Add(message);

            _performer     = new Performer(_channel, messagePump);
            _performerTask = _performer.Run();
            _performer.Stop();
        }
Пример #19
0
        public void Establish()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3
            };

            _command = new MyCommand();

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonConvert.SerializeObject(_command)));

            _channel.Add(message1);
            _channel.Add(message2);
        }
Пример #20
0
        public PerformerCanStopTests()
        {
            _commandProcessor = new SpyCommandProcessor();
            _channel          = new FakeChannel();
            var mapper      = new MyEventMessageMapper();
            var messagePump = new MessagePumpBlocking <MyEvent>(_commandProcessor, mapper);

            messagePump.Channel = _channel;
            messagePump.TimeoutInMilliseconds = 5000;

            var @event  = new MyEvent();
            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message);

            _performer     = new Performer(_channel, messagePump);
            _performerTask = _performer.Run();
            _performer.Stop();
        }
        public MessagePumpToCommandProcessorTests()
        {
            _commandProcessor = new SpyCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000
            };

            _event = new MyEvent();

            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_event, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Enqueue(quitMessage);
        }
Пример #22
0
        public MessagePumpCommandRequeueTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyCommandMessageMapper();

            _messagePump = new MessagePump <MyCommand>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = -1
            };

            var message1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));
            var message2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)));

            _channel.Enqueue(message1);
            _channel.Enqueue(message2);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Enqueue(quitMessage);
        }
Пример #23
0
        public void Establish()
        {
            _commandProcessor = new SpyCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePump <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000
            };

            _event = new MyEvent();

            var message = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_EVENT), new MessageBody(JsonConvert.SerializeObject(_event)));

            _channel.Add(message);
            var quitMessage = new Message(new MessageHeader(Guid.Empty, "", MessageType.MT_QUIT), new MessageBody(""));

            _channel.Add(quitMessage);
        }
Пример #24
0
        public MessagePumpUnacceptableMessageLimitBreachedTests()
        {
            _commandProcessor = new SpyRequeueCommandProcessor();
            _channel          = new FakeChannel();
            var mapper = new MyEventMessageMapper();

            _messagePump = new MessagePumpBlocking <MyEvent>(_commandProcessor, mapper)
            {
                Channel = _channel, TimeoutInMilliseconds = 5000, RequeueCount = 3, UnacceptableMessageLimit = 3
            };

            var unacceptableMessage1 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_UNACCEPTABLE), new MessageBody(""));
            var unacceptableMessage2 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_UNACCEPTABLE), new MessageBody(""));
            var unacceptableMessage3 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_UNACCEPTABLE), new MessageBody(""));
            var unacceptableMessage4 = new Message(new MessageHeader(Guid.NewGuid(), "MyTopic", MessageType.MT_UNACCEPTABLE), new MessageBody(""));

            _channel.Enqueue(unacceptableMessage1);
            _channel.Enqueue(unacceptableMessage2);
            _channel.Enqueue(unacceptableMessage3);
            _channel.Enqueue(unacceptableMessage4);
        }
Пример #25
0
        public MessageDispatcherMultipleConnectionTests()
        {
            _eventChannel   = new FakeChannel();
            _commandChannel = new FakeChannel();
            var commandProcessor = new SpyCommandProcessor();

            var container = new ServiceCollection();

            container.AddTransient <MyEventMessageMapper>();
            container.AddTransient <MyCommandMessageMapper>();

            var messageMapperRegistry = new MessageMapperRegistry(new ServiceProviderMapperFactory(container.BuildServiceProvider()));

            messageMapperRegistry.Register <MyEvent, MyEventMessageMapper>();
            messageMapperRegistry.Register <MyCommand, MyCommandMessageMapper>();


            var myEventConnection   = new Subscription <MyEvent>(new SubscriptionName("test"), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_eventChannel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));
            var myCommandConnection = new Subscription <MyCommand>(new SubscriptionName("anothertest"), noOfPerformers: 1, timeoutInMilliseconds: 1000, channelFactory: new InMemoryChannelFactory(_commandChannel), channelName: new ChannelName("fakeChannel"), routingKey: new RoutingKey("fakekey"));

            _dispatcher = new Dispatcher(commandProcessor, messageMapperRegistry, new List <Subscription> {
                myEventConnection, myCommandConnection
            });

            var @event       = new MyEvent();
            var eventMessage = new MyEventMessageMapper().MapToMessage(@event);

            _eventChannel.Enqueue(eventMessage);

            var command        = new MyCommand();
            var commandMessage = new MyCommandMessageMapper().MapToMessage(command);

            _commandChannel.Enqueue(commandMessage);

            _dispatcher.State.Should().Be(DispatcherState.DS_AWAITING);
            _dispatcher.Receive();
        }
        public void Setup()
        {
            It = new FakeChannel();
            ExpectedNumberOfDrinkRequests = 100;
            var customerProcessor = new CustomerTask(It, ExpectedNumberOfDrinkRequests);

            customerProcessor.Process();
        }
Пример #27
0
 public InMemoryChannelFactory(FakeChannel channel = null)
 {
     _channel = channel ?? new FakeChannel();
 }
Пример #28
0
 public void MovieAgentConstructorTest()
 {
     HttpClientChannel httpClientChannel = new FakeChannel<Movie>(new Movie());
     var target = new MovieAgent(httpClientChannel);
     target.Should().NotBeNull();
 }
        public void Setup()
        {
            var registerIncomingChannel = new FakeChannel();
            registerIncomingChannel.Enqueue(new CustomerDrinkRequestMessage());

            It = new FakeChannel();
            var registerTask = new RegisterTask(It, registerIncomingChannel);

            registerTask.Process();
        }