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."); } }
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); }