예제 #1
0
        public async Task TestListAllQueueMessagesWithUpdates()
        {
            IQueueingService provider = CreateProvider();

            using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TestTimeout(TimeSpan.FromSeconds(10))))
            {
                QueueName queueName = CreateRandomQueueName();

                await provider.CreateQueueAsync(queueName, cancellationTokenSource.Token);

                List <Task> postMessagesTasks = new List <Task>();
                for (int i = 0; i < 28; i++)
                {
                    postMessagesTasks.Add(provider.PostMessagesAsync(queueName, cancellationTokenSource.Token, new Message <SampleMetadata>(TimeSpan.FromSeconds(120), new SampleMetadata(i, "Some Message " + i))));
                }

                await Task.Factory.ContinueWhenAll(postMessagesTasks.ToArray(), TaskExtrasExtensions.PropagateExceptions);

                HashSet <int> locatedMessages = new HashSet <int>();

                QueuedMessageList messages = await provider.ListMessagesAsync(queueName, null, null, true, false, cancellationTokenSource.Token);

                foreach (QueuedMessage message in messages)
                {
                    Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                }

                int deletedMessage = messages[0].Body.ToObject <SampleMetadata>().ValueA;
                await provider.DeleteMessageAsync(queueName, messages[0].Id, null, cancellationTokenSource.Token);

                while (messages.Count > 0)
                {
                    QueuedMessageList tempList = await provider.ListMessagesAsync(queueName, messages.NextPageId, null, true, false, cancellationTokenSource.Token);

                    if (tempList.Count > 0)
                    {
                        Assert.IsTrue(locatedMessages.Add(tempList[0].Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                        await provider.DeleteMessageAsync(queueName, tempList[0].Id, null, cancellationTokenSource.Token);
                    }

                    messages = await provider.ListMessagesAsync(queueName, messages.NextPageId, null, true, false, cancellationTokenSource.Token);

                    foreach (QueuedMessage message in messages)
                    {
                        Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                    }
                }

                Assert.AreEqual(28, locatedMessages.Count);
                for (int i = 0; i < 28; i++)
                {
                    Assert.IsTrue(locatedMessages.Contains(i), "The message listing did not include message '{0}', which was in the queue when the listing started and still in it afterwards.", i);
                }

                await provider.DeleteQueueAsync(queueName, cancellationTokenSource.Token);
            }
        }
예제 #2
0
        public void SynchronousTestListAllQueueMessagesWithUpdates()
        {
            IQueueingService provider  = CreateProvider();
            QueueName        queueName = CreateRandomQueueName();

            provider.CreateQueue(queueName);

            for (int i = 0; i < 28; i++)
            {
                provider.PostMessages(queueName, new Message <SampleMetadata>(TimeSpan.FromSeconds(120), new SampleMetadata(i, "Some Message " + i)));
            }

            HashSet <int> locatedMessages = new HashSet <int>();

            QueuedMessageList messages = provider.ListMessages(queueName, null, null, true, false);

            foreach (QueuedMessage message in messages)
            {
                Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
            }

            int deletedMessage = messages[0].Body.ToObject <SampleMetadata>().ValueA;

            provider.DeleteMessage(queueName, messages[0].Id, null);

            while (messages.Count > 0)
            {
                QueuedMessageList tempList = provider.ListMessages(queueName, messages.NextPageId, null, true, false);
                if (tempList.Count > 0)
                {
                    Assert.IsTrue(locatedMessages.Add(tempList[0].Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                    provider.DeleteMessage(queueName, tempList[0].Id, null);
                }

                messages = provider.ListMessages(queueName, messages.NextPageId, null, true, false);
                foreach (QueuedMessage message in messages)
                {
                    Assert.IsTrue(locatedMessages.Add(message.Body.ToObject <SampleMetadata>().ValueA), "Received the same message more than once.");
                }
            }

            Assert.AreEqual(28, locatedMessages.Count);
            for (int i = 0; i < 28; i++)
            {
                Assert.IsTrue(locatedMessages.Contains(i), "The message listing did not include message '{0}', which was in the queue when the listing started and still in it afterwards.", i);
            }

            provider.DeleteQueue(queueName);
        }