private DateTime ComputeDue(ComputedCronJob computedJob, DateTime now) { computedJob.UpdateNext(now); var retryBehavior = computedJob.RetryBehavior ?? RetryBehavior.DefaultRetry; var retries = computedJob.Retries; if (retries == 0) { return(computedJob.Next); } var realNext = computedJob.Schedule.GetNextOccurrence(now); if (!retryBehavior.Retry) { // No retry. If job failed before, we don't care, just schedule it next as usual. return(realNext); } if (retries >= retryBehavior.RetryCount) { // Max retries. Just schedule it for the next occurance. return(realNext); } // Delay a bit. return(computedJob.FirstTry.AddSeconds(retryBehavior.RetryIn(retries))); }
public void UpdateNext_LastRun_BeforePrev_SchedulesNow() { // Arrange var now = new DateTime(2000, 1, 1, 8, 0, 0); var cronJob = new CronJob(Cron.Daily(), now.Subtract(TimeSpan.FromDays(2))); var computed = new ComputedCronJob(cronJob); // Act computed.UpdateNext(now); // Assert computed.Next.Should().Be(now); }
public void UpdateNext_LastRun_AfterPrev_SchedulesNormal() { // Arrange var now = new DateTime(2000, 1, 1, 8, 0, 0); var cronJob = new CronJob(Cron.Daily(), now.Subtract(TimeSpan.FromSeconds(5))); var computed = new ComputedCronJob(cronJob); // Act computed.UpdateNext(now); // Assert computed.Next.Should().BeAfter(now); }
public void UpdateNext_LastRunNever_SchedulesNow() { // Arrange var now = new DateTime(2000, 1, 1, 8, 0, 0); var cronJob = new CronJob(Cron.Daily()); var computed = new ComputedCronJob(cronJob); // Act computed.UpdateNext(now); // Assert computed.Next.Should().Be(now); }