[jboss-cvs] JBossAS SVN: r63650 - branches/Branch_4_2/testsuite/src/main/org/jboss/test/classloader/test.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jun 26 16:53:33 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-06-26 16:53:33 -0400 (Tue, 26 Jun 2007)
New Revision: 63650

Modified:
   branches/Branch_4_2/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java
Log:
JBAS-4441, Force a LinkageError during loading of a class to validate that a legitimate LinkageError does not cause an infinite loop.

Modified: branches/Branch_4_2/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java
===================================================================
--- branches/Branch_4_2/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java	2007-06-26 20:30:52 UTC (rev 63649)
+++ branches/Branch_4_2/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java	2007-06-26 20:53:33 UTC (rev 63650)
@@ -23,6 +23,8 @@
 
 import java.io.File;
 import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
@@ -30,6 +32,8 @@
 import junit.framework.TestSuite;
 import junit.framework.Test;
 
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.UnifiedClassLoader3;
 import org.jboss.mx.loading.UnifiedLoaderRepository3;
 import org.jboss.mx.loading.RepositoryClassLoader;
 import org.jboss.test.util.ClassMover;
@@ -58,7 +62,13 @@
    {
       jbosstestDeployDir = System.getProperty("jbosstest.deploy.dir");
       if( jbosstestDeployDir == null )
-         throw new Exception("System property jbosstest.deploy.dir is not defined");
+      {
+         // Try to use ./output/lib
+         File libDir = new File("output/lib");
+         if( libDir.exists() == false )
+            throw new Exception("System property jbosstest.deploy.dir is not defined");
+         jbosstestDeployDir = libDir.getAbsolutePath();
+      }
    }
 
    /** Test the UnifiedLoaderRepository for multi-threaded class loading
@@ -253,6 +263,65 @@
       assertTrue(v, v.equals("Version 3.0"));
    }
 
+   /**
+    * Force a LinkageError during loading of a class to validate that
+    * a legitimate LinkageError does not cause an infinite loop.
+    * JBAS-4441
+    * @throws Exception
+    */
+   public void testLinkageError() throws Exception
+   {
+      log.info("Begin testLinkageError");
+      UnifiedLoaderRepository3 parentRepo = new UnifiedLoaderRepository3();
+      HeirarchicalLoaderRepository3 repo2 = new HeirarchicalLoaderRepository3(parentRepo);
+      repo2.setUseParentFirst(false);
+      File libDir = new File(jbosstestDeployDir);
+      URL origURL = libDir.toURL();
+      log.info("Lib origURL="+origURL);
+      URL j2 = new URL(origURL, "xsub2.jar");
+      log.info("j2 = "+j2);
+      URL j1 = new URL(origURL, "xsub1.jar");
+      log.info("j1 = "+j1);
+      ClassLoader parent = new ClassLoader()
+      {
+          @Override
+          protected synchronized Class<?> loadClass(String name, boolean resolve)
+             throws ClassNotFoundException
+          {
+             if( name.startsWith("java"))
+                return super.loadClass(name, resolve);
+             throw new ClassNotFoundException("No class loading");
+          }
+      };
+      final UnifiedClassLoader3 ucl0 = new UnifiedClassLoader3(j1, j1, parent, parentRepo);
+      parentRepo.addClassLoader(ucl0);
+      final UnifiedClassLoader3 ucl2 = new UnifiedClassLoader3(j2, j2, parent, repo2)
+      {
+         /**
+          * Throw a LinkageError to trigger the LoadMgr retry logic
+          */
+         @Override
+         public Class loadClassLocally(String name, boolean resolve) throws ClassNotFoundException
+         {
+            if( name.equals("org.jboss.test.classloader.circularity.support.linkage.X") )
+               throw new LinkageError("Cannot load X");
+            return super.loadClassLocally(name, resolve);
+         }
+      };
+      repo2.addClassLoader(ucl2);
+
+      try
+      {
+         Class c = ucl2.loadClass("org.jboss.test.classloader.circularity.support.linkage.Xsub");
+         fail("Was able to load Xsub");
+      }
+      catch(NoClassDefFoundError e)
+      {
+         log.info("Saw NoClassDefFoundError as expected", e);
+      }
+
+   }
+
    public static Test suite()
    {
       TestSuite suite = new TestSuite();




More information about the jboss-cvs-commits mailing list