public void TestSerial_NormalProcessing() { // Arrange const int runCount = 100; var client = new CloudEnvironment(); var overflow = client.BlobClient.GetContainerReference("overflownqueues-1"); var queue = client.QueueClient.GetQueueReference("test1"); var result = string.Empty; var expected = string.Empty; var sw = new Stopwatch(); var factory = new AzureExtendedQueueFactory(new AzureBlobContainer(overflow), new ConsoleLogService()); var equeue = factory.Create(new AzureQueue(queue)); for (var i = 0; i < runCount; i++) { expected += i.ToString(CultureInfo.InvariantCulture); } using (var mre = new ManualResetEvent(false)) { var options = new HandleMessagesSerialOptions( TimeSpan.FromSeconds(0), TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(30), 5, new CancellationToken(), message => { if (message.GetMessageContents <string>() == "END") { mre.Set(); return(Task.FromResult(true)); } result += message.GetMessageContents <string>(); return(Task.FromResult(true)); }, null, ex => { throw ex; }); // Act sw.Start(); queue.CreateIfNotExists(); overflow.CreateIfNotExists(); queue.Clear(); for (var i = 0; i < runCount; i++) { equeue.AddMessageEntity(i.ToString(CultureInfo.InvariantCulture)); } equeue.AddMessageEntity("END"); equeue.HandleMessagesInSerialAsync(options); // Assert mre.WaitOne(); sw.Stop(); Trace.WriteLine("Total execution time (in seconds): " + sw.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)); Trace.WriteLine(equeue.Statistics); Assert.AreEqual(expected, result); } }
public void TestSerializedMessages() { // Arrange var client = new CloudEnvironment(); var queue = client.QueueClient.GetQueueReference("test5"); var overflow = client.BlobClient.GetContainerReference("overflownqueues-5"); ComplexModel result = null; var expected = new ComplexModel { Name = "Test" }; var sw = new Stopwatch(); var factory = new AzureExtendedQueueFactory(new AzureBlobContainer(overflow), new ConsoleLogService()); var equeue = factory.Create(new AzureQueue(queue)); using (var mre = new ManualResetEvent(false)) { var options = new HandleMessagesSerialOptions( TimeSpan.FromSeconds(0), TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(30), 5, new CancellationToken(), message => { result = message.GetMessageContents <ComplexModel>(); mre.Set(); return(Task.FromResult(true)); }, null, ex => { throw ex; }); // Act sw.Start(); queue.CreateIfNotExists(); overflow.CreateIfNotExists(); queue.Clear(); equeue.AddMessageEntity(expected); equeue.HandleMessagesInSerialAsync(options); // Assert mre.WaitOne(); sw.Stop(); Trace.WriteLine("Total execution time (in seconds): " + sw.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(expected.Name, result.Name); Assert.AreEqual(expected.ADictionary.First().Key, result.ADictionary.First().Key); Assert.AreEqual(expected.ADictionary.First().Value, result.ADictionary.First().Value); Assert.AreEqual(expected.AList.First(), result.AList.First()); } }
public void TestOverflownMessages() { // Arrange var client = new CloudEnvironment(); var queue = client.QueueClient.GetQueueReference("test4"); var overflow = client.BlobClient.GetContainerReference("overflownqueues-4"); var result = string.Empty; var rnd = new Random(); var expected = new string(Enumerable.Range(1, 128 * 1024).Select(r => (char)rnd.Next(1024, 4096)).ToArray()); var sw = new Stopwatch(); var factory = new AzureExtendedQueueFactory(new AzureBlobContainer(overflow), new ConsoleLogService()); var equeue = factory.Create(new AzureQueue(queue)); using (var mre = new ManualResetEvent(false)) { var options = new HandleMessagesSerialOptions( TimeSpan.FromSeconds(0), TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(30), 5, new CancellationToken(), message => { result = message.GetMessageContents <string>(); mre.Set(); return(Task.FromResult(true)); }, null, ex => { throw ex; }); // Act sw.Start(); queue.CreateIfNotExists(); overflow.CreateIfNotExists(); queue.Clear(); equeue.AddMessageEntity(expected); equeue.HandleMessagesInSerialAsync(options); // Assert mre.WaitOne(); sw.Stop(); Trace.WriteLine("Total execution time (in seconds): " + sw.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(expected, result); } }
public void TestSerial_BatchProcessingDelayed() { // Arrange const int runCount = 30; var client = new CloudEnvironment(); var queue = client.QueueClient.GetQueueReference("test12"); var overflow = client.BlobClient.GetContainerReference("overflownqueues-12"); var locking = new object(); var result = string.Empty; var expected = string.Empty; var sw = new Stopwatch(); var factory = new AzureExtendedQueueFactory(new AzureBlobContainer(overflow), new ConsoleLogService()); var equeue = factory.Create(new AzureQueue(queue)); var lck = new AsyncLock(); for (var i = 1; i < runCount + 1; i++) { expected += ((char)(i)).ToString(CultureInfo.InvariantCulture); } using (var mre = new ManualResetEvent(false)) { var options = new HandleMessagesBatchOptions( TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30), 5, 10, new CancellationToken(), async messages => { using (await lck.LockAsync()) { foreach (var message in messages) { var character = message.GetMessageContents <string>(); result += character; var innersw = new Stopwatch(); innersw.Start(); // Intentional spinning while (true) { if (innersw.Elapsed > TimeSpan.FromSeconds(5)) { break; } } } } if (result.Length == runCount) { mre.Set(); } return(messages); }, null, ex => { throw ex; }); // Act sw.Start(); queue.CreateIfNotExists(); overflow.CreateIfNotExists(); queue.Clear(); for (var i = 1; i < runCount + 1; i++) { equeue.AddMessageEntity(((char)(i)).ToString(CultureInfo.InvariantCulture)); } equeue.HandleMessagesInBatchAsync(options); // Assert mre.WaitOne(); sw.Stop(); Trace.WriteLine("Total execution time (in seconds): " + sw.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)); Assert.IsTrue(expected.All(c => result.Contains(c))); } }
public void TestSerial_ParallelProcessing() { // Arrange const int runCount = 100; var client = new CloudEnvironment(); var queue = client.QueueClient.GetQueueReference("test2"); var overflow = client.BlobClient.GetContainerReference("overflownqueues-2"); var locking = new object(); var result = string.Empty; var expected = string.Empty; var sw = new Stopwatch(); long actuallyRun = 0; var factory = new AzureExtendedQueueFactory(new AzureBlobContainer(overflow), new ConsoleLogService()); var equeue = factory.Create(new AzureQueue(queue)); var lck = new AsyncLock(); for (var i = 1; i < runCount + 1; i++) { expected += ((char)(i)).ToString(CultureInfo.InvariantCulture); } using (var mre = new ManualResetEvent(false)) { var options = new HandleMessagesParallelOptions( TimeSpan.FromSeconds(0), TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(30), 5, 50, new CancellationToken(), async message => { Trace.WriteLine(equeue.Statistics); using (await lck.LockAsync()) { var character = await message.GetMessageContentsAsync <string>().ConfigureAwait(false); result += character; } if (Interlocked.Increment(ref actuallyRun) == runCount) { mre.Set(); } return(true); }, null, ex => { throw ex; }); // Act sw.Start(); queue.CreateIfNotExists(); overflow.CreateIfNotExists(); queue.Clear(); for (var i = 1; i < runCount + 1; i++) { equeue.AddMessageEntity(((char)(i)).ToString(CultureInfo.InvariantCulture)); } equeue.HandleMessagesInParallelAsync(options); // Assert mre.WaitOne(); sw.Stop(); Trace.WriteLine("Total execution time (in seconds): " + sw.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)); Assert.IsTrue(expected.All(c => result.Contains(c))); } }