public void GivenThrottleControllerNotInitialized_WhenGetThrottleDelayCalled_ZeroReturned() { var throttleController = new ReindexJobCosmosThrottleController(_fhirRequestContextAccessor, new NullLogger <ReindexJobCosmosThrottleController>()); Assert.Equal(0, throttleController.GetThrottleBasedDelay()); var reindexJob = new ReindexJobRecord(new Dictionary <string, string>(), targetDataStoreUsagePercentage: null); reindexJob.QueryDelayIntervalInMilliseconds = 50; throttleController.Initialize(reindexJob, null); Assert.Equal(0, throttleController.GetThrottleBasedDelay()); }
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()); }