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