KickJava   Java API By Example, From Geeks To Geeks.

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


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

4 package org.oddjob.quartz;
5
6 import java.text.SimpleDateFormat JavaDoc;
7 import java.util.Map JavaDoc;
8 import java.util.TimeZone JavaDoc;
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 /**
38  *
39  */

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 JavaDoc {
49         DateSchedule schedule = new DateSchedule();
50         schedule.setOn("25-dec-2020");
51         
52         class R implements Runnable JavaDoc {
53             public void run() {}
54         }
55         R r = new R();
56         
57         OddjobSchedule ojs = new OddjobSchedule();
58         ojs.setSchedule(schedule);
59         ojs.setJob((Runnable JavaDoc) RunnableWrapper.wrapperFor(r));
60         
61         Map JavaDoc 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 JavaDoc("dd-MMM-yyyy").parse("25-dec-2020"),
68                 ms.trigger.getStartTime());
69         assertEquals(new SimpleDateFormat JavaDoc("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 JavaDoc {
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 JavaDoc {
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 JavaDoc("dd-MMM-yyyy HH:mm")
107                 .parse("21-jun-2020 02:00"),
108                 ms.trigger.getStartTime());
109         assertEquals(new SimpleDateFormat JavaDoc("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 JavaDoc {
117         final QuartzSchedulerJob scheduler = new QuartzSchedulerJob();
118         
119         class R implements Runnable JavaDoc {
120             boolean ran;
121             Exception JavaDoc e;
122             int c;
123             public void run() {
124                 ran = true;
125                 if (++c == 3) {
126                     try {
127                         scheduler.stop();
128                     } catch (Exception JavaDoc 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 JavaDoc e) {}
157         }
158         
159         assertTrue(r.ran);
160         assertEquals(3, r.c);
161         assertNull(r.e);
162     }
163     
164     public void testRemoteJob() throws Exception JavaDoc {
165         Object JavaDoc 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         // server
173
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         // schedule
197
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 JavaDoc e) {}
206         }
207         
208         scheduler.setLogDump("ignored");
209         scheduler.stop();
210
211         client.stop();
212         server.stop();
213                 
214         assertEquals(new Integer JavaDoc(2), PropertyUtils.getProperty(remote, "current"));
215     }
216     
217     
218     public void testSerialize() throws Exception JavaDoc {
219         // not serializable job
220
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