KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > framework > RunnableWrapperTest


1 /*
2  * Copyright (c) 2005, Rob Gordon.
3  */

4 package org.oddjob.framework;
5
6 import java.io.ByteArrayInputStream JavaDoc;
7 import java.util.HashMap JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import junit.framework.TestCase;
11
12 import org.apache.commons.beanutils.PropertyUtils;
13 import org.apache.log4j.Level;
14 import org.apache.log4j.Logger;
15 import org.oddjob.Helper;
16 import org.oddjob.Oddjob;
17 import org.oddjob.Resetable;
18 import org.oddjob.Stateful;
19 import org.oddjob.arooa.ArooaConstants;
20 import org.oddjob.arooa.ArooaContext;
21 import org.oddjob.arooa.ArooaRuntime;
22 import org.oddjob.arooa.Lifecycle;
23 import org.oddjob.arooa.registry.ComponentRegistry;
24 import org.oddjob.arooa.registry.Path;
25 import org.oddjob.logging.Log4jArchiver;
26 import org.oddjob.logging.LogEnabled;
27 import org.oddjob.logging.LogEvent;
28 import org.oddjob.logging.LogLevel;
29 import org.oddjob.logging.LogListener;
30 import org.oddjob.monitor.model.Describer;
31 import org.oddjob.state.JobState;
32 import org.oddjob.state.JobStateEvent;
33 import org.oddjob.state.JobStateListener;
34
35 /**
36  *
37  * @author Rob Gordon.
38  */

39 public class RunnableWrapperTest extends TestCase {
40     
41
42     public static class R implements Runnable JavaDoc {
43         boolean ran;
44         public void run() {
45             ran = true;
46         }
47         public boolean isRan() {
48             return ran;
49         }
50     }
51     
52     public void testGoodRunnable() {
53         R test = new R();
54         Object JavaDoc wrapper = RunnableWrapper.wrapperFor(test);
55         
56         MyListener l = new MyListener();
57         ((Stateful) wrapper).addJobStateListener(l);
58         ((Runnable JavaDoc) wrapper).run();
59         assertTrue(test.ran);
60         assertEquals("JobState", JobState.COMPLETE,
61                 l.lastEvent.getJobState());
62         
63         ((Resetable) wrapper).hardReset();
64         assertEquals("JobState", JobState.READY,
65                 l.lastEvent.getJobState());
66     
67     }
68
69     public void testBadRunnable() {
70         Object JavaDoc wrapper = RunnableWrapper.wrapperFor(
71                 new Runnable JavaDoc() {
72                     public void run() {
73                         throw new RuntimeException JavaDoc("How bad is this!");
74                     }
75                 });
76         MyListener l = new MyListener();
77         ((Stateful) wrapper).addJobStateListener(l);
78         ((Runnable JavaDoc) wrapper).run();
79         assertEquals("JobState", JobState.EXCEPTION,
80                 l.lastEvent.getJobState());
81         ((Resetable) wrapper).softReset();
82         assertEquals("JobState", JobState.READY,
83                 l.lastEvent.getJobState());
84     }
85     
86     class MyListener implements JobStateListener {
87         JobStateEvent lastEvent;
88         public void jobStateChange(JobStateEvent event) {
89             lastEvent = event;
90         }
91     }
92     
93     public void testHashCode() {
94         Object JavaDoc test = RunnableWrapper.wrapperFor(new Runnable JavaDoc() {
95             public void run() {}
96         });
97         
98         HashMap JavaDoc hashMap = new HashMap JavaDoc();
99         hashMap.put(test, "Hello");
100         
101         String JavaDoc result = (String JavaDoc) hashMap.get(test);
102         assertEquals("Hello", result);
103     }
104     
105     public void testEquals() {
106         Object JavaDoc test = RunnableWrapper.wrapperFor(new Runnable JavaDoc() {
107             public void run() {}
108         });
109         assertTrue(test.equals(test));
110         assertEquals(test, test);
111     }
112
113     public static class D implements Runnable JavaDoc {
114         boolean destroyed;
115         public void run() {}
116         public void destroy() { destroyed = true;}
117     }
118     
119     public void testDestroy() {
120         D d = new D();
121         Object JavaDoc test = RunnableWrapper.wrapperFor(d);
122         
123         Lifecycle.destroy(test);
124         assertTrue(d.destroyed);
125     }
126
127     public static class I implements Runnable JavaDoc {
128         boolean init;
129         public void run() {}
130         public void init() { init = true;}
131     }
132     
133     public void testInit() {
134         I i = new I();
135         Object JavaDoc test = RunnableWrapper.wrapperFor(i);
136         
137         Lifecycle.init(test);
138         assertTrue(i.init);
139     }
140     
141     public static class Bean {
142         String JavaDoc greeting;
143         public void setGreeting(String JavaDoc greeting) {
144             this.greeting = greeting;
145         }
146         public String JavaDoc getGreeting() {
147             return greeting;
148         }
149     }
150     
151     public static class Job implements Runnable JavaDoc {
152         public String JavaDoc result;
153         public void run() {
154         }
155         public void setResult(String JavaDoc result) {
156             this.result = result;
157         }
158         public String JavaDoc getResult() {
159             return result;
160         }
161     }
162     
163     public void testConfiguration() throws Exception JavaDoc {
164         ComponentRegistry cr = new ComponentRegistry();
165         cr.register("b", new Bean());
166         
167         PropertyUtils.setProperty(cr.objectForPath(new Path("b")),
168                 "greeting", "hello");
169         
170         ArooaContext ac = new ArooaContext();
171         ac.set(ArooaConstants.COMPONENT_REGISTRY, cr);
172         
173         Job job = new Job();
174         ArooaRuntime runtime = new ArooaRuntime(job, "job", ac);
175         ac.set(ArooaConstants.CURRENTLY_CONFIGURING, runtime);
176         runtime.setAttribute("result", "${b.greeting}");
177         
178         Object JavaDoc wrapper = RunnableWrapper.wrapperFor(job);
179         ((ContextAware) wrapper).setContext(ac);
180         
181         ((Runnable JavaDoc) wrapper).run();
182         
183         assertEquals("hello", PropertyUtils.getProperty(wrapper, "result"));
184         
185         PropertyUtils.setProperty(cr.objectForPath(new Path("b")),
186                 "greeting", "goodbye");
187         
188         ((Resetable) wrapper).hardReset();
189         ((Runnable JavaDoc) wrapper).run();
190         
191         assertEquals("goodbye", PropertyUtils.getProperty(wrapper, "result"));
192     }
193     
194     public void testInOddjob() throws Exception JavaDoc {
195         String JavaDoc xml = "<oddjob><r class='" + R.class.getName() + "' id='r' /></oddjob>";
196         Oddjob oj = new Oddjob();
197         oj.setInput(new ByteArrayInputStream JavaDoc(xml.getBytes()));
198         
199         oj.run();
200         
201         Object JavaDoc r = oj.lookup("r");
202         assertEquals(JobState.COMPLETE, Helper.getJobState(r));
203         Object JavaDoc ran = PropertyUtils.getProperty(r, "ran");
204         assertEquals(Boolean JavaDoc.class, ran.getClass());
205         assertEquals(new Boolean JavaDoc(true), ran);
206     }
207
208     public static class AnyLogger implements Runnable JavaDoc {
209         public void run() {
210             Logger.getLogger("AnyLogger").error("FINDME");
211         }
212     }
213     
214     public void testDefaultLogger() throws Exception JavaDoc {
215         class MyL implements LogListener {
216             StringBuffer JavaDoc messages = new StringBuffer JavaDoc();
217             public void logEvent(LogEvent logEvent) {
218                 messages.append(logEvent.getMessage());
219             }
220         }
221         
222         AnyLogger l = new AnyLogger();
223         
224         Runnable JavaDoc wrapper = RunnableWrapper.wrapperFor(l);
225         
226         Logger.getLogger("AnyLogger").setLevel(Level.DEBUG);
227         Logger.getLogger(((LogEnabled) wrapper).getLogger()).setLevel(Level.DEBUG);
228         
229         Log4jArchiver archiver = new Log4jArchiver(wrapper, "%m%n");
230         
231         MyL ll = new MyL();
232         archiver.addLogListener(ll, wrapper, LogLevel.DEBUG, 0, 1000);
233         
234         wrapper.run();
235         
236         assertTrue(ll.messages.indexOf("FINDME") > 0);
237     }
238     
239     public static class MyLogger implements Runnable JavaDoc {
240         public String JavaDoc getLogger() {
241             return "MyLogger";
242         }
243         public void run() {
244             Logger.getLogger(getLogger()).error("FINDME");
245         }
246     }
247     
248     public void testSpecificLogger() throws Exception JavaDoc {
249         class MyL implements LogListener {
250             StringBuffer JavaDoc messages = new StringBuffer JavaDoc();
251             public void logEvent(LogEvent logEvent) {
252                 messages.append(logEvent.getMessage());
253             }
254         }
255         
256         MyLogger l = new MyLogger();
257         
258         Runnable JavaDoc wrapper = RunnableWrapper.wrapperFor(l);
259         assertEquals("MyLogger", ((LogEnabled) wrapper).getLogger());
260         Logger.getLogger(((LogEnabled) wrapper).getLogger()).setLevel(Level.DEBUG);
261         
262         Log4jArchiver archiver = new Log4jArchiver(wrapper, "%m%n");
263         
264         MyL ll = new MyL();
265         archiver.addLogListener(ll, wrapper, LogLevel.DEBUG, 0, 1000);
266         
267         wrapper.run();
268         
269         assertTrue(ll.messages.indexOf("FINDME") > 0);
270     }
271  
272     public void testDescribe() {
273         Job j = new Job();
274         j.setResult("Hello");
275         
276         Runnable JavaDoc wrapper = RunnableWrapper.wrapperFor(j);
277         Map JavaDoc m = Describer.describe(wrapper);
278         
279         assertEquals("Hello", m.get("result"));
280     }
281     
282 }
283
284
Popular Tags