/* * (c) Rob Gordon 2005 */ package org.oddjob.schedules.schedules; import java.text.ParseException; import java.util.Date; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.oddjob.OddjobSessionFactory; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.ArooaSession; import org.oddjob.arooa.standard.StandardFragmentParser; import org.oddjob.arooa.utils.DateHelper; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.schedules.Interval; import org.oddjob.schedules.IntervalTo; import org.oddjob.schedules.Schedule; import org.oddjob.schedules.ScheduleContext; import org.oddjob.schedules.ScheduleResult; import org.oddjob.schedules.ScheduleRoller; import org.oddjob.schedules.SimpleInterval; import org.oddjob.schedules.SimpleScheduleResult; import org.oddjob.tools.OddjobTestHelper; /** * */ public class CountScheduleTest extends TestCase { private static class Counter implements Schedule { int count; public IntervalTo nextDue(ScheduleContext context) { count++; return new IntervalTo(new Date(0)); } } public void testCount() { CountSchedule test = new CountSchedule(); test.setCount(3); Counter counter = new Counter(); test.setRefinement(counter); Interval nextDue = null; ScheduleContext context = new ScheduleContext(new Date()); do { context = context.move( new Date(context.getDate().getTime() + 1)); nextDue = test.nextDue(context); } while (nextDue != null); assertEquals(3, counter.count); nextDue = test.nextDue(context); assertEquals(null, nextDue); } public void testWithParentInterval() throws ParseException { CountSchedule test = new CountSchedule(); test.setCount(3); Counter counter = new Counter(); test.setRefinement(counter); Interval nextDue = null; ScheduleContext context = new ScheduleContext(new Date()); context = context.spawn(new SimpleInterval( DateHelper.parseDateTime("2011-04-12 00:00"), DateHelper.parseDateTime("2011-04-13 00:00"))); do { nextDue = test.nextDue(context); } while (nextDue != null); assertEquals(3, counter.count); context = context.spawn(new SimpleInterval( DateHelper.parseDateTime("2011-04-13 00:00"), DateHelper.parseDateTime("2011-04-14 00:00"))); do { nextDue = test.nextDue(context); } while (nextDue != null); assertEquals(6, counter.count); } public void testHowManyNextDues() { int count = 0; CountSchedule test = new CountSchedule(3); ScheduleContext context = new ScheduleContext(new Date()); while (test.nextDue(context) != null) { context = context.move(new Date( context.getDate().getTime() + 1)); ++count; } assertEquals(3, count); } /** * Test that a CountSchedule can be serialized. * * @throws Exception */ public void testSerialize() throws Exception { CountSchedule test = new CountSchedule(); test.setCount(1); Date now = new Date(); Map<Object, Object> map = new HashMap<Object, Object>(); ScheduleContext context = new ScheduleContext( now, null, map); Interval interval = test.nextDue(context); assertNotNull(interval); Schedule copy = (Schedule) OddjobTestHelper.copy(test); context = new ScheduleContext( new Date(now.getTime() + 1), null, map); interval = copy.nextDue(context); assertEquals(null, interval); } public void testCountExample() throws ArooaParseException, ParseException { ArooaSession session = new OddjobSessionFactory().createSession(); StandardFragmentParser parser = new StandardFragmentParser(session); parser.parse(new XMLConfiguration( "org/oddjob/schedules/schedules/CountExample.xml", getClass().getClassLoader())); Schedule schedule = (Schedule) parser.getRoot(); Interval[] results = new ScheduleRoller(schedule).resultsFrom( DateHelper.parseDateTime("2011-04-12 11:00")); ScheduleResult expected; expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:00"), DateHelper.parseDateTime("2011-04-12 11:15"))); assertEquals(expected, results[0]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:15"), DateHelper.parseDateTime("2011-04-12 11:30"))); assertEquals(expected, results[1]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:30"), DateHelper.parseDateTime("2011-04-12 11:45"))); assertEquals(expected, results[2]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:45"), DateHelper.parseDateTime("2011-04-12 12:00"))); assertEquals(expected, results[3]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 12:00"), DateHelper.parseDateTime("2011-04-12 12:15"))); assertEquals(expected, results[4]); expected = null; assertEquals(expected, results[5]); } public void testCountDaily() throws ArooaParseException, ParseException { ArooaSession session = new OddjobSessionFactory().createSession(); StandardFragmentParser parser = new StandardFragmentParser(session); parser.parse(new XMLConfiguration( "org/oddjob/schedules/schedules/CountDaily.xml", getClass().getClassLoader())); Schedule schedule = (Schedule) parser.getRoot(); Interval[] results = new ScheduleRoller(schedule, 100).resultsFrom( DateHelper.parseDateTime("2011-04-12 11:00")); ScheduleResult expected; expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:00"), DateHelper.parseDateTime("2011-04-12 11:05"))); assertEquals(expected, results[0]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:05"), DateHelper.parseDateTime("2011-04-12 11:10"))); assertEquals(expected, results[1]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:10"), DateHelper.parseDateTime("2011-04-12 11:15"))); assertEquals(expected, results[2]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-13 11:00"), DateHelper.parseDateTime("2011-04-13 11:05"))); assertEquals(expected, results[3]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-13 11:05"), DateHelper.parseDateTime("2011-04-13 11:10"))); assertEquals(expected, results[4]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-13 11:10"), DateHelper.parseDateTime("2011-04-13 11:15"))); assertEquals(expected, results[5]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-14 11:00"), DateHelper.parseDateTime("2011-04-14 11:05"))); assertEquals(expected, results[6]); } public void testCountDifferentCounts() throws ArooaParseException, ParseException { ArooaSession session = new OddjobSessionFactory().createSession(); StandardFragmentParser parser = new StandardFragmentParser(session); parser.parse(new XMLConfiguration( "org/oddjob/schedules/schedules/CountDifferentCounts.xml", getClass().getClassLoader())); Schedule schedule = (Schedule) parser.getRoot(); Interval[] results = new ScheduleRoller(schedule, 100).resultsFrom( DateHelper.parseDateTime("2011-04-12 11:00")); ScheduleResult expected; expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:00"), DateHelper.parseDateTime("2011-04-12 11:01"))); assertEquals(expected, results[0]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-12 11:01"), DateHelper.parseDateTime("2011-04-12 11:02"))); assertEquals(expected, results[1]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-13 11:00"), DateHelper.parseDateTime("2011-04-13 11:01"))); assertEquals(expected, results[2]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-13 11:01"), DateHelper.parseDateTime("2011-04-13 11:02"))); assertEquals(expected, results[3]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-14 11:00"), DateHelper.parseDateTime("2011-04-14 11:01"))); assertEquals(expected, results[4]); expected = new SimpleScheduleResult( new SimpleInterval( DateHelper.parseDateTime("2011-04-14 11:01"), DateHelper.parseDateTime("2011-04-14 11:02"))); assertEquals(expected, results[5]); expected = null; assertEquals(expected, results[6]); } }