1 4 package org.oddjob.quartz; 5 6 import java.text.SimpleDateFormat ; 7 import java.util.Map ; 8 import java.util.TimeZone ; 9 10 import junit.framework.TestCase; 11 12 import org.apache.commons.beanutils.PropertyUtils; 13 import org.apache.log4j.Logger; 14 import org.oddjob.Helper; 15 import org.oddjob.arooa.ArooaConstants; 16 import org.oddjob.arooa.ArooaContext; 17 import org.oddjob.arooa.registry.ComponentRegistry; 18 import org.oddjob.framework.RunnableWrapper; 19 import org.oddjob.jmx.JMXClientJob; 20 import org.oddjob.jmx.JMXServerJob; 21 import org.oddjob.jobs.DummyStateJob; 22 import org.oddjob.jobs.SequenceJob; 23 import org.oddjob.monitor.model.Describer; 24 import org.oddjob.schedules.schedules.AfterSchedule; 25 import org.oddjob.schedules.schedules.CountSchedule; 26 import org.oddjob.schedules.schedules.DateSchedule; 27 import org.oddjob.schedules.schedules.IntervalSchedule; 28 import org.oddjob.schedules.schedules.TimeSchedule; 29 import org.oddjob.scheduling.OJScheduleInstruction; 30 import org.oddjob.scheduling.ScheduleInstruction; 31 import org.oddjob.state.JobState; 32 import org.oddjob.values.types.MapType; 33 import org.quartz.Job; 34 import org.quartz.JobExecutionContext; 35 import org.quartz.spi.TriggerFiredBundle; 36 37 40 public class OddjobScheduleTest extends TestCase { 41 private static final Logger logger = Logger.getLogger(OddjobScheduleTest.class); 42 43 protected void setUp() { 44 logger.debug("=============== " + getName() + " ==================="); 45 } 46 47 public void testSimpleSchedule() 48 throws Exception { 49 DateSchedule schedule = new DateSchedule(); 50 schedule.setOn("25-dec-2020"); 51 52 class R implements Runnable { 53 public void run() {} 54 } 55 R r = new R(); 56 57 OddjobSchedule ojs = new OddjobSchedule(); 58 ojs.setSchedule(schedule); 59 ojs.setJob((Runnable ) RunnableWrapper.wrapperFor(r)); 60 61 Map description = Describer.describe(ojs); 62 logger.debug(MapType.propertiesFrom(description)); 63 64 MockScheduler ms = new MockScheduler(); 65 ojs.scheduleWith(ms); 66 67 assertEquals(new SimpleDateFormat ("dd-MMM-yyyy").parse("25-dec-2020"), 68 ms.trigger.getStartTime()); 69 assertEquals(new SimpleDateFormat ("dd-MMM-yyyy").parse("25-dec-2020"), 70 ojs.getNextDue()); 71 72 Job j = (Job) ms.jobDetail.getJobClass().newInstance(); 73 TriggerFiredBundle tfb = new TriggerFiredBundle(ms.jobDetail, 74 ms.trigger, null, false, null, null, null, null); 75 JobExecutionContext c = new JobExecutionContext(ms, tfb, j); 76 77 j.execute(c); 78 79 assertNull(ojs.getNextDue()); 80 81 } 82 83 public void testTimeZone() 84 throws Exception { 85 TimeZone.setDefault(TimeZone.getTimeZone("GMT")); 86 DateSchedule schedule = new DateSchedule(); 87 schedule.setOn("21-jun-2020"); 88 TimeSchedule ts = new TimeSchedule(); 89 ts.setOn("10:00"); 90 schedule.addValueSchedule(ts); 91 92 class R implements Runnable { 93 public void run() {} 94 } 95 R r = new R(); 96 97 98 OddjobSchedule ojs = new OddjobSchedule(); 99 ojs.setSchedule(schedule); 100 ojs.setJob(r); 101 ojs.setTimeZone("GMT+8"); 102 103 MockScheduler ms = new MockScheduler(); 104 ojs.scheduleWith(ms); 105 106 assertEquals(new SimpleDateFormat ("dd-MMM-yyyy HH:mm") 107 .parse("21-jun-2020 02:00"), 108 ms.trigger.getStartTime()); 109 assertEquals(new SimpleDateFormat ("dd-MMM-yyyy HH:mm") 110 .parse("21-jun-2020 02:00"), 111 ojs.getNextDue()); 112 113 } 114 115 116 public void testWithScheduler() throws Exception { 117 final QuartzSchedulerJob scheduler = new QuartzSchedulerJob(); 118 119 class R implements Runnable { 120 boolean ran; 121 Exception e; 122 int c; 123 public void run() { 124 ran = true; 125 if (++c == 3) { 126 try { 127 scheduler.stop(); 128 } catch (Exception e) { 129 this.e = e; 130 } 131 } 132 } 133 } 134 R r = new R(); 135 136 OJScheduleInstruction ojs = new OJScheduleInstruction(); 137 138 IntervalSchedule interval = new IntervalSchedule(); 139 interval.setInterval("00:00:02"); 140 AfterSchedule after = new AfterSchedule(); 141 after.setChildSchedule(interval); 142 CountSchedule count = new CountSchedule(); 143 count.setCount("3"); 144 count.setChildSchedule(after); 145 146 ojs.setId("whatever"); 147 ojs.setSchedule(count); 148 ojs.setJob(RunnableWrapper.wrapperFor(r)); 149 150 scheduler.setSchedules(new ScheduleInstruction[] { ojs }); 151 scheduler.start(); 152 153 while (3 != r.c) { 154 try { 155 Thread.sleep(1000); 156 } catch (InterruptedException e) {} 157 } 158 159 assertTrue(r.ran); 160 assertEquals(3, r.c); 161 assertNull(r.e); 162 } 163 164 public void testRemoteJob() throws Exception { 165 Object remote = RunnableWrapper.wrapperFor(new SequenceJob()); 166 167 ComponentRegistry cr = new ComponentRegistry(); 168 ArooaContext ac = new ArooaContext(); 169 ac.set(ArooaConstants.COMPONENT_REGISTRY, cr); 170 cr.register("remote", remote); 171 172 JMXServerJob server = new JMXServerJob(); 174 server.setContext(ac); 175 server.setRoot(remote); 176 server.setUrl("service:jmx:rmi://"); 177 server.start(); 178 179 JMXClientJob client = new JMXClientJob(); 180 client.setUrl(server.getAddress()); 181 client.run(); 182 183 184 OJScheduleInstruction ojs = new OJScheduleInstruction(); 185 186 IntervalSchedule interval = new IntervalSchedule(); 187 interval.setInterval("00:00:02"); 188 CountSchedule count = new CountSchedule(); 189 count.setCount("3"); 190 count.setChildSchedule(interval); 191 192 ojs.setId("whatever"); 193 ojs.setSchedule(count); 194 ojs.setJob(client.lookup("remote")); 195 196 QuartzSchedulerJob scheduler = new QuartzSchedulerJob(); 198 scheduler.setSchedules(new ScheduleInstruction[] { ojs }); 199 200 scheduler.start(); 201 202 while (((OddjobSchedule) scheduler.lookup("whatever")).getNextDue() != null) { 203 try { 204 Thread.sleep(1000); 205 } catch (InterruptedException e) {} 206 } 207 208 scheduler.setLogDump("ignored"); 209 scheduler.stop(); 210 211 client.stop(); 212 server.stop(); 213 214 assertEquals(new Integer (2), PropertyUtils.getProperty(remote, "current")); 215 } 216 217 218 public void testSerialize() throws Exception { 219 DummyStateJob sample = new DummyStateJob(); 221 sample.setDesired("complete"); 222 223 ComponentRegistry cr = new ComponentRegistry(); 224 cr.register("x", sample); 225 226 OddjobSchedule ojs = new OddjobSchedule(); 227 228 IntervalSchedule interval = new IntervalSchedule(); 229 interval.setInterval("00:00:02"); 230 CountSchedule count = new CountSchedule(); 231 count.setCount("3"); 232 count.setChildSchedule(interval); 233 234 ojs.setId("whatever"); 235 ojs.setSchedule(count); 236 ojs.setComponentRegistry(cr); 237 ojs.setJob(sample); 238 239 MockScheduler scheduler = new MockScheduler(); 240 ojs.scheduleWith(scheduler); 241 242 OddjobSchedule copy = (OddjobSchedule) Helper.copy(ojs); 243 244 copy.setComponentRegistry(cr); 245 copy.scheduleWith(scheduler); 246 247 OddjobData ojd = (OddjobData) scheduler.jobDetail.getJobDataMap() 248 .get(OddjobData.ODDJOB_DATA); 249 250 assertEquals(JobState.READY, sample.lastJobStateEvent().getJobState()); 251 ojd.getJob().run(); 252 assertEquals(JobState.COMPLETE, sample.lastJobStateEvent().getJobState()); 253 } 254 } 255 | Popular Tags |