public async Task EventuallyFailsIfBatchPusherNeverSucceeds() { Config.MaxConcurrentVersionListWriters = 1; Changes["PackageA"] = 1; Changes["PackageB"] = 2; BatchPusher .Setup(x => x.TryFinishAsync()) .ReturnsAsync(new BatchPusherResult(new[] { "PackageB" })); var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => Target.ExecuteAsync()); Assert.Equal("The index operations for the following package IDs failed due to version list concurrency: PackageB", ex.Message); VerifyCompletedTelemetry(JobOutcome.Failure); VerifyAllIdsAreProcessed(new[] { "PackageA", "PackageB", "PackageB", "PackageB" }); IndexActionBuilder.Verify( x => x.UpdateAsync( "PackageA", It.IsAny <Func <SearchFilters, KeyedDocument> >()), Times.Once); IndexActionBuilder.Verify( x => x.UpdateAsync( "PackageB", It.IsAny <Func <SearchFilters, KeyedDocument> >()), Times.Exactly(3)); BatchPusher.Verify( x => x.EnqueueIndexActions(It.IsAny <string>(), It.IsAny <IndexActions>()), Times.Exactly(4)); BatchPusher.Verify(x => x.TryFinishAsync(), Times.Exactly(3)); BatchPusher.Verify(x => x.TryPushFullBatchesAsync(), Times.Never); }