Ejemplo n.º 1
0
        public async Task ShouldProcessMessageFromQueue()
        {
            // Given
            const string expectedMessage = "Test message";
            var          queueCreationOptions
                = new RabbitQueueCreationOptions
                {
                QueueName               = Guid.NewGuid().ToString(),
                RetriesCount            = 0,
                RetryInitialTimeout     = TimeSpan.Zero,
                ExceptionHandlingPolicy = ExceptionHandlingPolicy.None
                };


            // When
            var messageHandler = new CatchingMessageHandler <string>();

            using (var queue = _queuesFactory.Create <string>(queueCreationOptions))
            {
                await queue.SendMessageAsync(expectedMessage);

                await queue.SubscribeAsync(messageHandler);

                await Task.Delay(_completionTimeout);
            }

            // Then
            _mockLogger.VerifyNoErrorsWasLogged();

            Assert.Equal(expectedMessage, messageHandler.Messages.Single());
            Assert.Equal(0UL, GetQueueMessagesCount(queueCreationOptions.QueueName));
        }
Ejemplo n.º 2
0
        public async Task ShouldPushBadMessageIntoErrorsQueue()
        {
            // Given
            const string expectedMessage = "Test message";
            var          queueCreationOptions
                = new RabbitQueueCreationOptions
                {
                QueueName               = Guid.NewGuid().ToString(),
                RetriesCount            = 0,
                RetryInitialTimeout     = TimeSpan.FromMilliseconds(100),
                ExceptionHandlingPolicy = ExceptionHandlingPolicy.SendToErrorsQueue
                };

            var errorQueueCreationOptions
                = new RabbitQueueCreationOptions
                {
                QueueName               = $"{queueCreationOptions.QueueName}.Errors",
                RetriesCount            = 0,
                RetryInitialTimeout     = TimeSpan.FromMilliseconds(100),
                ExceptionHandlingPolicy = ExceptionHandlingPolicy.None
                };

            // When
            var messageHandler = new ThrowingExceptionMessageHandler();

            using (var queue = _queuesFactory.Create <string>(queueCreationOptions))
            {
                await queue.SubscribeAsync(messageHandler);

                await queue.SendMessageAsync(expectedMessage);

                await Task.Delay(_completionTimeout);
            }

            var errorMessagesHandler = new CatchingMessageHandler <ErrorInformation>();

            using (var errorsQueue = _queuesFactory.Create <ErrorInformation>(errorQueueCreationOptions))
            {
                await errorsQueue.SubscribeAsync(errorMessagesHandler);

                await Task.Delay(_completionTimeout);
            }

            // Then
            _mockLogger.VerifyErrorWasLogged <InvalidOperationException>();

            Assert.Empty(messageHandler.Messages);
            Assert.Equal(0UL, GetQueueMessagesCount(queueCreationOptions.QueueName));

            Assert.Contains(expectedMessage, errorMessagesHandler.Messages.Single().MessageContent);
            Assert.Equal(0UL, GetQueueMessagesCount(errorQueueCreationOptions.QueueName));
        }
Ejemplo n.º 3
0
        public MessagesProcessingServiceTests()
        {
            _mockLogger = MockLoggerExtensions.CreateMockLogger();

            _messageHandler = new CatchingMessageHandler <string>();
            _host           = new HostBuilder()
                              .UseEnvironment(EnvironmentName.Development)
                              .UseContentRoot(Path.GetDirectoryName(GetType().GetTypeInfo().Assembly.Location))
                              .ConfigureAppConfiguration(
                (context, builder) =>
            {
                var hostingEnvironment = context.HostingEnvironment;

                builder
                .AddDefaultConfigs(hostingEnvironment.ContentRootPath, hostingEnvironment.EnvironmentName)
                .AddCiDependentSettings(hostingEnvironment.EnvironmentName);
            }
                )
                              .ConfigureServices(
                (context, collection) =>
                collection
                .AddRabbitMqSupport()
                .AddNotificationsProcessingService(context.Configuration.GetSection("NotificationsProcessingServiceOptions"))
                .Configure <TypedRabbitQueuesFactoryOptions>(context.Configuration.GetSection("QueuesFactoryOptions"))
                )
                              .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                              .ConfigureContainer <ContainerBuilder>(
                builder =>
            {
                builder.RegisterInstance(_messageHandler).As <IMessageHandler <string> >();
            }
                )
                              .ConfigureLogging(
                builder =>
            {
                var mockLoggerFactory = new Mock <ILoggerFactory>();
                mockLoggerFactory.Setup(x => x.CreateLogger(It.IsAny <string>())).Returns(_mockLogger.Object);
                builder.Services.Replace(ServiceDescriptor.Singleton(mockLoggerFactory.Object));
            })
                              .Build();
            _completionTimeout = _host.Services.GetService <IConfiguration>().GetSection("CompletionTimeout").Get <TimeSpan>();
        }