public async Task ScheduleMultipleJobs() { var cronDateTimeServiceMock = new Mock <ICronDateTimeService>(); cronDateTimeServiceMock.Setup(mock => mock.GetNow()).Returns(new DateTime(2019, 11, 06, 14, 43, 59)); var scheduler = new Scheduler(new CronParser(cronDateTimeServiceMock.Object), cronDateTimeServiceMock.Object, null); var actionObject = new ActionObject(); scheduler.ScheduleTask("* * * * * *", (cancellationToken) => { actionObject.DoWork(); }); var actionObject2 = new ActionObject(); scheduler.ScheduleTask("* * * * *", (cancellationToken) => { actionObject2.DoWork(); }); var actionObject3 = new ActionObject(); scheduler.ScheduleTask("* * * * *", async(cancellationToken) => { await actionObject3.DoWorkAsync(); }); using (var cancellationTokenSource = new CancellationTokenSource(1100)) { await scheduler.RunAsync(cancellationTokenSource.Token); } Assert.True(actionObject.Modified); Assert.True(actionObject2.Modified); Assert.True(actionObject3.Modified); }
public async Task ScheduleAsyncJobsAndOneWillFailTheOtherWillStillRunAndLogWillBeCreated() { var cronDateTimeServiceMock = new Mock <ICronDateTimeService>(); cronDateTimeServiceMock.Setup(mock => mock.GetNow()).Returns(new DateTime(2019, 11, 06, 14, 43, 59)); var logger = new Mock <ILogger <Scheduler> >(); var scheduler = new Scheduler(new CronParser(cronDateTimeServiceMock.Object), cronDateTimeServiceMock.Object, logger.Object); var actionObject = new ActionObject(); scheduler.ScheduleTask("* * * * * *", async(cancellationToken) => { await actionObject.DoWorkAsync(); }); scheduler.ScheduleTask("* * * * * *", (cancellationToken) => { throw new Exception("Fail!!"); }); using (var cancellationTokenSource = new CancellationTokenSource(1100)) { await scheduler.RunAsync(cancellationTokenSource.Token); } Assert.True(actionObject.Modified); logger.Verify(x => x.Log(LogLevel.Error, It.IsAny <EventId>(), It.Is <It.IsAnyType>((o, t) => string.Equals("Failed to execute action", o.ToString(), StringComparison.InvariantCultureIgnoreCase)), It.IsAny <Exception>(), (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once); }