예제 #1
0
        public async Task GetMessagesAsync_should_get_messages()
        {
            //Arrange
            var command = new TestCommand(Guid.NewGuid().ToString());
            await _bus.SendAsync(command);

            //Verify processing queue empty
            var processingQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetProcessingQueueName(_queueName));

            processingQueueLength.Should().Be(0);

            //Act
            var messages = await _target.GetMessagesAsync(5);

            //Assert
            messages.Length.Should().Be(1);
            var message = messages.First();

            message.Message.Should().BeEquivalentTo(command);
            message.ExpirationKey.Should().NotBeNullOrEmpty();
            message.HashEntries.Should().ContainKey(RedisHashKeys.DeliveryCount);
            var deliveryCount = message.HashEntries.First(e => e.Key.Equals(RedisHashKeys.DeliveryCount));

            deliveryCount.Value.Should().Be("1");
            processingQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetProcessingQueueName(_queueName));

            processingQueueLength.Should().Be(1);
        }
예제 #2
0
        public async Task DeleteDeadletter_should_delete_deadletter_and_related_data()
        {
            //Arrange
            var message = await SendAndGetMessage();

            await _target.DeadletterMessageAsync(message, 1);

            var deadletter = await _target.PeekDeadlettersAsync(1).FirstAsync();

            //Act
            await _target.DeleteDeadletterAsync(deadletter);

            //Assert
            var deadletters = await _target.PeekDeadlettersAsync(1).ToListAsync();

            deadletters.Should().BeEmpty();

            var hashKey = RedisQueueConventions.GetMessageHashKey(_queueName, deadletter.Message.Id);
            var hashes  = await RedisTestBase.Database.HashGetAllAsync(hashKey).ConfigureAwait(false);

            hashes.Should().BeEmpty();

            var expirationKey = RedisQueueConventions.GetMessageExpirationKey(_queueName, deadletter.Message.Id);
            var expiration    = await RedisTestBase.Database.StringGetAsync(expirationKey);

            expiration.IsNull.Should().BeTrue();
        }
예제 #3
0
        public async Task DeadLetterMessageAsync_should_remove_from_processing_queue_and_put_message_in_deadletter_queue()
        {
            //Arrange
            var message = await SendAndGetMessage();

            //Act
            await _target.DeadletterMessageAsync(message, 1);

            //Assert
            var processingQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetProcessingQueueName(_queueName));

            processingQueueLength.Should().Be(0);
            var deadLetterQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetDeadLetterQueueName(_queueName));

            deadLetterQueueLength.Should().Be(1);
        }
예제 #4
0
        public async Task RequeueDeadletterAsync_should_requeue_message_remove_errors_and_delivery_count()
        {
            //Arrange
            var message = await SendAndGetMessage();

            await _target.DeadletterMessageAsync(message, 1);

            //Act
            await _target.RequeueDeadletterAsync();

            //Assert
            var deadLetterQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetDeadLetterQueueName(_queueName));

            deadLetterQueueLength.Should().Be(0);
            var queueLength = await RedisTestBase.Database.ListLengthAsync(_queueName);

            queueLength.Should().Be(1);
        }
예제 #5
0
        public async Task CompleteMessageAsync_should_delete_hash_and_expiration_keys_then_remove_message()
        {
            //Arrange
            var message = await SendAndGetMessage();

            //Act
            await _target.CompleteMessageAsync(message);

            //Assert
            var hash = await RedisTestBase.Database.HashGetAllAsync(message.HashKey);

            hash.Should().BeEmpty();
            var expirationKey = await RedisTestBase.Database.StringGetAsync(message.ExpirationKey);

            expirationKey.HasValue.Should().BeFalse();
            var messages = await _target.GetMessagesAsync(1);

            messages.Length.Should().Be(0);
            var processingQueueLength = await RedisTestBase.Database.ListLengthAsync(RedisQueueConventions.GetProcessingQueueName(_queueName));

            processingQueueLength.Should().Be(0);
        }
예제 #6
0
 public static string GetAttachmentBinaryKey(string queueName, string id) => $"{RedisQueueConventions.GetMessageHashKey(queueName, id)}:attachment:binary";
예제 #7
0
 public static string GetAttachmentMetadataKey(string queueName, string id) => $"{RedisQueueConventions.GetMessageHashKey(queueName, id)}:attachment:metadata";