public async Task If_triggers_critical_action_after_10_failures() { var criticalActionTriggered = false; var timer = new FakeTimer(); var cleaner = new TestableCleaner((time, token) => Task.FromResult(0), (m, e) => criticalActionTriggered = true, TimeSpan.FromDays(7), TimeSpan.Zero, timer); await cleaner.Start().ConfigureAwait(false); for (var i = 0; i < 9; i++) { timer.OnError(new Exception("Simulated!")); } Assert.IsFalse(criticalActionTriggered); //Trigger the 10th time timer.OnError(new Exception("Simulated!")); Assert.IsTrue(criticalActionTriggered); criticalActionTriggered = false; //Trigger again -- the counter should be reset timer.OnError(new Exception("Simulated!")); Assert.IsFalse(criticalActionTriggered); }
public async Task It_uses_correct_cut_off_time() { var timer = new FakeTimer(); var cutOffTime = DateTime.MinValue; var cleaner = new TestableCleaner((time, token) => { cutOffTime = time; return(Task.FromResult(0)); }, (m, e) => { }, TimeSpan.FromDays(7), TimeSpan.Zero, timer); await cleaner.Start().ConfigureAwait(false); var now = new DateTime(2017, 3, 31, 0, 0, 0); await timer.Tick(now, CancellationToken.None).ConfigureAwait(false); var expected = new DateTime(2017, 3, 24, 0, 0, 0); Assert.AreEqual(expected, cutOffTime); }
public async Task It_resets_the_failure_counter_after_successful_attempt() { var criticalActionTriggered = false; var timer = new FakeTimer(); var cleaner = new TestableCleaner((time, token) => Task.FromResult(0), (m, e) => criticalActionTriggered = true, TimeSpan.FromDays(7), TimeSpan.Zero, timer); await cleaner.Start().ConfigureAwait(false); for (var i = 0; i < 100; i++) { if (i % 9 == 0) //Succeed every 9th attempt { await timer.Tick(DateTime.UtcNow, CancellationToken.None).ConfigureAwait(false); } else { timer.OnError(new Exception("Simulated!")); } } Assert.IsFalse(criticalActionTriggered); }