package com.pugh.sockso.music.scheduling; import com.pugh.sockso.Constants; import com.pugh.sockso.Properties; import com.pugh.sockso.StringProperties; import com.pugh.sockso.tests.SocksoTestCase; import java.text.DateFormat; import java.text.SimpleDateFormat; public class CronSchedulerTest extends SocksoTestCase { private Properties p; private Scheduler s; private DateFormat df; @Override public void setUp() { p = new StringProperties(); s = new CronScheduler( p ); df = new SimpleDateFormat( "y-M-d H:m:s" ); } public void testRunningAtAMinutePastEveryHour() throws Exception { p.set( Constants.SCHED_CRON_TAB, "1 * * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 11:01:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 09:01:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:01:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 00:01:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 00:02:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 12:51:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 03:11:00")) ); } public void testRunningAtEveryMinute() throws Exception { p.set( Constants.SCHED_CRON_TAB, "* * * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 11:09:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 09:23:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:59:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 00:00:00")) ); } public void testRunningAtAPeriodOfMinutes() throws Exception { p.set( Constants.SCHED_CRON_TAB, "*/5 * * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 11:05:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 09:20:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 00:55:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 00:02:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 12:51:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 03:11:00")) ); } public void testRunningBetweenPeriodOfMinutes() throws Exception { p.set( Constants.SCHED_CRON_TAB, "1-6 * * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 11:05:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 09:02:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:01:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 00:06:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 00:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 12:07:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 03:11:00")) ); } public void testRunningAtCertainMinutes() throws Exception { p.set( Constants.SCHED_CRON_TAB, "0,1,3,27 * * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 11:01:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 09:03:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:27:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 23:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 00:02:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 12:51:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 03:11:00")) ); } public void testRunningAtHourPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "0 5 * * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-10 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 00:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 12:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-10 03:00:00")) ); } public void testRunningAtDayOfMonthPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "0 5 2 * *" ); assertTrue( s.shouldRunAt(df.parse("2009-10-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-05 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-22 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-10-01 05:00:00")) ); } public void testRunningAtMonthPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "0 5 2 2 *" ); assertTrue( s.shouldRunAt(df.parse("2009-02-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-01-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-03-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-07-02 05:00:00")) ); } public void testRunningAtDayOfWeekPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "* * * * 1" ); assertTrue( s.shouldRunAt(df.parse("2009-12-28 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-27 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-29 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-30 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-31 05:00:00")) ); } public void testRunningOnASundayUsingSeven() throws Exception { p.set( Constants.SCHED_CRON_TAB, "* * * * 7" ); assertTrue( s.shouldRunAt(df.parse("2009-12-27 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-26 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-28 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-29 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-30 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-31 05:00:00")) ); } public void testUsingWordAsDayOfWeekPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "* * * * mon" ); assertTrue( s.shouldRunAt(df.parse("2009-12-28 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-27 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-29 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-30 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-31 05:00:00")) ); } public void testUsingWordAsMonthPartOfSpec() throws Exception { p.set( Constants.SCHED_CRON_TAB, "0 5 2 feb *" ); assertTrue( s.shouldRunAt(df.parse("2009-02-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-12-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-01-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-03-02 05:00:00")) ); assertFalse( s.shouldRunAt(df.parse("2009-07-02 05:00:00")) ); } public void testSpecialContabEntries() throws Exception { p.set( Constants.SCHED_CRON_TAB, "@yearly" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@annually" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@monthly" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-12-01 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@weekly" ); assertTrue( s.shouldRunAt(df.parse("2009-12-27 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-12-20 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@daily" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2010-01-10 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-01-21 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@midnight" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2010-01-10 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-01-21 00:00:00")) ); p.set( Constants.SCHED_CRON_TAB, "@hourly" ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 00:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 15:00:00")) ); assertTrue( s.shouldRunAt(df.parse("2009-01-01 23:00:00")) ); } public void testSpecialCaseForDayOfWeekAndDayOfMonth() throws Exception { // day of month wrong, but day of week ok p.set( Constants.SCHED_CRON_TAB, "0 0 28 * 0" ); assertTrue( s.shouldRunAt(df.parse("2009-12-27 00:00:00")) ); // day of week wrong, but day of month ok p.set( Constants.SCHED_CRON_TAB, "0 0 27 * 1" ); assertTrue( s.shouldRunAt(df.parse("2009-12-27 00:00:00")) ); } public void testFalseReturnedWhenCrontabIsInvalid() { try { p.set( Constants.SCHED_CRON_TAB, "* * * *" ); // only 4 assertFalse( s.shouldRunAt(df.parse("2009-09-09 12:00:00")) ); } catch ( Exception e ) { fail( "Unexpected exception: " +e.getMessage() ); } } }