KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > jmx > JMXServerJobTest


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

4 package org.oddjob.jmx;
5
6 import java.io.ByteArrayInputStream JavaDoc;
7
8 import junit.framework.TestCase;
9
10 import org.apache.commons.beanutils.DynaBean;
11 import org.apache.log4j.Logger;
12 import org.oddjob.Helper;
13 import org.oddjob.Oddjob;
14 import org.oddjob.Stoppable;
15 import org.oddjob.Structural;
16 import org.oddjob.arooa.ArooaConstants;
17 import org.oddjob.arooa.ArooaContext;
18 import org.oddjob.arooa.registry.ComponentRegistry;
19 import org.oddjob.arooa.registry.Path;
20 import org.oddjob.framework.Service;
21 import org.oddjob.framework.ServiceWrapper;
22 import org.oddjob.jobs.WaitJob;
23 import org.oddjob.state.JobState;
24 import org.oddjob.structural.ChildHelper;
25 import org.oddjob.structural.StructuralListener;
26 import org.xml.sax.helpers.LocatorImpl JavaDoc;
27
28 /**
29  *
30  */

31 public class JMXServerJobTest extends TestCase {
32     private static final Logger logger = Logger.getLogger(JMXServerJobTest.class);
33     
34     protected void setUp() {
35         logger.debug("================= " + getName() + " ==================");
36     }
37     
38     /** Test the Server job starts runs OK. */
39     public void testRun() throws Exception JavaDoc {
40         final JMXServerJob server = new JMXServerJob();
41         server.setRoot(new Object JavaDoc() {
42             public String JavaDoc toString() {
43                 return "test";
44             }
45         });
46         
47         server.setUrl("service:jmx:rmi://");
48         
49         Runnable JavaDoc wrapper = ServiceWrapper.wrapperFor(
50                 Service.serviceFor(server));
51         wrapper.run();
52         
53         ((Stoppable) wrapper).stop();
54         
55         assertEquals(JobState.COMPLETE, Helper.getJobState(wrapper));
56     }
57     
58     public static class Component {
59         public String JavaDoc getFruit() {
60             return "apples";
61         }
62     }
63     
64     /** Test a nested client. */
65     public void testLinkedServers() throws Exception JavaDoc {
66         // server2
67
ComponentRegistry s2CR = new ComponentRegistry();
68         Component comp1 = new Component();
69         s2CR.register("fred", comp1);
70         
71         ArooaContext s2AC = new ArooaContext();
72         s2AC.set(ArooaConstants.COMPONENT_REGISTRY, s2CR);
73         
74         JMXServerJob server2 = new JMXServerJob();
75         server2.setRoot(comp1);
76         server2.setContext(s2AC);
77         server2.setUrl("service:jmx:rmi://");
78         server2.start();
79         
80         // server 1 and client context
81
ComponentRegistry s1CR = new ComponentRegistry();
82         ArooaContext s1AC = new ArooaContext();
83         s1AC.set(ArooaConstants.COMPONENT_REGISTRY, s1CR);
84
85         // client
86
JMXClientJob client = new JMXClientJob();
87         s1CR.register("client", client);
88         client.setContext(s1AC);
89         client.setUrl(server2.getAddress());
90         client.run();
91
92         // server1
93
JMXServerJob server1 = new JMXServerJob();
94         
95         server1.setRoot(client);
96         server1.setUrl("service:jmx:rmi://");
97         server1.start();
98         
99         Object JavaDoc o = s1CR.objectForPath(new Path("client/fred"));
100         assertNotNull(o);
101         DynaBean db = (DynaBean) o;
102         assertEquals("apples", db.get("fruit"));
103         
104         client.stop();
105         server1.stop();
106         server2.stop();
107     }
108     
109     /** Test a nested oddjob.
110      * The sever exports and oddjob which has a node. If the oddjob has id
111      * 'oj' and the node has id 'test' the client should be able to look
112      * up oj/test
113      * */

114     public void testNestedOddjob() throws Exception JavaDoc {
115         final String JavaDoc xml = "<oddjob><echo name='Test' id='echo' text='Hello'/></oddjob>";
116         
117         final Oddjob oj = new Oddjob();
118         
119         ComponentRegistry cr = new ComponentRegistry();
120         cr.register("oj", oj);
121         ArooaContext ac = new ArooaContext();
122         ac.set(ArooaConstants.COMPONENT_REGISTRY, cr);
123         
124         oj.setContext(ac);
125         
126         JMXServerJob server = new JMXServerJob();
127         server.setRoot(oj);
128         server.setContext(ac);
129         server.setUrl("service:jmx:rmi://");
130         server.start();
131         
132         // client
133
JMXClientJob client = new JMXClientJob();
134         client.setUrl(server.getAddress());
135         client.run();
136
137         oj.setInput(new ByteArrayInputStream JavaDoc(xml.getBytes()));
138         oj.run();
139                 
140         Object JavaDoc o = client.lookup("oj");
141         assertNotNull(o);
142                 
143         // will takes time to process child added notifications.
144
while (client.lookup("oj/echo") == null) {
145             try {
146                 Thread.sleep(10000);
147             } catch (Exception JavaDoc e) {}
148             Thread.yield();
149         }
150                 
151         // check we found the right thing.
152
assertNotNull("Test", client.lookup("oj/echo").toString());
153         
154         client.stop();
155         server.stop();
156         
157     }
158     
159     class MyFolder implements Structural {
160         int level;
161         int number;
162         MyFolder(int number, int level) {
163             this.number = number;
164             this.level = level;
165         }
166         ChildHelper childHelper = new ChildHelper(this);
167         public void addStructuralListener(StructuralListener listener) {
168             childHelper.addStructuralListener(listener);
169         }
170         public void removeStructuralListener(StructuralListener listener) {
171             childHelper.removeStructuralListener(listener);
172             
173         }
174         private void addChildren(int number, int levels, int level) {
175             if (levels == 0) {
176                 return;
177             }
178             for (int i = 0; i < number; ++i) {
179                 MyFolder child = new MyFolder(i, level);
180                 childHelper.addChild(child);
181                 child.addChildren(number, levels - 1, level + 1);
182             }
183         }
184         
185         void addChildren(int number, int levels) {
186             addChildren(number, levels, level);
187         }
188         
189         void removeChildren() {
190             childHelper.destroyAll();
191         }
192         public String JavaDoc toString() {
193             return ("[" + number + ", " + level + "]");
194         }
195     }
196     
197     /** Big Structural Test. */
198     public void testLotsOfStructural() throws Exception JavaDoc {
199         
200         MyFolder folder = new MyFolder(0, 0);
201         
202         JMXServerJob server = new JMXServerJob();
203         server.setRoot(folder);
204         server.setUrl("service:jmx:rmi://");
205         server.start();
206
207         // client
208
JMXClientJob client = new JMXClientJob();
209         client.setUrl(server.getAddress());
210         client.run();
211
212         Object JavaDoc proxy = ChildHelper.getChildren(client)[0];
213                 
214         folder.addChildren(5, 3);
215         
216         WaitForChildren w = new WaitForChildren(proxy);
217         w.waitFor(5);
218         
219         folder.removeChildren();
220
221         w.waitFor(0);
222         
223         client.stop();
224         server.stop();
225     }
226     
227     /** Big Structural Test. */
228     public void testDestroyServer() throws Exception JavaDoc {
229         
230         MyFolder folder = new MyFolder(0, 0);
231         folder.addChildren(3, 2);
232                 
233         JMXServerJob server = new JMXServerJob();
234         server.setRoot(folder);
235         server.setUrl("service:jmx:rmi://");
236         server.start();
237         
238         // client
239
JMXClientJob client = new JMXClientJob();
240         client.setUrl(server.getAddress());
241         client.run();
242         
243         Object JavaDoc proxy = ChildHelper.getChildren(client)[0];
244                 
245         WaitForChildren w = new WaitForChildren(proxy);
246         w.waitFor(3);
247         
248         server.stop();
249
250         WaitJob wj = new WaitJob();
251         wj.setState("not complete");
252         wj.setFor(client);
253         wj.run();
254         
255         assertEquals(JobState.NOT_COMPLETE, client.lastJobStateEvent().getJobState());
256     }
257     
258     // test for a bug where the server didn't clear down it's registry so
259
// bouncing a nested Oddjob caused an 'component with that id already exists'
260
// exception.
261
public void testBounceOddjob() throws Exception JavaDoc {
262         final String JavaDoc xml = "<oddjob><echo id='test' text='Hello'/></oddjob>";
263         
264         final Oddjob oj = new Oddjob();
265
266         ComponentRegistry cr = new ComponentRegistry();
267         cr.register("oj", oj);
268         ArooaContext ac = new ArooaContext();
269         ac.set(ArooaConstants.COMPONENT_REGISTRY, cr);
270         // set location so Oddjob thinks it really is a nested oddjob.
271
ac.setLocator(new LocatorImpl JavaDoc());
272         
273         oj.setContext(ac);
274         
275         final JMXServerJob server = new JMXServerJob();
276         server.setContext(ac);
277         server.setRoot(oj);
278         server.setUrl("service:jmx:rmi://");
279         server.start();
280
281         oj.setInput(new ByteArrayInputStream JavaDoc(xml.getBytes()));
282         oj.run();
283         oj.hardReset();
284
285         // run a second time cause the exception I thought.
286
oj.setInput(new ByteArrayInputStream JavaDoc(xml.getBytes()));
287         oj.run();
288         server.stop();
289         assertEquals(JobState.COMPLETE, oj.lastJobStateEvent().getJobState());
290     }
291     
292 }
293
Popular Tags