public async Task ScheduleTotalDurationOverridesRepeatWithoutEnd() { var expExecutionCount = 2; var expTotalDuration = TimeSpan.FromSeconds(0.5); //arrange var schedule = new Schedule() .WithInterval(TimeSpan.FromSeconds(0.3)) .FinishAfter(expTotalDuration) .Repeat(0); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithDelays()); //act sut.StartSchedule(); var duration = await Wait.AndTimeActionAsync(() => !sut.Running, 1); //assert await action .Received(expExecutionCount) .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>()); duration.Should().BeCloseTo(expTotalDuration, 300); }
public async Task ScheduleTotalDurationOverridesInitialDelay() { var expTotalDuration = TimeSpan.FromSeconds(0.5); //arrange var schedule = new Schedule() .ToStartWithDelay(TimeSpan.FromSeconds(1)) .FinishAfter(expTotalDuration) .Repeat(0); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithDelays()); //act sut.StartSchedule(); var duration = await Wait.AndTimeActionAsync(() => !sut.Running, 1.2); //assert duration.Should().BeCloseTo(expTotalDuration, 500); }
public async Task SchedulerDoesNotApplyIntervalAfterLastExecution() { //arrange var schedule = new Schedule() .WithInterval(TimeSpan.FromSeconds(1)) .Repeat(2); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithDelays()); //act sut.StartSchedule(); var duration = await Wait.AndTimeActionAsync(() => !sut.Running, 1.1); //assert await action .Received(2) .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>()); duration.Should().BeCloseTo(TimeSpan.FromSeconds(1.1), 300); }
public async Task SchedulerStopsScheduleInIterationDelayState() { //arrange var schedule = new Schedule() .WithInterval(TimeSpan.FromSeconds(10)) .WithoutEnd(); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithDelays()); sut.StartSchedule(); var monitorTask = Task.Run(async() => await Wait.AndTimeActionAsync(() => !sut.Running, 20)); //act await Task.Delay(500); sut.StopSchedule(); var duration = await monitorTask; //assert duration.Should().BeCloseTo(TimeSpan.FromSeconds(0.6), 200); }