KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > tools > config > ConfigurationLoaderTest


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.mx4j.tools.config;
10
11 import java.io.BufferedReader JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.io.Reader JavaDoc;
14 import java.io.StringReader JavaDoc;
15 import java.net.Socket JavaDoc;
16 import java.util.ArrayList JavaDoc;
17 import java.util.Hashtable JavaDoc;
18
19 import javax.management.MBeanServer JavaDoc;
20 import javax.management.MBeanServerFactory JavaDoc;
21 import javax.management.ObjectName JavaDoc;
22 import javax.naming.Context JavaDoc;
23 import javax.naming.InitialContext JavaDoc;
24 import javax.naming.NamingException JavaDoc;
25
26 import mx4j.tools.config.ConfigurationException;
27 import mx4j.tools.config.ConfigurationLoader;
28 import mx4j.tools.config.DefaultConfigurationBuilder;
29 import test.MX4JTestCase;
30
31 /**
32  * @version $Revision: 1.7 $
33  */

34 public class ConfigurationLoaderTest extends MX4JTestCase
35 {
36    public ConfigurationLoaderTest(String JavaDoc s)
37    {
38       super(s);
39    }
40
41    public void testMalformedXML() throws Exception JavaDoc
42    {
43       MBeanServer JavaDoc server = newMBeanServer();
44       String JavaDoc config =
45               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
46               "<configuration>";
47       ConfigurationLoader loader = new ConfigurationLoader(server);
48       try
49       {
50          loader.startup(new StringReader JavaDoc(config));
51          fail();
52       }
53       catch (ConfigurationException x)
54       {
55       }
56    }
57
58    public void testUnknownElement() throws Exception JavaDoc
59    {
60       MBeanServer JavaDoc server = newMBeanServer();
61       String JavaDoc config =
62               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
63               "<configuration>" +
64               " <dummy />" +
65               "</configuration>";
66       ConfigurationLoader loader = new ConfigurationLoader(server);
67       try
68       {
69          loader.startup(new StringReader JavaDoc(config));
70          fail();
71       }
72       catch (ConfigurationException x)
73       {
74       }
75    }
76
77    public void testEmptyConfiguration() throws Exception JavaDoc
78    {
79       MBeanServer JavaDoc server = newMBeanServer();
80       String JavaDoc config =
81               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
82               "<configuration />";
83       ConfigurationLoader loader = new ConfigurationLoader(server);
84       loader.startup(new StringReader JavaDoc(config));
85    }
86
87    public void testEmptyStartup() throws Exception JavaDoc
88    {
89       MBeanServer JavaDoc server = newMBeanServer();
90       String JavaDoc config =
91               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
92               "<configuration>" +
93               " <startup />" +
94               "</configuration>";
95       ConfigurationLoader loader = new ConfigurationLoader(server);
96       loader.startup(new StringReader JavaDoc(config));
97    }
98
99    public void testEmptyShutdown() throws Exception JavaDoc
100    {
101       MBeanServer JavaDoc server = newMBeanServer();
102       String JavaDoc config =
103               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
104               "<configuration>" +
105               " <shutdown />" +
106               "</configuration>";
107       ConfigurationLoader loader = new ConfigurationLoader(server);
108       loader.startup(new StringReader JavaDoc(config));
109    }
110
111    public void testEmptyShutdownWithSocket() throws Exception JavaDoc
112    {
113       MBeanServer JavaDoc server = newMBeanServer();
114       int port = 8872;
115       String JavaDoc config =
116               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
117               "<configuration port=\"" + port + "\">" +
118               " <shutdown />" +
119               "</configuration>";
120       ConfigurationLoader loader = new ConfigurationLoader(server);
121       loader.startup(new StringReader JavaDoc(config));
122       sleep(1000);
123
124       // Be sure we can connect to the socket
125
Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
126       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
127       socket.close();
128       sleep(2000);
129    }
130
131    public void testEmptyStartupAndShutdown() throws Exception JavaDoc
132    {
133       MBeanServer JavaDoc server = newMBeanServer();
134       String JavaDoc config =
135               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
136               "<configuration>" +
137               " <startup />" +
138               " <shutdown />" +
139               "</configuration>";
140       ConfigurationLoader loader = new ConfigurationLoader(server);
141       loader.startup(new StringReader JavaDoc(config));
142    }
143
144    public void testEmptyStartupAndShutdownWithSocket() throws Exception JavaDoc
145    {
146       MBeanServer JavaDoc server = newMBeanServer();
147       int port = 8872;
148       String JavaDoc config =
149               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
150               "<configuration port=\"" + port + "\">" +
151               " <startup />" +
152               " <shutdown />" +
153               "</configuration>";
154       ConfigurationLoader loader = new ConfigurationLoader(server);
155       loader.startup(new StringReader JavaDoc(config));
156       sleep(1000);
157
158       // Be sure we can connect to the socket
159
Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
160       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
161       socket.close();
162       sleep(2000);
163    }
164
165    public void testWrongShutdownCommand() throws Exception JavaDoc
166    {
167       MBeanServer JavaDoc server = newMBeanServer();
168       int port = 8872;
169       String JavaDoc config =
170               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
171               "<configuration port=\"" + port + "\">" +
172               " <startup />" +
173               " <shutdown />" +
174               "</configuration>";
175       ConfigurationLoader loader = new ConfigurationLoader(server);
176       loader.startup(new StringReader JavaDoc(config));
177       sleep(1000);
178
179       // Be sure we can connect to the socket
180
Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
181       socket.close();
182
183       socket = new Socket JavaDoc((String JavaDoc)null, port);
184       socket.getOutputStream().write("dummy".getBytes());
185       socket.close();
186
187       socket = new Socket JavaDoc((String JavaDoc)null, port);
188       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
189       socket.close();
190
191       sleep(2000);
192
193       try
194       {
195          new Socket JavaDoc((String JavaDoc)null, port);
196          fail();
197       }
198       catch (IOException JavaDoc x)
199       {
200       }
201    }
202
203    public void testConfigurationLoaderAsMBean() throws Exception JavaDoc
204    {
205       MBeanServer JavaDoc server = newMBeanServer();
206       ConfigurationLoader loader = new ConfigurationLoader();
207       ObjectName JavaDoc loaderName = ObjectName.getInstance("configuration:service=loader");
208       server.registerMBean(loader, loaderName);
209
210       int port = 8872;
211       String JavaDoc config =
212               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
213               "<configuration port=\"" + port + "\">" +
214               " <startup />" +
215               " <shutdown />" +
216               "</configuration>";
217       server.invoke(loaderName, "startup", new Object JavaDoc[]{new StringReader JavaDoc(config)}, new String JavaDoc[]{Reader JavaDoc.class.getName()});
218       sleep(1000);
219
220       // Be sure we can connect to the socket
221
Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
222       socket.close();
223
224       // Shutdown via JMX
225
server.invoke(loaderName, "shutdown", null, null);
226
227       sleep(2000);
228
229       try
230       {
231          new Socket JavaDoc((String JavaDoc)null, port);
232          fail();
233       }
234       catch (IOException JavaDoc x)
235       {
236       }
237    }
238
239    public void testCallElementStaticInvocation() throws Exception JavaDoc
240    {
241       MBeanServer JavaDoc server = newMBeanServer();
242       String JavaDoc config =
243               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
244               "<configuration>" +
245               " <startup>" +
246               " <call classname=\"javax.management.MBeanServerFactory\" method=\"createMBeanServer\" />" +
247               " </startup>" +
248               "</configuration>";
249       ConfigurationLoader loader = new ConfigurationLoader(server);
250       loader.startup(new StringReader JavaDoc(config));
251       ArrayList JavaDoc list = MBeanServerFactory.findMBeanServer(null);
252       assertEquals(list.size(), 1);
253       MBeanServerFactory.releaseMBeanServer((MBeanServer JavaDoc)list.get(0));
254    }
255
256    public void testCallElementWithObjectArgument() throws Exception JavaDoc
257    {
258       MBeanServer JavaDoc server = newMBeanServer();
259       String JavaDoc config =
260               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
261               "<configuration>" +
262               " <startup>" +
263               " <object objectid=\"list\">" +
264               " <new classname=\"java.util.ArrayList\" />" +
265               " </object>" +
266               " <call refobjectid=\"list\" method=\"add\">" +
267               " <arg type=\"object\">A String</arg>" +
268               " </call>" +
269               " </startup>" +
270               "</configuration>";
271       ConfigurationLoader loader = new ConfigurationLoader(server);
272       loader.startup(new StringReader JavaDoc(config));
273    }
274
275    public void testCallElementObjectInvocation() throws Exception JavaDoc
276    {
277       MBeanServer JavaDoc server = newMBeanServer();
278       String JavaDoc domain = "test";
279       String JavaDoc config =
280               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
281               "<configuration>" +
282               " <startup>" +
283               " <object objectid=\"url\">" +
284               " <new classname=\"javax.management.remote.JMXServiceURL\">" +
285               " <arg type=\"string\">rmi</arg>" +
286               " <arg type=\"string\">" + domain + "</arg>" +
287               " <arg type=\"int\">0</arg>" +
288               " <arg type=\"string\">/path</arg>" +
289               " </new>" +
290               " </object>" +
291               " <call classname=\"javax.management.MBeanServerFactory\" method=\"createMBeanServer\">" +
292               " <arg type=\"string\">" +
293               " <call refobjectid=\"url\" method=\"getHost\" />" +
294               " </arg>" +
295               " </call>" +
296               " </startup>" +
297               "</configuration>";
298       ConfigurationLoader loader = new ConfigurationLoader(server);
299       loader.startup(new StringReader JavaDoc(config));
300
301       ArrayList JavaDoc list = MBeanServerFactory.findMBeanServer(null);
302       assertEquals(list.size(), 1);
303       MBeanServer JavaDoc mbs = (MBeanServer JavaDoc)list.get(0);
304       assertEquals(mbs.getDefaultDomain(), domain);
305       MBeanServerFactory.releaseMBeanServer(mbs);
306    }
307
308    public void testCallElementMBeanServerGetAttribute() throws Exception JavaDoc
309    {
310       MBeanServer JavaDoc server = newMBeanServer();
311       String JavaDoc name = "JMImplementation:type=MBeanServerDelegate";
312       String JavaDoc config =
313               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
314               "<configuration>" +
315               " <startup>" +
316               " <call classname=\"javax.management.MBeanServerFactory\" method=\"createMBeanServer\">" +
317               " <arg type=\"string\">" +
318               " <call objectname=\"" + name + "\" attribute=\"MBeanServerId\" />" +
319               " </arg>" +
320               " </call>" +
321               " </startup>" +
322               "</configuration>" +
323               "";
324       ConfigurationLoader loader = new ConfigurationLoader(server);
325       Reader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(config));
326       loader.startup(reader);
327
328       ArrayList JavaDoc list = MBeanServerFactory.findMBeanServer(null);
329       assertEquals(list.size(), 1);
330       MBeanServer JavaDoc mbs = (MBeanServer JavaDoc)list.get(0);
331       String JavaDoc id = (String JavaDoc)server.getAttribute(new ObjectName JavaDoc(name), "MBeanServerId");
332       assertEquals(id, mbs.getDefaultDomain());
333       MBeanServerFactory.releaseMBeanServer(mbs);
334    }
335
336    public void testCallElementMBeanServerOperation() throws Exception JavaDoc
337    {
338       MBeanServer JavaDoc server = newMBeanServer();
339       int shutdownPort = 8872;
340       String JavaDoc name = "naming:type=rmiregistry";
341       String JavaDoc config =
342               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
343               "<configuration port=\"" + shutdownPort + "\">" +
344               " <startup>" +
345               " <create objectname=\"" + name + "\" classname=\"mx4j.tools.naming.NamingService\">" +
346               " <arg type=\"int\">1099</arg>" +
347               " </create>" +
348               " <call objectname=\"" + name + "\" operation=\"start\" />" +
349               " </startup>" +
350               " <shutdown>" +
351               " <call objectname=\"" + name + "\" operation=\"stop\" />" +
352               " </shutdown>" +
353               "</configuration>" +
354               "";
355       ConfigurationLoader loader = new ConfigurationLoader(server);
356       Reader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(config));
357       loader.startup(reader);
358
359       Hashtable JavaDoc env = new Hashtable JavaDoc();
360       env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
361       env.put(Context.PROVIDER_URL, "rmi://localhost");
362       InitialContext JavaDoc ctx = new InitialContext JavaDoc(env);
363       ctx.list("");
364       sleep(1000);
365
366       Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, shutdownPort);
367       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
368       socket.close();
369
370       sleep(2000);
371
372       try
373       {
374          ctx.list("");
375          fail();
376       }
377       catch (NamingException JavaDoc x)
378       {
379       }
380    }
381
382    public void testCallElementMBeanSetAttribute() throws Exception JavaDoc
383    {
384       MBeanServer JavaDoc server = newMBeanServer();
385       int shutdownPort = 8872;
386       String JavaDoc name = "naming:type=rmiregistry";
387       String JavaDoc port = "1199";
388       String JavaDoc config =
389               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
390               "<configuration port=\"" + shutdownPort + "\">" +
391               " <startup>" +
392               " <create objectname=\"" + name + "\" classname=\"mx4j.tools.naming.NamingService\" />" +
393               " <call objectname=\"" + name + "\" attribute=\"Port\">" +
394               " <arg type=\"int\">" + port + "</arg>" +
395               " </call>" +
396               " <call objectname=\"" + name + "\" operation=\"start\" />" +
397               " </startup>" +
398               " <shutdown>" +
399               " <call objectname=\"" + name + "\" operation=\"stop\" />" +
400               " </shutdown>" +
401               "</configuration>" +
402               "";
403       ConfigurationLoader loader = new ConfigurationLoader(server);
404       Reader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(config));
405       loader.startup(reader);
406
407       Hashtable JavaDoc env = new Hashtable JavaDoc();
408       env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
409       env.put(Context.PROVIDER_URL, "rmi://localhost:" + port);
410       InitialContext JavaDoc ctx = new InitialContext JavaDoc(env);
411       ctx.list("");
412       sleep(1000);
413
414       Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, shutdownPort);
415       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
416       socket.close();
417
418       sleep(2000);
419
420       try
421       {
422          ctx.list("");
423          fail();
424       }
425       catch (NamingException JavaDoc x)
426       {
427       }
428    }
429
430    public void testRegisterUnregisterElements() throws Exception JavaDoc
431    {
432       MBeanServer JavaDoc server = newMBeanServer();
433       int port = 8872;
434       String JavaDoc name = "connectors:protocol=rmi";
435       String JavaDoc config =
436               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
437               "<configuration port=\"" + port + "\">" +
438               " <startup>" +
439               " <register objectname=\"" + name + "\">" +
440               " <call method=\"newJMXConnectorServer\" classname=\"javax.management.remote.JMXConnectorServerFactory\">" +
441               " <arg type=\"javax.management.remote.JMXServiceURL\">service:jmx:rmi://localhost</arg>" +
442               " <arg type=\"java.util.Map\" />" +
443               " <arg type=\"javax.management.MBeanServer\" />" +
444               " </call>" +
445               " </register>" +
446               " </startup>" +
447               " <shutdown>" +
448               " <unregister objectname=\"" + name + "\" />" +
449               " </shutdown>" +
450               "</configuration>" +
451               "";
452       ConfigurationLoader loader = new ConfigurationLoader(server);
453       Reader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(config));
454       loader.startup(reader);
455       sleep(1000);
456
457       assertTrue(server.isRegistered(new ObjectName JavaDoc(name)));
458
459       Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
460       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
461       socket.close();
462
463       sleep(2000);
464
465       assertTrue(!server.isRegistered(new ObjectName JavaDoc(name)));
466    }
467
468    public void testObjectElement() throws Exception JavaDoc
469    {
470       MBeanServer JavaDoc server = newMBeanServer();
471       int port = 8872;
472       String JavaDoc id = "connector";
473       String JavaDoc name = "connectors:protocol=rmi";
474       String JavaDoc config =
475               "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
476               "<configuration port=\"" + port + "\">" +
477               " <startup>" +
478               " <object objectid=\"" + id + "\">" +
479               " <call method=\"newJMXConnectorServer\" classname=\"javax.management.remote.JMXConnectorServerFactory\">" +
480               " <arg type=\"javax.management.remote.JMXServiceURL\">service:jmx:rmi://localhost</arg>" +
481               " <arg type=\"java.util.Map\" />" +
482               " <arg type=\"javax.management.MBeanServer\" />" +
483               " </call>" +
484               " </object>" +
485               " <register objectname=\"" + name + "\">" +
486               " <arg type=\"java.lang.Object\" refobjectid=\"" + id + "\" />" +
487               " </register>" +
488               " <call refobjectid=\"" + id + "\" method=\"start\" />" +
489               " </startup>" +
490               " <shutdown>" +
491               " <call refobjectid=\"" + id + "\" method=\"stop\" />" +
492               " <unregister objectname=\"" + name + "\" />" +
493               " </shutdown>" +
494               "</configuration>" +
495               "";
496       ConfigurationLoader loader = new ConfigurationLoader(server);
497       Reader JavaDoc reader = new BufferedReader JavaDoc(new StringReader JavaDoc(config));
498       loader.startup(reader);
499       sleep(1000);
500
501       assertTrue(server.isRegistered(new ObjectName JavaDoc(name)));
502       Boolean JavaDoc active = (Boolean JavaDoc)server.getAttribute(new ObjectName JavaDoc(name), "Active");
503       assertTrue(active.booleanValue());
504
505       Socket JavaDoc socket = new Socket JavaDoc((String JavaDoc)null, port);
506       socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes());
507       socket.close();
508
509       sleep(2000);
510
511
512       assertTrue(!server.isRegistered(new ObjectName JavaDoc(name)));
513    }
514 }
515
Popular Tags