public void TestGetFireTime() { DateTime startTime = new DateTime(2011, 1, 1); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(13, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDay = startTimeOfDay; trigger.EndTimeOfDay = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Hour; trigger.RepeatInterval = 1; Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(0, 0, 0, 1, 1, 2011))); Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(7, 0, 0, 1, 1, 2011))); Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(7, 59, 59, 1, 1, 2011))); Assert.AreEqual(dateOf(9, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(8, 0, 0, 1, 1, 2011))); Assert.AreEqual(dateOf(10, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(9, 0, 0, 1, 1, 2011))); Assert.AreEqual(dateOf(13, 0, 0, 1, 1, 2011), trigger.GetFireTimeAfter(dateOf(12, 59, 59, 1, 1, 2011))); Assert.AreEqual(dateOf(8, 0, 0, 2, 1, 2011), trigger.GetFireTimeAfter(dateOf(13, 0, 0, 1, 1, 2011))); }
public void TestTimeOfDayWithStartTime() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
public void TestRepeatCount() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 72, RepeatCount = 7 }; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(8, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(9, 12, 0, 3, 1, 2011), fireTimes[7]); }
public void TestEndTimeAfterEndTimeOfDay() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), EndTimeUtc = endTime.ToUniversalTime(), EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(36, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]); }
/// <summary> /// Build the actual Trigger -- NOT intended to be invoked by end users, /// but will rather be invoked by a TriggerBuilder which this /// ScheduleBuilder is given to. /// </summary> /// <returns></returns> public override IMutableTrigger Build() { DailyTimeIntervalTriggerImpl st = new DailyTimeIntervalTriggerImpl { RepeatInterval = interval, RepeatIntervalUnit = intervalUnit, MisfireInstruction = misfireInstruction, RepeatCount = repeatCount, TimeZone = timeZone }; if (daysOfWeek != null) { st.DaysOfWeek = new ReadOnlyCompatibleHashSet <DayOfWeek>(daysOfWeek); } else { st.DaysOfWeek = new ReadOnlyCompatibleHashSet <DayOfWeek>(AllDaysOfTheWeek); } if (startTimeOfDayUtc != null) { st.StartTimeOfDay = startTimeOfDayUtc; } else { st.StartTimeOfDay = TimeOfDay.HourAndMinuteOfDay(0, 0); } if (endTimeOfDayUtc != null) { st.EndTimeOfDay = endTimeOfDayUtc; } else { st.EndTimeOfDay = TimeOfDay.HourMinuteAndSecondOfDay(23, 59, 59); } return(st); }
public void TestTimeOfDayWithEndTime() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.EndTimeUtc = endTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 60; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(30, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 3, 1, 2011), fireTimes[29]); }
public void TestFollowsTimeZone2() { TimeZoneInfo est = TimeZoneUtil.FindTimeZoneById("Eastern Standard Time"); DateTimeOffset startTime = new DateTimeOffset(2012, 11, 2, 12, 0, 0, TimeSpan.FromHours(-4)); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Hour, RepeatInterval = 1, TimeZone = est }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 8); DateTimeOffset expected0 = new DateTimeOffset(2012, 11, 3, 8, 0, 0, 0, TimeSpan.FromHours(-4)); DateTimeOffset expected1 = new DateTimeOffset(2012, 11, 3, 9, 0, 0, 0, TimeSpan.FromHours(-4)); DateTimeOffset expected2 = new DateTimeOffset(2012, 11, 3, 10, 0, 0, 0, TimeSpan.FromHours(-4)); DateTimeOffset expected3 = new DateTimeOffset(2012, 11, 3, 11, 0, 0, 0, TimeSpan.FromHours(-4)); DateTimeOffset expected4 = new DateTimeOffset(2012, 11, 4, 8, 0, 0, 0, TimeSpan.FromHours(-5)); DateTimeOffset expected5 = new DateTimeOffset(2012, 11, 4, 9, 0, 0, 0, TimeSpan.FromHours(-5)); DateTimeOffset expected6 = new DateTimeOffset(2012, 11, 4, 10, 0, 0, 0, TimeSpan.FromHours(-5)); DateTimeOffset expected7 = new DateTimeOffset(2012, 11, 4, 11, 0, 0, 0, TimeSpan.FromHours(-5)); Assert.AreEqual(expected0, fireTimes[0]); Assert.AreEqual(expected1, fireTimes[1]); Assert.AreEqual(expected2, fireTimes[2]); Assert.AreEqual(expected3, fireTimes[3]); Assert.AreEqual(expected4, fireTimes[4]); Assert.AreEqual(expected5, fireTimes[5]); Assert.AreEqual(expected6, fireTimes[6]); Assert.AreEqual(expected7, fireTimes[7]); }
public void TestHourInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(13, 0, 0, 15, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 1, 15); TimeOfDay endTimeOfDay = new TimeOfDay(16, 1, 15); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeUtc = endTime.ToUniversalTime(), EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Hour, RepeatInterval = 2 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 1, 15, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(12, 1, 15, 10, 1, 2011), fireTimes[47]); }
public void TestRepeatCountInf() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = (72); // Setting this (which is default) should make the trigger just as normal one. trigger.RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]); }
public void TestTimeOfDayWithEndTimeOddInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(10, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.EndTimeUtc = endTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 23; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(18, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 1, 1, 2011), fireTimes[5]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 3, 1, 2011), fireTimes[17]); }
public void TestAllDaysOfTheWeek() { Collection.ISet <DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.AllDaysOfTheWeek; DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.DaysOfWeek = daysOfWeek; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 60; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
/// <summary> /// Build the actual Trigger -- NOT intended to be invoked by end users, /// but will rather be invoked by a TriggerBuilder which this /// ScheduleBuilder is given to. /// </summary> /// <returns></returns> public override IMutableTrigger Build() { DailyTimeIntervalTriggerImpl st = new DailyTimeIntervalTriggerImpl(); st.RepeatInterval = interval; st.RepeatIntervalUnit = intervalUnit; st.MisfireInstruction = misfireInstruction; st.RepeatCount = repeatCount; if (daysOfWeek != null) { st.DaysOfWeek = daysOfWeek; } else { st.DaysOfWeek = AllDaysOfTheWeek; } if (startTimeOfDayUtc != null) { st.StartTimeOfDay = startTimeOfDayUtc; } else { st.StartTimeOfDay = TimeOfDay.HourAndMinuteOfDay(0, 0); } if (endTimeOfDayUtc != null) { st.EndTimeOfDay = endTimeOfDayUtc; } else { st.EndTimeOfDay = TimeOfDay.HourMinuteAndSecondOfDay(23, 59, 59); } return(st); }
public void TestRepeatCountInf() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 72, RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely }; // Setting this (which is default) should make the trigger just as normal one. var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]); }
public void TestTimeOfDayWithEndTimeOddInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(10, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), EndTimeUtc = endTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 23 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(18, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 1, 1, 2011), fireTimes[5]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 3, 1, 2011), fireTimes[17]); }
public void TestAllDaysOfTheWeek() { IReadOnlyCollection <DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.AllDaysOfTheWeek; DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, DaysOfWeek = daysOfWeek, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
public void TestExtraConstructors() { // A test case for QTZ-389 - some extra constructors didn't set all parameters DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl( "triggerName", "triggerGroup", "jobName", "jobGroup", dateOf(8, 0, 0, 1, 1, 2012), null, new TimeOfDay(8, 0, 0), new TimeOfDay(17, 0, 0), IntervalUnit.Hour, 1); Assert.AreEqual("triggerName", trigger.Name); Assert.AreEqual("triggerGroup", trigger.Group); Assert.AreEqual("jobName", trigger.JobName); Assert.AreEqual("jobGroup", trigger.JobGroup); Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.StartTimeUtc); Assert.AreEqual(null, trigger.EndTimeUtc); Assert.AreEqual(new TimeOfDay(8, 0, 0), trigger.StartTimeOfDay); Assert.AreEqual(new TimeOfDay(17, 0, 0), trigger.EndTimeOfDay); Assert.AreEqual(IntervalUnit.Hour, trigger.RepeatIntervalUnit); Assert.AreEqual(1, trigger.RepeatInterval); trigger = new DailyTimeIntervalTriggerImpl( "triggerName", "triggerGroup", dateOf(8, 0, 0, 1, 1, 2012), null, new TimeOfDay(8, 0, 0), new TimeOfDay(17, 0, 0), IntervalUnit.Hour, 1); Assert.AreEqual("triggerName", trigger.Name); Assert.AreEqual("triggerGroup", trigger.Group); Assert.AreEqual(null, trigger.JobName); Assert.AreEqual("DEFAULT", trigger.JobGroup); Assert.AreEqual(dateOf(8, 0, 0, 1, 1, 2012), trigger.StartTimeUtc); Assert.AreEqual(null, trigger.EndTimeUtc); Assert.AreEqual(new TimeOfDay(8, 0, 0), trigger.StartTimeOfDay); Assert.AreEqual(new TimeOfDay(17, 0, 0), trigger.EndTimeOfDay); Assert.AreEqual(IntervalUnit.Hour, trigger.RepeatIntervalUnit); Assert.AreEqual(1, trigger.RepeatInterval); }
public async Task Test(IScheduler[] schedulers, bool clearJobs, bool scheduleJobs) { var scheduler = schedulers[0]; try { if (clearJobs) { foreach (var s in schedulers) { await s.Clear(); } } if (scheduleJobs) { ICalendar cronCalendar = new CronCalendar("0/5 * * * * ?"); ICalendar holidayCalendar = new HolidayCalendar(); // QRTZNET-86 var t = await scheduler.GetTrigger(new TriggerKey("NonExistingTrigger", "NonExistingGroup")); (t).Should().BeNull(); var cal = new AnnualCalendar(); await scheduler.AddCalendar("annualCalendar", cal, false, true); IOperableTrigger calendarsTrigger = new SimpleTriggerImpl("calendarsTrigger", "test", 20, TimeSpan.FromMilliseconds(5)); calendarsTrigger.CalendarName = "annualCalendar"; var jd = new JobDetailImpl("testJob", "test", typeof(NoOpJob)); await scheduler.ScheduleJob(jd, calendarsTrigger); // QRTZNET-93 await scheduler.AddCalendar("annualCalendar", cal, true, true); await scheduler.AddCalendar("baseCalendar", new BaseCalendar(), false, true); await scheduler.AddCalendar("cronCalendar", cronCalendar, false, true); await scheduler.AddCalendar("dailyCalendar", new DailyCalendar(DateTime.Now.Date, DateTime.Now.AddMinutes(1)), false, true); await scheduler.AddCalendar("holidayCalendar", holidayCalendar, false, true); await scheduler.AddCalendar("monthlyCalendar", new MonthlyCalendar(), false, true); await scheduler.AddCalendar("weeklyCalendar", new WeeklyCalendar(), false, true); await scheduler.AddCalendar("cronCalendar", cronCalendar, true, true); await scheduler.AddCalendar("holidayCalendar", holidayCalendar, true, true); (await scheduler.GetCalendar("annualCalendar")).Should().NotBeNull(); var lonelyJob = new JobDetailImpl("lonelyJob", "lonelyGroup", typeof(SimpleRecoveryJob)); lonelyJob.Durable = true; lonelyJob.RequestsRecovery = true; await scheduler.AddJob(lonelyJob, false); await scheduler.AddJob(lonelyJob, true); var schedId = scheduler.SchedulerInstanceId; var count = 1; var job = new JobDetailImpl("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; IOperableTrigger trigger = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.JobDataMap.Add("key", "value"); trigger.EndTimeUtc = DateTime.UtcNow.AddYears(10); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); // check that trigger was stored var persisted = await scheduler.GetTrigger(new TriggerKey("trig_" + count, schedId)); (persisted).Should().NotBeNull(); (persisted is SimpleTriggerImpl).Should().BeTrue(); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(2000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(3)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(4)); trigger.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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; IOperableTrigger ct = new CronTriggerImpl("cron_trig_" + count, schedId, "0/10 * * * * ?"); ct.JobDataMap.Add("key", "value"); ct.StartTimeUtc = DateTime.UtcNow.AddMilliseconds(1000); await scheduler.ScheduleJob(job, ct); count++; job = new JobDetailImpl("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; var nt = new DailyTimeIntervalTriggerImpl("nth_trig_" + count, schedId, new TimeOfDay(1, 1, 1), new TimeOfDay(23, 30, 0), IntervalUnit.Hour, 1); nt.StartTimeUtc = DateTime.UtcNow.Date.AddMilliseconds(1000); await scheduler.ScheduleJob(job, nt); var nt2 = new DailyTimeIntervalTriggerImpl(); nt2.Key = new TriggerKey("nth_trig2_" + count, schedId); nt2.StartTimeUtc = DateTime.UtcNow.Date.AddMilliseconds(1000); nt2.JobKey = job.Key; await scheduler.ScheduleJob(nt2); // GitHub issue #92 await scheduler.GetTrigger(nt2.Key); // GitHub issue #98 nt2.StartTimeOfDay = new TimeOfDay(1, 2, 3); nt2.EndTimeOfDay = new TimeOfDay(2, 3, 4); await scheduler.UnscheduleJob(nt2.Key); await scheduler.ScheduleJob(nt2); var triggerFromDb = (IDailyTimeIntervalTrigger)await scheduler.GetTrigger(nt2.Key); triggerFromDb.StartTimeOfDay.Hour.Should().Be(1); triggerFromDb.StartTimeOfDay.Minute.Should().Be(2); triggerFromDb.StartTimeOfDay.Second.Should().Be(3); triggerFromDb.EndTimeOfDay.Hour.Should().Be(2); triggerFromDb.EndTimeOfDay.Minute.Should().Be(3); triggerFromDb.EndTimeOfDay.Second.Should().Be(4); job.RequestsRecovery = true; var intervalTrigger = new CalendarIntervalTriggerImpl( "calint_trig_" + count, schedId, DateTime.Now.AddMilliseconds(300), DateTime.Now.AddMinutes(1), IntervalUnit.Second, 8); intervalTrigger.JobKey = job.Key; await scheduler.ScheduleJob(intervalTrigger); // bulk operations IJobDetail detail = new JobDetailImpl("job_" + count, schedId, typeof(SimpleRecoveryJob)); ITrigger simple = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); var triggers = (IReadOnlyCollection <ITrigger>) new HashSet <ITrigger> { simple }; var info = (IReadOnlyDictionary <IJobDetail, IReadOnlyCollection <ITrigger> >) new Dictionary <IJobDetail, IReadOnlyCollection <ITrigger> > { [detail] = triggers }; await scheduler.ScheduleJobs(info, true); (await scheduler.CheckExists(detail.Key)).Should().BeTrue(); (await scheduler.CheckExists(simple.Key)).Should().BeTrue(); // QRTZNET-243 await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupContains("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEndsWith("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupStartsWith("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupContains("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEndsWith("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupStartsWith("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("a").DeepClone()); foreach (var s in schedulers) { await s.Start(); } await Task.Delay(3 *schedulers.Length); await scheduler.PauseAll(); await scheduler.ResumeAll(); await scheduler.PauseJob(new JobKey("job_1", schedId)); await scheduler.ResumeJob(new JobKey("job_1", schedId)); await scheduler.PauseJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); await Task.Delay(TimeSpan.FromSeconds(1)); await scheduler.ResumeJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); await scheduler.PauseTrigger(new TriggerKey("trig_2", schedId)); await scheduler.ResumeTrigger(new TriggerKey("trig_2", schedId)); await scheduler.PauseTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); (await scheduler.GetPausedTriggerGroups()).Count.Should().Be(1); await Task.Delay(TimeSpan.FromSeconds(3)); await scheduler.ResumeTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); (await scheduler.GetTrigger(new TriggerKey("trig_2", schedId))).Should().NotBeNull(); (await scheduler.GetJobDetail(new JobKey("job_1", schedId))).Should().NotBeNull(); (await scheduler.GetMetaData()).Should().NotBeNull(); (await scheduler.GetCalendar("weeklyCalendar")).Should().NotBeNull(); var genericjobKey = new JobKey("genericJob", "genericGroup"); var genericJob = JobBuilder.Create <GenericJobType <string> >() .WithIdentity(genericjobKey) .StoreDurably() .Build(); await scheduler.AddJob(genericJob, false); genericJob = await scheduler.GetJobDetail(genericjobKey); genericJob.Should().NotBeNull(); await scheduler.TriggerJob(genericjobKey); await Task.Delay(TimeSpan.FromSeconds(30)); GenericJobType <string> .TriggeredCount.Should().Be(1); await scheduler.Standby(); (await scheduler.GetCalendarNames()).Should().NotBeEmpty(); (await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals(schedId))).Should().NotBeEmpty(); (await scheduler.GetTriggersOfJob(new JobKey("job_2", schedId))).Should().NotBeEmpty(); (await scheduler.GetJobDetail(new JobKey("job_2", schedId))).Should().NotBeNull(); await scheduler.DeleteCalendar("cronCalendar"); await scheduler.DeleteCalendar("holidayCalendar"); await scheduler.DeleteJob(new JobKey("lonelyJob", "lonelyGroup")); await scheduler.DeleteJob(job.Key); await scheduler.GetJobGroupNames(); await scheduler.GetCalendarNames(); await scheduler.GetTriggerGroupNames(); await TestMatchers(scheduler); } } finally { foreach (var s in schedulers) { await s.Shutdown(false); } } }
public async Task Test(IScheduler scheduler, bool clearJobs, bool scheduleJobs) { try { if (clearJobs) { await scheduler.Clear(); } if (scheduleJobs) { ICalendar cronCalendar = new CronCalendar("0/5 * * * * ?"); ICalendar holidayCalendar = new HolidayCalendar(); // QRTZNET-86 ITrigger t = await scheduler.GetTrigger(new TriggerKey("NonExistingTrigger", "NonExistingGroup")); Assert.IsNull(t); AnnualCalendar cal = new AnnualCalendar(); await scheduler.AddCalendar("annualCalendar", cal, false, true); IOperableTrigger calendarsTrigger = new SimpleTriggerImpl("calendarsTrigger", "test", 20, TimeSpan.FromMilliseconds(5)); calendarsTrigger.CalendarName = "annualCalendar"; JobDetailImpl jd = new JobDetailImpl("testJob", "test", typeof(NoOpJob)); await scheduler.ScheduleJob(jd, calendarsTrigger); // QRTZNET-93 await scheduler.AddCalendar("annualCalendar", cal, true, true); await scheduler.AddCalendar("baseCalendar", new BaseCalendar(), false, true); await scheduler.AddCalendar("cronCalendar", cronCalendar, false, true); await scheduler.AddCalendar("dailyCalendar", new DailyCalendar(DateTime.Now.Date, DateTime.Now.AddMinutes(1)), false, true); await scheduler.AddCalendar("holidayCalendar", holidayCalendar, false, true); await scheduler.AddCalendar("monthlyCalendar", new MonthlyCalendar(), false, true); await scheduler.AddCalendar("weeklyCalendar", new WeeklyCalendar(), false, true); await scheduler.AddCalendar("cronCalendar", cronCalendar, true, true); await scheduler.AddCalendar("holidayCalendar", holidayCalendar, true, true); Assert.IsNotNull(scheduler.GetCalendar("annualCalendar")); JobDetailImpl lonelyJob = new JobDetailImpl("lonelyJob", "lonelyGroup", typeof(SimpleRecoveryJob)); lonelyJob.Durable = true; lonelyJob.RequestsRecovery = true; await scheduler.AddJob(lonelyJob, false); await scheduler.AddJob(lonelyJob, true); string schedId = scheduler.SchedulerInstanceId; int count = 1; JobDetailImpl job = new JobDetailImpl("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; IOperableTrigger trigger = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.JobDataMap.Add("key", "value"); trigger.EndTimeUtc = DateTime.UtcNow.AddYears(10); trigger.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); // check that trigger was stored ITrigger persisted = await scheduler.GetTrigger(new TriggerKey("trig_" + count, schedId)); Assert.IsNotNull(persisted); Assert.IsTrue(persisted is SimpleTriggerImpl); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.StartTimeUtc = DateTime.Now.AddMilliseconds(2000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(3)); trigger.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(4)); trigger.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); await scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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; IOperableTrigger ct = new CronTriggerImpl("cron_trig_" + count, schedId, "0/10 * * * * ?"); ct.JobDataMap.Add("key", "value"); ct.StartTimeUtc = DateTime.Now.AddMilliseconds(1000); await scheduler.ScheduleJob(job, ct); count++; job = new JobDetailImpl("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; var timeZone1 = TimeZoneUtil.FindTimeZoneById("Central European Standard Time"); var timeZone2 = TimeZoneUtil.FindTimeZoneById("Mountain Standard Time"); DailyTimeIntervalTriggerImpl nt = new DailyTimeIntervalTriggerImpl("nth_trig_" + count, schedId, new TimeOfDay(1, 1, 1), new TimeOfDay(23, 30, 0), IntervalUnit.Hour, 1); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt.TimeZone = timeZone1; await scheduler.ScheduleJob(job, nt); var loadedNt = (IDailyTimeIntervalTrigger)await scheduler.GetTrigger(nt.Key); Assert.That(loadedNt.TimeZone.Id, Is.EqualTo(timeZone1.Id)); nt.TimeZone = timeZone2; await scheduler.RescheduleJob(nt.Key, nt); loadedNt = (IDailyTimeIntervalTrigger)await scheduler.GetTrigger(nt.Key); Assert.That(loadedNt.TimeZone.Id, Is.EqualTo(timeZone2.Id)); DailyTimeIntervalTriggerImpl nt2 = new DailyTimeIntervalTriggerImpl(); nt2.Key = new TriggerKey("nth_trig2_" + count, schedId); nt2.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt2.JobKey = job.Key; await scheduler.ScheduleJob(nt2); // GitHub issue #92 await scheduler.GetTrigger(nt2.Key); // GitHub issue #98 nt2.StartTimeOfDay = new TimeOfDay(1, 2, 3); nt2.EndTimeOfDay = new TimeOfDay(2, 3, 4); await scheduler.UnscheduleJob(nt2.Key); await scheduler.ScheduleJob(nt2); var triggerFromDb = (IDailyTimeIntervalTrigger)await scheduler.GetTrigger(nt2.Key); Assert.That(triggerFromDb.StartTimeOfDay.Hour, Is.EqualTo(1)); Assert.That(triggerFromDb.StartTimeOfDay.Minute, Is.EqualTo(2)); Assert.That(triggerFromDb.StartTimeOfDay.Second, Is.EqualTo(3)); Assert.That(triggerFromDb.EndTimeOfDay.Hour, Is.EqualTo(2)); Assert.That(triggerFromDb.EndTimeOfDay.Minute, Is.EqualTo(3)); Assert.That(triggerFromDb.EndTimeOfDay.Second, Is.EqualTo(4)); job.RequestsRecovery = true; CalendarIntervalTriggerImpl intervalTrigger = new CalendarIntervalTriggerImpl( "calint_trig_" + count, schedId, DateTime.UtcNow.AddMilliseconds(300), DateTime.UtcNow.AddMinutes(1), IntervalUnit.Second, 8); intervalTrigger.JobKey = job.Key; await scheduler.ScheduleJob(intervalTrigger); // custom time zone const string CustomTimeZoneId = "Custom TimeZone"; var webTimezone = TimeZoneInfo.CreateCustomTimeZone( CustomTimeZoneId, TimeSpan.FromMinutes(22), null, null); TimeZoneUtil.CustomResolver = id => { if (id == CustomTimeZoneId) { return(webTimezone); } return(null); }; var customTimeZoneTrigger = TriggerBuilder.Create() .WithIdentity("customTimeZoneTrigger") .WithCronSchedule("0/5 * * * * ?", x => x.InTimeZone(webTimezone)) .StartNow() .ForJob(job) .Build(); await scheduler.ScheduleJob(customTimeZoneTrigger); var loadedCustomTimeZoneTrigger = (ICronTrigger)await scheduler.GetTrigger(customTimeZoneTrigger.Key); Assert.That(loadedCustomTimeZoneTrigger.TimeZone.BaseUtcOffset, Is.EqualTo(TimeSpan.FromMinutes(22))); // bulk operations var info = new Dictionary <IJobDetail, IReadOnlyCollection <ITrigger> >(); IJobDetail detail = new JobDetailImpl("job_" + count, schedId, typeof(SimpleRecoveryJob)); ITrigger simple = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); var triggers = new List <ITrigger>(); triggers.Add(simple); info[detail] = triggers; await scheduler.ScheduleJobs(info, true); Assert.IsTrue(await scheduler.CheckExists(detail.Key)); Assert.IsTrue(await scheduler.CheckExists(simple.Key)); // QRTZNET-243 await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupContains("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEndsWith("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupStartsWith("a").DeepClone()); await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupContains("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEndsWith("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupStartsWith("a").DeepClone()); await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("a").DeepClone()); await scheduler.Start(); await Task.Delay(TimeSpan.FromSeconds(3)); await scheduler.PauseAll(); await scheduler.ResumeAll(); await scheduler.PauseJob(new JobKey("job_1", schedId)); await scheduler.ResumeJob(new JobKey("job_1", schedId)); await scheduler.PauseJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); await Task.Delay(TimeSpan.FromSeconds(1)); await scheduler.ResumeJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); await scheduler.PauseTrigger(new TriggerKey("trig_2", schedId)); await scheduler.ResumeTrigger(new TriggerKey("trig_2", schedId)); await scheduler.PauseTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); var pausedTriggerGroups = await scheduler.GetPausedTriggerGroups(); Assert.AreEqual(1, pausedTriggerGroups.Count); await Task.Delay(TimeSpan.FromSeconds(3)); await scheduler.ResumeTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); Assert.IsNotNull(scheduler.GetTrigger(new TriggerKey("trig_2", schedId))); Assert.IsNotNull(scheduler.GetJobDetail(new JobKey("job_1", schedId))); Assert.IsNotNull(scheduler.GetMetaData()); Assert.IsNotNull(scheduler.GetCalendar("weeklyCalendar")); var genericjobKey = new JobKey("genericJob", "genericGroup"); GenericJobType.Reset(); var genericJob = JobBuilder.Create <GenericJobType>() .WithIdentity(genericjobKey) .StoreDurably() .Build(); await scheduler.AddJob(genericJob, false); genericJob = await scheduler.GetJobDetail(genericjobKey); Assert.That(genericJob, Is.Not.Null); await scheduler.TriggerJob(genericjobKey); GenericJobType.WaitForTrigger(TimeSpan.FromSeconds(20)); Assert.That(GenericJobType.TriggeredCount, Is.EqualTo(1)); await scheduler.Standby(); CollectionAssert.IsNotEmpty(await scheduler.GetCalendarNames()); CollectionAssert.IsNotEmpty(await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals(schedId))); CollectionAssert.IsNotEmpty(await scheduler.GetTriggersOfJob(new JobKey("job_2", schedId))); Assert.IsNotNull(scheduler.GetJobDetail(new JobKey("job_2", schedId))); await scheduler.DeleteCalendar("cronCalendar"); await scheduler.DeleteCalendar("holidayCalendar"); await scheduler.DeleteJob(new JobKey("lonelyJob", "lonelyGroup")); await scheduler.DeleteJob(job.Key); await scheduler.GetJobGroupNames(); await scheduler.GetCalendarNames(); await scheduler.GetTriggerGroupNames(); await TestMatchers(scheduler); } } finally { await scheduler.Shutdown(false); } }
public void Test(IScheduler scheduler, bool clearJobs, bool scheduleJobs) { try { if (clearJobs) { scheduler.Clear(); } if (scheduleJobs) { ICalendar cronCalendar = new CronCalendar("0/5 * * * * ?"); ICalendar holidayCalendar = new HolidayCalendar(); // QRTZNET-86 ITrigger t = scheduler.GetTrigger(new TriggerKey("NonExistingTrigger", "NonExistingGroup")); Assert.IsNull(t); AnnualCalendar cal = new AnnualCalendar(); scheduler.AddCalendar("annualCalendar", cal, false, true); IOperableTrigger calendarsTrigger = new SimpleTriggerImpl("calendarsTrigger", "test", 20, TimeSpan.FromMilliseconds(5)); calendarsTrigger.CalendarName = "annualCalendar"; JobDetailImpl jd = new JobDetailImpl("testJob", "test", typeof(NoOpJob)); scheduler.ScheduleJob(jd, calendarsTrigger); // QRTZNET-93 scheduler.AddCalendar("annualCalendar", cal, true, true); scheduler.AddCalendar("baseCalendar", new BaseCalendar(), false, true); scheduler.AddCalendar("cronCalendar", cronCalendar, false, true); scheduler.AddCalendar("dailyCalendar", new DailyCalendar(DateTime.Now.Date, DateTime.Now.AddMinutes(1)), false, true); scheduler.AddCalendar("holidayCalendar", holidayCalendar, false, true); scheduler.AddCalendar("monthlyCalendar", new MonthlyCalendar(), false, true); scheduler.AddCalendar("weeklyCalendar", new WeeklyCalendar(), false, true); scheduler.AddCalendar("cronCalendar", cronCalendar, true, true); scheduler.AddCalendar("holidayCalendar", holidayCalendar, true, true); Assert.IsNotNull(scheduler.GetCalendar("annualCalendar")); JobDetailImpl lonelyJob = new JobDetailImpl("lonelyJob", "lonelyGroup", typeof(SimpleRecoveryJob)); lonelyJob.Durable = true; lonelyJob.RequestsRecovery = true; scheduler.AddJob(lonelyJob, false); scheduler.AddJob(lonelyJob, true); string schedId = scheduler.SchedulerInstanceId; int count = 1; JobDetailImpl job = new JobDetailImpl("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; IOperableTrigger trigger = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.JobDataMap.Add("key", "value"); trigger.EndTimeUtc = DateTime.UtcNow.AddYears(10); trigger.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); scheduler.ScheduleJob(job, trigger); // check that trigger was stored ITrigger persisted = scheduler.GetTrigger(new TriggerKey("trig_" + count, schedId)); Assert.IsNotNull(persisted); Assert.IsTrue(persisted is SimpleTriggerImpl); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(5)); trigger.StartTimeUtc = (DateTime.Now.AddMilliseconds(2000L)); scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(3)); trigger.StartTimeUtc = (DateTime.Now.AddMilliseconds(1000L)); scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromSeconds(4)); trigger.StartTimeUtc = (DateTime.Now.AddMilliseconds(1000L)); scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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 SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); scheduler.ScheduleJob(job, trigger); count++; job = new JobDetailImpl("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); IOperableTrigger ct = new CronTriggerImpl("cron_trig_" + count, schedId, "0/10 * * * * ?"); ct.JobDataMap.Add("key", "value"); ct.StartTimeUtc = DateTime.Now.AddMilliseconds(1000); scheduler.ScheduleJob(job, ct); count++; job = new JobDetailImpl("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); DailyTimeIntervalTriggerImpl nt = new DailyTimeIntervalTriggerImpl("nth_trig_" + count, schedId, new TimeOfDay(1, 1, 1), new TimeOfDay(23, 30, 0), IntervalUnit.Hour, 1); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); scheduler.ScheduleJob(job, nt); DailyTimeIntervalTriggerImpl nt2 = new DailyTimeIntervalTriggerImpl(); nt2.Key = new TriggerKey("nth_trig2_" + count, schedId); nt2.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt2.JobKey = job.Key; scheduler.ScheduleJob(nt2); // GitHub issue #92 scheduler.GetTrigger(nt2.Key); // GitHub issue #98 nt2.StartTimeOfDay = new TimeOfDay(1, 2, 3); nt2.EndTimeOfDay = new TimeOfDay(2, 3, 4); scheduler.UnscheduleJob(nt2.Key); scheduler.ScheduleJob(nt2); var triggerFromDb = (IDailyTimeIntervalTrigger)scheduler.GetTrigger(nt2.Key); Assert.That(triggerFromDb.StartTimeOfDay.Hour, Is.EqualTo(1)); Assert.That(triggerFromDb.StartTimeOfDay.Minute, Is.EqualTo(2)); Assert.That(triggerFromDb.StartTimeOfDay.Second, Is.EqualTo(3)); Assert.That(triggerFromDb.EndTimeOfDay.Hour, Is.EqualTo(2)); Assert.That(triggerFromDb.EndTimeOfDay.Minute, Is.EqualTo(3)); Assert.That(triggerFromDb.EndTimeOfDay.Second, Is.EqualTo(4)); job.RequestsRecovery = (true); CalendarIntervalTriggerImpl intervalTrigger = new CalendarIntervalTriggerImpl( "calint_trig_" + count, schedId, DateTime.UtcNow.AddMilliseconds(300), DateTime.UtcNow.AddMinutes(1), IntervalUnit.Second, 8); intervalTrigger.JobKey = job.Key; scheduler.ScheduleJob(intervalTrigger); // bulk operations var info = new Dictionary <IJobDetail, Collection.ISet <ITrigger> >(); IJobDetail detail = new JobDetailImpl("job_" + count, schedId, typeof(SimpleRecoveryJob)); ITrigger simple = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); var triggers = new Collection.HashSet <ITrigger>(); triggers.Add(simple); info[detail] = triggers; scheduler.ScheduleJobs(info, true); Assert.IsTrue(scheduler.CheckExists(detail.Key)); Assert.IsTrue(scheduler.CheckExists(simple.Key)); // QRTZNET-243 scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupContains("a").DeepClone()); scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEndsWith("a").DeepClone()); scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupStartsWith("a").DeepClone()); scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("a").DeepClone()); scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupContains("a").DeepClone()); scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEndsWith("a").DeepClone()); scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupStartsWith("a").DeepClone()); scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("a").DeepClone()); scheduler.Start(); Thread.Sleep(TimeSpan.FromSeconds(3)); scheduler.PauseAll(); scheduler.ResumeAll(); scheduler.PauseJob(new JobKey("job_1", schedId)); scheduler.ResumeJob(new JobKey("job_1", schedId)); scheduler.PauseJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); Thread.Sleep(TimeSpan.FromSeconds(1)); scheduler.ResumeJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); scheduler.PauseTrigger(new TriggerKey("trig_2", schedId)); scheduler.ResumeTrigger(new TriggerKey("trig_2", schedId)); scheduler.PauseTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); Assert.AreEqual(1, scheduler.GetPausedTriggerGroups().Count); Thread.Sleep(TimeSpan.FromSeconds(3)); scheduler.ResumeTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); Assert.IsNotNull(scheduler.GetTrigger(new TriggerKey("trig_2", schedId))); Assert.IsNotNull(scheduler.GetJobDetail(new JobKey("job_1", schedId))); Assert.IsNotNull(scheduler.GetMetaData()); Assert.IsNotNull(scheduler.GetCalendar("weeklyCalendar")); Thread.Sleep(TimeSpan.FromSeconds(20)); scheduler.Standby(); CollectionAssert.IsNotEmpty(scheduler.GetCalendarNames()); CollectionAssert.IsNotEmpty(scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals(schedId))); CollectionAssert.IsNotEmpty(scheduler.GetTriggersOfJob(new JobKey("job_2", schedId))); Assert.IsNotNull(scheduler.GetJobDetail(new JobKey("job_2", schedId))); scheduler.DeleteCalendar("cronCalendar"); scheduler.DeleteCalendar("holidayCalendar"); scheduler.DeleteJob(new JobKey("lonelyJob", "lonelyGroup")); scheduler.DeleteJob(job.Key); scheduler.GetJobGroupNames(); scheduler.GetCalendarNames(); scheduler.GetTriggerGroupNames(); } } finally { scheduler.Shutdown(false); } }