public MessagePumpDispatchTests() { var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <MyEvent, MyEventHandler>(); var handlerFactory = new TestHandlerFactorySync <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 MessagePumpBlocking <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 CommandProcessorCallTestsNoTimeout() { _myRequest.RequestValue = "Hello World"; var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyRequestMessageMapper)) { return(new MyRequestMessageMapper()); } if (type == typeof(MyResponseMessageMapper)) { return(new MyResponseMessageMapper()); } throw new ConfigurationException($"No mapper found for {type.Name}"); })); messageMapperRegistry.Register <MyRequest, MyRequestMessageMapper>(); messageMapperRegistry.Register <MyResponse, MyResponseMessageMapper>(); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <MyResponse, MyResponseHandler>(); var handlerFactory = new TestHandlerFactorySync <MyResponse, MyResponseHandler>(() => new MyResponseHandler()); var retryPolicy = Policy .Handle <Exception>() .Retry(); var circuitBreakerPolicy = Policy .Handle <Exception>() .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); var replySubs = new List <Subscription> { new Subscription <MyResponse>() }; _commandProcessor = new CommandProcessor( subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } }, messageMapperRegistry, new InMemoryOutbox(), new ProducerRegistry(new Dictionary <string, IAmAMessageProducer>() { { "MyRequest", new FakeMessageProducerWithPublishConfirmation() }, }), replySubs, responseChannelFactory: new InMemoryChannelFactory()); PipelineBuilder <MyRequest> .ClearPipelineCache(); }
public CommandProcessorNoMatchingSubcribersTests() { var registry = new SubscriberRegistry(); var handlerFactory = new TestHandlerFactorySync <MyEvent, MyEventHandler>(() => new MyEventHandler(_receivedMessages)); _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry()); PipelineBuilder <MyEvent> .ClearPipelineCache(); }
public PipelineBuildForCommandTests() { var registry = new SubscriberRegistry(); registry.Register <MyCommand, MyCommandHandler>(); var handlerFactory = new TestHandlerFactorySync <MyCommand, MyCommandHandler>(() => new MyCommandHandler()); _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory); PipelineBuilder <MyCommand> .ClearPipelineCache(); }
public CommandProcessorSendTests() { var registry = new SubscriberRegistry(); registry.Register <MyCommand, MyCommandHandler>(); _myCommandHandler = new MyCommandHandler(); var handlerFactory = new TestHandlerFactorySync <MyCommand, MyCommandHandler>(() => _myCommandHandler); _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry()); PipelineBuilder <MyCommand> .ClearPipelineCache(); }
public PipelineWithHandlerDependenciesTests() { var registry = new SubscriberRegistry(); registry.Register <MyCommand, MyDependentCommandHandler>(); var handlerFactory = new TestHandlerFactorySync <MyCommand, MyDependentCommandHandler>( () => new MyDependentCommandHandler(new FakeRepository <MyAggregate>(new FakeSession()))); _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory); PipelineBuilder <MyCommand> .ClearPipelineCache(); }
public ContextBagVisibilityTests() { var registry = new SubscriberRegistry(); registry.Register <MyCommand, MyContextAwareCommandHandler>(); var handlerFactory = new TestHandlerFactorySync <MyCommand, MyContextAwareCommandHandler>(() => new MyContextAwareCommandHandler()); _request_context = new RequestContext(); _myCommand = new MyCommand(); MyContextAwareCommandHandler.TestString = null; var requestContextFactory = A.Fake <IAmARequestContextFactory>(); A.CallTo(() => requestContextFactory.Create()).Returns(_request_context); _commandProcessor = new CommandProcessor(registry, handlerFactory, requestContextFactory, new PolicyRegistry()); PipelineBuilder <MyCommand> .ClearPipelineCache(); _request_context.Bag["TestString"] = I_AM_A_TEST_OF_THE_CONTEXT_BAG; }
public CommandProcessorCallTests() { _myRequest.RequestValue = "Hello World"; _fakeMessageProducerWithPublishConfirmation = new FakeMessageProducerWithPublishConfirmation(); const string topic = "MyRequest"; var header = new MessageHeader( messageId: _myRequest.Id, topic: topic, messageType: MessageType.MT_COMMAND, correlationId: _myRequest.ReplyAddress.CorrelationId, replyTo: _myRequest.ReplyAddress.Topic); var body = new MessageBody(JsonSerializer.Serialize(new MyRequestDTO(_myRequest.Id.ToString(), _myRequest.RequestValue), JsonSerialisationOptions.Options)); _message = new Message(header, body); var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyRequestMessageMapper)) { return(new MyRequestMessageMapper()); } if (type == typeof(MyResponseMessageMapper)) { return(new MyResponseMessageMapper()); } throw new ConfigurationException($"No mapper found for {type.Name}"); })); messageMapperRegistry.Register <MyRequest, MyRequestMessageMapper>(); messageMapperRegistry.Register <MyResponse, MyResponseMessageMapper>(); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register <MyResponse, MyResponseHandler>(); var handlerFactory = new TestHandlerFactorySync <MyResponse, MyResponseHandler>(() => new MyResponseHandler()); var retryPolicy = Policy .Handle <Exception>() .Retry(); var circuitBreakerPolicy = Policy .Handle <Exception>() .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); InMemoryChannelFactory inMemoryChannelFactory = new InMemoryChannelFactory(); //we need to seed the response as the fake producer does not actually send across the wire inMemoryChannelFactory.SeedChannel(new[] { _message }); var replySubs = new List <Subscription> { new Subscription <MyResponse>() }; _commandProcessor = new CommandProcessor( subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } }, messageMapperRegistry, new InMemoryOutbox(), new ProducerRegistry(new Dictionary <string, IAmAMessageProducer>() { { topic, _fakeMessageProducerWithPublishConfirmation }, }), replySubs, responseChannelFactory: inMemoryChannelFactory); PipelineBuilder <MyRequest> .ClearPipelineCache(); }