public async Task GivenATargetRUConsumption_WhenConsumedRUsDecreases_QueryDelayIsDecreased() { var throttleController = new ReindexJobCosmosThrottleController(_fhirRequestContextAccessor, new NullLogger <ReindexJobCosmosThrottleController>()); var reindexJob = new ReindexJobRecord(new Dictionary <string, string>(), targetDataStoreUsagePercentage: 80); reindexJob.QueryDelayIntervalInMilliseconds = 50; throttleController.Initialize(reindexJob, 1000); int loopCount = 0; while (loopCount < 17) { _output.WriteLine($"Current throttle based delay is: {throttleController.GetThrottleBasedDelay()}"); _fhirRequestContextAccessor.RequestContext.ResponseHeaders.Add(CosmosDbHeaders.RequestCharge, "100.0"); throttleController.UpdateDatastoreUsage(); await Task.Delay(reindexJob.QueryDelayIntervalInMilliseconds + throttleController.GetThrottleBasedDelay()); loopCount++; } loopCount = 0; while (loopCount < 17) { _output.WriteLine($"Current throttle based delay is: {throttleController.GetThrottleBasedDelay()}"); _fhirRequestContextAccessor.RequestContext.ResponseHeaders.Add(CosmosDbHeaders.RequestCharge, "10.0"); throttleController.UpdateDatastoreUsage(); await Task.Delay(reindexJob.QueryDelayIntervalInMilliseconds + throttleController.GetThrottleBasedDelay()); loopCount++; } _output.WriteLine($"Final throttle based delay is: {throttleController.GetThrottleBasedDelay()}"); Assert.Equal(0, throttleController.GetThrottleBasedDelay()); }
public void GivenBatchSizeCostAboveTarget_WhenGetBatchSizeCalled_ReducedBatchSizeReturned() { var throttleController = new ReindexJobCosmosThrottleController(_fhirRequestContextAccessor, new NullLogger <ReindexJobCosmosThrottleController>()); var reindexJob = new ReindexJobRecord(new Dictionary <string, string>(), targetDataStoreUsagePercentage: 80); reindexJob.QueryDelayIntervalInMilliseconds = 50; throttleController.Initialize(reindexJob, 1000); _fhirRequestContextAccessor.RequestContext.ResponseHeaders.Add(CosmosDbHeaders.RequestCharge, "1000.0"); throttleController.UpdateDatastoreUsage(); Assert.Equal <uint>(80, throttleController.GetThrottleBatchSize()); _fhirRequestContextAccessor.RequestContext.ResponseHeaders.Add(CosmosDbHeaders.RequestCharge, "500.0"); throttleController.UpdateDatastoreUsage(); Assert.Equal <uint>(100, throttleController.GetThrottleBatchSize()); }