Пример #1
0
        public async Task ShouldDeleteBadMessageFromQueue()
        {
            // Given
            var queueCreationOptions
                = new RabbitQueueCreationOptions
                {
                QueueName               = Guid.NewGuid().ToString(),
                RetriesCount            = 0,
                RetryInitialTimeout     = TimeSpan.Zero,
                ExceptionHandlingPolicy = ExceptionHandlingPolicy.None
                };


            // When
            var messageHandler = new ThrowingExceptionMessageHandler();

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

                await queue.SubscribeAsync(messageHandler);

                await Task.Delay(_completionTimeout);
            }

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

            Assert.Empty(messageHandler.Messages);
            Assert.Equal(0UL, GetQueueMessagesCount(queueCreationOptions.QueueName));
        }
Пример #2
0
        public async Task ShouldRequeueAndProcessBadMessage()
        {
            // Given
            const string expectedMessage = "Test message";
            var          queueCreationOptions
                = new RabbitQueueCreationOptions
                {
                QueueName               = Guid.NewGuid().ToString(),
                RetriesCount            = 0,
                RetryInitialTimeout     = TimeSpan.FromMilliseconds(100),
                ExceptionHandlingPolicy = ExceptionHandlingPolicy.Requeue
                };


            // When
            var messageHandler = new ThrowingExceptionMessageHandler();

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

                await queue.SubscribeAsync(messageHandler);

                await Task.Delay(_completionTimeout);
            }

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

            Assert.Equal(expectedMessage, messageHandler.Messages.Single());
            Assert.Equal(0UL, GetQueueMessagesCount(queueCreationOptions.QueueName));
        }
Пример #3
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));
        }
Пример #4
0
        public void ShouldReturnNothingWhenExceptionThrown()
        {
            // Arrange
            var exception          = new HttpRequestException("Test");
            var httpMessageHandler = new ThrowingExceptionMessageHandler(exception);
            var client             = new HttpClient(httpMessageHandler);

            // Sut
            var sut = new WeatherHttpClientBuilder().WithHttpClient(client).Build();

            // Act
            var result = sut.GetWeatherFor(new List <string>()
            {
                "test"
            }).Result;

            // Assert
            Assert.IsTrue(result.ToList().Count == 0);
        }