@Test public void testMonthlyTriggerInShortMonth() throws Exception { CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone); calendar.set(Calendar.MONTH, 9); calendar.set(Calendar.DAY_OF_MONTH, 30); Date date = calendar.getTime(); calendar.set(Calendar.MONTH, 10); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testMonthlyTriggerInLongMonth() throws Exception { CronTrigger trigger = new CronTrigger("0 0 0 31 * *", timeZone); calendar.set(Calendar.MONTH, 9); calendar.set(Calendar.DAY_OF_MONTH, 30); Date date = calendar.getTime(); calendar.set(Calendar.DAY_OF_MONTH, 31); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementDayOfMonthByOne() throws Exception { CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone); calendar.set(Calendar.DAY_OF_MONTH, 9); Date date = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementDayOfMonthAndRollover() throws Exception { CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone); calendar.set(Calendar.DAY_OF_MONTH, 11); Date date = calendar.getTime(); calendar.add(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_MONTH, 10); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementSecondWithPreviousExecutionTooEarly() throws Exception { CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone); calendar.set(Calendar.SECOND, 11); SimpleTriggerContext context = new SimpleTriggerContext(); context.update(calendar.getTime(), new Date(calendar.getTimeInMillis() - 100), new Date(calendar.getTimeInMillis() - 90)); calendar.add(Calendar.MINUTE, 1); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testSpecificHourSecond() throws Exception { CronTrigger trigger = new CronTrigger("55 * 10 * * *", timeZone); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.SECOND, 54); Date date = calendar.getTime(); TriggerContext context1 = getTriggerContext(date); calendar.add(Calendar.HOUR_OF_DAY, 1); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 55); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context1)); calendar.add(Calendar.MINUTE, 1); TriggerContext context2 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context2)); }
@Test public void testIncrementMinuteByOne() throws Exception { CronTrigger trigger = new CronTrigger("0 11 * * * *", timeZone); calendar.set(Calendar.MINUTE, 10); TriggerContext context = getTriggerContext(calendar.getTime()); calendar.add(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 0); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test(expected = IllegalArgumentException.class) public void testNonExistentSpecificDate() throws Exception { // TODO: maybe try and detect this as a special case in parser? CronTrigger trigger = new CronTrigger("0 0 0 31 6 *", timeZone); calendar.set(Calendar.DAY_OF_MONTH, 10); calendar.set(Calendar.MONTH, 2); Date date = calendar.getTime(); TriggerContext context1 = getTriggerContext(date); trigger.nextExecutionTime(context1); // new CronTrigger("0 0 0 30 1 ?", timeZone); }
@Test public void testDailyTriggerOnDaylightSavingBoundary() throws Exception { CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone); calendar.set(Calendar.MONTH, 9); // October: 31 days and a daylight saving boundary in CET calendar.set(Calendar.DAY_OF_MONTH, 30); Date date = calendar.getTime(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_MONTH, 31); TriggerContext context1 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context1)); calendar.set(Calendar.MONTH, 10); // November calendar.set(Calendar.DAY_OF_MONTH, 1); TriggerContext context2 = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context2)); }
@Test public void testIncrementDayOfWeekByOne() throws Exception { CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone); calendar.set(Calendar.DAY_OF_WEEK, 2); Date date = calendar.getTime(); calendar.add(Calendar.DAY_OF_WEEK, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); assertEquals(Calendar.TUESDAY, calendar.get(Calendar.DAY_OF_WEEK)); }
@Test public void testIncrementMinuteAndRollover() throws Exception { CronTrigger trigger = new CronTrigger("0 10 * * * *", timeZone); calendar.set(Calendar.MINUTE, 11); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); calendar.add(Calendar.MINUTE, 59); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testSpecificMinuteSecond() throws Exception { CronTrigger trigger = new CronTrigger("55 5 * * * *", timeZone); calendar.set(Calendar.MINUTE, 4); calendar.set(Calendar.SECOND, 54); Date date = calendar.getTime(); TriggerContext context1 = getTriggerContext(date); calendar.add(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 55); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context1)); calendar.add(Calendar.HOUR, 1); TriggerContext context2 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context2)); }
@Test public void testSpecificDayOfMonthSecond() throws Exception { CronTrigger trigger = new CronTrigger("55 * * 3 * *", timeZone); calendar.set(Calendar.DAY_OF_MONTH, 2); calendar.set(Calendar.SECOND, 54); Date date = calendar.getTime(); TriggerContext context1 = getTriggerContext(date); calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 55); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context1)); calendar.add(Calendar.MINUTE, 1); TriggerContext context2 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context2)); }
@Test public void testSpecificMinuteHour() throws Exception { CronTrigger trigger = new CronTrigger("* 5 10 * * *", timeZone); calendar.set(Calendar.MINUTE, 4); calendar.set(Calendar.HOUR_OF_DAY, 9); Date date = calendar.getTime(); calendar.add(Calendar.MINUTE, 1); calendar.add(Calendar.HOUR_OF_DAY, 1); calendar.set(Calendar.SECOND, 0); TriggerContext context1 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context1)); // next trigger is in one second because second is wildcard calendar.add(Calendar.SECOND, 1); TriggerContext context2 = getTriggerContext(date); assertEquals(calendar.getTime(), date = trigger.nextExecutionTime(context2)); }
private void assertMatchesNextSecond(CronTrigger trigger, Calendar calendar) { Date date = calendar.getTime(); roundup(calendar); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementDayOfWeekAndRollover() throws Exception { CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone); calendar.set(Calendar.DAY_OF_WEEK, 4); Date date = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH, 6); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); assertEquals(Calendar.TUESDAY, calendar.get(Calendar.DAY_OF_WEEK)); }
@Test public void testIncrementSecondAndRollover() throws Exception { CronTrigger trigger = new CronTrigger("10 * * * * *", timeZone); calendar.set(Calendar.SECOND, 11); Date date = calendar.getTime(); calendar.add(Calendar.SECOND, 59); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementSecondByOne() throws Exception { CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone); calendar.set(Calendar.SECOND, 10); Date date = calendar.getTime(); calendar.add(Calendar.SECOND, 1); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Test public void testIncrementMinute() throws Exception { CronTrigger trigger = new CronTrigger("0 * * * * *", timeZone); calendar.set(Calendar.MINUTE, 10); Date date = calendar.getTime(); calendar.add(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 0); TriggerContext context1 = getTriggerContext(date); date = trigger.nextExecutionTime(context1); assertEquals(calendar.getTime(), date); calendar.add(Calendar.MINUTE, 1); TriggerContext context2 = getTriggerContext(date); date = trigger.nextExecutionTime(context2); assertEquals(calendar.getTime(), date); }
@Test public void testMatchAll() throws Exception { CronTrigger trigger = new CronTrigger("* * * * * *", timeZone); TriggerContext context = getTriggerContext(date); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }