1 8 9 package test.mx4j.tools.config; 10 11 import java.io.BufferedReader ; 12 import java.io.IOException ; 13 import java.io.Reader ; 14 import java.io.StringReader ; 15 import java.net.Socket ; 16 import java.util.ArrayList ; 17 import java.util.Hashtable ; 18 19 import javax.management.MBeanServer ; 20 import javax.management.MBeanServerFactory ; 21 import javax.management.ObjectName ; 22 import javax.naming.Context ; 23 import javax.naming.InitialContext ; 24 import javax.naming.NamingException ; 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 34 public class ConfigurationLoaderTest extends MX4JTestCase 35 { 36 public ConfigurationLoaderTest(String s) 37 { 38 super(s); 39 } 40 41 public void testMalformedXML() throws Exception 42 { 43 MBeanServer server = newMBeanServer(); 44 String 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 (config)); 51 fail(); 52 } 53 catch (ConfigurationException x) 54 { 55 } 56 } 57 58 public void testUnknownElement() throws Exception 59 { 60 MBeanServer server = newMBeanServer(); 61 String 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 (config)); 70 fail(); 71 } 72 catch (ConfigurationException x) 73 { 74 } 75 } 76 77 public void testEmptyConfiguration() throws Exception 78 { 79 MBeanServer server = newMBeanServer(); 80 String config = 81 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + 82 "<configuration />"; 83 ConfigurationLoader loader = new ConfigurationLoader(server); 84 loader.startup(new StringReader (config)); 85 } 86 87 public void testEmptyStartup() throws Exception 88 { 89 MBeanServer server = newMBeanServer(); 90 String 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 (config)); 97 } 98 99 public void testEmptyShutdown() throws Exception 100 { 101 MBeanServer server = newMBeanServer(); 102 String 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 (config)); 109 } 110 111 public void testEmptyShutdownWithSocket() throws Exception 112 { 113 MBeanServer server = newMBeanServer(); 114 int port = 8872; 115 String 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 (config)); 122 sleep(1000); 123 124 Socket socket = new Socket ((String )null, port); 126 socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes()); 127 socket.close(); 128 sleep(2000); 129 } 130 131 public void testEmptyStartupAndShutdown() throws Exception 132 { 133 MBeanServer server = newMBeanServer(); 134 String 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 (config)); 142 } 143 144 public void testEmptyStartupAndShutdownWithSocket() throws Exception 145 { 146 MBeanServer server = newMBeanServer(); 147 int port = 8872; 148 String 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 (config)); 156 sleep(1000); 157 158 Socket socket = new Socket ((String )null, port); 160 socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes()); 161 socket.close(); 162 sleep(2000); 163 } 164 165 public void testWrongShutdownCommand() throws Exception 166 { 167 MBeanServer server = newMBeanServer(); 168 int port = 8872; 169 String 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 (config)); 177 sleep(1000); 178 179 Socket socket = new Socket ((String )null, port); 181 socket.close(); 182 183 socket = new Socket ((String )null, port); 184 socket.getOutputStream().write("dummy".getBytes()); 185 socket.close(); 186 187 socket = new Socket ((String )null, port); 188 socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes()); 189 socket.close(); 190 191 sleep(2000); 192 193 try 194 { 195 new Socket ((String )null, port); 196 fail(); 197 } 198 catch (IOException x) 199 { 200 } 201 } 202 203 public void testConfigurationLoaderAsMBean() throws Exception 204 { 205 MBeanServer server = newMBeanServer(); 206 ConfigurationLoader loader = new ConfigurationLoader(); 207 ObjectName loaderName = ObjectName.getInstance("configuration:service=loader"); 208 server.registerMBean(loader, loaderName); 209 210 int port = 8872; 211 String 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 []{new StringReader (config)}, new String []{Reader .class.getName()}); 218 sleep(1000); 219 220 Socket socket = new Socket ((String )null, port); 222 socket.close(); 223 224 server.invoke(loaderName, "shutdown", null, null); 226 227 sleep(2000); 228 229 try 230 { 231 new Socket ((String )null, port); 232 fail(); 233 } 234 catch (IOException x) 235 { 236 } 237 } 238 239 public void testCallElementStaticInvocation() throws Exception 240 { 241 MBeanServer server = newMBeanServer(); 242 String 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 (config)); 251 ArrayList list = MBeanServerFactory.findMBeanServer(null); 252 assertEquals(list.size(), 1); 253 MBeanServerFactory.releaseMBeanServer((MBeanServer )list.get(0)); 254 } 255 256 public void testCallElementWithObjectArgument() throws Exception 257 { 258 MBeanServer server = newMBeanServer(); 259 String 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 (config)); 273 } 274 275 public void testCallElementObjectInvocation() throws Exception 276 { 277 MBeanServer server = newMBeanServer(); 278 String domain = "test"; 279 String 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 (config)); 300 301 ArrayList list = MBeanServerFactory.findMBeanServer(null); 302 assertEquals(list.size(), 1); 303 MBeanServer mbs = (MBeanServer )list.get(0); 304 assertEquals(mbs.getDefaultDomain(), domain); 305 MBeanServerFactory.releaseMBeanServer(mbs); 306 } 307 308 public void testCallElementMBeanServerGetAttribute() throws Exception 309 { 310 MBeanServer server = newMBeanServer(); 311 String name = "JMImplementation:type=MBeanServerDelegate"; 312 String 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 reader = new BufferedReader (new StringReader (config)); 326 loader.startup(reader); 327 328 ArrayList list = MBeanServerFactory.findMBeanServer(null); 329 assertEquals(list.size(), 1); 330 MBeanServer mbs = (MBeanServer )list.get(0); 331 String id = (String )server.getAttribute(new ObjectName (name), "MBeanServerId"); 332 assertEquals(id, mbs.getDefaultDomain()); 333 MBeanServerFactory.releaseMBeanServer(mbs); 334 } 335 336 public void testCallElementMBeanServerOperation() throws Exception 337 { 338 MBeanServer server = newMBeanServer(); 339 int shutdownPort = 8872; 340 String name = "naming:type=rmiregistry"; 341 String 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 reader = new BufferedReader (new StringReader (config)); 357 loader.startup(reader); 358 359 Hashtable env = new Hashtable (); 360 env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); 361 env.put(Context.PROVIDER_URL, "rmi://localhost"); 362 InitialContext ctx = new InitialContext (env); 363 ctx.list(""); 364 sleep(1000); 365 366 Socket socket = new Socket ((String )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 x) 378 { 379 } 380 } 381 382 public void testCallElementMBeanSetAttribute() throws Exception 383 { 384 MBeanServer server = newMBeanServer(); 385 int shutdownPort = 8872; 386 String name = "naming:type=rmiregistry"; 387 String port = "1199"; 388 String 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 reader = new BufferedReader (new StringReader (config)); 405 loader.startup(reader); 406 407 Hashtable env = new Hashtable (); 408 env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); 409 env.put(Context.PROVIDER_URL, "rmi://localhost:" + port); 410 InitialContext ctx = new InitialContext (env); 411 ctx.list(""); 412 sleep(1000); 413 414 Socket socket = new Socket ((String )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 x) 426 { 427 } 428 } 429 430 public void testRegisterUnregisterElements() throws Exception 431 { 432 MBeanServer server = newMBeanServer(); 433 int port = 8872; 434 String name = "connectors:protocol=rmi"; 435 String 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 reader = new BufferedReader (new StringReader (config)); 454 loader.startup(reader); 455 sleep(1000); 456 457 assertTrue(server.isRegistered(new ObjectName (name))); 458 459 Socket socket = new Socket ((String )null, port); 460 socket.getOutputStream().write(DefaultConfigurationBuilder.SHUTDOWN_COMMAND.getBytes()); 461 socket.close(); 462 463 sleep(2000); 464 465 assertTrue(!server.isRegistered(new ObjectName (name))); 466 } 467 468 public void testObjectElement() throws Exception 469 { 470 MBeanServer server = newMBeanServer(); 471 int port = 8872; 472 String id = "connector"; 473 String name = "connectors:protocol=rmi"; 474 String 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 reader = new BufferedReader (new StringReader (config)); 498 loader.startup(reader); 499 sleep(1000); 500 501 assertTrue(server.isRegistered(new ObjectName (name))); 502 Boolean active = (Boolean )server.getAttribute(new ObjectName (name), "Active"); 503 assertTrue(active.booleanValue()); 504 505 Socket socket = new Socket ((String )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 (name))); 513 } 514 } 515 | Popular Tags |