public void TestTriggerStates() { Trigger trigger = new SimpleTrigger("trigger1", "triggerGroup1", fJobDetail.Name, fJobDetail.Group, DateTime.Now.AddSeconds(100), DateTime.Now.AddSeconds(200), 2, TimeSpan.FromSeconds(2)); trigger.ComputeFirstFireTimeUtc(null); Assert.AreEqual(TriggerState.None, fJobStore.GetTriggerState(null, trigger.Name, trigger.Group)); fJobStore.StoreTrigger(null, trigger, false); Assert.AreEqual(TriggerState.Normal, fJobStore.GetTriggerState(null, trigger.Name, trigger.Group)); fJobStore.PauseTrigger(null, trigger.Name, trigger.Group); Assert.AreEqual(TriggerState.Paused, fJobStore.GetTriggerState(null, trigger.Name, trigger.Group)); fJobStore.ResumeTrigger(null, trigger.Name, trigger.Group); Assert.AreEqual(TriggerState.Normal, fJobStore.GetTriggerState(null, trigger.Name, trigger.Group)); trigger = fJobStore.AcquireNextTrigger(null, trigger.GetNextFireTimeUtc().Value.AddSeconds(10)); Assert.IsNotNull(trigger); fJobStore.ReleaseAcquiredTrigger(null, trigger); trigger = fJobStore.AcquireNextTrigger(null, trigger.GetNextFireTimeUtc().Value.AddSeconds(10)); Assert.IsNotNull(trigger); Assert.IsNull(fJobStore.AcquireNextTrigger(null, trigger.GetNextFireTimeUtc().Value.AddSeconds(10))); }
public void TestAcquireNextTrigger() { DateTime d = DateTime.UtcNow; Trigger trigger1 = new SimpleTrigger("trigger1", "triggerGroup1", fJobDetail.Name, fJobDetail.Group, d.AddSeconds(200), d.AddSeconds(200), 2, TimeSpan.FromSeconds(2)); Trigger trigger2 = new SimpleTrigger("trigger2", "triggerGroup1", fJobDetail.Name, fJobDetail.Group, d.AddSeconds(-100), d.AddSeconds(20), 2, TimeSpan.FromSeconds(2)); Trigger trigger3 = new SimpleTrigger("trigger1", "triggerGroup2", fJobDetail.Name, fJobDetail.Group, d.AddSeconds(100), d.AddSeconds(200), 2, TimeSpan.FromSeconds(2)); trigger1.ComputeFirstFireTimeUtc(null); trigger2.ComputeFirstFireTimeUtc(null); trigger3.ComputeFirstFireTimeUtc(null); fJobStore.StoreTrigger(null, trigger1, false); fJobStore.StoreTrigger(null, trigger2, false); fJobStore.StoreTrigger(null, trigger3, false); Trigger t = fJobStore.AcquireNextTrigger(null, d.AddMilliseconds(10)); Assert.IsNull(t); Assert.AreEqual( trigger2, fJobStore.AcquireNextTrigger(null, trigger1.GetNextFireTimeUtc().Value.AddSeconds(10))); Assert.AreEqual( trigger3, fJobStore.AcquireNextTrigger(null, trigger1.GetNextFireTimeUtc().Value.AddSeconds(10))); Assert.AreEqual( trigger1, fJobStore.AcquireNextTrigger(null, trigger1.GetNextFireTimeUtc().Value.AddSeconds(10))); Assert.IsNull( fJobStore.AcquireNextTrigger(null, trigger1.GetNextFireTimeUtc().Value.AddSeconds(10))); // because of trigger2 Assert.AreEqual(1, fSignaler.fMisfireCount); // release trigger3 fJobStore.ReleaseAcquiredTrigger(null, trigger3); Assert.AreEqual( trigger3, fJobStore.AcquireNextTrigger(null, trigger1.GetNextFireTimeUtc().Value.AddSeconds(10))); }
public void TestGetFireTimeAfter_WithCalendar() { DailyCalendar dailyCalendar = new DailyCalendar("1:20", "14:50"); SimpleTrigger simpleTrigger = new SimpleTrigger(); simpleTrigger.RepeatInterval = TimeSpan.FromMilliseconds(10); simpleTrigger.RepeatCount = 1; DateTime neverFireTime = TriggerUtils.GetEvenMinuteDateBefore(dailyCalendar.GetTimeRangeStartingTimeUtc(DateTime.Now)); simpleTrigger.StartTimeUtc = neverFireTime; simpleTrigger.ComputeFirstFireTimeUtc(dailyCalendar); NullableDateTime fireTimeAfter = simpleTrigger.GetNextFireTimeUtc(); Assert.IsNull(fireTimeAfter); }
public void TestUpdateAfterMisfire() { DateTime startTime = new DateTime(2005, 7, 5, 9, 0, 0); DateTime endTime = new DateTime(2005, 7, 5, 10, 0, 0); SimpleTrigger simpleTrigger = new SimpleTrigger(); simpleTrigger.MisfireInstruction = MisfireInstruction.SimpleTrigger.RescheduleNowWithExistingRepeatCount; simpleTrigger.RepeatCount = 5; simpleTrigger.StartTimeUtc = startTime; simpleTrigger.EndTimeUtc = endTime; simpleTrigger.UpdateAfterMisfire(null); Assert.AreEqual(startTime, simpleTrigger.StartTimeUtc); Assert.AreEqual(endTime, simpleTrigger.EndTimeUtc.Value); Assert.IsTrue(!simpleTrigger.GetNextFireTimeUtc().HasValue); }
public virtual void Run(bool inClearJobs, bool inScheduleJobs) { NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "TestScheduler"; properties["quartz.scheduler.instanceId"] = "instance_one"; properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; properties["quartz.jobStore.misfireThreshold"] = "60000"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.useProperties"] = "false"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.jobStore.clustered"] = "true"; // if running MS SQL Server we need this properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; properties["quartz.dataSource.default.connectionString"] = "Server=(local);Database=quartz;Trusted_Connection=True;"; properties["quartz.dataSource.default.provider"] = "SqlServer-20"; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); if (inClearJobs) { CleanUp(sched); } _log.Info("------- Initialization Complete -----------"); if (inScheduleJobs) { _log.Info("------- Scheduling Jobs ------------------"); string schedId = sched.SchedulerInstanceId; int count = 1; JobDetail job = new JobDetail("job_" + count, schedId, typeof(SimpleRecoveryJob)); // ask scheduler to re-Execute this job if it was in progress when // the scheduler went down... job.RequestsRecovery = true; SimpleTrigger trigger = new SimpleTrigger("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(5000)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000); sched.ScheduleJob(job, trigger); _log.Info(string.Format("{0} will run at: {1} and repeat: {2} times, every {3} seconds", job.FullName, trigger.GetNextFireTimeUtc(), trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds)); count++; job = new JobDetail("job_" + count, schedId, typeof(SimpleRecoveryJob)); // ask scheduler to re-Execute this job if it was in progress when // the scheduler went down... job.RequestsRecovery = (true); trigger = new SimpleTrigger("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(5000)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(2000); sched.ScheduleJob(job, trigger); _log.Info(string.Format("{0} will run at: {1} and repeat: {2} times, every {3} seconds", job.FullName, trigger.GetNextFireTimeUtc(), trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds)); count++; job = new JobDetail("job_" + count, schedId, typeof(SimpleRecoveryStatefulJob)); // ask scheduler to re-Execute this job if it was in progress when // the scheduler went down... job.RequestsRecovery = true; trigger = new SimpleTrigger("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(3000)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000); sched.ScheduleJob(job, trigger); _log.Info(string.Format("{0} will run at: {1} and repeat: {2} times, every {3} seconds", job.FullName, trigger.GetNextFireTimeUtc(), trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds)); count++; job = new JobDetail("job_" + count, schedId, typeof(SimpleRecoveryJob)); // ask scheduler to re-Execute this job if it was in progress when // the scheduler went down... job.RequestsRecovery = true; trigger = new SimpleTrigger("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4000)); trigger.StartTimeUtc = (DateTime.UtcNow.AddMilliseconds(1000L)); sched.ScheduleJob(job, trigger); _log.Info(string.Format("{0} will run at: {1} & repeat: {2}/{3}", job.FullName, trigger.GetNextFireTimeUtc(), trigger.RepeatCount, trigger.RepeatInterval)); count++; job = new JobDetail("job_" + count, schedId, typeof(SimpleRecoveryJob)); // ask scheduler to re-Execute this job if it was in progress when // the scheduler went down... job.RequestsRecovery = true; trigger = new SimpleTrigger("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000); sched.ScheduleJob(job, trigger); _log.Info(string.Format("{0} will run at: {1} & repeat: {2}/{3}", job.FullName, trigger.GetNextFireTimeUtc(), trigger.RepeatCount, trigger.RepeatInterval)); } // jobs don't start firing until start() has been called... _log.Info("------- Starting Scheduler ---------------"); sched.Start(); _log.Info("------- Started Scheduler ----------------"); _log.Info("------- Waiting for one hour... ----------"); Thread.Sleep(TimeSpan.FromHours(1)); _log.Info("------- Shutting Down --------------------"); sched.Shutdown(); _log.Info("------- Shutdown Complete ----------------"); }