public void Run_ActionSucceedsThirdTime_ThreadSleepCalledTwoTimes() { using (ShimsContext.Create()) { // Arrange var sleepInvokeCounter = 0; var callCount = 0; ShimThread.SleepInt32 = i => sleepInvokeCounter += 1; var retry = new RetryImpl(() => { callCount += 1; if (callCount == 3) { return; } Throws(); }); // Act retry.Using(new ConstantWaitTimeRetryStrategy { RetryDelay = TimeSpan.FromMilliseconds(1337) }) .Run(); // Assert Assert.AreEqual(2, sleepInvokeCounter); } }
public void Using_ActionFails_TaskDelayCalledWithCorrectValue() { using (ShimsContext.Create()) { // Arrange var argumentPassedToTaskDelay = new TimeSpan(); ShimTask.DelayTimeSpanCancellationToken = (t, c) => { argumentPassedToTaskDelay = t; return(Task.CompletedTask); }; var retry = new RetryImpl(() => Throws()); // Act retry.Using(new ConstantWaitTimeRetryStrategy { RetryDelay = TimeSpan.FromMilliseconds(1337) }) .MaximumNumberOfTries(2) .RunAsync().Wait(); // Assert Assert.AreEqual(TimeSpan.FromMilliseconds(1337), argumentPassedToTaskDelay); } }
public void RunAsync_ActionSucceedsThirdTime_TaskDelayCalledTwoTimes() { using (ShimsContext.Create()) { // Arrange var taskDelayCallCount = 0; ShimTask.DelayTimeSpanCancellationToken = (t, c) => { taskDelayCallCount += 1; return(Task.CompletedTask); }; var callCount = 0; var retry = new RetryImpl((() => { callCount += 1; if (callCount == 3) { return; // success } Throws(); })); // Act retry.RunAsync().Wait(); // Assert Assert.AreEqual(2, taskDelayCallCount); } }
public void MaximumNumberOfTries_ActionSucceedsThirdTime_TriedThreeTimes() { using (ShimsContext.Create()) { // Arrange ShimThread.SleepInt32 = i => { }; var callCount = 0; var retry = new RetryImpl((() => { callCount += 1; if (callCount == 3) { return; // success } Throws(); })); // Act retry.MaximumNumberOfTries(5) .Run(); // Assert Assert.AreEqual(3, callCount); } }
public void Run_ActionSucceeds_ExecuteOnce() { // Arrange var callCount = 0; var retry = new RetryImpl(() => callCount += 1, new RethrowAllExceptionBehavior(), doNotWaitHandler); // Act var result = retry.Run(); // Assert Assert.AreEqual(1, callCount); Assert.AreEqual(CompletionState.Success, result); }
public void RunAsync_RetryStrategyProvidesNegativeTimeSpan_ThrowsException() { // Arrange var retry = new RetryImpl((() => Throws())); retry.Using(new ReturnNegativeTimeSpanRetryStrategy()); // Act retry.RunAsync().Wait(); // Assert // Expected exception }
public void MaximumNumberOfTries_ActionKeepsFailing_SleptFourTimes() { // Arrange var retry = new RetryImpl(() => false, new RethrowAllExceptionBehavior(), doNotWaitHandler); // Act var result = retry.MaximumNumberOfTries(5) .Run(); // Assert Assert.AreEqual(4, doNotWaitHandler.SleepCount); Assert.AreEqual(CompletionState.Failed, result); }
public void Using_ActionFails_TaskDelayCalledWithCorrectValue() { // Arrange var retry = new RetryImpl(() => Throws(), new RetryAllExceptionBehavior(), doNotWaitHandler); // Act retry.Using(new ConstantWaitTimeRetryStrategy { RetryDelay = TimeSpan.FromMilliseconds(1337) }) .MaximumNumberOfTries(2) .RunAsync().Wait(); // Assert Assert.AreEqual(TimeSpan.FromMilliseconds(1337), doNotWaitHandler.LastSleepAmount); }
public void Run_ActionSucceeds_ExecuteOnce() { using (ShimsContext.Create()) { // Arrange ShimThread.SleepInt32 = i => { }; var callCount = 0; var retry = new RetryImpl(() => callCount += 1); // Act retry.Run(); // Assert Assert.AreEqual(1, callCount); } }
public void Run_TryThrowsBehaviorReturnsRethrow_ExceptionIsRethrown() { // Arrange var retry = new RetryImpl(() => { Throws(); }); retry.OnException(new RethrowAllExceptionBehavior()); // Act retry.Run(); // Assert // Expected exception }
public void MaximumNumberOfTries_ActionKeepsFailing_TriedFiveTimes() { // Arrange var callCount = 0; var retry = new RetryImpl((() => { callCount += 1; Throws(); })); // Act var result = retry.MaximumNumberOfTries(5) .Run(); // Assert Assert.AreEqual(5, callCount); Assert.AreEqual(CompletionState.Failed, result); }
public void RunAsync_TryThrows_BehaviorOnExceptionIsCalled() { // Arrange var mockedExceptionBehavior = new Mock <IExceptionBehavior>(); var retry = new RetryImpl(() => { Throws(); }, mockedExceptionBehavior.Object, doNotWaitHandler); retry.MaximumNumberOfTries(1); // Act retry.RunAsync().Wait(); // Assert mockedExceptionBehavior.Verify(behavior => behavior.OnException(It.IsAny <Exception>()), Times.Once); }
public void MaximumNumberOfTries_ActionKeepsFailing_TriedFiveTimes() { using (ShimsContext.Create()) { // Arrange ShimThread.SleepInt32 = i => { }; var callCount = 0; var retry = new RetryImpl((() => { callCount += 1; Throws(); })); // Act retry.MaximumNumberOfTries(5) .Run(); // Assert Assert.AreEqual(5, callCount); } }
public void RunAsync_ActionSucceedsThirdTime_TaskDelayCalledTwoTimes() { // Arrange var callCount = 0; var retry = new RetryImpl(() => { callCount += 1; if (callCount == 3) { return; // success } Throws(); }, new RetryAllExceptionBehavior(), doNotWaitHandler); // Act retry.RunAsync().Wait(); // Assert Assert.AreEqual(2, doNotWaitHandler.SleepCount); }
public void Using_ActionFails_ThreadSleepCalledWithCorrectValue() { using (ShimsContext.Create()) { // Arrange var argumentPassedToSleep = 0; ShimThread.SleepInt32 = i => argumentPassedToSleep = i; var retry = new RetryImpl(() => Throws()); // Act retry.Using(new ConstantWaitTimeRetryStrategy { RetryDelay = TimeSpan.FromMilliseconds(1337) }) .MaximumNumberOfTries(2) .Run(); // Assert Assert.AreEqual(1337, argumentPassedToSleep); } }
public void Run_ActionSucceedsThirdTime_ThreadSleepCalledTwoTimes() { // Arrange var callCount = 0; var retry = new RetryImpl(() => { callCount += 1; if (callCount == 3) { return; } Throws(); }, new RetryAllExceptionBehavior(), doNotWaitHandler); // Act retry.Using(new ConstantWaitTimeRetryStrategy { RetryDelay = TimeSpan.FromMilliseconds(1337) }).Run(); // Assert Assert.AreEqual(2, doNotWaitHandler.SleepCount); }
public void MaximumNumberOfTries_ActionSucceedsThirdTime_TriedThreeTimes() { // Arrange var callCount = 0; var retry = new RetryImpl((() => { callCount += 1; if (callCount == 3) { return; // success } Throws(); })); // Act var result = retry.MaximumNumberOfTries(5) .Run(); // Assert Assert.AreEqual(3, callCount); Assert.AreEqual(CompletionState.Success, result); }
public void Run_TryThrowsBehaviorReturnsAbort_ShouldStopRetrying() { // Arrange var tryCount = 0; var mockedAbortExceptionBehavior = new Mock <IExceptionBehavior>(); mockedAbortExceptionBehavior.Setup(behavior => behavior.OnException(It.IsAny <Exception>())) .Returns(AfterExceptionBehavior.Abort); var retry = new RetryImpl((() => { tryCount += 1; Throws(); })); retry.OnException(mockedAbortExceptionBehavior.Object); // Act var result = retry.Run(); // Assert Assert.AreEqual(CompletionState.Aborted, result); Assert.AreEqual(1, tryCount); }