[jboss-cvs] JBossAS SVN: r63656 - in trunk/testsuite/src/main/org/jboss/test/classloader: circularity/support/linkage and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jun 26 22:13:34 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-06-26 22:13:34 -0400 (Tue, 26 Jun 2007)
New Revision: 63656

Added:
   trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/
   trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/X.java
   trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Xsub.java
   trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Y.java
Modified:
   trunk/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.

Added: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/X.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/X.java	                        (rev 0)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/X.java	2007-06-27 02:13:34 UTC (rev 63656)
@@ -0,0 +1,10 @@
+package org.jboss.test.classloader.circularity.support.linkage;
+
+public class X
+{
+   private Y y;
+   X(Y y)
+   {
+      this.y = y;
+   }
+}


Property changes on: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/X.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Added: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Xsub.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Xsub.java	                        (rev 0)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Xsub.java	2007-06-27 02:13:34 UTC (rev 63656)
@@ -0,0 +1,9 @@
+package org.jboss.test.classloader.circularity.support.linkage;
+
+public class Xsub extends X
+{
+   Xsub(Y y)
+   {
+      super(y);
+   }
+}


Property changes on: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Xsub.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Added: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Y.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Y.java	                        (rev 0)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Y.java	2007-06-27 02:13:34 UTC (rev 63656)
@@ -0,0 +1,6 @@
+package org.jboss.test.classloader.circularity.support.linkage;
+
+public class Y
+{
+
+}


Property changes on: trunk/testsuite/src/main/org/jboss/test/classloader/circularity/support/linkage/Y.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Modified: trunk/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java	2007-06-27 02:10:27 UTC (rev 63655)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/test/BasicLoaderUnitTestCase.java	2007-06-27 02:13:34 UTC (rev 63656)
@@ -29,6 +29,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;
@@ -283,6 +285,65 @@
       }
    }
 
+   /**
+    * 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();
@@ -291,7 +352,7 @@
       suite.addTest(new BasicLoaderUnitTestCase("testDeadlockScenario1"));
       suite.addTest(new BasicLoaderUnitTestCase("testDeadlockScenario2"));
       suite.addTest(new BasicLoaderUnitTestCase("testClasspathOrdering"));
-      suite.addTest(new BasicLoaderUnitTestCase("testClasspathOrdering"));
+      suite.addTest(new BasicLoaderUnitTestCase("testLinkageError"));
       return suite;
    }
 }




More information about the jboss-cvs-commits mailing list