public void When_exceptions_are_thrown_It_retries_And_when_expected_result_found_subsequently_It_returns_expected_result_immediately() { const int throwsHowManyTimes = 2; var expectedResult = new object(); var query = new ThrowsThenSubsequentlySucceedsQuery <object>(expectedResult, expectedResult, throwsHowManyTimes, TimeSpan.FromMilliseconds(100), retryInterval); Assert.That(retryUntilTimeoutRobustWrapper.Robustly(query), Is.EqualTo(expectedResult)); Assert.That(query.Tries, Is.EqualTo(throwsHowManyTimes + 1)); }
public void When_exceptions_are_thrown_It_retries_And_when_expected_result_found_subsequently_It_returns_expected_result_immediately() { const int throwsHowManyTimes = 2; var expectedResult = new object(); var query = new ThrowsThenSubsequentlySucceedsQuery <object>(expectedResult, expectedResult, throwsHowManyTimes, new Options { Timeout = TimeSpan.FromMilliseconds(100), RetryInterval = retryInterval }); Assert.That(_retryUntilTimeoutTimingStrategy.Synchronise(query), Is.EqualTo(expectedResult)); Assert.That(query.Tries, Is.EqualTo(throwsHowManyTimes + 1)); }
public void When_exceptions_are_thrown_It_retries_And_when_unexpected_result_found_subsequently_It_keeps_looking_for_expected_result_But_returns_unexpected_result_after_timeout() { var expectedTimeout = TimeSpan.FromMilliseconds(250); const int retryIntervalMS = 70; retryInterval = TimeSpan.FromMilliseconds(retryIntervalMS); var expectedResult = new object(); var unexpectedResult = new object(); var throwsTwiceTimesThenReturnOppositeResult = new ThrowsThenSubsequentlySucceedsQuery <object>(unexpectedResult, expectedResult, 2, expectedTimeout, retryInterval); Assert.That(retryUntilTimeoutRobustWrapper.Robustly(throwsTwiceTimesThenReturnOppositeResult), Is.EqualTo(unexpectedResult)); Assert.That(throwsTwiceTimesThenReturnOppositeResult.Tries, Is.GreaterThanOrEqualTo(3)); Assert.That((int)throwsTwiceTimesThenReturnOppositeResult.LastCall, Is.InRange(expectedTimeout.Milliseconds - retryIntervalMS, expectedTimeout.Milliseconds + retryIntervalMS)); }