public async Task GetMetrics_ReturnsExpectedResult() { var queuesOptions = new QueuesOptions(); Mock <ITriggerExecutor <QueueMessage> > mockTriggerExecutor = new Mock <ITriggerExecutor <QueueMessage> >(MockBehavior.Strict); var queueProcessorFactory = new DefaultQueueProcessorFactory(); QueueListener listener = new QueueListener(Fixture.Queue, null, mockTriggerExecutor.Object, new WebJobsExceptionHandler(null), _loggerFactory, null, queuesOptions, queueProcessorFactory, new FunctionDescriptor { Id = "TestFunction" }); var metrics = await listener.GetMetricsAsync(); Assert.AreEqual(0, metrics.QueueLength); Assert.AreEqual(TimeSpan.Zero, metrics.QueueTime); Assert.AreNotEqual(default(DateTime), metrics.Timestamp); // add some test messages for (int i = 0; i < 5; i++) { await Fixture.Queue.SendMessageAsync($"Message {i}"); } await Task.Delay(TimeSpan.FromSeconds(5)); metrics = await listener.GetMetricsAsync(); Assert.AreEqual(5, metrics.QueueLength); Assert.True(metrics.QueueTime.Ticks > 0); Assert.AreNotEqual(default(DateTime), metrics.Timestamp); // verify non-generic interface works as expected metrics = (QueueTriggerMetrics)(await((IScaleMonitor)listener).GetMetricsAsync()); Assert.AreEqual(5, metrics.QueueLength); }
public async Task UpdatedQueueMessage_RetainsOriginalProperties() { CloudQueue queue = Fixture.CreateNewQueue(); CloudQueue poisonQueue = Fixture.CreateNewQueue(); var queuesOptions = new QueuesOptions { MaxDequeueCount = 2 }; Mock <ITriggerExecutor <CloudQueueMessage> > mockTriggerExecutor = new Mock <ITriggerExecutor <CloudQueueMessage> >(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(); var queueProcessorFactory = new DefaultQueueProcessorFactory(); QueueListener listener = new QueueListener(queue, poisonQueue, mockTriggerExecutor.Object, new WebJobsExceptionHandler(null), null, null, queuesOptions, queueProcessorFactory); mockTriggerExecutor .Setup(m => m.ExecuteAsync(It.IsAny <CloudQueueMessage>(), CancellationToken.None)) .ReturnsAsync(new FunctionResult(false)); await listener.ProcessMessageAsync(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(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 <CloudQueueMessage>(), CancellationToken.None), Times.Exactly(2)); }
/// <summary> /// Initializes a new instance of the <see cref="JobHostQueuesConfiguration"/> class. /// </summary> internal JobHostQueuesConfiguration() { _newBatchThreshold = -1; QueueProcessorFactory = new DefaultQueueProcessorFactory(); }