Exemple #1
0
        public void TheDefaultSlowDelayIsSixtySeconds()
        {
            var delay = new RetryDelayService(new Random());

            var totalDelay = delay.NextSlowDelay();

            totalDelay.TotalSeconds.Should().Be(60);
        }
Exemple #2
0
        public void TheResetMethodClearsAnyHistoryAndTheServiceReturnsTheDefaultValueForSlowDelay(int seed, bool[] slowOrFast)
        {
            var delay = new RetryDelayService(new Random(seed));

            runDelays(delay, slowOrFast);

            delay.Reset();
            var totalDelay = delay.NextSlowDelay();

            totalDelay.TotalSeconds.Should().Be(60);
        }
Exemple #3
0
        public void AnySequenceOfDelaysStaysWithinTheExpectedBounds(int seed, bool[] slowOrFast)
        {
            double   minDelay   = 0;
            double   maxDelay   = 0;
            TimeSpan totalDelay = TimeSpan.Zero;
            var      delay      = new RetryDelayService(new Random(seed));

            foreach (var nextIsSlow in slowOrFast)
            {
                if (nextIsSlow)
                {
                    if (minDelay == 0)
                    {
                        minDelay = 60;
                        maxDelay = 60;
                    }
                    else
                    {
                        minDelay *= 1.5;
                        maxDelay *= 2;
                    }

                    totalDelay = delay.NextSlowDelay();
                }
                else
                {
                    if (minDelay == 0)
                    {
                        minDelay = 10;
                        maxDelay = 10;
                    }
                    else
                    {
                        minDelay *= 1;
                        maxDelay *= 1.5;
                    }

                    totalDelay = delay.NextFastDelay();
                }
            }

            var minTotalDelay = Math.Min(TimeSpan.MaxValue.TotalSeconds, minDelay);
            var maxTotalDelay = Math.Min(TimeSpan.MaxValue.TotalSeconds, maxDelay);

            totalDelay.TotalSeconds.Should()
            .BeGreaterOrEqualTo(minTotalDelay).And
            .BeLessOrEqualTo(maxTotalDelay);
        }
Exemple #4
0
        public void DoesNotThrowWhenUsingSlowDelayAndWhenThereIsNotLimit(byte limitsInSeconds)
        {
            var      limit    = TimeSpan.FromSeconds(limitsInSeconds);
            var      delay    = new RetryDelayService(new Random(), null);
            TimeSpan maxDelay = TimeSpan.Zero;

            Action waitingTooLong = () =>
            {
                do
                {
                    var nextDelay = delay.NextSlowDelay();
                    maxDelay = maxDelay > nextDelay ? maxDelay : nextDelay;
                } while (maxDelay <= limit);
            };

            waitingTooLong.ShouldNotThrow();
            maxDelay.Should().BeGreaterThan(limit);
        }
Exemple #5
0
        public void ThrowsWhenTheSlowDelayExceedsTheLimit(byte limitsInSeconds)
        {
            if (limitsInSeconds == 0)
            {
                return;
            }

            var      limit    = TimeSpan.FromSeconds(limitsInSeconds);
            var      delay    = new RetryDelayService(new Random(), limit);
            TimeSpan maxDelay = TimeSpan.Zero;

            Action waitingTooLong = () =>
            {
                while (true)
                {
                    var nextDelay = delay.NextSlowDelay();
                    maxDelay = maxDelay > nextDelay ? maxDelay : nextDelay;
                }
            };

            waitingTooLong.ShouldThrow <TimeoutException>();
            maxDelay.Should().BeLessOrEqualTo(limit);
        }