Beispiel #1
0
        private static async Task RunQueueManagerTests(CloudStorageAccount storageAccount, string queueName, CancellationToken cancellationToken)
        {
            var queueManager = new QueueManager(queueName, storageAccount);

            // Empty the queue
            await queueManager.ClearAsync(null, null, cancellationToken).ConfigureAwait(false);

            // Check that the queue is empty
            var queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 0)
            {
                throw new Exception($"We expected the queue to be empty but we found {queuedMessagesCount} messages.");
            }


            //-----------------------------------------------------------------
            // Send a simple message
            var sample = new SampleMessageType
            {
                StringProp = "abc123",
                IntProp    = 123,
                GuidProp   = Guid.NewGuid(),
                DateProp   = new DateTime(2016, 10, 6, 1, 2, 3, DateTimeKind.Utc)
            };
            await queueManager.AddMessageAsync(sample);

            // Check that there is one message in the queue
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 1)
            {
                throw new Exception($"We expected only one message in the queue but we found {queuedMessagesCount} messages.");
            }

            // Get the message
            var message1 = await queueManager.GetMessageAsync(TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false);

            if (message1.Content.GetType() != typeof(SampleMessageType))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            var receivedMessage = (SampleMessageType)message1.Content;

            if (receivedMessage.StringProp != sample.StringProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.IntProp != sample.IntProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.GuidProp != sample.GuidProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.DateProp != sample.DateProp)
            {
                throw new Exception("Did not receive the expected message");
            }

            // Delete the message from the queue
            await queueManager.DeleteMessageAsync(message1).ConfigureAwait(false);

            // Check that the queue is empty
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 0)
            {
                throw new Exception($"We expected the queue to be empty but we found {queuedMessagesCount} messages.");
            }


            //-----------------------------------------------------------------
            // Send a message that exceeds the max size allowed in Azure queues
            int characterCount = 100000;
            var largeSample    = new SampleMessageType
            {
                StringProp = new string('x', characterCount)
            };
            await queueManager.AddMessageAsync(largeSample);

            // Check that there is one message in the queue
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 1)
            {
                throw new Exception($"We expected only one message in the queue but we found {queuedMessagesCount} messages.");
            }

            // Get the message
            var message2 = await queueManager.GetMessageAsync(TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false);

            if (message2.Content.GetType() != typeof(SampleMessageType))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            var largeMessage = (SampleMessageType)message2.Content;

            if (largeMessage.StringProp.Length != characterCount)
            {
                throw new Exception("Did not receive the expected message");
            }

            // Delete the message from the queue
            await queueManager.DeleteMessageAsync(message2).ConfigureAwait(false);

            // Check that the queue is empty
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 0)
            {
                throw new Exception($"We expected the queue to be empty but we found {queuedMessagesCount} messages.");
            }


            //-----------------------------------------------------------------
            // Send a simple string
            await queueManager.AddMessageAsync("Hello World");

            // Check that there is one message in the queue
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 1)
            {
                throw new Exception($"We expected only one message in the queue but we found {queuedMessagesCount} messages.");
            }

            // Get the message
            var message3 = await queueManager.GetMessageAsync(TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false);

            if (message3.Content.GetType() != typeof(string))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            if ((string)message3.Content != "Hello World")
            {
                throw new Exception("Did not receive the expected message");
            }

            // Delete the message from the queue
            await queueManager.DeleteMessageAsync(message3).ConfigureAwait(false);

            // Check that the queue is empty
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 0)
            {
                throw new Exception($"We expected the queue to be empty but we found {queuedMessagesCount} messages.");
            }


            //-----------------------------------------------------------------
            // Send messages using the Azure CloudQueue class
            // thereby bypassing Picton's queue manager serialization
            var queue = storageAccount.CreateCloudQueueClient().GetQueueReference(queueName);

            var cloudMessage = new CloudQueueMessage("Hello World STRING");
            await queue.AddMessageAsync(cloudMessage, null, null, null, null, cancellationToken).ConfigureAwait(false);

            cloudMessage = new CloudQueueMessage(string.Empty);
            cloudMessage.SetMessageContent(Encoding.UTF8.GetBytes("Hello World BINARY"));
            await queue.AddMessageAsync(cloudMessage, null, null, null, null, cancellationToken).ConfigureAwait(false);

            cloudMessage = new CloudQueueMessage(string.Empty);
            cloudMessage.SetMessageContent(BitConverter.GetBytes(1234567890));
            await queue.AddMessageAsync(cloudMessage, null, null, null, null, cancellationToken).ConfigureAwait(false);

            // Check that there are three messages in the queue
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 3)
            {
                throw new Exception($"We expected three messages in the queue but we found {queuedMessagesCount} messages.");
            }

            // Get the messages
            var messages = (await queueManager.GetMessagesAsync(10, TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false)).ToArray();

            if (messages[0].Content.GetType() != typeof(string))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            if ((string)messages[0].Content != "Hello World STRING")
            {
                throw new Exception("Did not receive the expected message");
            }
            if (messages[1].Content.GetType() != typeof(string))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            if ((string)messages[1].Content != "Hello World BINARY")
            {
                throw new Exception("Did not receive the expected message");
            }
            if (messages[2].Content.GetType() != typeof(byte[]))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            if (BitConverter.ToInt32((byte[])messages[2].Content, 0) != 1234567890)
            {
                throw new Exception("Did not receive the expected message");
            }

            // Clear the queue
            await queueManager.ClearAsync().ConfigureAwait(false);

            // Check that the queue is empty
            queuedMessagesCount = await queueManager.GetApproximateMessageCountAsync();

            if (queuedMessagesCount != 0)
            {
                throw new Exception($"We expected the queue to be empty but we found {queuedMessagesCount} messages.");
            }
        }
Beispiel #2
0
        private static async Task RunQueueManagerTests(IStorageAccount storageAccount, string queueName, CancellationToken cancellationToken)
        {
            var queueManager = new QueueManager(queueName, storageAccount);

            // Make sure the queue is empty
            await queueManager.ClearAsync(null, null, cancellationToken).ConfigureAwait(false);

            // Send and receive a simple message
            var sample = new SampleMessageType
            {
                StringProp = "abc123",
                IntProp    = 123,
                GuidProp   = Guid.NewGuid(),
                DateProp   = new DateTime(2016, 10, 6, 1, 2, 3, DateTimeKind.Utc)
            };
            await queueManager.AddMessageAsync(sample);

            var message1 = await queueManager.GetMessageAsync(TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false);

            if (message1.Content.GetType() != typeof(SampleMessageType))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            var receivedMessage = (SampleMessageType)message1.Content;

            if (receivedMessage.StringProp != sample.StringProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.IntProp != sample.IntProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.GuidProp != sample.GuidProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            if (receivedMessage.DateProp != sample.DateProp)
            {
                throw new Exception("Did not receive the expected message");
            }
            await queueManager.DeleteMessageAsync(message1).ConfigureAwait(false);

            // Send a message that exceeds the max size allowed in Azure queues
            int characterCount = 100000;
            var largeSample    = new SampleMessageType
            {
                StringProp = new string('x', characterCount)
            };
            await queueManager.AddMessageAsync(largeSample);

            var message2 = await queueManager.GetMessageAsync(TimeSpan.FromMinutes(5), null, null, cancellationToken).ConfigureAwait(false);

            if (message2.Content.GetType() != typeof(SampleMessageType))
            {
                throw new Exception("The type of the received message does not match the expected type");
            }
            var largeMessage = (SampleMessageType)message2.Content;

            if (largeMessage.StringProp.Length != characterCount)
            {
                throw new Exception("Did not receive the expected message");
            }
            await queueManager.DeleteMessageAsync(message2).ConfigureAwait(false);
        }