public async Task Run_invokes_operation_at_least_once(int maximumRetryCount, bool canceled)
        {
            // Arrange
            TransientFaultDetectionStrategy transientFaultDetectionStrategy =
                new DelegatingTransientFaultDetectionStrategy(exception => true);

            RetryIntervalStrategy retryIntervalStrategy =
                new DelegatingRetryIntervalStrategy(
                    retried => TimeSpan.FromMilliseconds(1),
                    immediateFirstRetry: false);

            var sut = new RetryPolicy(
                maximumRetryCount,
                transientFaultDetectionStrategy,
                retryIntervalStrategy);

            var functionProvider  = Mock.Of <IFunctionProvider>();
            var cancellationToken = new CancellationToken(canceled);

            // Act
            await sut.Run(functionProvider.Func <CancellationToken, Task>, cancellationToken);

            // Assert
            Mock.Get(functionProvider).Verify(x => x.Func <CancellationToken, Task>(cancellationToken), Times.AtLeastOnce());
        }
Exemple #2
0
        public void GetInterval_relays_to_function()
        {
            var fixture          = new Fixture();
            var retried          = fixture.Create <int>();
            var expected         = fixture.Create <TimeSpan>();
            var functionProvider = Mock.Of <IFunctionProvider>(
                x => x.Func <int, TimeSpan>(retried) == expected);
            var sut = new DelegatingRetryIntervalStrategy(functionProvider.Func <int, TimeSpan>, false);

            TimeSpan actual = sut.GetInterval(retried);

            actual.Should().Be(expected);
        }
        public void constructor_has_guard_clause_against_negative_maximumRetryCount(int maximumRetryCount)
        {
            TransientFaultDetectionStrategy transientFaultDetectionStrategy =
                new DelegatingTransientFaultDetectionStrategy(exception => true);
            RetryIntervalStrategy retryIntervalStrategy =
                new DelegatingRetryIntervalStrategy(
                    retried => TimeSpan.FromMilliseconds(1),
                    immediateFirstRetry: false);

            Action action = () => new RetryPolicy(maximumRetryCount, transientFaultDetectionStrategy, retryIntervalStrategy);

            action.Should().Throw <ArgumentOutOfRangeException>().Where(x => x.ParamName == "maximumRetryCount");
        }