package au.com.vaadinutils.jasper.scheduler; import static org.junit.Assert.assertTrue; import java.util.Calendar; import java.util.Date; import org.joda.time.DateTime; import org.junit.Test; public class SchedulerTest { @Test public void testOneTimeOnly() { Calendar scheduledTime = Calendar.getInstance(); scheduledTime.add(Calendar.SECOND, -1); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new OneTimeSchedule(scheduledTime.getTime()); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 1); } @Test public void testOneTimePremature() { Calendar scheduledTime = Calendar.getInstance(); scheduledTime.add(Calendar.MINUTE, 1); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new OneTimeSchedule(scheduledTime.getTime()); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 0); } @Test public void testDayOfWeekCorrectDay() throws InterruptedException { DateTime scheduledTime = new DateTime(); // scheduledTime.add(Calendar.SECOND, 3); int day = scheduledTime.getDayOfWeek(); ReportRunner reportRunner = new ReportRunner(); String daysOfWeek = "1," + day + ",5"; ReportEmailSchedule schedule = new DayOfWeekSchedule(scheduledTime.plusSeconds(2).toDate(), daysOfWeek); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); Thread.sleep(2000); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 1); } @Test public void testDayOfWeekCorrectDayBeforeHour() { Calendar scheduledTime = Calendar.getInstance(); scheduledTime.add(Calendar.MINUTE, 1); int day = scheduledTime.get(Calendar.DAY_OF_WEEK); ReportRunner reportRunner = new ReportRunner(); String daysOfWeek = "1," + day + ",5"; ReportEmailSchedule schedule = new DayOfWeekSchedule(scheduledTime.getTime(), daysOfWeek); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 0); } @Test public void testDayOfMonthCorrectDay() { Calendar scheduledTime = Calendar.getInstance(); // scheduledTime.add(Calendar.SECOND, 3); int day = scheduledTime.get(Calendar.DAY_OF_MONTH); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new DayOfMonthSchedule(scheduledTime.getTime(), day); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 1); } @Test public void testDayOfMonthCorrectDayBeforeHour() { Calendar scheduledTime = Calendar.getInstance(); scheduledTime.add(Calendar.MINUTE, 1); System.out.println(new Date()); int day = scheduledTime.get(Calendar.DAY_OF_MONTH); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new DayOfMonthSchedule(scheduledTime.getTime(), day); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 0); } @Test public void testEveryDayCorrectDay() { Calendar scheduledTime = Calendar.getInstance(); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new EveryDaySchedule(scheduledTime.getTime()); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 1); } @Test public void testEveryDayCorrectDaySecondRun() throws InterruptedException { DateTime time = new DateTime(); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new EveryDaySchedule(time.plusSeconds(1).toDate()); schedule.setLastRuntime(time.minusDays(1).toDate(), ""); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); Thread.sleep(2000); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 1); } @Test public void testEveryDayCorrectDayBeforeHour() { Calendar scheduledTime = Calendar.getInstance(); scheduledTime.add(Calendar.MINUTE, 1); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new EveryDaySchedule(scheduledTime.getTime()); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 0); } @Test public void testEveryDayCorrectDaySecondRunWrongHour() { DateTime time = new DateTime(); ReportRunner reportRunner = new ReportRunner(); ReportEmailSchedule schedule = new EveryDaySchedule(time.plusHours(1).toDate()); schedule.setLastRuntime(time.minusDays(1).toDate(), ""); ScheduleProvider scheduleProvider = new ScheduleProvider(new ReportEmailSchedule[] { schedule }); Scheduler scheduler = new Scheduler(scheduleProvider, reportRunner, null, new DBmanagerprovider()); for (int i = 0; i < 5; i++) { scheduler.run(); } assertTrue("invoked " + reportRunner.getInvocations() + " times", reportRunner.getInvocations() == 0); } }