Exemplo n.º 1
0
        public async void RunInShouldLogWarningForFaultyRun()
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 4, 5, 6);

            var mockTimeManager = new TimeManagerMock(startTime);
            var loggerMock      = new LoggerMock();

            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler(null, loggerMock.LoggerFactory))
            {
                // ACT
                scheduledResult = scheduler.RunIn(20, () =>
                {
                    int i = int.Parse("Not an integer makes runtime error!");
                    return(Task.CompletedTask);
                });

                await Task.Delay(100);
            }

            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }
            // ASSERT
            loggerMock.AssertLogged(LogLevel.Warning, Times.Once());
        }
Exemplo n.º 2
0
        public async void TestRunDailyUsingStartTimeOnWeekdayNotCalled(string time)
        {
            // ARRANGE
            var startTime = DateTime.ParseExact(time, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

            var mockTimeManager = new TimeManagerMock(startTime);
            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object))
            {
                var nrOfRuns = 0;

                // ACT
                scheduledResult = scheduler.RunDaily("10:00:01", new DayOfWeek[] { DayOfWeek.Monday }, async() =>
                {
                    nrOfRuns++;
                    await Task.Delay(1);
                });
                await Task.Delay(600);

                // ASSERT
                Assert.True(nrOfRuns == 0);
                await Task.Delay(500);

                Assert.False(nrOfRuns == 1);
            }

            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }
        }
Exemplo n.º 3
0
        public async void RunDailyOnDaysFaultShouldLogWarning()
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 10, 0, 0);

            var mockTimeManager = new TimeManagerMock(startTime);
            var loggerMock      = new LoggerMock();

            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object, loggerMock.LoggerFactory))
            {
                // ACT
                scheduledResult = scheduler.RunDaily("10:00:01", new DayOfWeek[] { DayOfWeek.Saturday }, () =>
                {
                    int i = int.Parse("Not an integer makes runtime error!");
                    return(Task.CompletedTask);
                });
                await Task.Delay(1000);
            }
            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }

            // ASSERT
            loggerMock.AssertLogged(LogLevel.Warning, Times.Once());
        }
Exemplo n.º 4
0
        public async void TestRunDailyUsingStartTimeCallsFuncCorrectly()
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 10, 0, 0);

            var mockTimeManager = new TimeManagerMock(startTime);
            var nrOfRuns        = 0;
            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object))
            {
                // ACT
                scheduledResult = scheduler.RunDaily("10:00:01", async() =>
                {
                    nrOfRuns++;
                    await Task.Delay(1);
                });
                await Task.Delay(600);

                // ASSERT
                Assert.True(nrOfRuns == 0);
                await Task.Delay(500);

                Assert.True(nrOfRuns == 1);
            }
            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }
        }
Exemplo n.º 5
0
        public void EveryMinuteCalcTimeCorrectTargetDelay(short nowSeconds, short targetSeconds, short expectedDelaySeconds)
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 10, 0, nowSeconds);

            var mockTimeManager = new TimeManagerMock(startTime);

            var scheduler = new Scheduler(mockTimeManager.Object);

            var calculatedDelay = scheduler.CalculateEveryMinuteTimeBetweenNowAndTargetTime(targetSeconds);

            Assert.Equal(expectedDelaySeconds, calculatedDelay.TotalSeconds);
        }
Exemplo n.º 6
0
        public void DailyTimeBetweenNowAndTargetTime(string nowTime, string targetTime, int nrOfSecondsRemaining)
        {
            // ARRANGE
            DateTime timePart    = DateTime.ParseExact(nowTime, "HH:mm:ss", CultureInfo.InvariantCulture);
            DateTime fakeTimeNow = new DateTime(2001, 01, 01, timePart.Hour, timePart.Minute, timePart.Second);
            DateTime timeTarget  = DateTime.ParseExact(targetTime, "HH:mm:ss", CultureInfo.InvariantCulture);

            var mockTimeManager = new TimeManagerMock(fakeTimeNow);

            var scheduler = new Scheduler(mockTimeManager.Object);

            var timeToWait = scheduler.CalculateDailyTimeBetweenNowAndTargetTime(timeTarget);

            Assert.Equal(nrOfSecondsRemaining, timeToWait.TotalSeconds);
        }
Exemplo n.º 7
0
        public async Task ScheduleLongTaskWillCompensateTimeToZero()
        {
            // ARRANGE

            var mockTimeManager = new TimeManagerMock();

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object))
            {
                // ACT
                var runTask = scheduler.RunEvery(20, async() =>
                {
                    await Task.Delay(50);
                });

                await Task.WhenAny(runTask.Task, Task.Delay(500));
            }
            // ASSERT
            mockTimeManager.Verify(n => n.Delay(It.IsAny <TimeSpan>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Exemplo n.º 8
0
        public async Task ScheduleLongTaskWillCompensateTime()
        {
            // ARRANGE

            var mockTimeManager = new TimeManagerMock();

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object))
            {
                // ACT
                var runTask = scheduler.RunEvery(20, async() =>
                {
                    await Task.Delay(1);
                });

                await Task.WhenAny(runTask.Task, Task.Delay(100));
            }

            // ASSERT
            // Make it less times due to slow cloud CI build engines (4->2)
            mockTimeManager.Verify(n => n.Delay(It.IsAny <TimeSpan>(), It.IsAny <CancellationToken>()), Times.AtLeast(2));
        }
Exemplo n.º 9
0
        public async void TestRunInShouldStartAndAncCancelCorrectly()
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 4, 5, 6);

            var mockTimeManager = new TimeManagerMock(startTime);
            var isTaskRun       = false;
            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler())
            {
                // ACT
                scheduledResult = scheduler.RunIn(200, async() =>
                {
                    isTaskRun = true;
                    await Task.Delay(1);
                });

                // ASSERT
                // Assert not run before time

                await Task.Delay(100);

                Assert.False(isTaskRun);
                scheduledResult.CancelSource.Cancel();
                await Task.Delay(150);
            }

            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }

            Assert.False(isTaskRun);
            Assert.True(scheduledResult.Task.IsCanceled);
        }
Exemplo n.º 10
0
        public async void TestRunEveryMinuteStartTimeCanceledCorrectly()
        {
            // ARRANGE
            var startTime =
                new DateTime(2001, 2, 3, 10, 00, 59);

            var mockTimeManager = new TimeManagerMock(startTime);
            ISchedulerResult scheduledResult;

            await using (IScheduler scheduler = new Scheduler(mockTimeManager.Object))
            {
                var nrOfRuns = 0;

                // ACT
                scheduledResult = scheduler.RunEveryMinute(0, async() =>
                {
                    nrOfRuns++;
                    await Task.Delay(1);
                });
                await Task.Delay(300);

                // ASSERT
                Assert.Equal(0, nrOfRuns);
                scheduledResult.CancelSource.Cancel();
                await Task.Delay(1500);

                Assert.Equal(0, nrOfRuns);
            }

            try
            {
                await scheduledResult.Task;
            }
            catch
            {
            }
            Assert.True(scheduledResult.Task.IsCanceled);
        }