public async Task DequeueAndSendWebHooks_GetsMessagesAndSubmitsToSender(int[] count)
        {
            // Arrange
            int index = 0;

            _storageMock.Setup(s => s.GetMessagesAsync(StorageManagerMock.CloudQueue, AzureWebHookDequeueManager.MaxDequeuedMessages, _messageTimeout))
            .Returns(() =>
            {
                int cnt = index > count.Length ? 0 : count[index++];
                if (cnt < 0)
                {
                    throw new Exception("Catch this!");
                }
                var result = StorageManagerMock.CreateQueueMessages(cnt);
                return(Task.FromResult(result));
            })
            .Callback(() =>
            {
                if (index > count.Length)
                {
                    _tokenSource.Cancel();
                }
            })
            .Verifiable();
            _dequeueManager = new AzureWebHookDequeueManagerMock(this, storageManager: _storageMock.Object, sender: _senderMock.Object);

            // Act
            await _dequeueManager.DequeueAndSendWebHooks(_tokenSource.Token);

            // Assert
            int expected = count.Where(i => i > 0).Count();

            _senderMock.Verify(s => s.SendWebHookWorkItemsAsync(It.IsAny <IEnumerable <WebHookWorkItem> >()), Times.Exactly(expected));
        }
        public async Task QueuedSender_Deletes_SuccessAndGoneResponses(int[] statusCodes)
        {
            // Arrange
            _handlerMock.Handler = (req, index) =>
            {
                if (statusCodes[index] < 0)
                {
                    throw new Exception("Catch this!");
                }
                HttpResponseMessage response = req.CreateResponse((HttpStatusCode)statusCodes[index]);
                return(Task.FromResult(response));
            };
            HttpClient client = new HttpClient(_handlerMock);

            _dequeueManager = new AzureWebHookDequeueManagerMock(this, maxAttempts: 1, storageManager: _storageMock.Object, httpClient: client);
            IEnumerable <WebHookWorkItem> workItems = StorageManagerMock.CreateWorkItems(statusCodes.Length);

            // Act
            await _dequeueManager.WebHookSender.SendWebHookWorkItemsAsync(workItems);

            // Assert
            int expected = statusCodes.Where(i => (i >= 200 && i <= 299) || i == 410).Count();

            _storageMock.Verify(s => s.DeleteMessagesAsync(StorageManagerMock.CloudQueue, It.Is <IEnumerable <CloudQueueMessage> >(m => m.Count() == expected)), Times.Once());
        }
        public async Task Start_Throws_IfCalledMoreThanOnce()
        {
            // Arrange
            _dequeueManager = new AzureWebHookDequeueManagerMock(this);
            Task start = _dequeueManager.Start(_tokenSource.Token);

            // Act
            InvalidOperationException ex = await Assert.ThrowsAsync <InvalidOperationException>(() => _dequeueManager.Start(_tokenSource.Token));

            // Assert
            Assert.Contains("This 'AzureWebHookDequeueManagerMock' instance has already been started. It can only be started once.", ex.Message);
        }
        public async Task Dispose_CancelsStartTask(int millisecondDelay)
        {
            // Arrange
            _dequeueManager = new AzureWebHookDequeueManagerMock(this);

            // Act
            Task actual = _dequeueManager.Start(_tokenSource.Token);
            await Task.Delay(millisecondDelay);
            _dequeueManager.Dispose();
            await actual;

            // Assert
            Assert.True(actual.IsCompleted);
        }
        public async Task Dispose_CancelsStartTask(int millisecondDelay)
        {
            // Arrange
            _dequeueManager = new AzureWebHookDequeueManagerMock(this);

            // Act
            Task actual = _dequeueManager.Start(_tokenSource.Token);
            await Task.Delay(millisecondDelay);

            _dequeueManager.Dispose();
            await actual;

            // Assert
            Assert.True(actual.IsCompleted);
        }
Example #6
0
        public async Task QueuedSender_Deletes_AllCompletedResponses(int[] statusCodes)
        {
            // Arrange
            _handlerMock.Handler = (req, index) =>
            {
                if (statusCodes[index] < 0)
                {
                    throw new Exception("Catch this!");
                }
                var response = req.CreateResponse((HttpStatusCode)statusCodes[index]);
                return(Task.FromResult(response));
            };
            var client = new HttpClient(_handlerMock);

            _dequeueManager = new AzureWebHookDequeueManagerMock(this, storageManager: _storageMock.Object, httpClient: client);
            var workItems = StorageManagerMock.CreateWorkItems(statusCodes.Length);

            // Act
            await _dequeueManager.WebHookSender.SendWebHookWorkItemsAsync(workItems);

            // Assert
            _storageMock.Verify(s => s.DeleteMessagesAsync(StorageManagerMock.CloudQueue, It.Is <IEnumerable <CloudQueueMessage> >(m => m.Count() == statusCodes.Length)), Times.Once());
        }
        public async Task Start_Throws_IfCalledMoreThanOnce()
        {
            // Arrange
            _dequeueManager = new AzureWebHookDequeueManagerMock(this);
            Task start = _dequeueManager.Start(_tokenSource.Token);

            // Act
            InvalidOperationException ex = await Assert.ThrowsAsync<InvalidOperationException>(() => _dequeueManager.Start(_tokenSource.Token));

            // Assert
            Assert.Contains("This 'AzureWebHookDequeueManagerMock' instance has already been started. It can only be started once.", ex.Message);
        }
        public async Task QueuedSender_Deletes_SuccessAndGoneResponses(int[] statusCodes)
        {
            // Arrange
            _handlerMock.Handler = (req, index) =>
            {
                if (statusCodes[index] < 0)
                {
                    throw new Exception("Catch this!");
                }
                HttpResponseMessage response = req.CreateResponse((HttpStatusCode)statusCodes[index]);
                return Task.FromResult(response);
            };
            HttpClient client = new HttpClient(_handlerMock);
            _dequeueManager = new AzureWebHookDequeueManagerMock(this, maxAttempts: 1, storageManager: _storageMock.Object, httpClient: client);
            IEnumerable<WebHookWorkItem> workItems = StorageManagerMock.CreateWorkItems(statusCodes.Length);

            // Act
            await _dequeueManager.WebHookSender.SendWebHookWorkItemsAsync(workItems);

            // Assert
            int expected = statusCodes.Where(i => (i >= 200 && i <= 299) || i == 410).Count();
            _storageMock.Verify(s => s.DeleteMessagesAsync(StorageManagerMock.CloudQueue, It.Is<IEnumerable<CloudQueueMessage>>(m => m.Count() == expected)), Times.Once());
        }
        public async Task DequeueAndSendWebHooks_GetsMessagesAndSubmitsToSender(int[] count)
        {
            // Arrange
            int index = 0;
            _storageMock.Setup(s => s.GetMessagesAsync(StorageManagerMock.CloudQueue, AzureWebHookDequeueManager.MaxDequeuedMessages, _messageTimeout))
                .Returns(() =>
                {
                    int cnt = index > count.Length ? 0 : count[index++];
                    if (cnt < 0)
                    {
                        throw new Exception("Catch this!");
                    }
                    var result = StorageManagerMock.CreateQueueMessages(cnt);
                    return Task.FromResult(result);
                })
                .Callback(() =>
                {
                    if (index > count.Length)
                    {
                        _tokenSource.Cancel();
                    }
                })
                .Verifiable();
            _dequeueManager = new AzureWebHookDequeueManagerMock(this, storageManager: _storageMock.Object, sender: _senderMock.Object);

            // Act
            await _dequeueManager.DequeueAndSendWebHooks(_tokenSource.Token);

            // Assert
            int expected = count.Where(i => i > 0).Count();
            _senderMock.Verify(s => s.SendWebHookWorkItemsAsync(It.IsAny<IEnumerable<WebHookWorkItem>>()), Times.Exactly(expected));
        }