Esempio n. 1
0
        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);
        }