1 4 package org.oddjob.quartz; 5 6 import java.io.ByteArrayInputStream ; 7 import java.io.ByteArrayOutputStream ; 8 import java.io.InputStream ; 9 import java.io.ObjectInputStream ; 10 import java.io.ObjectOutputStream ; 11 import java.util.HashMap ; 12 import java.util.Map ; 13 14 import junit.framework.TestCase; 15 16 import org.oddjob.Oddjob; 17 import org.oddjob.arooa.ArooaConstants; 18 import org.oddjob.arooa.ArooaContext; 19 import org.oddjob.arooa.registry.ComponentRegistry; 20 import org.oddjob.arooa.registry.Path; 21 import org.oddjob.jobs.DummyStateJob; 22 import org.oddjob.jobs.EchoJob; 23 import org.oddjob.jobs.WaitJob; 24 import org.oddjob.persist.PersisterBase; 25 import org.oddjob.schedules.ScheduleList; 26 import org.oddjob.schedules.schedules.CountSchedule; 27 import org.oddjob.schedules.schedules.DateSchedule; 28 import org.oddjob.schedules.schedules.NowSchedule; 29 import org.oddjob.scheduling.OJScheduleInstruction; 30 import org.oddjob.scheduling.ScheduleInstruction; 31 import org.oddjob.state.JobState; 32 import org.oddjob.structural.ChildHelper; 33 import org.oddjob.util.DateHelper; 34 35 38 public class QuartzSchedulerJobTest extends TestCase { 39 40 public void testRegistry() throws Exception { 42 ComponentRegistry cr = new ComponentRegistry(); 43 ArooaContext arooaContext = new ArooaContext(); 44 arooaContext.set(ArooaConstants.COMPONENT_REGISTRY, cr); 45 46 final QuartzSchedulerJob sj = new QuartzSchedulerJob(); 47 sj.setContext(arooaContext); 48 cr.register("sched", sj); 49 50 sj.start(); 51 52 EchoJob j = new EchoJob(); 53 j.setText("Hello World"); 54 55 DateSchedule ds = new DateSchedule(); 56 ds.setOn("25-dec-2020"); 57 OJScheduleInstruction ojsi = new OJScheduleInstruction(); 58 ojsi.setId("foo"); 59 ojsi.setSchedule(ds); 60 ojsi.setJob(j); 61 62 while (!sj.canSchedule(j)) { 63 Thread.yield(); 64 } 65 sj.schedule(ojsi); 66 67 68 Object found = cr.objectForPath(new Path("sched/foo")); 69 assertNotNull(found); 70 71 sj.stop(); 72 } 73 74 public void testInOddjob() { 75 InputStream in = this.getClass().getResourceAsStream("QuartzSchedulerJobTest.xml"); 76 77 Oddjob oj = new Oddjob(); 78 oj.setInput(in); 79 oj.run(); 81 82 86 assertEquals(JobState.COMPLETE, oj.lastJobStateEvent().getJobState()); 87 } 88 89 class MockPersister extends PersisterBase { 90 Map store = new HashMap (); 91 public void persist(String id, Object component) { 92 try { 93 ByteArrayOutputStream os = new ByteArrayOutputStream (); 94 ObjectOutputStream oos = new ObjectOutputStream (os); 95 oos.writeObject(component); 96 byte[] bytes= os.toByteArray(); 97 store.put(id, bytes); 98 } catch (Exception e) { 99 throw new RuntimeException (e); 100 } 101 } 102 public void remove(String id) { 103 store.remove(id); 104 } 105 106 public Object restore(String id) { 107 try { 108 byte[] bytes = (byte[]) store.get(id); 109 if (bytes == null) { 110 return null; 111 } 112 ByteArrayInputStream is = new ByteArrayInputStream (bytes); 113 ObjectInputStream ois = new ObjectInputStream (is); 114 return ois.readObject(); 115 } catch (Exception e) { 116 throw new RuntimeException (e); 117 } 118 } 119 } 120 121 public void testSerialize() throws Exception { 122 DummyStateJob sample = new DummyStateJob(); 123 sample.setDesired("complete"); 124 125 ComponentRegistry cr = new ComponentRegistry(); 126 cr.register("x", sample); 127 128 OJScheduleInstruction ojsi = new OJScheduleInstruction(); 129 130 ScheduleList scheduleList = new ScheduleList(); 131 132 CountSchedule countSchedule = new CountSchedule(); 133 countSchedule.setCount("1"); 134 DateSchedule dateSchedule = new DateSchedule(); 135 dateSchedule.setOn("25-dec-2020"); 136 137 scheduleList.addValueSchedule(countSchedule); 138 scheduleList.addValueSchedule(dateSchedule); 139 140 ojsi.setSchedule(scheduleList); 141 ojsi.setId("s"); 142 ojsi.setJob(sample); 143 144 MockPersister persister = new MockPersister(); 145 146 ArooaContext ac = new ArooaContext(); 147 ac.set(ArooaConstants.COMPONENT_REGISTRY, cr); 148 149 QuartzSchedulerJob scheduler = new QuartzSchedulerJob(); 150 scheduler.setSchedules(new ScheduleInstruction[] { ojsi }); 151 scheduler.setContext(ac); 152 scheduler.setPersister(persister); 153 scheduler.setId("sched"); 154 cr.register("sched", scheduler); 155 156 scheduler.start(); 157 158 WaitJob wait = new WaitJob(); 159 wait.setFor(sample); 160 wait.setState("complete"); 161 wait.run(); 162 163 scheduler.stop(); 164 165 sample.hardReset(); 166 167 scheduler.start(); 168 169 OddjobSchedule ojs = (OddjobSchedule) scheduler.lookup("s"); 170 assertNotNull(ojs); 171 assertEquals(DateHelper.parseDate("25-dec-2020"), ojs.getNextDue()); 172 173 scheduler.stop(); 174 } 175 176 public void testScheduleTwoThings() throws Exception { 178 DummyStateJob sample = new DummyStateJob(); 179 sample.setDesired("complete"); 180 181 QuartzSchedulerJob qs = new QuartzSchedulerJob(); 182 183 OJScheduleInstruction i1 = new OJScheduleInstruction(); 184 i1.setJob(sample); 185 i1.setSchedule(new NowSchedule()); 186 i1.setId("a"); 187 188 OJScheduleInstruction i2 = new OJScheduleInstruction(); 189 i2.setJob(sample); 190 i2.setSchedule(new NowSchedule()); 191 i2.setId("b"); 192 193 qs.setSchedules(new ScheduleInstruction[] { i1, i2 }); 194 qs.start(); 195 196 assertEquals(2, ChildHelper.getChildren(qs).length); 197 198 qs.stop(); 199 200 } 201 } 202 | Popular Tags |