public async Task Test_StatsAreCorrectlyUpdated_AfterDequeue_NoTaskType() { PostgreSqlTaskQueueInfo taskQueueInfo = CreateTaskQueueInfo(() => mDataSource.LastPostedAt); using (PostgreSqlTaskQueueConsumer taskQueueConsumer = CreateTaskQueueConsumer(() => mDataSource.LastPostedAt)) using (TaskQueueMetricsDiffChecker diff = new TaskQueueMetricsDiffChecker(async() => await taskQueueInfo.ComputeMetricsAsync())) { await diff.CaptureInitialMetricsAsync(); IQueuedTaskToken dequeuedToken = await taskQueueConsumer .DequeueAsync(); QueuedTaskStatus origStatus = mDataSource .GetOriginalTokenData(dequeuedToken.DequeuedTask.Id) .LastQueuedTaskResult .Status; await diff.CaptureNewMetricsAndAssertCorrectDiff(delta : new TaskQueueMetrics( totalUnprocessed: origStatus == QueuedTaskStatus.Unprocessed ? -1 : 0, totalProcessing: 1, totalErrored: origStatus == QueuedTaskStatus.Error ? -1 : 0, totalFaulted: origStatus == QueuedTaskStatus.Faulted ? -1 : 0, totalFataled: origStatus == QueuedTaskStatus.Fatal ? -1 : 0, totalProcessed: origStatus == QueuedTaskStatus.Processed ? -1 : 0)); } }
public async Task Test_PeekMatchesDequeuedItem_SingleConsumer() { IQueuedTask peekTask = null; IQueuedTaskToken dequeuedTaskToken = null; PostgreSqlTaskQueueInfo taskQueueInfo = CreateTaskQueueInfo(() => mDataSource.LastPostedAt); using (PostgreSqlTaskQueueConsumer taskQueue = CreateTaskQueueConsumer(() => mDataSource.LastPostedAt)) { int expectedDequeueCount = mDataSource .NumTasksInQueue; for (int i = 0; i < expectedDequeueCount; i++) { peekTask = await taskQueueInfo.PeekAsync(); Assert.NotNull(peekTask); dequeuedTaskToken = await taskQueue.DequeueAsync(); Assert.NotNull(dequeuedTaskToken); Assert.AreEqual(peekTask.Id, dequeuedTaskToken .DequeuedTask .Id); } } }
public async Task Test_DequeueChangesPeekResult_SingleConsumer() { IQueuedTask peekTask = null, rePeekTask = null; IQueuedTaskToken dequeuedTaskToken = null; PostgreSqlTaskQueueInfo taskQueueInfo = CreateTaskQueueInfo(() => mDataSource.LastPostedAt); using (PostgreSqlTaskQueueConsumer taskQueueConsumer = CreateTaskQueueConsumer(() => mDataSource.LastPostedAt)) { peekTask = await taskQueueInfo.PeekAsync(); Assert.NotNull(peekTask); dequeuedTaskToken = await taskQueueConsumer.DequeueAsync(); Assert.NotNull(dequeuedTaskToken); rePeekTask = await taskQueueInfo.PeekAsync(); Assert.NotNull(rePeekTask); //Removing a new element from the queue // occurs at the beginning of the queue, // so peeking must yield a different result // than before dequeue-ing Assert.AreNotEqual(rePeekTask.Id, peekTask.Id); } }
private async Task Run_ConsumeTestAsync(PostgreSqlTaskQueueConsumer taskQueue, ConsumedQueuedTaskTokenChecker checker, DateTimeOffset refNow, params string[] payloadTypes) { IQueuedTaskToken newTaskToken; if (payloadTypes != null && payloadTypes.Length > 0) { newTaskToken = await taskQueue.DequeueAsync(payloadTypes); } else { newTaskToken = await taskQueue.DequeueAsync(); } checker.AssertConsumedTokenValid(newTaskToken, refNow); await checker.AssertTaskNotInDbAnymoreAsync(newTaskToken); await checker.AssertTaskResultInDbAndCorrectAsync(newTaskToken); }