Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        public void RunAsync_RetryStrategyProvidesNegativeTimeSpan_ThrowsException()
        {
            // Arrange
            var retry = new RetryImpl((() => Throws()));

            retry.Using(new ReturnNegativeTimeSpanRetryStrategy());

            // Act
            retry.RunAsync().Wait();

            // Assert
            // Expected exception
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
0
        public void Run_TryThrowsBehaviorReturnsRethrow_ExceptionIsRethrown()
        {
            // Arrange
            var retry = new RetryImpl(() =>
            {
                Throws();
            });

            retry.OnException(new RethrowAllExceptionBehavior());

            // Act
            retry.Run();

            // Assert
            // Expected exception
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
            }
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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);
            }
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }