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()); }
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"); }