[jboss-cvs] JBossAS SVN: r82822 - projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jan 13 14:09:48 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-13 14:09:47 -0500 (Tue, 13 Jan 2009)
New Revision: 82822

Modified:
   projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
Log:
[JBCL-78] Add failing tests

Modified: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-13 17:38:35 UTC (rev 82821)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-13 19:09:47 UTC (rev 82822)
@@ -30,6 +30,7 @@
 import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.version.VersionRange;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.test.classloading.dependency.support.a.A;
 import org.jboss.test.classloading.dependency.support.b.B;
@@ -254,4 +255,329 @@
       }
       assertNoClassLoader(contextA);
    }
+   
+   public void testSeveralModulesWithSamePackages() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData x = new MockClassLoadingMetaData("x");
+      x.getCapabilities().addCapability(factory.createModule("ModuleX"));
+      x.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      x.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextX = install(x);
+
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+
+      MockClassLoadingMetaData y = new MockClassLoadingMetaData("y");
+      y.getCapabilities().addCapability(factory.createModule("ModuleY"));
+      y.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      y.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextY = install(y);
+
+      try
+      {
+         ClassLoader clX = assertClassLoader(contextX);
+         ClassLoader clA = assertClassLoader(contextA);
+         ClassLoader clY = assertClassLoader(contextY);
+
+         assertLoadClass(A.class, clX);
+         assertLoadClass(A.class, clA);
+         assertLoadClass(A.class, clY);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+            
+            //Modules do not get the same corresponding module as when trying to load classes 
+            Module moduleA = assertModule(contextA);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextX);
+         uninstall(contextA);
+         uninstall(contextY);
+      }
+   }
+   
+   public void testSeveralModulesWithSameNamesDifferentVersions() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
+      a1.getCapabilities().addCapability(factory.createModule("ModuleA", "1.0.0"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a1.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA1 = install(a1);
+
+      MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
+      a2.getCapabilities().addCapability(factory.createModule("ModuleA", "2.0.0"));
+      a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a2.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA2 = install(a2);
+
+      MockClassLoadingMetaData a3 = new MockClassLoadingMetaData("a3");
+      a3.getCapabilities().addCapability(factory.createModule("ModuleA", "3.0.0"));
+      a3.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a3.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA3 = install(a3);
+
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         ClassLoader clA2 = assertClassLoader(contextA2);
+         ClassLoader clA3 = assertClassLoader(contextA3);
+
+         assertLoadClass(A.class, clA1);
+         assertLoadClass(A.class, clA2);
+         assertLoadClass(A.class, clA3);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("2.0.0", true, "3.0.0", false)));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA2);
+            
+            //Modules do not get the same corresponding module as when trying to load classes 
+            Module moduleA2 = assertModule(contextA2);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA2, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA1);
+         uninstall(contextA2);
+         uninstall(contextA3);
+      }
+   }
+
+   public void testSeveralModulesWithSamePackagesDifferentVersions() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
+      a1.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "1.0.0"));
+      a1.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA1 = install(a1);
+
+      MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
+      a2.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "2.0.0"));
+      a2.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA2 = install(a2);
+
+      MockClassLoadingMetaData a3 = new MockClassLoadingMetaData("a3");
+      a3.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a3.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "3.0.0"));
+      a3.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA3 = install(a3);
+
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         ClassLoader clA2 = assertClassLoader(contextA2);
+         ClassLoader clA3 = assertClassLoader(contextA3);
+
+         assertLoadClass(A.class, clA1);
+         assertLoadClass(A.class, clA2);
+         assertLoadClass(A.class, clA3);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName(), new VersionRange("2.0.0", true, "3.0.0", false)));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA2);
+            
+            //Modules do not get the same corresponding module as when trying to load classes 
+            Module moduleA2 = assertModule(contextA2);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA2, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA1);
+         uninstall(contextA2);
+         uninstall(contextA3);
+      }
+   }
+
+   public void testParentRedeployOtherDomain() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+      b.setDomain("ChildDomain");
+      b.setParentDomain("ParentDomain");
+      b.setJ2seClassLoadingCompliance(true);
+      b.setPathsAndPackageNames(B.class);
+      b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName()));
+      KernelControllerContext contextB = install(b);
+      try
+      {
+         assertNoClassLoader(contextB);
+
+         MockClassLoadingMetaData aParent = new MockClassLoadingMetaData("aParent");
+         aParent.setPathsAndPackageNames(A.class);
+         aParent.setDomain("ParentDomain");
+         KernelControllerContext contextParentA = install(aParent);
+         try
+         {
+            ClassLoader clParentA = assertClassLoader(contextParentA);
+            assertLoadClass(A.class, clParentA);
+            assertLoadClassFail(B.class, clParentA);
+
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(A.class, clParentA);
+            assertLoadClass(B.class, clB);
+            
+            Module moduleParentA = assertModule(contextParentA);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleParentA, result);
+         }
+         finally
+         {
+            uninstall(contextParentA);
+         }
+         assertNoClassLoader(contextParentA);
+
+         assertNoClassLoader(contextB);
+
+         contextParentA = install(aParent);
+         try
+         {
+            ClassLoader clParentA = assertClassLoader(contextParentA);
+            assertLoadClass(A.class, clParentA);
+            assertLoadClassFail(B.class, clParentA);
+
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(A.class, clParentA);
+            assertLoadClass(B.class, clB);
+
+            Module moduleParentA = assertModule(contextParentA);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleParentA, result);
+         }
+         finally
+         {
+            uninstall(contextParentA);
+         }
+         assertNoClassLoader(contextParentA);
+      }
+      finally
+      {
+         uninstall(contextB);
+      }
+      assertNoClassLoader(contextB);
+   }
+
+   //   public void testParentRedeployOtherDomain() throws Exception
+//   {
+//      ClassPool poolB = null;
+//      Result resultB = new Result();
+//      final String parentDomainName = "ParentDomain";
+//      final String childDomainName = "ChildDomain";
+//      try
+//      {
+//         BundleInfoBuilder builderB = BundleInfoBuilder.getBuilder().
+//            createRequirePackage(PACKAGE_A);
+//         try
+//         {
+//            poolB = createChildDomainParentFirstClassPool(resultB, "b", childDomainName, parentDomainName, builderB, JAR_B_1);
+//            fail("Should be no loader");
+//         }
+//         catch(NoSuchClassLoaderException e)
+//         {
+//         }
+//         assertNoClassPool(resultB);
+//         
+//         ClassPool clParentA = null;
+//         Result resultParentA = new Result();
+//         try
+//         {
+//            clParentA = createChildDomainParentFirstClassPool(resultParentA, "aParent", parentDomainName, true, JAR_A_1);
+//            assertLoadCtClass(CLASS_A, clParentA);
+//            assertCannotLoadCtClass(CLASS_B, clParentA);
+//
+//            poolB = assertClassPool(resultB.getFactory());
+//            assertLoadCtClass(CLASS_A, clParentA);
+//            assertCannotLoadCtClass(CLASS_B, clParentA);
+//            assertLoadCtClass(CLASS_A, poolB, clParentA);
+//         }
+//         finally
+//         {
+//            unregisterClassPool(clParentA);
+//            unregisterDomain(parentDomainName);
+//         }
+//         assertNoClassPool(resultParentA);
+//         assertNoClassPool(resultB);
+//
+//         try
+//         {
+//            clParentA = createChildDomainParentFirstClassPool(resultParentA, "aParent", parentDomainName, true, JAR_A_1);
+//            assertLoadCtClass(CLASS_A, clParentA);
+//            assertCannotLoadCtClass(CLASS_B, clParentA);
+//
+//            poolB = assertClassPool(resultB.getFactory());
+//            assertLoadCtClass(CLASS_A, clParentA);
+//            assertCannotLoadCtClass(CLASS_B, clParentA);
+//            assertLoadCtClass(CLASS_A, poolB, clParentA);
+//         }
+//         finally
+//         {
+//            unregisterClassPool(clParentA);
+//            unregisterDomain(parentDomainName);
+//         }
+//      }
+//      finally
+//      {
+//         unregisterClassPool(poolB);
+//         unregisterDomain(childDomainName);
+//      }
+//      assertNoClassPool(resultB);
+//   }   
 }




More information about the jboss-cvs-commits mailing list