[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