Пример #1
0
        public void ConstructorSetsSchedule()
        {
            //arrange
            var schedule = new Schedule();
            var action   = Substitute.For <ICauseScheduledAnarchy>();
            //act
            var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays());

            //assert
            sut.Schedule.Should().BeSameAs(schedule);
        }
Пример #2
0
        public async Task StartScheduleTriggersActionExecutionWithCorrectDurationNull()
        {
            //arrange;
            var schedule = Get.CustomBuilderFor.Schedule.Repeat(1);
            var action   = Substitute.For <ICauseScheduledAnarchy>();
            var sut      = new Scheduler(schedule, action, TestTimer.WithoutDelays());

            //act
            sut.StartSchedule();
            await Wait.Until(() => !sut.Running, 1);

            //assert
            await action
            .Received(1)
            .ExecuteAsync(null, Arg.Any <CancellationToken>());
        }
Пример #3
0
        public async Task StartScheduleTriggersActionExecution()
        {
            //arrange
            var schedule = new Schedule().Repeat(1);
            var action   = Substitute.For <ICauseScheduledAnarchy>();
            var sut      = new Scheduler(schedule, action, TestTimer.WithoutDelays());

            //act
            sut.StartSchedule();
            await Wait.Until(() => !sut.Running, 1);

            //assert
            await action
            .Received(1)
            .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>());
        }
Пример #4
0
        public async Task ScheduleStopsAfterRepeatCountMet()
        {
            var expRepetitions = 2;

            //arrange
            var schedule = new Schedule().Repeat(expRepetitions);
            var action   = Substitute.For <ICauseScheduledAnarchy>();
            var sut      = new Scheduler(schedule, action, TestTimer.WithoutDelays());

            //act
            sut.StartSchedule();
            await Wait.Until(() => !sut.Running, 1);

            //assert
            await action
            .Received(expRepetitions)
            .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>());
        }
Пример #5
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();
        }