public async Task Test_StatsAreUpdatedCorrectly_AfterEnqueue_RepostExistingTask() { Faker faker = new Faker(); DateTimeOffset postedAt = mDataSource.LastPostedAt .AddTicks(1); PostgreSqlTaskQueueProducer taskQueueProducer = CreateTaskQueueProducer(() => postedAt); PostgreSqlTaskQueueInfo taskQueueInfo = CreateTaskQueueInfo(() => postedAt); foreach (IQueuedTaskToken token in mDataSource.CanBeRepostedSeededTaskTokens) { using (TaskQueueMetricsDiffChecker diff = new TaskQueueMetricsDiffChecker(async() => await taskQueueInfo.ComputeMetricsAsync())) { QueuedTaskStatus prevStatus = token .LastQueuedTaskResult .Status; await diff.CaptureInitialMetricsAsync(); QueuedTaskInfo repostTaskInfo = new QueuedTaskInfo() { Id = token.DequeuedTask.Id, Priority = faker.Random.Int(1, 100), Payload = token.DequeuedTask.Payload, Source = nameof(Test_StatsAreUpdatedCorrectly_AfterEnqueue_RepostExistingTask), Type = token.DequeuedTask.Type, LockedUntilTs = postedAt.AddMinutes(faker.Random.Long(1000, 10000)) }; //Remove task record from DB - only dequeued tasks get reposted await mDataSource.RemoveQueuedTaskFromDbByIdAsync(token .DequeuedTask .Id); await taskQueueProducer.EnqueueAsync(repostTaskInfo); await diff.CaptureNewMetricsAndAssertCorrectDiff(delta : new TaskQueueMetrics( totalUnprocessed: prevStatus != QueuedTaskStatus.Unprocessed ? 1 : 0, totalProcessing: prevStatus == QueuedTaskStatus.Processing ? -1 : 0, totalErrored: prevStatus == QueuedTaskStatus.Error ? -1 : 0, totalFaulted: prevStatus == QueuedTaskStatus.Faulted ? -1 : 0, totalFataled: prevStatus == QueuedTaskStatus.Fatal ? -1 : 0, totalProcessed: prevStatus == QueuedTaskStatus.Processed ? -1 : 0)); } } }
public async Task Test_CanEnqueue_RepostExistingTask_Serial() { Faker faker = new Faker(); DateTimeOffset postedAt = mDataSource.LastPostedAt .AddSeconds(1); PostgreSqlTaskQueueProducer taskQueueProducer = CreateTaskQueueProducer(() => postedAt); foreach (IQueuedTaskToken token in mDataSource.CanBeRepostedSeededTaskTokens) { QueuedTaskInfo repostTaskInfo = new QueuedTaskInfo() { Id = token.DequeuedTask.Id, Priority = faker.Random.Int(1, 100), Payload = token.DequeuedTask.Payload, Source = nameof(Test_CanEnqueue_RepostExistingTask_Serial), Type = token.DequeuedTask.Type, LockedUntilTs = postedAt.AddMilliseconds(faker.Random.Long(1000, 10000)) }; //Remove task record from DB - only dequeued tasks get reposted await mDataSource.RemoveQueuedTaskFromDbByIdAsync(token .DequeuedTask .Id); //Enqueue task and check result IQueuedTask requeuedTask = await taskQueueProducer .EnqueueAsync(repostTaskInfo); Assert.NotNull(requeuedTask); await Assert_ResultAddedOrUpdatedCorrectly(requeuedTask); } }