Пример #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 SchedulerStopsScheduleWhenExecuting()
        {
            //arrange
            var schedule = new Schedule()
                           .WithoutEnd();
            var ctTriggered = false;

            var action = Substitute.For <ICauseScheduledAnarchy>();

            action
            .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>())
            .Returns(async r =>
            {
                var ct = r.ArgAt <CancellationToken>(1);
                try
                {
                    await Task.Delay(20000, ct);
                }
                catch (TaskCanceledException)
                {
                    ctTriggered = true;
                }
            });

            var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays());

            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);
            ctTriggered.Should().BeTrue();
        }
Пример #5
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);
        }