public SendMailboxesJob() { Trigger = new NthIncludedDayTrigger(new NthIncludedDaySettings { ScheduleType = ScheduleType.Daily, DailySettings = new DailySettings { EveryDay = 1, OnlyWorkDays = false }, RepeatSettings = new RepeatSettings { Enabled = true, RepeatEvery = TimeSpan.FromMinutes(15.0), RepeatTo = TimeSpan.FromHours(24.0) }, StartDate = DateTime.Today }, Locator.GetServiceNotNull <IProductionCalendarService>().GetGlobalProductionSchedule()) { Name = "Триггер запуска отправки почтовых ящиков", Id = new Guid("{3A6C7BC6-9B0D-41EB-9237-E693C2FCE5E2}") }; Jobs = new List <IJob> { new JobImpl() }; }
public MailReadersApiJob() { Trigger = new NthIncludedDayTrigger( new NthIncludedDaySettings { ScheduleType = ScheduleType.Daily, DailySettings = new DailySettings { EveryDay = 1, OnlyWorkDays = true }, RepeatSettings = new RepeatSettings { Enabled = true, RepeatEvery = TimeSpan.FromMinutes(15), RepeatTo = TimeSpan.FromHours(9) }, StartDate = DateTime.Today.AddHours(8).AddMinutes(30) }, Locator.GetService <IProductionCalendarService>()) { Name = SR.T("Триггер проверки почты через Api"), Id = new Guid("56F6DF69-FFA3-4E24-8501-2E38020066AF") }; Jobs = new List <IJob> { new JobImpl() }; }
public MailReadersJob() { Trigger = new NthIncludedDayTrigger( new NthIncludedDaySettings { ScheduleType = ScheduleType.Daily, DailySettings = new DailySettings { EveryDay = 1, OnlyWorkDays = true }, RepeatSettings = new RepeatSettings { Enabled = true, RepeatEvery = TimeSpan.FromMinutes(15), RepeatTo = TimeSpan.FromHours(9) }, StartDate = DateTime.Today.AddHours(8).AddMinutes(30) }, Locator.GetService <IProductionCalendarService>()) { Name = SR.T("Триггер проверки почты"), Id = new Guid("170F7E29-CE96-4952-A52F-AFAD01E31353") }; Jobs = new List <IJob> { new JobImpl() }; }
public void TestPrecision() { IOperableTrigger trigger = new NthIncludedDayTrigger(); trigger.StartTimeUtc = new DateTime(1982, 6, 28, 13, 5, 5, 233); Assert.IsFalse(trigger.HasMillisecondPrecision); Assert.AreEqual(0, trigger.StartTimeUtc.Millisecond); }
public void TestComputeFirstFireTimeUtc_NoStartTimeForTrigger() { // QRTZNET145 NthIncludedDayTrigger trigger = new NthIncludedDayTrigger(); trigger.N = 1; trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.FireOnceNow; trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; trigger.ComputeFirstFireTimeUtc(null); }
public static void AssignQuartzTrigger(this NthIncludedDayTrigger nthIncludedDayTrigger, INthIncludedDayTrigger trigger) { nthIncludedDayTrigger.MisfireInstruction = (int)trigger.MisfireInstruction; nthIncludedDayTrigger.N = trigger.N; nthIncludedDayTrigger.IntervalType = (int)trigger.IntervalType; nthIncludedDayTrigger.FireAtTime = string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00}", trigger.FireAtTime.Hours, trigger.FireAtTime.Minutes, trigger.FireAtTime.Seconds); nthIncludedDayTrigger.NextFireCutoffInterval = trigger.NextFireCutoffInterval; nthIncludedDayTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(RegistryTimeZoneProvider.GetRegistryKeyNameByTimeZoneId(trigger.TimeZone)); nthIncludedDayTrigger.TriggerCalendarFirstDayOfWeek = trigger.TriggerCalendarFirstDayOfWeek; nthIncludedDayTrigger.TriggerCalendarWeekRule = trigger.TriggerCalendarWeekRule; }
public void TestGetFireTimeAfter() { DateTime startCalendar = new DateTime(2005, 6, 1, 9, 30, 17); // Test yearly NthIncludedDayTrigger yearlyTrigger = new NthIncludedDayTrigger(); yearlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeYearly; yearlyTrigger.StartTimeUtc = startCalendar; yearlyTrigger.N = 10; yearlyTrigger.FireAtTime = "14:35:15"; DateTime targetCalendar = new DateTime(2006, 1, 10, 14, 35, 15).ToUniversalTime(); NullableDateTime nextFireTimeUtc; nextFireTimeUtc = yearlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value); // Test monthly NthIncludedDayTrigger monthlyTrigger = new NthIncludedDayTrigger(); monthlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly; monthlyTrigger.StartTimeUtc = startCalendar; monthlyTrigger.N = 5; monthlyTrigger.FireAtTime = "14:35:15"; targetCalendar = new DateTime(2005, 6, 5, 14, 35, 15).ToUniversalTime(); nextFireTimeUtc = monthlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value); // Test weekly NthIncludedDayTrigger weeklyTrigger = new NthIncludedDayTrigger(); weeklyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; weeklyTrigger.StartTimeUtc = startCalendar; weeklyTrigger.N = 3; weeklyTrigger.FireAtTime = "14:35:15"; //roll start date forward to first day of the next week while (startCalendar.DayOfWeek != DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek) { startCalendar = startCalendar.AddDays(1); } //calculate expected fire date targetCalendar = new DateTime(startCalendar.Year, startCalendar.Month, startCalendar.Day, 14, 35, 15); //first day of the week counts as one. add two more to get N=3. targetCalendar = targetCalendar.AddDays(2); nextFireTimeUtc = weeklyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar.ToUniversalTime(), nextFireTimeUtc.Value); }
public void TestGetFireTimeAfter() { DateTimeOffset startCalendar = new DateTime(2005, 6, 1, 9, 30, 17); // Test yearly NthIncludedDayTrigger yearlyTrigger = new NthIncludedDayTrigger(); yearlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeYearly; yearlyTrigger.StartTimeUtc = startCalendar; yearlyTrigger.N = 10; yearlyTrigger.FireAtTime = "14:35:15"; DateTimeOffset targetCalendar = new DateTime(2006, 1, 10, 14, 35, 15).ToUniversalTime(); DateTimeOffset? nextFireTimeUtc; nextFireTimeUtc = yearlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value); // Test monthly NthIncludedDayTrigger monthlyTrigger = new NthIncludedDayTrigger(); monthlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly; monthlyTrigger.StartTimeUtc = startCalendar; monthlyTrigger.N = 5; monthlyTrigger.FireAtTime = "14:35:15"; targetCalendar = new DateTime(2005, 6, 5, 14, 35, 15).ToUniversalTime(); nextFireTimeUtc = monthlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value); // Test weekly NthIncludedDayTrigger weeklyTrigger = new NthIncludedDayTrigger(); weeklyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; weeklyTrigger.StartTimeUtc = startCalendar; weeklyTrigger.N = 3; weeklyTrigger.FireAtTime = "14:35:15"; //roll start date forward to first day of the next week while (startCalendar.DayOfWeek != DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek) { startCalendar = startCalendar.AddDays(1); } //calculate expected fire date targetCalendar = new DateTime(startCalendar.Year, startCalendar.Month, startCalendar.Day, 14, 35, 15); //first day of the week counts as one. add two more to get N=3. targetCalendar = targetCalendar.AddDays(2); nextFireTimeUtc = weeklyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000)); Assert.AreEqual(targetCalendar.ToUniversalTime(), nextFireTimeUtc.Value); }
/// <summary> /// Get the object to serialize when generating serialized file for future /// tests, and against which to validate deserialized object. /// </summary> /// <returns></returns> protected override object GetTargetObject() { DateTime startTime = new DateTime(2005, 6, 1, 11, 30, 0); NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = (NthIncludedDayTrigger.IntervalTypeMonthly); t.N = 3; t.StartTimeUtc = (startTime); t.FireAtTime = ("12:15"); t.NextFireCutoffInterval = (13); return(t); }
/// <summary> /// Verify that the target object and the object we just deserialized /// match. /// </summary> /// <param name="target"></param> /// <param name="deserialized"></param> protected override void VerifyMatch(object target, object deserialized) { NthIncludedDayTrigger targetTrigger = (NthIncludedDayTrigger)target; NthIncludedDayTrigger deserializedTrigger = (NthIncludedDayTrigger)deserialized; Assert.IsNotNull(deserializedTrigger); Assert.AreEqual(targetTrigger.Name, deserializedTrigger.Name); Assert.AreEqual(targetTrigger.Group, deserializedTrigger.Group); Assert.AreEqual(targetTrigger.IntervalType, deserializedTrigger.IntervalType); Assert.AreEqual(targetTrigger.N, deserializedTrigger.N); Assert.AreEqual(targetTrigger.StartTimeUtc, deserializedTrigger.StartTimeUtc); Assert.IsNull(targetTrigger.EndTimeUtc); Assert.AreEqual(targetTrigger.FireAtTime, deserializedTrigger.FireAtTime); Assert.AreEqual(targetTrigger.NextFireCutoffInterval, deserializedTrigger.NextFireCutoffInterval); // Assert.AreEqual(TimeZone.getDefault(), deserializedTrigger.getTimeZone()); }
static IOperableTrigger CreateTriggerCore(this IXpandJobTrigger jobTrigger, Type jobType) { IOperableTrigger trigger = null; if (jobTrigger is IXpandSimpleTrigger) { trigger = new SimpleTriggerImpl(jobTrigger.Name, jobType.FullName); } if (jobTrigger is IXpandCronTrigger) { trigger = new CronTriggerImpl(jobTrigger.Name, jobType.FullName); } if (jobTrigger is INthIncludedDayTrigger) { trigger = new NthIncludedDayTrigger(jobTrigger.Name, jobType.FullName); } if (trigger != null) { return(trigger); } throw new NotImplementedException(jobTrigger.GetType().FullName); }
public UpdatePublicDomainJob() { Trigger = new NthIncludedDayTrigger( new NthIncludedDaySettings { ScheduleType = ScheduleType.Daily, DailySettings = new DailySettings() { EveryDay = 1, OnlyWorkDays = false }, StartDate = DateTime.Today.AddMinutes(10), OvertimeToRun = TimeSpan.FromDays(1) }, Locator.GetService <IProductionCalendarService>().GetGlobalProductionSchedule()) { Name = "Триггер запуска обновления списка публичных доменов", Id = new Guid("01B49D04-342E-46C2-86F9-EC8445740856") }; Jobs = new List <IJob> { new JobImpl() }; }
public void TestSetGetFireAtTime() { NthIncludedDayTrigger trigger = new NthIncludedDayTrigger(); // Make sure a bad fire at time doesn't reset fire time trigger.FireAtTime = "14:30:10"; try { trigger.FireAtTime = "blah"; Assert.Fail(); } catch (ArgumentException) { } Assert.AreEqual("14:30:10", trigger.FireAtTime); trigger.FireAtTime = "4:03:15"; Assert.AreEqual("04:03:15", trigger.FireAtTime); try { trigger.FireAtTime = "4:3"; Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("4:3:15"); Assert.Fail(); } catch (ArgumentException) { } trigger.FireAtTime = ("23:17"); Assert.AreEqual("23:17:00", trigger.FireAtTime); try { trigger.FireAtTime = ("24:3:15"); Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("-1:3:15"); Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("23:60:15"); Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("23:-1:15"); Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("23:17:60"); Assert.Fail(); } catch (ArgumentException) { } try { trigger.FireAtTime = ("23:17:-1"); Assert.Fail(); } catch (ArgumentException) { } }
private void RunAdoJobStoreTest(string dbProvider, string connectionStringId, NameValueCollection extraProperties) { 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"] = "10"; properties["quartz.threadPool.threadPriority"] = "Normal"; properties["quartz.jobStore.misfireThreshold"] = "60000"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"; properties["quartz.jobStore.useProperties"] = "false"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.jobStore.clustered"] = clustered.ToString(); if (extraProperties != null) { foreach (string key in extraProperties.Keys) { properties[key] = extraProperties[key]; } } if (connectionStringId == "SQLServer" || connectionStringId == "SQLite") { // if running MS SQL Server we need this properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; } string connectionString; if (!dbConnectionStrings.TryGetValue(connectionStringId, out connectionString)) { throw new Exception("Unknown connection string id: " + connectionStringId); } properties["quartz.dataSource.default.connectionString"] = connectionString; properties["quartz.dataSource.default.provider"] = dbProvider; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); try { if (clearJobs) { CleanUp(sched); } if (scheduleJobs) { ICalendar cronCalendar = new CronCalendar("0/5 * * * * ?"); ICalendar holidayCalendar = new HolidayCalendar(); // QRTZNET-86 ITrigger t = sched.GetTrigger(new TriggerKey("NonExistingTrigger", "NonExistingGroup")); Assert.IsNull(t); AnnualCalendar cal = new AnnualCalendar(); sched.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)); sched.ScheduleJob(jd, calendarsTrigger); // QRTZNET-93 sched.AddCalendar("annualCalendar", cal, true, true); sched.AddCalendar("baseCalendar", new BaseCalendar(), false, true); sched.AddCalendar("cronCalendar", cronCalendar, false, true); sched.AddCalendar("dailyCalendar", new DailyCalendar(DateTime.Now.Date, DateTime.Now.AddMinutes(1)), false, true); sched.AddCalendar("holidayCalendar", holidayCalendar, false, true); sched.AddCalendar("monthlyCalendar", new MonthlyCalendar(), false, true); sched.AddCalendar("weeklyCalendar", new WeeklyCalendar(), false, true); sched.AddCalendar("cronCalendar", cronCalendar, true, true); sched.AddCalendar("holidayCalendar", holidayCalendar, true, true); Assert.IsNotNull(sched.GetCalendar("annualCalendar")); JobDetailImpl lonelyJob = new JobDetailImpl("lonelyJob", "lonelyGroup", typeof(SimpleRecoveryJob)); lonelyJob.Durable = true; lonelyJob.RequestsRecovery = true; sched.AddJob(lonelyJob, false); sched.AddJob(lonelyJob, true); string schedId = sched.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.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); sched.ScheduleJob(job, trigger); // check that trigger was stored ITrigger persisted = sched.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)); sched.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)); sched.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)); sched.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)); sched.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.StartTimeUtc = DateTime.Now.AddMilliseconds(1000); sched.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); NthIncludedDayTrigger nt = new NthIncludedDayTrigger("cron_trig_" + count, schedId); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt.N = 1; sched.ScheduleJob(job, nt); sched.Start(); sched.PauseAll(); sched.ResumeAll(); sched.PauseJob(new JobKey("job_1", schedId)); sched.ResumeJob(new JobKey("job_1", schedId)); sched.PauseJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); Thread.Sleep(1000); sched.ResumeJobs(GroupMatcher <JobKey> .GroupEquals(schedId)); sched.PauseTrigger(new TriggerKey("trig_2", schedId)); sched.ResumeTrigger(new TriggerKey("trig_2", schedId)); sched.PauseTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); Assert.AreEqual(1, sched.GetPausedTriggerGroups().Count); Thread.Sleep(1000); sched.ResumeTriggers(GroupMatcher <TriggerKey> .GroupEquals(schedId)); Thread.Sleep(TimeSpan.FromSeconds(20)); sched.Standby(); CollectionAssert.IsNotEmpty(sched.GetCalendarNames()); CollectionAssert.IsNotEmpty(sched.GetJobKeys(GroupMatcher <JobKey> .GroupEquals(schedId))); CollectionAssert.IsNotEmpty(sched.GetTriggersOfJob(new JobKey("job_2", schedId))); Assert.IsNotNull(sched.GetJobDetail(new JobKey("job_2", schedId))); sched.DeleteCalendar("cronCalendar"); sched.DeleteCalendar("holidayCalendar"); sched.DeleteJob(new JobKey("lonelyJob", "lonelyGroup")); } } finally { sched.Shutdown(false); } }
public void TestTimeZone() { TimeZone GMT = TimeZone.FindSystemTimeZoneById("GMT Standard Time"); TimeZone EST = TimeZone.FindSystemTimeZoneById("Eastern Standard Time"); // Calendar startTime = Calendar.getInstance(EST); var startTime = new DateTime(2006, 3, 7, 7, 0, 0, DateTimeKind.Utc); startTime = TimeZone.ConvertTimeFromUtc(startTime, EST); // Same timezone { NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; t.N = 3; t.StartTimeUtc = startTime.ToUniversalTime(); t.FireAtTime = "8:00"; t.TimeZone = EST; DateTime?firstTime = t.ComputeFirstFireTimeUtc(null); // Calendar firstTimeCal = Calendar.getInstance(EST); DateTime firstTimeCal = new DateTime(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0, DateTimeKind.Utc); firstTimeCal = TimeZone.ConvertTimeFromUtc(firstTimeCal, EST); //roll start date forward to first day of the next week while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek) { firstTimeCal = firstTimeCal.AddDays(-1); } //first day of the week counts as one. add two more to get N=3. firstTimeCal = firstTimeCal.AddDays(2); //if we went back too far, shift forward a week. if (firstTimeCal < startTime) { firstTimeCal = firstTimeCal.AddDays(7); } Assert.AreEqual(firstTime, firstTimeCal); } // Different timezones { NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; t.N = 3; t.StartTimeUtc = startTime; t.FireAtTime = "8:00"; t.TimeZone = GMT; DateTime?firstTime = t.ComputeFirstFireTimeUtc(null); // Calendar firstTimeCal = Calendar.getInstance(EST); DateTime firstTimeCal = new DateTime(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0); //EST is GMT-5 firstTimeCal.AddHours(-5); //roll start date forward to first day of the next week while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek) { firstTimeCal = firstTimeCal.AddDays(-1); } //first day of the week counts as one. add two more to get N=3. firstTimeCal = firstTimeCal.AddDays(2); //if we went back too far, shift forward a week. if (firstTimeCal < startTime) { firstTimeCal = firstTimeCal.AddDays(7); } Assert.AreEqual(firstTime, firstTimeCal); } }
private void RunAdoJobStoreTest(string dbProvider, string connectionStringId, NameValueCollection extraProperties) { 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"] = "10"; properties["quartz.threadPool.threadPriority"] = "Normal"; properties["quartz.jobStore.misfireThreshold"] = "60000"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"; properties["quartz.jobStore.useProperties"] = "false"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.jobStore.clustered"] = clustered.ToString(); if (extraProperties != null) { foreach (string key in extraProperties.Keys) { properties[key] = extraProperties[key]; } } if (connectionStringId == "SQLServer" || connectionStringId == "SQLite") { // if running MS SQL Server we need this properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; } string connectionString; if (!dbConnectionStrings.TryGetValue(connectionStringId, out connectionString)) { throw new Exception("Unknown connection string id: " + connectionStringId); } properties["quartz.dataSource.default.connectionString"] = connectionString; properties["quartz.dataSource.default.provider"] = dbProvider; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); try { if (clearJobs) { CleanUp(sched); } if (scheduleJobs) { ICalendar cronCalendar = new CronCalendar("0/5 * * * * ?"); ICalendar holidayCalendar = new HolidayCalendar(); // QRTZNET-86 ITrigger t = sched.GetTrigger(new TriggerKey("NonExistingTrigger", "NonExistingGroup")); Assert.IsNull(t); AnnualCalendar cal = new AnnualCalendar(); sched.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)); sched.ScheduleJob(jd, calendarsTrigger); // QRTZNET-93 sched.AddCalendar("annualCalendar", cal, true, true); sched.AddCalendar("baseCalendar", new BaseCalendar(), false, true); sched.AddCalendar("cronCalendar", cronCalendar, false, true); sched.AddCalendar("dailyCalendar", new DailyCalendar(DateTime.Now.Date, DateTime.Now.AddMinutes(1)), false, true); sched.AddCalendar("holidayCalendar", holidayCalendar, false, true); sched.AddCalendar("monthlyCalendar", new MonthlyCalendar(), false, true); sched.AddCalendar("weeklyCalendar", new WeeklyCalendar(), false, true); sched.AddCalendar("cronCalendar", cronCalendar, true, true); sched.AddCalendar("holidayCalendar", holidayCalendar, true, true); Assert.IsNotNull(sched.GetCalendar("annualCalendar")); JobDetailImpl lonelyJob = new JobDetailImpl("lonelyJob", "lonelyGroup", typeof(SimpleRecoveryJob)); lonelyJob.Durable = true; lonelyJob.RequestsRecovery = true; sched.AddJob(lonelyJob, false); sched.AddJob(lonelyJob, true); string schedId = sched.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.StartTimeUtc = DateTime.Now.AddMilliseconds(1000L); sched.ScheduleJob(job, trigger); // check that trigger was stored ITrigger persisted = sched.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)); sched.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)); sched.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)); sched.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)); sched.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.StartTimeUtc = DateTime.Now.AddMilliseconds(1000); sched.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); NthIncludedDayTrigger nt = new NthIncludedDayTrigger("cron_trig_" + count, schedId); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt.N = 1; sched.ScheduleJob(job, nt); sched.Start(); sched.PauseAll(); sched.ResumeAll(); sched.PauseJob(new JobKey("job_1", schedId)); sched.ResumeJob(new JobKey("job_1", schedId)); sched.PauseJobs(GroupMatcher<JobKey>.GroupEquals(schedId)); Thread.Sleep(1000); sched.ResumeJobs(GroupMatcher<JobKey>.GroupEquals(schedId)); sched.PauseTrigger(new TriggerKey("trig_2", schedId)); sched.ResumeTrigger(new TriggerKey("trig_2", schedId)); sched.PauseTriggers(GroupMatcher<TriggerKey>.GroupEquals(schedId)); Assert.AreEqual(1, sched.GetPausedTriggerGroups().Count); Thread.Sleep(1000); sched.ResumeTriggers(GroupMatcher<TriggerKey>.GroupEquals(schedId)); Thread.Sleep(TimeSpan.FromSeconds(20)); sched.Standby(); CollectionAssert.IsNotEmpty(sched.GetCalendarNames()); CollectionAssert.IsNotEmpty(sched.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(schedId))); CollectionAssert.IsNotEmpty(sched.GetTriggersOfJob(new JobKey("job_2", schedId))); Assert.IsNotNull(sched.GetJobDetail(new JobKey("job_2", schedId))); sched.DeleteCalendar("cronCalendar"); sched.DeleteCalendar("holidayCalendar"); sched.DeleteJob(new JobKey("lonelyJob", "lonelyGroup")); } } finally { sched.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); NthIncludedDayTrigger nt = new NthIncludedDayTrigger("nth_trig_" + count, schedId); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt.N = 1; scheduler.ScheduleJob(job, nt); 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 IDictionary<IJobDetail, IList<ITrigger>> info = new Dictionary<IJobDetail, IList<ITrigger>>(); IJobDetail detail = new JobDetailImpl("job_" + count, schedId, typeof(SimpleRecoveryJob)); ITrigger simple = new SimpleTriggerImpl("trig_" + count, schedId, 20, TimeSpan.FromMilliseconds(4500)); List<ITrigger> triggers = new List<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); } }
/// <summary> /// Get the object to serialize when generating serialized file for future /// tests, and against which to validate deserialized object. /// </summary> /// <returns></returns> protected override object GetTargetObject() { DateTime startTime = new DateTime(2005, 6, 1, 11, 30, 0); NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = (NthIncludedDayTrigger.IntervalTypeMonthly); t.N = 3; t.StartTimeUtc = (startTime); t.FireAtTime = ("12:15"); t.NextFireCutoffInterval = (13); return t; }
public void TestTimeZone() { TimeZoneInfo GMT = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); TimeZoneInfo EST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); // Calendar startTime = Calendar.getInstance(EST); var startTime = new DateTime(2006, 3, 7, 7, 0, 0, DateTimeKind.Utc); startTime = TimeZoneInfo.ConvertTimeFromUtc(startTime, EST); // Same timezone { NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; t.N = 3; t.StartTimeUtc = startTime.ToUniversalTime(); t.FireAtTime = "8:00"; t.TimeZone = EST; DateTimeOffset? firstTime = t.ComputeFirstFireTimeUtc(null); // Calendar firstTimeCal = Calendar.getInstance(EST); DateTime firstTimeCal = new DateTime(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0, DateTimeKind.Utc); firstTimeCal = TimeZoneInfo.ConvertTimeFromUtc(firstTimeCal, EST); //roll start date forward to first day of the next week while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek) { firstTimeCal = firstTimeCal.AddDays(-1); } //first day of the week counts as one. add two more to get N=3. firstTimeCal = firstTimeCal.AddDays(2); //if we went back too far, shift forward a week. if (firstTimeCal < startTime) { firstTimeCal = firstTimeCal.AddDays(7); } Assert.AreEqual(firstTime, firstTimeCal); } // Different timezones { NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group"); t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly; t.N = 3; t.StartTimeUtc = startTime; t.FireAtTime = "8:00"; t.TimeZone = GMT; DateTimeOffset? firstTime = t.ComputeFirstFireTimeUtc(null); // Calendar firstTimeCal = Calendar.getInstance(EST); DateTimeOffset firstTimeCal = new DateTimeOffset(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0, TimeSpan.Zero); //EST is GMT-5 firstTimeCal.AddHours(-5); //roll start date forward to first day of the next week while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek) { firstTimeCal = firstTimeCal.AddDays(-1); } //first day of the week counts as one. add two more to get N=3. firstTimeCal = firstTimeCal.AddDays(2); //if we went back too far, shift forward a week. if (firstTimeCal < startTime) { firstTimeCal = firstTimeCal.AddDays(7); } Assert.AreEqual(firstTime, firstTimeCal); } }
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); NthIncludedDayTrigger nt = new NthIncludedDayTrigger("nth_trig_" + count, schedId); nt.StartTimeUtc = DateTime.Now.Date.AddMilliseconds(1000); nt.N = 1; scheduler.ScheduleJob(job, nt); 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); } }