KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > quartz > QuartzSchedulerJobTest


1 /*
2  * (c) Rob Gordon 2005
3  */

4 package org.oddjob.quartz;
5
6 import java.io.ByteArrayInputStream JavaDoc;
7 import java.io.ByteArrayOutputStream JavaDoc;
8 import java.io.InputStream JavaDoc;
9 import java.io.ObjectInputStream JavaDoc;
10 import java.io.ObjectOutputStream JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.Map JavaDoc;
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 /**
36  *
37  */

38 public class QuartzSchedulerJobTest extends TestCase {
39
40     // test that we can lookup a schedule in a compoennt registry.
41
public void testRegistry() throws Exception JavaDoc {
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 JavaDoc found = cr.objectForPath(new Path("sched/foo"));
69         assertNotNull(found);
70         
71         sj.stop();
72     }
73     
74     public void testInOddjob() {
75         InputStream JavaDoc in = this.getClass().getResourceAsStream("QuartzSchedulerJobTest.xml");
76         
77         Oddjob oj = new Oddjob();
78         oj.setInput(in);
79 // oj.setLoadOnly(true);
80
oj.run();
81         
82 // OddjobExplorer oe = new OddjobExplorer();
83
// oe.setRoot(oj);
84
// oe.run();
85

86         assertEquals(JobState.COMPLETE, oj.lastJobStateEvent().getJobState());
87     }
88
89     class MockPersister extends PersisterBase {
90         Map JavaDoc store = new HashMap JavaDoc();
91         public void persist(String JavaDoc id, Object JavaDoc component) {
92             try {
93                 ByteArrayOutputStream JavaDoc os = new ByteArrayOutputStream JavaDoc();
94                 ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(os);
95                 oos.writeObject(component);
96                 byte[] bytes= os.toByteArray();
97                 store.put(id, bytes);
98             } catch (Exception JavaDoc e) {
99                 throw new RuntimeException JavaDoc(e);
100             }
101         }
102         public void remove(String JavaDoc id) {
103             store.remove(id);
104         }
105         
106         public Object JavaDoc restore(String JavaDoc id) {
107             try {
108                 byte[] bytes = (byte[]) store.get(id);
109                 if (bytes == null) {
110                     return null;
111                 }
112                 ByteArrayInputStream JavaDoc is = new ByteArrayInputStream JavaDoc(bytes);
113                 ObjectInputStream JavaDoc ois = new ObjectInputStream JavaDoc(is);
114                 return ois.readObject();
115             } catch (Exception JavaDoc e) {
116                 throw new RuntimeException JavaDoc(e);
117             }
118         }
119     }
120     
121     public void testSerialize() throws Exception JavaDoc {
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     // a bug hunt
177
public void testScheduleTwoThings() throws Exception JavaDoc {
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