public void RetryAfterWithExponentialFallbackS( [Values("Retry-After", null)] string headerName, [Values( new int[] { 1, 2, 1, 2 }, new int[] { 1, 1, 2 }, new int[] { 1, 5, 2, 2, 10, 8 }, new int[] { 1, 5, 1, 2, 10, 8, 20, 20, 20, 20, 20, 20, 20 })] int[] delayValues, [Values(1, 2, 5, null)] int?suggestedWaitInMs) { var fallbackStrategy = new ExponentialDelayStrategy(); TimeSpan[] defaultDelays = fallbackStrategy.GetType().GetField("_pollingSequence", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null) as TimeSpan[]; var strategy = new RetryAfterDelayStrategy(fallbackStrategy); TimeSpan actual = TimeSpan.Zero; TimeSpan? suggestion = suggestedWaitInMs.HasValue ? TimeSpan.FromSeconds(suggestedWaitInMs.Value) : null; int expected = 0; for (int i = 0; i < delayValues.Length; i++) { var response = new MockResponse(200); //ignore suggestion for exponential expected += GetExpected(headerName, delayValues[i], null, (int)defaultDelays[Math.Min(i, defaultDelays.Length - 1)].TotalSeconds); if (headerName is not null) { response.AddHeader(new HttpHeader(headerName, delayValues[i].ToString())); } actual += strategy.GetNextDelay(response, suggestion); } Assert.AreEqual(TimeSpan.FromSeconds(expected), actual); }
public void WillIgnoreSuggest( [Values(90, 100, 120)] int suggest) { var strategy = new ExponentialDelayStrategy(); var expected = TimeSpan.FromSeconds(1); Assert.AreEqual(expected, strategy.GetNextDelay(_mockResponse, TimeSpan.FromSeconds(suggest))); }
public void Exponential() { IDelayStrategy strategy = new ExponentialDelayStrategy(TimeSpan.FromMilliseconds(100)); Assert.AreEqual(TimeSpan.FromMilliseconds(100), strategy.NextDelay()); Assert.AreEqual(TimeSpan.FromMilliseconds(200), strategy.NextDelay()); Assert.AreEqual(TimeSpan.FromMilliseconds(400), strategy.NextDelay()); Assert.AreEqual(TimeSpan.FromMilliseconds(800), strategy.NextDelay()); }
public void CanOverrideFallbackStrategy() { ExponentialDelayStrategy exponentialDelayStrategy = new ExponentialDelayStrategy(); OperationPoller poller = new OperationPoller(exponentialDelayStrategy); var delayStrategy = poller.GetType().GetField("_delayStrategy", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(poller); Assert.IsNotNull(delayStrategy); Assert.AreEqual(typeof(RetryAfterDelayStrategy), delayStrategy.GetType()); var fallbackStrategy = delayStrategy.GetType().GetField("_fallbackStrategy", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(delayStrategy); Assert.IsNotNull(delayStrategy); Assert.AreEqual(exponentialDelayStrategy, fallbackStrategy); }
public void WillIgnoreSuggestMultipleIterations( [Values(1, 10, 100)] int suggestionInS, [Values(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)] int retries) { var strategy = new ExponentialDelayStrategy(); var suggestion = TimeSpan.FromSeconds(suggestionInS); var expected = TimeSpan.FromSeconds(_expectedValues[retries - 1]); TimeSpan actual = TimeSpan.Zero; for (int i = 0; i < retries; i++) { actual += strategy.GetNextDelay(_mockResponse, suggestion); } Assert.AreEqual(expected, actual); }