示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }