Exemplo n.º 1
0
        internal async Task PeekLockTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            var receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount);

            await TestUtility.CompleteMessagesAsync(messageReceiver, receivedMessages);
        }
Exemplo n.º 2
0
        internal async Task ReceiveDeleteTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            var receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount, TimeSpan.FromSeconds(10));

            Assert.Equal(receivedMessages.Count, messageCount);
        }
Exemplo n.º 3
0
        internal async Task ReceiveDeleteTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            var receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount);

            Assert.True(messageCount == receivedMessages.Count);
        }
        internal async Task ReceiveDeleteTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount, TimeSpan timeout)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            var receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount, timeout);

            TestUtility.VaidateMessageState(receivedMessages, MessageState.Active);
            Assert.Equal(messageCount, receivedMessages.Count);
        }
        async Task PeekLockDeliveryCountTest(string queueName)
        {
            var queueClient = new QueueClient(TestUtility.NamespaceConnectionString, queueName);

            try
            {
                await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

                var messages = await TestUtility.ReceiveMessagesAsync(queueClient.InnerReceiver, 1);

                await TestUtility.CompleteMessagesAsync(queueClient.InnerReceiver, messages);

                Assert.Equal(1, messages.First().SystemProperties.DeliveryCount);
            }
            finally
            {
                await queueClient.CloseAsync();
            }
        }
Exemplo n.º 6
0
        internal async Task OnMessageAsyncTestCase(
            IMessageSender messageSender,
            IMessageReceiver messageReceiver,
            int maxConcurrentCalls,
            bool autoComplete,
            int messageCount)
        {
            int count = 0;
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            messageReceiver.RegisterMessageHandler(
                async(message, token) =>
            {
                TestUtility.Log($"Received message: SequenceNumber: {message.SystemProperties.SequenceNumber}");
                count++;
                if (messageReceiver.ReceiveMode == ReceiveMode.PeekLock && !autoComplete)
                {
                    await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
                }
            },
                new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = maxConcurrentCalls, AutoComplete = autoComplete
            });

            // Wait for the OnMessage Tasks to finish
            Stopwatch stopwatch = Stopwatch.StartNew();

            while (stopwatch.Elapsed.TotalSeconds <= 60)
            {
                if (count == messageCount)
                {
                    TestUtility.Log($"All '{messageCount}' messages Received.");
                    break;
                }
                else
                {
                    await Task.Delay(TimeSpan.FromSeconds(5));
                }
            }
            Assert.True(count == messageCount);
        }
Exemplo n.º 7
0
        internal async Task PeekAsyncTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            var peekedMessages = new List <Message>();

            peekedMessages.Add(await TestUtility.PeekMessageAsync(messageReceiver));
            peekedMessages.AddRange(await TestUtility.PeekMessagesAsync(messageReceiver, messageCount - 1));

            Assert.True(messageCount == peekedMessages.Count);
            long lastSequenceNumber = -1;

            foreach (var message in peekedMessages)
            {
                Assert.True(message.SystemProperties.SequenceNumber != lastSequenceNumber);
                lastSequenceNumber = message.SystemProperties.SequenceNumber;
            }

            await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount);
        }
Exemplo n.º 8
0
        protected async Task PeekAsyncTestCase(MessageSender messageSender, MessageReceiver messageReceiver, int messageCount)
        {
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            List <BrokeredMessage> peekedMessages = new List <BrokeredMessage>();

            peekedMessages.Add(await TestUtility.PeekMessageAsync(messageReceiver));
            peekedMessages.AddRange(await TestUtility.PeekMessagesAsync(messageReceiver, messageCount - 1));

            Assert.True(messageCount == peekedMessages.Count());
            long lastSequenceNumber = -1;

            foreach (BrokeredMessage message in peekedMessages)
            {
                Assert.True(message.SequenceNumber != lastSequenceNumber);
                lastSequenceNumber = message.SequenceNumber;
            }

            var receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount);
        }
            public async Task Should_return_true_for_peeked_message()
            {
                await ServiceBusScope.UsingQueueAsync(partitioned : false, sessionEnabled : false, async queueName =>
                {
                    var queueClient = new QueueClient(TestUtility.NamespaceConnectionString, queueName, ReceiveMode.PeekLock);

                    try
                    {
                        await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);
                        var peekedMessage = await TestUtility.PeekMessageAsync(queueClient.InnerReceiver);
                        var result        = peekedMessage.SystemProperties.IsReceived;
                        Assert.True(result);
                    }
                    finally
                    {
                        var messages = await TestUtility.ReceiveMessagesAsync(queueClient.InnerReceiver, 1);
                        await TestUtility.CompleteMessagesAsync(queueClient.InnerReceiver, messages);
                        await queueClient.CloseAsync();
                    }
                });
            }
Exemplo n.º 10
0
        public async Task PeekLockDeliveryCountTest(bool partitioned, bool sessionEnabled)
        {
            await ServiceBusScope.UsingQueueAsync(partitioned, sessionEnabled, async queueName =>
            {
                var queueClient = new QueueClient(TestUtility.NamespaceConnectionString, queueName);
                try
                {
                    await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

                    var messages = await TestUtility.ReceiveMessagesAsync(queueClient.InnerReceiver, 1);

                    await TestUtility.CompleteMessagesAsync(queueClient.InnerReceiver, messages);

                    Assert.Equal(1, messages.First().SystemProperties.DeliveryCount);
                }
                finally
                {
                    await queueClient.CloseAsync();
                }
            });
        }
Exemplo n.º 11
0
        internal async Task OnMessageRegistrationWithoutPendingMessagesTestCase(
            IMessageSender messageSender,
            IMessageReceiver messageReceiver,
            int maxConcurrentCalls,
            bool autoComplete)
        {
            int count = 0;

            messageReceiver.RegisterMessageHandler(
                async(message, token) =>
            {
                TestUtility.Log($"Received message: SequenceNumber: {message.SystemProperties.SequenceNumber}");
                count++;
                await Task.CompletedTask;
            },
                new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = maxConcurrentCalls, AutoComplete = autoComplete
            });

            await TestUtility.SendMessagesAsync(messageSender, 1);

            Stopwatch stopwatch = Stopwatch.StartNew();

            while (stopwatch.Elapsed.TotalSeconds <= 20)
            {
                if (count == 1)
                {
                    TestUtility.Log($"All messages Received.");
                    break;
                }
                else
                {
                    await Task.Delay(TimeSpan.FromSeconds(5));
                }
            }

            TestUtility.Log($"{DateTime.Now}: MessagesReceived: {count}");
            Assert.True(count == 1);
        }
Exemplo n.º 12
0
            async Task Should_return_true_for_peeked_message()
            {
                var queueClient = new QueueClient(TestUtility.NamespaceConnectionString, TestConstants.NonPartitionedQueueName, ReceiveMode.PeekLock);

                try
                {
                    await TestUtility.SendMessagesAsync(queueClient.InnerClient.InnerSender, 1);

                    var peekedMessage = await TestUtility.PeekMessageAsync(queueClient.InnerClient.InnerReceiver);

                    var result = peekedMessage.SystemProperties.IsReceived;
                    Assert.True(result);
                }
                finally
                {
                    var messages = await TestUtility.ReceiveMessagesAsync(queueClient.InnerClient.InnerReceiver, 1);

                    await TestUtility.CompleteMessagesAsync(queueClient.InnerClient.InnerReceiver, messages);

                    await queueClient.CloseAsync();
                }
            }
        internal async Task PeekLockDeferTestCase(IMessageSender messageSender, IMessageReceiver messageReceiver, int messageCount)
        {
            // Send messages
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            // Receive 5 messages And Defer them
            var deferMessagesCount = 5;
            var receivedMessages   = await TestUtility.ReceiveMessagesAsync(messageReceiver, deferMessagesCount);

            Assert.True(receivedMessages.Count == deferMessagesCount);
            var sequenceNumbers = receivedMessages.Select(receivedMessage => receivedMessage.SystemProperties.SequenceNumber).ToList();
            await TestUtility.DeferMessagesAsync(messageReceiver, receivedMessages);

            // Receive and Complete 5 other regular messages
            receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount - deferMessagesCount);

            await TestUtility.CompleteMessagesAsync(messageReceiver, receivedMessages);

            Assert.True(receivedMessages.Count == messageCount - deferMessagesCount);

            // Receive / Abandon deferred messages
            receivedMessages = await TestUtility.ReceiveDeferredMessagesAsync(messageReceiver, sequenceNumbers);

            Assert.True(receivedMessages.Count == 5);
            TestUtility.VaidateMessageState(receivedMessages, MessageState.Deferred);
            await TestUtility.DeferMessagesAsync(messageReceiver, receivedMessages);

            // Receive Again and Check delivery count
            receivedMessages = await TestUtility.ReceiveDeferredMessagesAsync(messageReceiver, sequenceNumbers);

            var count = receivedMessages.Count(message => message.SystemProperties.DeliveryCount == 3);

            TestUtility.VaidateMessageState(receivedMessages, MessageState.Deferred);
            Assert.True(count == receivedMessages.Count);

            // Complete messages
            await TestUtility.CompleteMessagesAsync(messageReceiver, receivedMessages);
        }
Exemplo n.º 14
0
            async Task Should_return_true_for_message_that_was_sent_and_received(ReceiveMode receiveMode)
            {
                var queueClient = new QueueClient(TestUtility.NamespaceConnectionString, TestConstants.NonPartitionedQueueName, receiveMode);

                try
                {
                    await TestUtility.SendMessagesAsync(queueClient.InnerClient.InnerSender, 1);

                    var receivedMessages = await TestUtility.ReceiveMessagesAsync(queueClient.InnerClient.InnerReceiver, 1);

                    Assert.True(receivedMessages.First().SystemProperties.IsReceived);

                    // TODO: remove when per test cleanup is possible
                    if (receiveMode == ReceiveMode.PeekLock)
                    {
                        await queueClient.CompleteAsync(receivedMessages.First().SystemProperties.LockToken);
                    }
                }
                finally
                {
                    await queueClient.CloseAsync();
                }
            }
        protected async Task PeekLockDeferTestCase(MessageSender messageSender, MessageReceiver messageReceiver, int messageCount)
        {
            // Send messages
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            // Receive 5 messages And Defer them
            int deferMessagesCount = 5;
            var receivedMessages   = await TestUtility.ReceiveMessagesAsync(messageReceiver, deferMessagesCount);

            Assert.True(receivedMessages.Count() == deferMessagesCount);
            var sequenceNumbers = receivedMessages.Select(receivedMessage => receivedMessage.SequenceNumber);
            await TestUtility.DeferMessagesAsync(messageReceiver, receivedMessages);

            // Receive and Complete 5 other regular messages
            receivedMessages = await TestUtility.ReceiveMessagesAsync(messageReceiver, messageCount - deferMessagesCount);

            await TestUtility.CompleteMessagesAsync(messageReceiver, receivedMessages);

            Assert.True(receivedMessages.Count() == messageCount - deferMessagesCount);

            // Receive / Abandon deferred messages
            receivedMessages = await messageReceiver.ReceiveBySequenceNumberAsync(sequenceNumbers);

            Assert.True(receivedMessages.Count() == 5);
            await TestUtility.DeferMessagesAsync(messageReceiver, receivedMessages);

            // Receive Again and Check delivery count
            receivedMessages = await messageReceiver.ReceiveBySequenceNumberAsync(sequenceNumbers);

            int count = receivedMessages.Where((message) => message.DeliveryCount == 3).Count();

            Assert.True(count == receivedMessages.Count());

            // Complete messages
            await TestUtility.CompleteMessagesAsync(messageReceiver, receivedMessages);
        }
        async Task MessageLockLostExceptionTest()
        {
            const int messageCount = 2;

            var sender   = new MessageSender(TestUtility.NamespaceConnectionString, TestConstants.NonPartitionedQueueName);
            var receiver = new MessageReceiver(TestUtility.NamespaceConnectionString, TestConstants.NonPartitionedQueueName, receiveMode: ReceiveMode.PeekLock);

            try
            {
                await TestUtility.SendMessagesAsync(sender, messageCount);

                var receivedMessages = await TestUtility.ReceiveMessagesAsync(receiver, messageCount);

                Assert.True(receivedMessages.Count() == messageCount);

                // Let the messages expire
                await Task.Delay(TimeSpan.FromMinutes(1));

                // Complete should throw
                await
                Assert.ThrowsAsync <MessageLockLostException>(
                    async() => await TestUtility.CompleteMessagesAsync(receiver, receivedMessages));

                receivedMessages = await TestUtility.ReceiveMessagesAsync(receiver, messageCount);

                Assert.True(receivedMessages.Count() == messageCount);

                await TestUtility.CompleteMessagesAsync(receiver, receivedMessages);
            }
            finally
            {
                await sender.CloseAsync().ConfigureAwait(false);

                await receiver.CloseAsync().ConfigureAwait(false);
            }
        }
Exemplo n.º 17
0
        public async Task MessageLockLostExceptionTest()
        {
            await ServiceBusScope.UsingQueueAsync(partitioned : false, sessionEnabled : false, async queueName =>
            {
                const int messageCount = 2;

                var sender   = new MessageSender(TestUtility.NamespaceConnectionString, queueName);
                var receiver = new MessageReceiver(TestUtility.NamespaceConnectionString, queueName, receiveMode: ReceiveMode.PeekLock);

                try
                {
                    await TestUtility.SendMessagesAsync(sender, messageCount);
                    var receivedMessages = await TestUtility.ReceiveMessagesAsync(receiver, messageCount);

                    Assert.True(receivedMessages.Count == messageCount);

                    // Let the messages expire
                    await Task.Delay(TimeSpan.FromMinutes(1));

                    // Complete should throw
                    await
                    Assert.ThrowsAsync <MessageLockLostException>(
                        async() => await TestUtility.CompleteMessagesAsync(receiver, receivedMessages));

                    receivedMessages = await TestUtility.ReceiveMessagesAsync(receiver, messageCount);
                    Assert.True(receivedMessages.Count == messageCount);

                    await TestUtility.CompleteMessagesAsync(receiver, receivedMessages);
                }
                finally
                {
                    await sender.CloseAsync();
                    await receiver.CloseAsync();
                }
            });
        }
        internal async Task OnMessageAsyncUnregisterHandlerShortTimeoutTestCase(
            IMessageSender messageSender,
            IMessageReceiver messageReceiver,
            int maxConcurrentCalls,
            bool autoComplete,
            int messageCount)
        {
            var count = 0;
            await TestUtility.SendMessagesAsync(messageSender, messageCount);

            messageReceiver.RegisterMessageHandler(
                async(message, token) =>
            {
                TestUtility.Log($"Received message: SequenceNumber: {message.SystemProperties.SequenceNumber}");
                await Task.Delay(TimeSpan.FromSeconds(8));
                if (messageReceiver.ReceiveMode == ReceiveMode.PeekLock && !autoComplete)
                {
                    await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
                }
                Interlocked.Increment(ref count);
            },
                new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = maxConcurrentCalls, AutoComplete = autoComplete
            });

            await messageReceiver.UnregisterMessageHandlerAsync(TimeSpan.FromSeconds(2));

            Assert.True(count == 0);

            // Reregister won't have any problems
            count = 0;
            var remainingMessageCount = messageCount - maxConcurrentCalls;

            messageReceiver.RegisterMessageHandler(
                async(message, token) =>
            {
                TestUtility.Log($"Received message: SequenceNumber: {message.SystemProperties.SequenceNumber}");
                if (messageReceiver.ReceiveMode == ReceiveMode.PeekLock && !autoComplete)
                {
                    await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
                }
                Interlocked.Increment(ref count);
            },
                new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = maxConcurrentCalls, AutoComplete = autoComplete
            });

            var stopwatch = Stopwatch.StartNew();

            while (stopwatch.Elapsed.TotalSeconds <= 60)
            {
                if (count == remainingMessageCount)
                {
                    TestUtility.Log($"All '{remainingMessageCount}' messages Received.");
                    break;
                }
                await Task.Delay(TimeSpan.FromSeconds(5));
            }
            Assert.True(count == remainingMessageCount);
        }
        async Task BrokeredMessageOperationsTest()
        {
            // Create QueueClient with ReceiveDelete,
            // Send and Receive a message, Try to Complete/Abandon/Defer/DeadLetter should throw InvalidOperationException()
            var queueClient = QueueClient.CreateFromConnectionString(
                TestUtility.GetEntityConnectionString(Constants.PartitionedQueueName),
                ReceiveMode.ReceiveAndDelete);

            await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

            var message = await queueClient.ReceiveAsync();

            Assert.NotNull((object)message);

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await message.CompleteAsync());

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await message.AbandonAsync());

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await message.DeferAsync());

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await message.DeadLetterAsync());

            // Create a PeekLock queueClient and do rest of the operations
            // Send a Message, Receive/ Abandon and Complete it using BrokeredMessage methods
            queueClient = QueueClient.CreateFromConnectionString(
                TestUtility.GetEntityConnectionString(Constants.PartitionedQueueName),
                ReceiveMode.PeekLock);

            await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

            message = await queueClient.ReceiveAsync();

            Assert.NotNull((object)message);
            await message.AbandonAsync();

            await Task.Delay(TimeSpan.FromMilliseconds(100));

            message = await queueClient.ReceiveAsync();

            await message.CompleteAsync();

            // Send a Message, Receive / DeadLetter using BrokeredMessage methods
            await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

            message = await queueClient.ReceiveAsync();

            await message.DeadLetterAsync();

            var builder = new ServiceBusConnectionStringBuilder(TestUtility.GetEntityConnectionString(Constants.PartitionedQueueName));

            builder.EntityPath = EntityNameHelper.FormatDeadLetterPath(queueClient.QueueName);
            var deadLetterQueueClient = QueueClient.CreateFromConnectionString(builder.ToString());

            message = await deadLetterQueueClient.ReceiveAsync();

            await message.CompleteAsync();

            // Send a Message, Receive/Defer using BrokeredMessage methods
            await TestUtility.SendMessagesAsync(queueClient.InnerSender, 1);

            message = await queueClient.ReceiveAsync();

            var deferredSequenceNumber = message.SequenceNumber;
            await message.DeferAsync();

            var deferredMessage = await queueClient.ReceiveBySequenceNumberAsync(deferredSequenceNumber);

            await deferredMessage.CompleteAsync();

            await queueClient.CloseAsync();
        }