1 22 package org.jboss.test.jmx.test; 23 24 import java.io.File ; 25 import java.net.URL ; 26 import java.util.Collection ; 27 import javax.management.ObjectInstance ; 28 import javax.management.ObjectName ; 29 import javax.management.ReflectionException ; 30 31 import org.jboss.deployment.IncompleteDeploymentException; 32 import org.jboss.test.JBossTestCase; 33 34 39 public class DeployServiceUnitTestCase 40 extends JBossTestCase 41 { 42 protected final static int INSTALLED = 0; 44 protected final static int CONFIGURED = 1; 45 protected final static int CREATED = 2; 46 protected final static int RUNNING = 3; 47 protected final static int FAILED = 4; 48 protected final static int STOPPED = 5; 49 protected final static int DESTROYED = 6; 50 protected final static int NOTYETINSTALLED = 7; 51 53 ObjectName serviceControllerName; 54 61 public DeployServiceUnitTestCase(String name) 62 { 63 super(name); 64 try 65 { 66 serviceControllerName = new ObjectName ("jboss.system:service=ServiceController"); 67 } 68 catch (Exception e) 69 { 70 } 72 } 73 74 76 82 public void testDeployXML() throws Exception 83 { 84 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 86 assertTrue("ContextClassloader missing", loader != null); 87 URL url = loader.getResource("jmx/test-service.xml"); 89 if (url == null) 90 { 91 url = loader.getResource("test-service.xml"); 93 } 94 assertTrue("resource test-service.xml not found", url != null); 95 String testUrl = url.toString(); 96 97 ObjectName testObjectName = new ObjectName ("jboss.test:service=TestService,test=jmx"); 99 if (getServer().isRegistered(testObjectName)) 102 { 103 getServer().unregisterMBean(testObjectName); 104 } 106 assertTrue("test mbean already registered before deploy", !getServer().isRegistered(testObjectName)); 107 108 deploy(testUrl); 110 111 assertTrue("test mbean not registered after deploy", checkState(testObjectName, RUNNING)); 113 114 undeploy(testUrl); 116 deploy(testUrl); 117 118 assertTrue("test mbean not registered after redeploy", checkState(testObjectName, RUNNING)); 120 121 undeploy(testUrl); 123 124 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectName)); 126 127 } 128 129 133 public void testSpaceInClasspath() throws Exception 134 { 135 getLog().debug("+++ testSpaceInClasspath"); 136 deploy("archivestest-service.xml"); 138 ObjectName testObjectName = new ObjectName ("test:name=TestSpaceInClasspath"); 139 assertTrue(testObjectName+" registered", checkState(testObjectName, RUNNING)); 141 undeploy("archivestest-service.xml"); 142 } 143 144 150 public void testDeploySAR() throws Exception 151 { 152 154 String testUrl = "testdeploy.sar"; 155 getLog().debug("testUrl is : " + testUrl); 156 157 ObjectName testObjectName = new ObjectName ("test:name=TestDeployer"); 159 ObjectName testObjectName2 = new ObjectName ("test:name=TestDeployer2"); 160 ObjectName testObjectName3 = new ObjectName ("test:name=TestDeployer3"); 161 assertTrue("test mbean already registered before deploy", !getServer().isRegistered(testObjectName)); 163 164 deploy(testUrl); 166 167 assertTrue("test mbean not registered after deploy", checkState(testObjectName, RUNNING)); 169 170 try 172 { 173 getServer().createMBean("org.jboss.test.jmx.mbean.TestDeployer", testObjectName2); 174 } 175 catch (Exception e) 176 { 177 fail("could not create mbean after class loaded in jsr" + e); 178 } 179 try 181 { 182 getServer().unregisterMBean(testObjectName2); 183 } 184 catch (Exception e) 185 { 186 fail("could not remove mbean after class loaded in jsr" + e); 187 } 188 undeploy(testUrl); 190 deploy(testUrl); 191 192 assertTrue("test mbean not registered after redeploy", checkState(testObjectName, RUNNING)); 194 195 undeploy(testUrl); 197 198 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectName)); 200 201 try 203 { 204 ObjectInstance oe = getServer().createMBean("org.jboss.test.jmx.mbean.TestDeployer", testObjectName3); 205 fail("created mbean when class should not be present: object instance: " + oe); 206 } 207 catch (ReflectionException re) 208 { 209 Exception e = re.getTargetException(); 210 if (!(e instanceof ClassNotFoundException )) 211 { 212 fail("Wrong exception thrown when trying to create mbean" + e); 213 } 214 } 215 216 deploy(testUrl); 218 219 assertTrue("test mbean not registered after deploy", checkState(testObjectName, RUNNING)); 221 222 undeploy(testUrl); 224 225 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectName)); 227 228 } 229 230 236 public void testDeploySARWithJar() throws Exception 237 { 238 String testUrl = "testdeploye.sar"; 239 getLog().debug("testUrl is : " + testUrl); 240 241 ObjectName testObjectName = new ObjectName ("test:name=TestDeployerE"); 242 deploy(testUrl); 243 244 assertTrue("test:name=TestDeployerE is registered after deploy", 246 checkState(testObjectName, RUNNING)); 247 248 Object [] args = {}; 250 String [] sig = {}; 251 getServer().invoke(testObjectName, "accessUtilClass", args, sig); 252 253 ObjectName testObjectName2 = new ObjectName ("test:name=TestDeployerE#2"); 255 getServer().createMBean("org.jboss.test.jmx.mbeane.TestDeployerE", testObjectName2); 256 257 getServer().unregisterMBean(testObjectName2); 259 260 undeploy(testUrl); 261 } 262 263 269 public void testDependsElement() throws Exception 270 { 271 274 String testUrlA = "testdeploya.sar"; 275 String testUrlB = "testdeployb.sar"; 276 String testUrlC = "testdeployc.sar"; 277 getLog().debug("testUrlA is : " + testUrlA); 278 279 ObjectName testObjectNameA = new ObjectName ("test:name=TestDeployerA"); 281 ObjectName testObjectNameB = new ObjectName ("test:name=TestDeployerB"); 282 ObjectName testObjectNameC = new ObjectName ("test:name=TestDeployerC"); 283 try 284 { 285 assertTrue("test mbean already registered before deploy", !getServer().isRegistered(testObjectNameA)); 287 assertTrue("test mbean already registered before deploy", !getServer().isRegistered(testObjectNameB)); 288 assertTrue("test mbean already registered before deploy", !getServer().isRegistered(testObjectNameC)); 289 290 deploy(testUrlA); 292 deploy(testUrlB); 293 deploy(testUrlC); 294 295 assertTrue("test mbean A not running after deploy", checkState(testObjectNameA, RUNNING)); 297 assertTrue("test mbean B not running after deploy", checkState(testObjectNameB, RUNNING)); 298 assertTrue("test mbean C not running after deploy", checkState(testObjectNameC, RUNNING)); 299 300 302 undeploy(testUrlA); 304 305 assertTrue("test mbean A still registered after undeploy of A", !getServer().isRegistered(testObjectNameA)); 307 assertTrue("test mbean C not stopped after undeploy of A", !checkState(testObjectNameC, RUNNING)); 308 assertTrue("test mbean B stopped after undeploy of A", checkState(testObjectNameB, RUNNING)); 309 310 312 undeploy(testUrlB); 314 assertTrue("test mbean B is registered after undeploy of B", !getServer().isRegistered(testObjectNameB)); 315 316 deploy(testUrlA); 318 319 assertTrue("test mbean A not registered after deploy of A", checkState(testObjectNameA, RUNNING)); 321 assertTrue("test mbean B is registered after deploy of A", !getServer().isRegistered(testObjectNameB)); 322 assertTrue("test mbean C started after deploy of A, with B unregistered", !checkState(testObjectNameC, RUNNING)); 323 324 deploy(testUrlB); 326 assertTrue("test mbean A not running after deploy of B", checkState(testObjectNameA, RUNNING)); 328 assertTrue("test mbean B not running after deploy of B", checkState(testObjectNameB, RUNNING)); 329 assertTrue("test mbean C not running after deploy of B", checkState(testObjectNameC, RUNNING)); 330 331 undeploy(testUrlC); 333 undeploy(testUrlA); 334 undeploy(testUrlB); 335 336 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectNameA)); 338 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectNameB)); 339 assertTrue("test mbean still registered after undeploy", !getServer().isRegistered(testObjectNameC)); 340 } 341 finally 342 { 343 undeploy(testUrlC); 344 undeploy(testUrlA); 345 undeploy(testUrlB); 346 } 347 348 } 349 350 357 public void testDependsListElement() throws Exception 358 { 359 363 String testUrlA = "testdeploya.sar"; 364 String testUrlB = "testdeployb.sar"; 365 String testUrlC = "testdeployc.sar"; 366 String testUrlD = "testdeployd.sar"; 367 getLog().debug("testUrlA is : " + testUrlA); 368 369 ObjectName testObjectNameA = new ObjectName ("test:name=TestDeployerA"); 371 ObjectName testObjectNameB = new ObjectName ("test:name=TestDeployerB"); 372 ObjectName testObjectNameC = new ObjectName ("test:name=TestDeployerC"); 373 ObjectName testObjectNameD = new ObjectName ("test:name=TestDeployerD"); 374 try 375 { 376 assertTrue("test mbean a already registered before deploy", !getServer().isRegistered(testObjectNameA)); 378 assertTrue("test mbean b already registered before deploy", !getServer().isRegistered(testObjectNameB)); 379 assertTrue("test mbean c already registered before deploy", !getServer().isRegistered(testObjectNameC)); 380 assertTrue("test mbean d already registered before deploy", !getServer().isRegistered(testObjectNameD)); 381 382 try 384 { 385 deploy(testUrlD); 386 fail("D deployed without dependencies"); 387 388 } 389 catch (IncompleteDeploymentException e) 390 { 391 } 394 395 assertTrue("test mbean D started with A, B, and C unregistered", !checkState(testObjectNameD, RUNNING)); 396 397 398 deploy(testUrlA); 400 assertTrue("test mbean A not started", checkState(testObjectNameA, RUNNING)); 402 assertTrue("test mbean D started with A, B, and C unregistered", !checkState(testObjectNameD, RUNNING)); 403 404 try 406 { 407 deploy(testUrlC); 408 fail("C deployed completely, D should still be waiting"); 409 } 410 catch (IncompleteDeploymentException e) 411 { 412 } assertTrue("test mbean C started with B unregistered", !checkState(testObjectNameC, RUNNING)); 415 416 417 418 deploy(testUrlB); 420 assertTrue("test mbean A not started", checkState(testObjectNameA, RUNNING)); 421 assertTrue("test mbean B not started", checkState(testObjectNameB, RUNNING)); 422 assertTrue("test mbean C not started", checkState(testObjectNameC, RUNNING)); 423 assertTrue("test mbean D not started", checkState(testObjectNameD, RUNNING)); 424 425 426 undeploy(testUrlA); 428 assertTrue("test mbean A present after undeploy", !getServer().isRegistered(testObjectNameA)); 429 assertTrue("test mbean B not started after undeploy of A", checkState(testObjectNameB, RUNNING)); 430 assertTrue("test mbean C started after undeploy of A", !checkState(testObjectNameC, RUNNING)); 431 assertTrue("test mbean D started after undeploy of A", !checkState(testObjectNameD, RUNNING)); 432 undeploy(testUrlC); 433 undeploy(testUrlB); 434 undeploy(testUrlD); 435 436 Collection ds = (Collection )getServer().invoke(serviceControllerName, 438 "listDeployedNames", 439 new Object [] {}, 440 new String [] {}); 441 assertTrue("test mbean A still registered after undeploy", !ds.contains(testObjectNameA)); 442 443 assertTrue("test mbean B still registered after undeploy", !ds.contains(testObjectNameB)); 444 445 assertTrue("test mbean C still registered after undeploy", !ds.contains(testObjectNameC)); 446 assertTrue("test mbean D still registered after undeploy", !ds.contains(testObjectNameD)); 447 } 448 finally 449 { 450 try 451 { 452 undeploy(testUrlD); 453 } 454 catch (Exception e) 455 { 456 } 457 try 458 { 459 undeploy(testUrlC); 460 } 461 catch (Exception e) 462 { 463 } 464 try 465 { 466 undeploy(testUrlA); 467 } 468 catch (Exception e) 469 { 470 } 471 try 472 { 473 undeploy(testUrlB); 474 } 475 catch (Exception e) 476 { 477 } 478 479 } 480 481 } 482 483 489 528 529 public void testConfigureError() throws Exception 530 { 531 532 String testUrl = "testdeploy.sar"; 533 getLog().debug("testUrl is : " + testUrl); 534 535 deploy(testUrl); 537 try 538 { 539 String errorUrl = "testConfigError-service.xml"; 542 String fixedUrl = "testConfigFixed-service.xml"; 543 ObjectName errorObjectName = new ObjectName ("test:name=TestConfigError"); 544 try 545 { 546 deploy(errorUrl); 547 } catch (Exception e) 548 { 549 getLog().info("deploying errorUrl gave exception: ", e); 551 } 553 if (getServer().isRegistered(errorObjectName)) 554 { 555 System.out.println("Erroneous mbean state: " + (Integer )getServer().getAttribute(errorObjectName, "State")); 556 } 559 try 561 { 562 undeploy(errorUrl); 563 564 565 } catch (Exception e) 566 { 567 568 } 570 try 571 { 572 deploy(fixedUrl); 573 assertTrue("Corrected mbean is not registered!", checkState(errorObjectName, RUNNING)); 574 575 } finally 576 { 577 undeploy(fixedUrl); 578 } } finally 580 { 581 undeploy(testUrl); 582 } 584 } 585 586 587 public void testCrashInStart() throws Exception 588 { 590 String testUrl = "testcrashinstart.sar"; 591 getLog().debug("testUrl is : " + testUrl); 592 ObjectName dontCrashName = new ObjectName ("CrashTest:name=DontCrash"); 593 ObjectName crashName = new ObjectName ("CrashTest:name=Crash"); 594 595 try 597 { 598 deploy(testUrl); 599 fail("expected IncompleteDeploymentException"); 600 } 601 catch (IncompleteDeploymentException e) 602 { 603 } 606 607 try 608 { 609 assertTrue("dontcrash mbean is missing!", getServer().isRegistered(dontCrashName)); 610 assertTrue("crash mbean is missing!", getServer().isRegistered(crashName)); 611 612 assertTrue("dontcrash mbean is started!", !getServer().getAttribute(dontCrashName, "StateString").equals("Started")); 613 assertTrue("crash mbean is started!", !getServer().getAttribute(crashName, "StateString").equals("Started")); 614 615 undeploy(testUrl); 616 assertTrue("dontcrash mbean is registered!", !getServer().isRegistered(dontCrashName)); 617 assertTrue("crash mbean is registered!", !getServer().isRegistered(crashName)); 618 619 } finally 620 { 621 undeploy(testUrl); 622 } 624 } 625 626 627 public void testNullInfoInDynamicMBean() throws Exception 628 { 632 String testUrl = "testnullinfo.sar"; 633 getLog().debug("testUrl is : " + testUrl); 634 ObjectName nullInfoName = new ObjectName ("NullInfoTest:name=NullInfo"); 635 try 637 { 638 deploy(testUrl); 639 fail("Was able to deploy invalid sar"); 640 } 641 catch(Exception e) 642 { 643 getLog().debug("Deployment failed as expected", e); 644 boolean isRegistered = getServer().isRegistered(nullInfoName); 645 assertTrue("NullInfoTest:name=NullInfo is NOT registered", !isRegistered); 646 } 647 finally 648 { 649 try 650 { 651 undeploy(testUrl); 652 } 653 catch (Exception e) 654 { 655 } 656 657 try 658 { 659 getServer().unregisterMBean(nullInfoName); 660 } 661 catch (Exception e) 662 { 663 } 664 } 666 } 667 668 670 public void testDDEntityRefs() throws Exception 671 { 672 String testUrl = "entityref.sar"; 673 getLog().debug("testUrl is : " + testUrl); 674 deploy(testUrl); 676 ObjectName name = new ObjectName ("test:name=EntityRefTest"); 678 assertTrue("test:name=EntityRefTest is registered after deploy", checkState(name, RUNNING)); 679 undeploy(testUrl); 680 } 681 682 685 public void testDefaultPkgService() throws Exception 686 { 687 String testUrl = "defaultpkg.sar"; 688 getLog().debug("testUrl is : " + testUrl); 689 deploy(testUrl); 691 ObjectName name = new ObjectName ("test:name=DefaultPkgService"); 693 assertTrue("test:name=DefaultPkgService is registered after deploy", checkState(name, RUNNING)); 694 undeploy(testUrl); 695 } 696 697 public void testExplicitStandardInterfaceService() throws Exception 698 { 699 String testUrl = "explicit-standard-interface.sar"; 700 getLog().debug("testUrl is : " + testUrl); 701 deploy(testUrl); 703 ObjectName name = new ObjectName ("test:name=TestStandardService"); 705 assertTrue("test:name=TestStandardService is registered after deploy", checkState(name, RUNNING)); 706 undeploy(testUrl); 707 } 708 709 protected boolean recursiveDelete(File f) 710 { 711 if (f.isDirectory()) 712 { 713 File [] files = f.listFiles(); 714 for (int i = 0; i < files.length; ++i) 715 { 716 if (!recursiveDelete(files[i])) 717 { 718 return false; 719 } 720 } 721 } 722 return f.delete(); 723 } 724 725 protected boolean checkState(ObjectName mbean, int state) throws Exception 726 { 727 Integer mbeanState = (Integer )getServer().getAttribute(mbean, "State"); 728 return state == mbeanState.intValue(); 729 } 730 731 } 732 | Popular Tags |