コード例 #1
0
        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)));
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }