public void Execute_runs_func_returns_context_with_elapsed_time() { TimeSpan funcElapsed = TimeSpan.MaxValue; Func <RetryContext, Task> func = delegate(RetryContext r) { funcElapsed = r.ElapsedTime; return(Task.FromResult(false)); }; RetryLoop loop = new RetryLoop(func); TimeSpan shouldRetryElapsed = TimeSpan.MaxValue; loop.ShouldRetry = delegate(RetryContext r) { shouldRetryElapsed = r.ElapsedTime; return(false); }; TimeSpan succeededElapsed = TimeSpan.MaxValue; loop.Succeeded = delegate(RetryContext r) { succeededElapsed = r.ElapsedTime; return(false); }; ElapsedTimerStub timer = new ElapsedTimerStub(); loop.Timer = timer; timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(1.0d)); timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(2.5d)); timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(4.0d)); Task <RetryContext> task = loop.ExecuteAsync(); Assert.Equal(TaskStatus.RanToCompletion, task.Status); Assert.Equal(TimeSpan.FromSeconds(1.5d), funcElapsed); RetryContext context = task.Result; Assert.Equal(1, context.Iteration); Assert.Equal(TimeSpan.FromSeconds(3.0d), succeededElapsed); Assert.Equal(TimeSpan.FromSeconds(3.0d), shouldRetryElapsed); Assert.Equal(TimeSpan.FromSeconds(3.0d), context.ElapsedTime); }
public void Execute_runs_func_returns_context_with_elapsed_time() { TimeSpan funcElapsed = TimeSpan.MaxValue; Func<RetryContext, Task> func = delegate(RetryContext r) { funcElapsed = r.ElapsedTime; return Task.FromResult(false); }; RetryLoop loop = new RetryLoop(func); TimeSpan shouldRetryElapsed = TimeSpan.MaxValue; loop.ShouldRetry = delegate(RetryContext r) { shouldRetryElapsed = r.ElapsedTime; return false; }; TimeSpan succeededElapsed = TimeSpan.MaxValue; loop.Succeeded = delegate(RetryContext r) { succeededElapsed = r.ElapsedTime; return false; }; ElapsedTimerStub timer = new ElapsedTimerStub(); loop.Timer = timer; timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(1.0d)); timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(2.5d)); timer.ElapsedTimes.Enqueue(TimeSpan.FromSeconds(4.0d)); Task<RetryContext> task = loop.ExecuteAsync(); Assert.Equal(TaskStatus.RanToCompletion, task.Status); Assert.Equal(TimeSpan.FromSeconds(1.5d), funcElapsed); RetryContext context = task.Result; Assert.Equal(1, context.Iteration); Assert.Equal(TimeSpan.FromSeconds(3.0d), succeededElapsed); Assert.Equal(TimeSpan.FromSeconds(3.0d), shouldRetryElapsed); Assert.Equal(TimeSpan.FromSeconds(3.0d), context.ElapsedTime); }