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)); }
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); }
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); }
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); }