예제 #1
0
        public void TestRunEveryLogsException()
        {
            // ARRANGE
            var testScheduler = new TestScheduler();
            var loggerMock    = new Mock <ILogger <NetDaemonScheduler> >();
            // sets the date to a specific time so we do not get errors in UTC
            var dueTime = new DateTime(2021, 1, 1, 0, 0, 0);

            testScheduler.AdvanceTo(dueTime.Ticks);

            var netDaemonScheduler = new NetDaemonScheduler(loggerMock.Object, reactiveScheduler: testScheduler);

            netDaemonScheduler.RunEvery(TimeSpan.FromSeconds(1), () => throw new Exception("hello"));

            // ACT and ASSERT
            testScheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks);
            // ASSERT that error is logged once
            loggerMock.Verify(
                x => x.Log(
                    LogLevel.Error,
                    It.IsAny <EventId>(),
                    It.Is <It.IsAnyType>((_, __) => true),
                    It.IsAny <Exception>(),
                    It.Is <Func <It.IsAnyType, Exception, string> >((_, _) => true)), Times.Exactly(5));
        }
예제 #2
0
        public void TestRunInCallsFunction()
        {
            // ARRANGE
            var  testScheduler      = new TestScheduler();
            bool isCalled           = false;
            var  netDaemonScheduler = new NetDaemonScheduler(reactiveScheduler: testScheduler);

            netDaemonScheduler.RunIn(TimeSpan.FromMinutes(1), () => isCalled = true);

            // ACT
            testScheduler.AdvanceBy(TimeSpan.FromMinutes(1).Ticks);

            // ASSERT
            Assert.True(isCalled);
        }
예제 #3
0
        public void TestRunEveryCallsCorrectNrOfTimesUsingForwardTime()
        {
            // ARRANGE
            var testScheduler = new TestScheduler();
            // sets the date to a specific time so we do not get errors in UTC
            var dueTime = new DateTime(2021, 1, 1, 0, 0, 0);

            testScheduler.AdvanceTo(dueTime.Ticks);

            int nrOfTimesCalled    = 0;
            var netDaemonScheduler = new NetDaemonScheduler(reactiveScheduler: testScheduler);

            netDaemonScheduler.RunEvery(TimeSpan.FromSeconds(1), testScheduler.Now.AddSeconds(2), () => nrOfTimesCalled++);

            // ACT and ASSERT
            testScheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks);
            Assert.Equal(4, nrOfTimesCalled);
        }
예제 #4
0
    public void SchedulePeriodicStopsAfterDisposeOfSubscriber()
    {
        var startDate = new DateTimeOffset(2022, 01, 12, 13, 8, 2, TimeSpan.FromHours(5));
        int called    = 0;
        var inner     = new TestScheduler();

        inner.AdvanceTo(startDate.Ticks);

        var disposable = new NetDaemonScheduler(NullLogger <NetDaemonScheduler> .Instance, inner);
        var sub        = disposable.RunEvery(TimeSpan.FromMinutes(1), () => called++);

        inner.AdvanceBy(TimeSpan.FromMinutes(1).Ticks);
        called.Should().Be(1);

        inner.AdvanceBy(TimeSpan.FromMinutes(1).Ticks);
        called.Should().Be(2);

        sub.Dispose();
        inner.AdvanceBy(TimeSpan.FromMinutes(1).Ticks);
        called.Should().Be(2);
    }