Beispiel #1
0
        private async Task <StorageQueue> QueueSetup()
        {
            var storage = new StorageQueue(GetQueueName(), TestHelpers.DevConnectionString);
            await storage.CreateIfNotExists();

            return(storage);
        }
Beispiel #2
0
        public async Task GetAllStorageQueues()
        {
            //create two blob containers
            string       queueName1 = Recording.GenerateAssetName("testqueue1");
            string       queueName2 = Recording.GenerateAssetName("testqueue2");
            StorageQueue queue1     = (await _storageQueueContainer.CreateOrUpdateAsync(queueName1, new StorageQueueData())).Value;
            StorageQueue queue2     = (await _storageQueueContainer.CreateOrUpdateAsync(queueName2, new StorageQueueData())).Value;

            //validate if there are two queues
            StorageQueue queue3 = null;
            StorageQueue queue4 = null;
            int          count  = 0;

            await foreach (StorageQueue queue in _storageQueueContainer.GetAllAsync())
            {
                count++;
                if (queue.Id.Name == queueName1)
                {
                    queue3 = queue;
                }
                if (queue.Id.Name == queueName2)
                {
                    queue4 = queue;
                }
            }
            Assert.AreEqual(count, 2);
            Assert.IsNotNull(queue3);
            Assert.IsNotNull(queue4);
        }
Beispiel #3
0
        public async Task PeekGeneric()
        {
            StorageQueue storage = await QueueSetup();

            var expected = new TestCustomObject {
                FooInt = 42, FooString = "The Answer"
            };
            var expected2 = new TestCustomObject {
                FooInt = 43, FooString = "The Answer 2"
            };
            var expectedList = new List <TestCustomObject> {
                expected, expected2
            };

            foreach (var item in expectedList)
            {
                await storage.SendAsync(item);
            }

            var peeked = (await storage.PeekAsync <TestCustomObject>(2)).ToList();

            Assert.AreEqual(expectedList.Count, peeked.Count);
            Assert.IsTrue(expectedList.Any(m => m.FooInt == expected.FooInt && m.FooString == expected.FooString));
            Assert.IsTrue(expectedList.Any(m => m.FooInt == expected2.FooInt && m.FooString == expected2.FooString));

            var returned = (await storage.GetManyAsync <TestCustomObject>()).ToList();

            Assert.AreEqual(expectedList.Count, returned.Count);
            Assert.IsTrue(returned.Any(m => m.FooInt == expected.FooInt && m.FooString == expected.FooString));
            Assert.IsTrue(returned.Any(m => m.FooInt == expected2.FooInt && m.FooString == expected2.FooString));
            await storage.Delete();
        }
Beispiel #4
0
        public void SaveNull()
        {
            var name = Guid.NewGuid().ToString();
            var t    = new StorageQueue(name, ConnectionString);

            Assert.That(() => t.Send((object)null), Throws.TypeOf <ArgumentNullException>());
        }
Beispiel #5
0
        public async Task <Response <StorageQueue> > CreateAsync(string resourceGroupName, string accountName, string queueName, StorageQueue queue, CancellationToken cancellationToken = default)
        {
            if (resourceGroupName == null)
            {
                throw new ArgumentNullException(nameof(resourceGroupName));
            }
            if (accountName == null)
            {
                throw new ArgumentNullException(nameof(accountName));
            }
            if (queueName == null)
            {
                throw new ArgumentNullException(nameof(queueName));
            }
            if (queue == null)
            {
                throw new ArgumentNullException(nameof(queue));
            }

            using var message = CreateCreateRequest(resourceGroupName, accountName, queueName, queue);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 200:
            {
                StorageQueue value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                value = StorageQueue.DeserializeStorageQueue(document.RootElement);
                return(Response.FromValue(value, message.Response));
            }
Beispiel #6
0
        public async Task ApproixmateMessageCountNone()
        {
            var storage = new StorageQueue(QueueName, ConnectionString);
            var result  = await storage.ApproixmateMessageCount();

            Assert.AreEqual(0, result);
        }
Beispiel #7
0
        public void Reference()
        {
            var name = Guid.NewGuid().ToString();
            var t    = new StorageQueue(name, ConnectionString);

            Assert.IsNotNull(t.Reference);
        }
Beispiel #8
0
        public void Client()
        {
            var name = Guid.NewGuid().ToString();
            var t    = new StorageQueue(name, ConnectionString);

            Assert.IsNotNull(t.Client);
        }
Beispiel #9
0
        public void Name()
        {
            var name = Guid.NewGuid().ToString();
            var t    = new StorageQueue(name, ConnectionString);

            Assert.AreEqual(name, t.Name);
        }
Beispiel #10
0
        public async Task CreateDeleteStorageQueue()
        {
            //create storage queue
            string       storageQueueName = Recording.GenerateAssetName("testqueue");
            StorageQueue queue1           = (await _storageQueueContainer.CreateOrUpdateAsync(storageQueueName, new StorageQueueData())).Value;

            Assert.IsNotNull(queue1);
            Assert.AreEqual(queue1.Id.Name, storageQueueName);

            //validate if successfully created
            StorageQueue queue2 = await _storageQueueContainer.GetAsync(storageQueueName);

            AssertStorageQueueEqual(queue1, queue2);
            Assert.IsTrue(await _storageQueueContainer.CheckIfExistsAsync(storageQueueName));
            Assert.IsFalse(await _storageQueueContainer.CheckIfExistsAsync(storageQueueName + "1"));
            StorageQueueData queueData = queue2.Data;

            Assert.IsEmpty(queueData.Metadata);

            //delete storage queue
            await queue1.DeleteAsync();

            //validate if successfully deleted
            Assert.IsFalse(await _storageQueueContainer.CheckIfExistsAsync(storageQueueName));
            StorageQueue queue3 = await _storageQueueContainer.GetIfExistsAsync(storageQueueName);

            Assert.IsNull(queue3);
        }
Beispiel #11
0
        static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                return(-1);
            }

            string storageUrl = args[0];

            var queue = new StorageQueue(storageUrl);

            while (true)
            {
                string message = Console.ReadLine();

                if (message == null)
                {
                    break;
                }

                queue.Send(message);
            }

            return(0);
        }
Beispiel #12
0
        public async Task CreateIfNotExists()
        {
            var name    = 'a' + Guid.NewGuid().ToString().ToLowerInvariant().Replace('-', 'a');
            var storage = new StorageQueue(name, ConnectionString);
            var created = await storage.CreateIfNotExists();

            Assert.IsTrue(created);
        }
Beispiel #13
0
        public async Task CreateIfNotExists()
        {
            var name    = GetQueueName();
            var storage = new StorageQueue(name, TestHelpers.DevConnectionString);
            var created = await storage.CreateIfNotExists();

            Assert.IsTrue(created);
            await storage.Delete();
        }
Beispiel #14
0
        public async Task ApproixmateMessageCountNone()
        {
            StorageQueue storage = await QueueSetup();

            var result = await storage.ApproixmateMessageCount();

            Assert.AreEqual(0, result);
            await storage.Delete();
        }
Beispiel #15
0
        public async Task ConstructorAccount()
        {
            var name    = 'a' + Guid.NewGuid().ToString().ToLowerInvariant().Replace('-', 'a');
            var account = CloudStorageAccount.Parse(ConnectionString);
            var storage = new StorageQueue(name, account, TimeSpan.FromSeconds(34));
            var created = await storage.CreateIfNotExists();

            Assert.IsTrue(created);
        }
Beispiel #16
0
        public async Task ConstructorAccount()
        {
            var name    = GetQueueName();
            var account = CloudStorageAccount.Parse(TestHelpers.DevConnectionString);
            var storage = new StorageQueue(name, account, TimeSpan.FromSeconds(34));
            var created = await storage.CreateIfNotExists();

            Assert.IsTrue(created);
            await storage.Delete();
        }
        public async Task Execute(string message)
        {
            var providerMessage         = JsonConvert.DeserializeObject <RefreshIlrsProviderMessage>(message);
            var nextPageProviderMessage = await _refreshIlrsLearnerService.ProcessLearners(providerMessage);

            if (nextPageProviderMessage != null)
            {
                StorageQueue.Add(JsonConvert.SerializeObject(nextPageProviderMessage));
            }
        }
Beispiel #18
0
        public async Task RoundTripMsgAsObj()
        {
            var storage = new StorageQueue(QueueName, ConnectionString);

            var msg = new CloudQueueMessage(Guid.NewGuid().ToByteArray());
            await storage.Send((object)msg);

            var returned = await storage.Get();

            Assert.AreEqual(msg.AsBytes, returned.AsBytes);
        }
Beispiel #19
0
        public async Task Delete()
        {
            var storage = new StorageQueue(QueueName, ConnectionString);

            var msg = new CloudQueueMessage(Guid.NewGuid().ToByteArray());
            await storage.Send(msg);

            var returned = await storage.Get();

            await storage.Delete(returned);
        }
        public async Task QueueNames()
        {
            var name    = 'a' + Guid.NewGuid().ToString().ToLowerInvariant().Replace('-', 'a');
            var storage = new StorageQueue(name, ConnectionString);
            var created = await storage.CreateIfNotExists();

            var resources = new AzureStorageResources(ConnectionString);
            var queues    = resources.QueueNames();

            Assert.IsTrue(queues.Contains(name));
        }
Beispiel #21
0
        public async Task RoundTripObject()
        {
            var storage  = new StorageQueue(QueueName, ConnectionString);
            var expected = Guid.NewGuid();
            await storage.Send(expected);

            var returned = await storage.Get();

            var guid = JsonConvert.DeserializeObject <Guid>(returned.AsString);

            Assert.AreEqual(expected, guid);
        }
Beispiel #22
0
        public async Task RoundTripMsgAsObj()
        {
            StorageQueue storage = await QueueSetup();

            var msg = new CloudQueueMessage(Guid.NewGuid().ToByteArray());
            await storage.Send((object)msg);

            var returned = await storage.Get();

            Assert.AreEqual(msg.AsBytes, returned.AsBytes);
            await storage.Delete();
        }
Beispiel #23
0
        public async Task Delete()
        {
            StorageQueue storage = await QueueSetup();

            var msg = new CloudQueueMessage(Guid.NewGuid().ToByteArray());
            await storage.Send(msg);

            var returned = await storage.Get();

            await storage.Delete(returned);

            await storage.Delete();
        }
Beispiel #24
0
        public async Task Execute()
        {
            var output = await _refreshIlrsProviderService.ProcessProviders();

            if (output != null)
            {
                foreach (var message in output)
                {
                    StorageQueue.Add(JsonConvert.SerializeObject(message));
                }

                await _refreshIlrsProviderService.SetLastRunDateTime(_dateTimeHelper.DateTimeNow);
            }
        }
Beispiel #25
0
        public async Task RoundTripObject()
        {
            StorageQueue storage = await QueueSetup();

            var expected = Guid.NewGuid();
            await storage.Send(expected);

            var returned = await storage.Get();

            var guid = JsonConvert.DeserializeObject <Guid>(returned.AsString);

            Assert.AreEqual(expected, guid);
            await storage.Delete();
        }
Beispiel #26
0
        public async Task ApproixmateMessageCount()
        {
            var random  = new Random();
            var count   = random.Next(1, 1000);
            var storage = new StorageQueue(QueueName, ConnectionString);

            for (var i = 0; i < count; i++)
            {
                await storage.Send(Guid.NewGuid());
            }

            var result = await storage.ApproixmateMessageCount();

            Assert.AreEqual(count, result);
        }
Beispiel #27
0
        public async Task GenericGet()
        {
            StorageQueue storage = await QueueSetup();

            var expected = new TestCustomObject {
                FooInt = 42, FooString = "The Answer"
            };
            await storage.SendAsync(expected);

            var returned = await storage.GetAsync <TestCustomObject>();

            Assert.AreEqual(expected.FooString, returned.FooString);
            Assert.AreEqual(expected.FooInt, returned.FooInt);
            await storage.Delete();
        }
Beispiel #28
0
        public async Task UpdatedQueueMessage_RetainsOriginalProperties()
        {
            TraceWriter trace       = new TestTraceWriter(TraceLevel.Verbose);
            CloudQueue  queue       = Fixture.CreateNewQueue();
            CloudQueue  poisonQueue = Fixture.CreateNewQueue();

            JobHostQueuesConfiguration queuesConfig = new JobHostQueuesConfiguration {
                MaxDequeueCount = 2
            };

            StorageQueue storageQueue       = new StorageQueue(new StorageQueueClient(Fixture.QueueClient), queue);
            StorageQueue storagePoisonQueue = new StorageQueue(new StorageQueueClient(Fixture.QueueClient), poisonQueue);
            Mock <ITriggerExecutor <IStorageQueueMessage> > mockTriggerExecutor = new Mock <ITriggerExecutor <IStorageQueueMessage> >(MockBehavior.Strict);

            string            messageContent = Guid.NewGuid().ToString();
            CloudQueueMessage message        = new CloudQueueMessage(messageContent);
            await queue.AddMessageAsync(message, null, null, null, null, CancellationToken.None);

            CloudQueueMessage messageFromCloud = await queue.GetMessageAsync();

            QueueListener listener = new QueueListener(storageQueue, storagePoisonQueue, mockTriggerExecutor.Object, new WebJobsExceptionHandler(), trace,
                                                       null, null, queuesConfig);

            mockTriggerExecutor
            .Setup(m => m.ExecuteAsync(It.IsAny <IStorageQueueMessage>(), CancellationToken.None))
            .ReturnsAsync(new FunctionResult(false));

            await listener.ProcessMessageAsync(new StorageQueueMessage(messageFromCloud), TimeSpan.FromMinutes(10), CancellationToken.None);

            // pull the message and process it again (to have it go through the poison queue flow)
            messageFromCloud = await queue.GetMessageAsync();

            Assert.Equal(2, messageFromCloud.DequeueCount);

            await listener.ProcessMessageAsync(new StorageQueueMessage(messageFromCloud), TimeSpan.FromMinutes(10), CancellationToken.None);

            // Make sure the message was processed and deleted.
            await queue.FetchAttributesAsync();

            Assert.Equal(0, queue.ApproximateMessageCount);

            // The Listener has inserted a message to the poison queue.
            await poisonQueue.FetchAttributesAsync();

            Assert.Equal(1, poisonQueue.ApproximateMessageCount);

            mockTriggerExecutor.Verify(m => m.ExecuteAsync(It.IsAny <IStorageQueueMessage>(), CancellationToken.None), Times.Exactly(2));
        }
Beispiel #29
0
        public async Task ApproixmateMessageCount()
        {
            var          random  = new Random();
            var          count   = random.Next(1, 1000);
            StorageQueue storage = await QueueSetup();

            for (var i = 0; i < count; i++)
            {
                await storage.SendAsync(Guid.NewGuid());
            }

            var result = await storage.ApproixmateMessageCount();

            Assert.AreEqual(count, result);
            await storage.Delete();
        }
Beispiel #30
0
        public async Task Peek()
        {
            StorageQueue storage = await QueueSetup();

            var msg = new CloudQueueMessage(Guid.NewGuid().ToByteArray());
            await storage.Send(msg);

            var peeked = await storage.PeekAsync();

            Assert.AreEqual(msg.AsBytes, peeked.First().AsBytes);

            var returned = await storage.Get();

            Assert.AreEqual(msg.AsBytes, returned.AsBytes);
            await storage.Delete();
        }