示例#1
0
        [Platform(Exclude = "Linux")]  // TODO seems that we have some trouble on Linux with this
        public async Task ReschedulingTriggerShouldKeepOriginalNextFireTime()
        {
            NameValueCollection properties = new NameValueCollection();

            properties["quartz.serializer.type"] = TestConstants.DefaultSerializerType;
            ISchedulerFactory factory   = new StdSchedulerFactory(properties);
            IScheduler        scheduler = await factory.GetScheduler();

            await scheduler.Start();

            var job = JobBuilder.Create <NoOpJob>().Build();
            IOperableTrigger trigger = (IOperableTrigger)TriggerBuilder.Create()
                                       .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
                                       .ForJob(job)
                                       .StartNow()
                                       .Build();

            await scheduler.ScheduleJob(job, trigger);

            trigger = (IOperableTrigger)await scheduler.GetTrigger(trigger.Key);

            Assert.That(trigger.GetPreviousFireTimeUtc(), Is.EqualTo(null));

            var previousFireTimeUtc = DateTimeOffset.UtcNow.AddDays(1);

            trigger.SetPreviousFireTimeUtc(previousFireTimeUtc);
            trigger.SetNextFireTimeUtc(trigger.GetFireTimeAfter(previousFireTimeUtc));

            await scheduler.RescheduleJob(trigger.Key, trigger);

            trigger = (IOperableTrigger)await scheduler.GetTrigger(trigger.Key);

            Assert.That(trigger.GetNextFireTimeUtc().Value.UtcDateTime, Is.EqualTo(previousFireTimeUtc.AddHours(1).UtcDateTime).Within(TimeSpan.FromSeconds(5)));

            await scheduler.Shutdown(true);
        }