[jboss-cvs] JBossAS SVN: r97570 - in projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl: test and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Dec 8 18:25:54 EST 2009
Author: flavia.rainone at jboss.com
Date: 2009-12-08 18:25:54 -0500 (Tue, 08 Dec 2009)
New Revision: 97570
Added:
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ChildCLInfo.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/GlobalCLInfo.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ParentLastURLClassLoaderInfo.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLInfo.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/URLClassLoaderInfo.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/CtClassCreationTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderClassPoolTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderSanityTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclLoaderTest.java
Removed:
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassLoaderSanityTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
Modified:
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLFactory.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTestSuite.java
Log:
[JBREFLECT-74] Refactored the UCL tests and flagged all the points that involve bugs with TODO/FIXME.
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ChildCLInfo.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ChildCLInfo.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ChildCLInfo.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.support;
+
+import static org.jboss.test.classpool.ucl.support.UCLFactory.MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+
+import java.net.URL;
+
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.util.MBeanServerLocator;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class ChildCLInfo extends UCLInfo
+{
+ private boolean parentFirst;
+
+ public ChildCLInfo(URL url, boolean parentFirst)
+ {
+ super(url);
+ this.parentFirst = parentFirst;
+ }
+
+ @Override
+ protected ClassLoader internalCreate(LoaderRepository globalRepository) throws Exception
+ {
+ HeirarchicalLoaderRepository3 repository = new HeirarchicalLoaderRepository3(
+ MBeanServerLocator.locateJBoss(), MAIN_LOADER_REPOSITORY_OBJECT_NAME);
+ repository.setUseParentFirst(parentFirst);
+ ClassLoader cl = repository.newClassLoader(url, true);
+ return cl;
+ }
+
+}
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ChildCLInfo.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/GlobalCLInfo.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/GlobalCLInfo.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/GlobalCLInfo.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.support;
+
+import java.net.URL;
+
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.UnifiedClassLoader3;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class GlobalCLInfo extends UCLInfo
+{
+ private ClassLoader parent;
+
+ public GlobalCLInfo(URL url)
+ {
+ super(url);
+ }
+
+ public GlobalCLInfo(URL url, ClassLoader parent)
+ {
+ this(url);
+ this.parent = parent;
+ }
+
+ @Override
+ protected ClassLoader internalCreate(LoaderRepository repository) throws Exception
+ {
+ if (parent == null)
+ {
+ return repository.newClassLoader(url, true);
+ }
+ else
+ {
+ ClassLoader classLoader = new UnifiedClassLoader3(url, null, parent, repository);
+ repository.addClassLoader(classLoader);
+ return classLoader;
+ }
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/GlobalCLInfo.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ParentLastURLClassLoaderInfo.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ParentLastURLClassLoaderInfo.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ParentLastURLClassLoaderInfo.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.support;
+
+import java.net.URL;
+
+import org.jboss.mx.loading.LoaderRepository;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class ParentLastURLClassLoaderInfo extends UCLInfo
+{
+ private ClassLoader parent;
+
+ public ParentLastURLClassLoaderInfo(URL url, ClassLoader parent)
+ {
+ super(url);
+ this.parent = parent;
+ }
+
+ @Override
+ protected ClassLoader internalCreate(LoaderRepository repository) throws Exception
+ {
+ return new ParentLastURLClassLoader(new URL[] {url}, parent);
+ }
+
+}
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/ParentLastURLClassLoaderInfo.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLFactory.java 2009-12-08 22:52:53 UTC (rev 97569)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLFactory.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -21,72 +21,169 @@
*/
package org.jboss.test.classpool.ucl.support;
+import java.io.File;
+import java.io.FilenameFilter;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import junit.framework.Assert;
+
+import org.jboss.classpool.spi.ClassPoolRepository;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.mx.loading.UnifiedLoaderRepository3;
+import org.jboss.mx.util.MBeanServerLocator;
import org.jboss.test.classpool.support.ClassLoaderFactory;
-import org.jboss.test.classpool.support.ClassLoaderInfo;
+import org.jboss.test.classpool.support.SupportClasses;
+import org.jboss.util.NotImplementedException;
/**
+ * A factory of Unified Class Loaders.
+ *
* @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
*
* @version $Revision$
*/
-public class UCLFactory<I extends ClassLoaderInfo> implements ClassLoaderFactory<I>
+public class UCLFactory implements ClassLoaderFactory<UCLInfo>
{
+ final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+ static
+ {
+ try
+ {
+ MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName(
+ "JMImplementation:name=Default,service=LoaderRepository");
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ // The global loader repository
+ private LoaderRepository globalRepository;
+ //Keep a strong reference to the classloaders so that they are not garbage collected
+ final static Set<ClassLoader> registeredClassLoaders = new HashSet<ClassLoader>();
+
+ public UCLFactory()
+ {
+ try
+ {
+ MBeanServer mBeanServer = MBeanServerLocator.locateJBoss();
+ globalRepository = (LoaderRepository)mBeanServer.invoke(
+ MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+ }
+ catch(Exception e)
+ {
+ throw new RuntimeException("Unexpected exception", e);
+ }
+ }
+
+ public void cannotGetLoader(UCLInfo uclInfo) throws Exception
+ {
+ throw new NotImplementedException("Functionality unavailable");
+ }
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#cannotGetLoader(org.jboss.test.classpool.support.ClassLoaderInfo)
- */
- public void cannotGetLoader(I classLoaderInfo) throws Exception
+ public ClassLoader create(UCLInfo uclInfo) throws Exception
{
- // TODO Auto-generated method stub
-
+ ClassLoader classLoader = uclInfo.create(globalRepository);
+ registeredClassLoaders.add(classLoader);
+ return classLoader;
}
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#create(org.jboss.test.classpool.support.ClassLoaderInfo)
- */
- public ClassLoader create(I classLoaderInfo) throws Exception
+ public void destroyLoader(UCLInfo uclInfo) throws Exception
{
- // TODO Auto-generated method stub
- return null;
+ ClassLoader classLoader = uclInfo.getCreatedClassLoader();
+ destroyClassLoader(classLoader);
+ registeredClassLoaders.remove(classLoader);
}
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#destroyLoader(org.jboss.test.classpool.support.ClassLoaderInfo)
- */
- public void destroyLoader(I classLoaderInfo) throws Exception
+ private LoaderRepository destroyClassLoader(ClassLoader classLoader)
{
- // TODO Auto-generated method stub
-
+ if (classLoader != null && classLoader instanceof RepositoryClassLoader)
+ {
+ RepositoryClassLoader repoClassLoader = (RepositoryClassLoader) classLoader;
+ LoaderRepository repository = repoClassLoader.getLoaderRepository();
+ repository.removeClassLoader(repoClassLoader);
+ //Delete the temporary directory since running in Eclipse does not do this automatically
+ deleteTempDir();
+ ClassPoolRepository.getInstance().unregisterClassLoader(classLoader);
+ return repository;
+ }
+ return null;
}
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#destroyLoaders()
- */
public void destroyLoaders()
{
- // TODO Auto-generated method stub
-
+ Set<UnifiedLoaderRepository3> repositories = new HashSet<UnifiedLoaderRepository3>();
+ for (ClassLoader registeredClassLoader :registeredClassLoaders)
+ {
+ LoaderRepository repository = destroyClassLoader(registeredClassLoader);
+ if (repository != null && repository instanceof UnifiedLoaderRepository3)
+ {
+ repositories.add((UnifiedLoaderRepository3) repository);
+ }
+ }
+ // FIXME: this is here to cover a bug
+ for (UnifiedLoaderRepository3 repository: repositories)
+ {
+ repository.flush();
+ }
+ registeredClassLoaders.clear();
+ for (String className: SupportClasses.getAllSupportClasses())
+ {
+ try
+ {
+ globalRepository.loadClass(className);
+ Assert.fail("Should not have been able to load " + className);
+ }
+ catch(Exception expected) {}
+ }
}
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#getClassLoader(org.jboss.test.classpool.support.ClassLoaderInfo)
- */
- public ClassLoader getClassLoader(I classLoaderInfo) throws Exception
+ public ClassLoader getClassLoader(UCLInfo uclInfo) throws Exception
{
- // TODO Auto-generated method stub
- return null;
+ return uclInfo.getCreatedClassLoader();
}
- /* (non-Javadoc)
- * @see org.jboss.test.classpool.support.ClassLoaderFactory#getCreatedClassLoaders()
- */
public Collection<ClassLoader> getCreatedClassLoaders()
{
- // TODO Auto-generated method stub
- return null;
+ return registeredClassLoaders;
}
-
-}
+
+ private void deleteTempDir()
+ {
+ File dir = new File(".");
+ String[] uclFiles = dir.list(
+ new FilenameFilter()
+ {
+ public boolean accept(File dir, String name)
+ {
+ return name.startsWith("ucl");
+
+ }
+ });
+ for (String uclFile : uclFiles)
+ {
+ deleteRecursively(dir, uclFile);
+ }
+ }
+
+ private void deleteRecursively(File dir, String name)
+ {
+ File file = new File(dir, name);
+ if (file.isDirectory())
+ {
+ String[] fileNames = file.list();
+ for (String fileName : fileNames)
+ {
+ deleteRecursively(file, fileName);
+ }
+ }
+ file.delete();
+ }
+}
\ No newline at end of file
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLInfo.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLInfo.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLInfo.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.support;
+
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.test.classpool.support.ClassLoaderInfo;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public abstract class UCLInfo implements ClassLoaderInfo
+{
+ protected URL url;
+ private ClassLoader createdClassLoader;
+
+ public UCLInfo(URL url)
+ {
+ this.url = url;
+ }
+
+ ClassLoader create(LoaderRepository globalRepository) throws Exception
+ {
+ Assert.assertNull("Double creation of class loader", createdClassLoader);
+ this.createdClassLoader = internalCreate(globalRepository);
+ return this.createdClassLoader;
+ }
+
+ ClassLoader getCreatedClassLoader()
+ {
+ return this.createdClassLoader;
+ }
+
+ protected abstract ClassLoader internalCreate(LoaderRepository repository) throws Exception;
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/UCLInfo.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/URLClassLoaderInfo.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/URLClassLoaderInfo.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/URLClassLoaderInfo.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.support;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.jboss.mx.loading.LoaderRepository;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class URLClassLoaderInfo extends UCLInfo
+{
+ private ClassLoader parent;
+
+ public URLClassLoaderInfo(URL url)
+ {
+ this(url, null);
+ }
+
+ public URLClassLoaderInfo(URL url, ClassLoader parent)
+ {
+ super(url);
+ this.parent = parent;
+ }
+
+ @Override
+ protected ClassLoader internalCreate(LoaderRepository repository) throws Exception
+ {
+ return new URLClassLoader(new URL[] {url}, parent);
+ }
+
+}
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/support/URLClassLoaderInfo.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/CtClassCreationTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/CtClassCreationTestCase.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/CtClassCreationTestCase.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,241 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.test;
+
+import static org.jboss.test.classpool.support.SupportArchives.JAR_A_1_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_B_1_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_C_1_URL;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
+import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_A;
+import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_B;
+
+import java.util.ArrayList;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.jboss.test.classpool.support.ClassFactory;
+import org.jboss.test.classpool.support.ClassPoolTestScenario;
+import org.jboss.test.classpool.support.TestScenario;
+import org.jboss.test.classpool.ucl.support.GlobalCLInfo;
+import org.jboss.test.classpool.ucl.support.UCLFactory;
+import org.jboss.test.classpool.ucl.support.UCLInfo;
+import org.jboss.test.classpool.ucl.support.URLClassLoaderInfo;
+
+/**
+ * Tests creation of CtClasses using ClassPools for UCLs.
+ *
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ * @version $Revision$
+ */
+
+public class CtClassCreationTestCase extends UclClassPoolTest<CtClass, ClassPool>
+{
+ public static Test suite()
+ {
+ return new TestSuite(UCLLoaderClassPoolTestCase.class);
+ }
+
+ public CtClassCreationTestCase(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ protected TestScenario<CtClass, ClassPool, UCLInfo> getTestScenario()
+ {
+ return new ClassPoolTestScenario<UCLInfo>(new UCLFactory());
+ }
+
+ public void testGeneratingClassInNonDelegatingPool() throws Exception
+ {
+ final String PARENT = "parent.Parent";
+ final String CHILD = "child.Child";
+ ClassPool parent = testScenario.createLoader(new URLClassLoaderInfo(JAR_B_1_URL));
+ ClassPool global = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL,
+ testScenario.getClassLoader(parent)));
+ ClassPool child = testScenario.createLoader(new URLClassLoaderInfo(JAR_C_1_URL,
+ testScenario.getClassLoader(global)));
+
+ testScenario.cannotLoadClass(parent, PARENT);
+ testScenario.cannotLoadClass(global, PARENT);
+ testScenario.cannotLoadClass(child, PARENT);
+ testScenario.cannotLoadClass(child, CHILD);
+
+ CtClass parentClass = parent.makeClass(PARENT);
+
+ CtClass childClass = child.makeClass(CHILD);
+ childClass.setSuperclass(parentClass);
+
+ CtClass parentFromParent = parent.getCtClass(PARENT);
+ assertSame(parentClass, parentFromParent);
+
+ CtClass childFromChild = child.getCtClass(CHILD);
+ assertSame(childClass, childFromChild);
+
+ testScenario.cannotLoadClass(global, CHILD);
+
+ CtClass parentFromChildA = childClass.getSuperclass();
+ assertSame(parentClass, parentFromChildA);
+
+ CtClass parentFromChildB = child.getCtClass(PARENT);
+ assertSame(parent, parentFromChildB.getClassPool());
+ assertSame(parentClass, parentFromChildB);
+
+ Class<?> parentClazz = parentClass.toClass();
+ assertSame(parent.getClassLoader(), parentClazz.getClassLoader());
+
+ Class<?> childClazz = childClass.toClass();
+ assertSame(child.getClassLoader(), childClazz.getClassLoader());
+
+ Class<?> parentClazzFromParent = parent.getClassLoader().loadClass(PARENT);
+ assertSame(parentClazz, parentClazzFromParent);
+
+ Class<?> parentClazzFromChild = parent.getClassLoader().loadClass(PARENT);
+ assertSame(parentClazz, parentClazzFromChild);
+
+ Class<?> childClazzFromChild = child.getClassLoader().loadClass(CHILD);
+ assertSame(childClazz, childClazzFromChild);
+
+ child.getClassLoader().loadClass(CLASS_A);
+ }
+
+ public void testGeneratingClassInDelegatingPool() throws Exception
+ {
+ ClassPool globalA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ ClassPool globalB = testScenario.createLoader(new GlobalCLInfo(JAR_B_1_URL));
+ ClassPool child = testScenario.createLoader(new URLClassLoaderInfo(JAR_C_1_URL,
+ testScenario.getClassLoader(globalA)));
+ final String A_CLASS = "a.Clazz";
+ final String B_CLASS = "b.Clazz";
+
+ testScenario.cannotLoadClass(globalA, A_CLASS);
+ testScenario.cannotLoadClass(globalB, A_CLASS);
+ testScenario.cannotLoadClass(child, A_CLASS);
+ testScenario.cannotLoadClass(globalA, B_CLASS);
+ testScenario.cannotLoadClass(globalB, B_CLASS);
+ testScenario.cannotLoadClass(child, B_CLASS);
+
+ CtClass a = globalA.makeClass(A_CLASS);
+ CtClass b = globalB.makeClass(B_CLASS);
+
+ CtClass aFromA = globalA.getCtClass(A_CLASS);
+ assertSame(a, aFromA);
+ assertSame(globalA, aFromA.getClassPool());
+
+ CtClass aFromB = globalB.get(A_CLASS);
+ assertSame(a, aFromB);
+
+ CtClass bFromA = globalA.get(B_CLASS);
+ assertSame(b, bFromA);
+ assertSame(globalB, bFromA.getClassPool());
+
+ CtClass bFromB = globalB.get(B_CLASS);
+ assertSame(b, bFromB);
+
+ CtClass aFromChild = child.get(A_CLASS);
+ assertSame(a, aFromChild);
+
+ CtClass bFromChild = child.get(B_CLASS);
+ assertSame(b, bFromChild);
+
+ Class<?> clazzA = a.toClass();
+ assertSame(globalA.getClassLoader(), clazzA.getClassLoader());
+
+ Class<?> clazzB = b.toClass();
+ assertSame(globalB.getClassLoader(), clazzB.getClassLoader());
+
+ Class<?> clazzAFromA = globalA.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromA);
+
+ Class<?> clazzAFromB = globalB.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromB);
+
+ Class<?> clazzAFromChild = child.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromChild);
+
+ Class<?> clazzBFromA = globalA.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromA);
+
+ Class<?> clazzBFromB = globalB.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromB);
+ Class<?> clazzBFromChild = child.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromChild);
+ }
+
+
+ public void testCreateClassInSamePackage() throws Exception
+ {
+ ClassPool globalPoolA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ ClassPool globalPoolB = testScenario.createLoader(new GlobalCLInfo(JAR_B_1_URL));
+
+ ClassLoader loaderA = globalPoolA.getClassLoader();
+ ClassLoader loaderB = globalPoolB.getClassLoader();
+
+ Class<?> classA = loaderA.loadClass(CLASS_A);
+ Class<?> classB = loaderB.loadClass(CLASS_B);
+
+ Object createdA = ClassFactory.create(classA, loaderA);
+ Object createdB = ClassFactory.create(classB, loaderB);
+
+ Class<?> createdClassA = createdA.getClass();
+ Class<?> createdClassB = createdB.getClass();
+
+ assertTrue(classA.isAssignableFrom(createdClassA));
+ assertTrue(classB.isAssignableFrom(createdClassB));
+ assertTrue(createdClassA.getName().startsWith(PACKAGE_A));
+ assertTrue(createdClassB.getName().startsWith(PACKAGE_B));
+
+ assertSame(createdClassA, loaderA.loadClass(createdClassA.getName()));
+ assertSame(createdClassB, loaderA.loadClass(createdClassB.getName()));
+ assertSame(createdClassA, loaderB.loadClass(createdClassA.getName()));
+ assertSame(createdClassB, loaderB.loadClass(createdClassB.getName()));
+ }
+
+ public void testCreatedClassForSystemClass() throws Exception
+ {
+ ClassPool globalPoolA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ ClassPool globalPoolB = testScenario.createLoader(new GlobalCLInfo(JAR_B_1_URL));
+
+ ClassLoader loaderA = globalPoolA.getClassLoader();
+ ClassLoader loaderB = globalPoolB.getClassLoader();
+
+ Object createdA = ClassFactory.create(ArrayList.class, loaderA);
+ Object createdB = ClassFactory.create(ArrayList.class, loaderB);
+
+ Class<?> createdClassA = createdA.getClass();
+ Class<?> createdClassB = createdB.getClass();
+
+ assertTrue(ArrayList.class.isAssignableFrom(createdClassA));
+ assertTrue(ArrayList.class.isAssignableFrom(createdClassB));
+ assertTrue(createdClassA.getName().startsWith(ClassFactory.PACKAGE));
+ assertTrue(createdClassB.getName().startsWith(ClassFactory.PACKAGE));
+
+ assertSame(createdClassA, loaderA.loadClass(createdClassA.getName()));
+ assertSame(createdClassB, loaderA.loadClass(createdClassB.getName()));
+ assertSame(createdClassA, loaderB.loadClass(createdClassA.getName()));
+ assertSame(createdClassB, loaderB.loadClass(createdClassB.getName()));
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/CtClassCreationTestCase.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderClassPoolTestCase.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderClassPoolTestCase.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,108 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.test;
+
+import static org.jboss.test.classpool.support.SupportArchives.JAR_A_1_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_A_2_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_B_1_URL;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
+
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.jboss.test.classpool.support.ClassPoolTestScenario;
+import org.jboss.test.classpool.support.TestScenario;
+import org.jboss.test.classpool.ucl.support.GlobalCLInfo;
+import org.jboss.test.classpool.ucl.support.ParentLastURLClassLoaderInfo;
+import org.jboss.test.classpool.ucl.support.UCLFactory;
+import org.jboss.test.classpool.ucl.support.UCLInfo;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class UCLLoaderClassPoolTestCase extends
+ UclLoaderTest<CtClass, ClassPool>
+{
+ public static Test suite()
+ {
+ return new TestSuite(UCLLoaderClassPoolTestCase.class);
+ }
+
+ public UCLLoaderClassPoolTestCase(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ protected TestScenario<CtClass, ClassPool, UCLInfo> getTestScenario()
+ {
+ return new ClassPoolTestScenario<UCLInfo>(new UCLFactory());
+ }
+
+ // FIXME JBREFLECT-83
+ @Override
+ public void testUclWithParentClassLoaderAndSameClassInDomain() {}
+
+ // FIXME JBREFLECT-83
+ @Override
+ public void testUclLoaderOrdering() {}
+
+ public void testURLChildOfGlobalUcParentLast() throws Exception
+ {
+ ClassPool globalPool = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ ClassLoader globalClassLoader = testScenario.getClassLoader(globalPool);
+ ClassPool childPoolA = createParentLastURLClassPool(JAR_B_1_URL, globalClassLoader);
+
+ //Try loading A from child first
+ CtClass aFromA = testScenario.loadClass(childPoolA, globalPool, CLASS_A);/*childPoolA.get(CLASS_A);
+ assertSame(globalPool, aFromA.getClassPool());*/
+
+ //Try loading A from global
+ CtClass aFromGlobal = testScenario.loadClass(globalPool, CLASS_A);/*globalPool.get(CLASS_A);*/
+ assertSame(aFromA, aFromGlobal);
+
+ //Try loading B from A
+ CtClass bFromA = childPoolA.get(CLASS_B);
+ assertSame(childPoolA, bFromA.getClassPool());
+
+ //Should get the child copy
+ /* TODO why can't I use JAR_A1_URL instead?*/
+ ClassPool childPoolB = createParentLastURLClassPool(JAR_A_2_URL, globalClassLoader);
+ CtClass aFromB = childPoolB.get(CLASS_A);
+ assertSame(childPoolB, aFromB.getClassPool());
+ }
+
+ private ClassPool createParentLastURLClassPool(URL url, ClassLoader parent) throws Exception
+ {
+ ClassPool pool = testScenario.createLoader(new ParentLastURLClassLoaderInfo(url, parent));
+ pool.childFirstLookup = true;
+ return pool;
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderClassPoolTestCase.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderSanityTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderSanityTestCase.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderSanityTestCase.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classpool.ucl.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.jboss.test.classpool.support.SanityTestScenario;
+import org.jboss.test.classpool.support.TestScenario;
+import org.jboss.test.classpool.ucl.support.UCLFactory;
+import org.jboss.test.classpool.ucl.support.UCLInfo;
+
+/**
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+public class UCLLoaderSanityTestCase extends UclLoaderTest<Class<?>, ClassLoader>
+{
+ public static Test suite()
+ {
+ return new TestSuite(UCLLoaderSanityTestCase.class);
+ }
+
+ public UCLLoaderSanityTestCase(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ protected TestScenario<Class<?>, ClassLoader, UCLInfo> getTestScenario()
+ {
+ return new SanityTestScenario<UCLInfo>(new UCLFactory());
+ }
+
+}
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UCLLoaderSanityTestCase.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Deleted: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassLoaderSanityTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassLoaderSanityTestCase.java 2009-12-08 22:52:53 UTC (rev 97569)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassLoaderSanityTestCase.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -1,362 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.test.classpool.ucl.test;
-
-import static org.jboss.test.classpool.support.SupportArchives.JAR_A_1_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_A_2_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_B_1_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_B_2_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_C_1_URL;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_C;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * This is here to figure out how the UCLs work, and we will duplicate this
- * in the classpool test
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class UclClassLoaderSanityTestCase extends UclClassPoolTest
-{
- public UclClassLoaderSanityTestCase(String name)
- {
- super(name);
- }
-
- public static Test suite()
- {
- return new TestSuite(UclClassLoaderSanityTestCase.class);
- }
-
-
- public void testGlobalScope() throws Exception
- {
- ClassLoader clA = null;
- ClassLoader clB = null;
- try
- {
- clA = createGlobalClassLoader(JAR_A_1_URL);
- clB = createGlobalClassLoader(JAR_B_1_URL);
- try
- {
- Class<?> aFromA = clA.loadClass(CLASS_A);
- assertNotNull(aFromA);
- Class<?> bFromA = clA.loadClass(CLASS_B);
- assertNotNull(bFromA);
- Class<?> aFromB = clB.loadClass(CLASS_A);
- Class<?> bFromB = clB.loadClass(CLASS_B);
- assertSame(aFromA, aFromB);
- assertSame(bFromA, bFromB);
- assertSame(clA, aFromA.getClassLoader());
- assertSame(clB, bFromB.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clB);
- }
- Class<?> aFromA = clA.loadClass(CLASS_A);
- assertNotNull(aFromA);
-
- assertCannotLoadClass(clA, CLASS_B);
- }
- finally
- {
- removeClassLoaderFromRepository(clA);
- }
- assertCannotLoadClass(getGlobalRepository(), CLASS_A);
- }
-
- public void testChildDomain() throws Exception
- {
- ClassLoader clA = null;
- ClassLoader clB = null;
- ClassLoader clC = null;
- try
- {
- clA = createGlobalClassLoader(JAR_A_1_URL);
- clB = createGlobalClassLoader(JAR_B_1_URL);
- clC = createChildClassLoader(JAR_C_1_URL, false);
-
- Class<?> aFromA = clA.loadClass(CLASS_A);
- assertNotNull(aFromA);
- Class<?> bFromB = clB.loadClass(CLASS_B);
- assertNotNull(bFromB);
- Class<?> cFromC = clC.loadClass(CLASS_C);
- assertNotNull(cFromC);
- Class<?> aFromC = clC.loadClass(CLASS_A);
- assertNotNull(aFromC);
- Class<?> bFromC = clC.loadClass(CLASS_B);
- assertNotNull(bFromC);
-
- assertSame(aFromA, aFromC);
- assertSame(bFromB, bFromC);
- assertSame(clA, aFromA.getClassLoader());
- assertSame(clB, bFromB.getClassLoader());
- assertSame(clC, cFromC.getClassLoader());
-
- assertCannotLoadClass(clA, CLASS_C);
- assertCannotLoadClass(clB, CLASS_C);
- }
- finally
- {
- removeClassLoaderFromRepository(clA);
- removeClassLoaderFromRepository(clB);
- }
- }
-
- public void testSiblingDomains() throws Exception
- {
- ClassLoader clA = createChildClassLoader(JAR_A_1_URL, true);
- ClassLoader clB = createChildClassLoader(JAR_B_1_URL, false);
-
- Class<?> clazzA = clA.loadClass(CLASS_A);
- assertSame(clA, clazzA.getClassLoader());
- Class<?> clazzB = clB.loadClass(CLASS_B);
- assertSame(clB, clazzB.getClassLoader());
- assertCannotLoadClass(clA, CLASS_B);
- assertCannotLoadClass(clB, CLASS_A);
- }
-
- public void testChildWithNewClassesInParent() throws Exception
- {
- ClassLoader clGlobal = null;
- ClassLoader clScoped = null;
- try
- {
- clScoped = createChildClassLoader(JAR_B_1_URL, true);
- assertCannotLoadClass(clScoped, CLASS_A);
-
- clGlobal = createGlobalClassLoader(JAR_A_1_URL);
- Class<?> aFromChild = clScoped.loadClass(CLASS_A);
- assertNotNull(aFromChild);
- Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
- assertNotNull(aFromParent);
- assertSame(aFromChild, aFromParent);
- assertSame(clGlobal, aFromParent.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clGlobal);
- }
- }
-
- public void testChildOverrideWithParentDelegation() throws Exception
- {
- ClassLoader clGlobal = null;
- try
- {
- clGlobal = createGlobalClassLoader(JAR_A_1_URL);
- ClassLoader clScoped = createChildClassLoader(JAR_A_2_URL, true);
- Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
- assertNotNull(aFromParent);
- Class<?> aFromChild = clScoped.loadClass(CLASS_A);
- assertNotNull(aFromChild);
- assertSame(aFromParent, aFromChild);
- assertSame(clGlobal, aFromParent.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clGlobal);
- }
- }
-
- public void testChildOverrideWithNoParentDelegation() throws Exception
- {
- ClassLoader clGlobal = null;
- try
- {
- clGlobal = createGlobalClassLoader(JAR_A_1_URL);
- ClassLoader clScoped = createChildClassLoader(JAR_A_2_URL, false);
- Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
- assertNotNull(aFromParent);
- Class<?> aFromChild = clScoped.loadClass(CLASS_A);
- assertNotNull(aFromChild);
- assertNotSame(aFromParent, aFromChild);
- assertSame(clGlobal, aFromParent.getClassLoader());
- assertSame(clScoped, aFromChild.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clGlobal);
- }
- }
-
- public void testURLChildOfGlobalUcl() throws Exception
- {
- ClassLoader clGlobal = null;
- try
- {
- clGlobal = createGlobalClassLoader(JAR_A_1_URL);
- ClassLoader clChildA = createChildURLClassLoader(clGlobal, JAR_B_1_URL);
-
- Class<?> aFromA = clChildA.loadClass(CLASS_A);
- assertSame(clGlobal, aFromA.getClassLoader());
- Class<?> bFromA = clChildA.loadClass(CLASS_B);
- assertSame(clChildA, bFromA.getClassLoader());
-
- ClassLoader clChildB = createChildURLClassLoader(clGlobal, JAR_A_2_URL);
- Class<?> aFromB = clChildB.loadClass(CLASS_A);
- assertSame(clGlobal, aFromB.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clGlobal);
- }
- }
-
- public void testUndeploySibling() throws Exception
- {
- ClassLoader clA = null;
- ClassLoader clB = null;
- try
- {
- try
- {
- clA = createGlobalClassLoader(JAR_A_1_URL);
- assertCannotLoadClass(clA, CLASS_B);
-
- clB = createGlobalClassLoader(JAR_B_1_URL);
- Class<?> bFromA = clA.loadClass(CLASS_B);
- assertSame(clB, bFromA.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(clB);
- }
- assertCannotLoadClass(clA, CLASS_B);
- }
- finally
- {
- removeClassLoaderFromRepository(clA);
- }
- }
-
-
-// public void testUndeployParentDomainClassLoader() throws Exception
-// {
-// ClassLoader globalA = null;
-// ClassLoader globalB = null;
-// ClassLoader child = null;
-// try
-// {
-// try
-// {
-// globalA = createGlobalClassLoader(JAR_A_1);
-// assertCannotLoadClass(globalA, CLASS_B);
-//
-// child = createChildClassLoader(JAR_C_1, true);
-// assertCannotLoadClass(child, CLASS_B);
-//
-// globalB = createGlobalClassLoader(JAR_B_1);
-// Class<?> bFromChild = child.loadClass(CLASS_B);
-// Class<?> bFromA = globalA.loadClass(CLASS_B);
-// assertSame(globalB, bFromA.getClassLoader());
-// assertSame(bFromA, bFromChild);
-// }
-// finally
-// {
-// removeClassLoaderFromRepository(globalB);
-// }
-// assertCannotLoadClass(child, CLASS_B);
-// }
-// finally
-// {
-// removeClassLoaderFromRepository(globalA);
-// }
-// }
-
- public void testUclWithParentClassLoader() throws Exception
- {
- ClassLoader parent = createChildURLClassLoader(null, JAR_B_1_URL);
- ClassLoader global = null;
- try
- {
- global = createGlobalClassLoaderWithParent(JAR_A_1_URL, parent);
- Class<?> aFromGlobal = global.loadClass(CLASS_A);
- assertSame(global, aFromGlobal.getClassLoader());
- Class<?> bFromGlobal = global.loadClass(CLASS_B);
- assertSame(parent, bFromGlobal.getClassLoader());
- Class<?> bFromParent = parent.loadClass(CLASS_B);
- assertSame(bFromGlobal, bFromParent);
- }
- finally
- {
- removeClassLoaderFromRepository(global);
- }
- }
-
-
- public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
- {
- ClassLoader parent = createChildURLClassLoader(null, JAR_B_1_URL);
- ClassLoader globalA = null;
- ClassLoader globalB = null;
- try
- {
- globalA = createGlobalClassLoaderWithParent(JAR_A_1_URL, parent);
- Class<?> aFromGlobal = globalA.loadClass(CLASS_A);
- assertSame(globalA, aFromGlobal.getClassLoader());
-
- globalB = createGlobalClassLoader(JAR_B_2_URL);
- Class<?> bFromGlobalA = globalA.loadClass(CLASS_B);
- assertSame(globalB, bFromGlobalA.getClassLoader());
- Class<?> bFromParent = parent.loadClass(CLASS_B);
- assertSame(parent, bFromParent.getClassLoader());
- assertNotSame(bFromGlobalA, bFromParent);
- }
- finally
- {
- removeClassLoaderFromRepository(globalA);
- removeClassLoaderFromRepository(globalB);
- }
- }
-
- public void testUclLoaderOrdering() throws Exception
- {
- ClassLoader globalA = null;
- ClassLoader globalB = null;
- ClassLoader globalC = null;
- try
- {
- globalA = createGlobalClassLoader(JAR_A_1_URL);
- globalB = createGlobalClassLoader(JAR_A_1_URL);
- globalC = createGlobalClassLoader(JAR_A_1_URL);
-
- Class<?> aFromA = globalA.loadClass(CLASS_A);
- Class<?> aFromB = globalB.loadClass(CLASS_A);
- Class<?> aFromC = globalC.loadClass(CLASS_A);
- assertSame(aFromA, aFromB);
- assertSame(aFromA, aFromC);
- assertSame(globalA, aFromA.getClassLoader());
- }
- finally
- {
- removeClassLoaderFromRepository(globalA);
- removeClassLoaderFromRepository(globalB);
- removeClassLoaderFromRepository(globalC);
- }
- }
-}
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java 2009-12-08 22:52:53 UTC (rev 97569)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -22,77 +22,75 @@
package org.jboss.test.classpool.ucl.test;
import java.io.File;
-import java.io.FilenameFilter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.HashSet;
-import java.util.Set;
-import javassist.ClassPool;
-
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
-import javax.management.ObjectName;
import org.jboss.classpool.plugins.as4.ucl.JBossUclDelegatingClassPoolFactory;
import org.jboss.classpool.spi.ClassPoolRepository;
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.loading.RepositoryClassLoader;
-import org.jboss.mx.loading.UnifiedClassLoader3;
import org.jboss.mx.util.MBeanServerLocator;
import org.jboss.test.AbstractTestCaseWithSetup;
import org.jboss.test.AbstractTestDelegate;
-import org.jboss.test.classpool.support.SupportArchives;
import org.jboss.test.classpool.support.SupportClasses;
-import org.jboss.test.classpool.ucl.support.ParentLastURLClassLoader;
+import org.jboss.test.classpool.support.TestScenario;
+import org.jboss.test.classpool.ucl.support.UCLInfo;
/**
+ * Super class of UCL tests.
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
* @version $Revision$
*/
- at SuppressWarnings("all")
-public class UclClassPoolTest extends AbstractTestCaseWithSetup
+public abstract class UclClassPoolTest<C, L> extends AbstractTestCaseWithSetup
{
- private MBeanServer server;
- private LoaderRepository globalRepository;
-
- //Keep a strong reference to the classloaders so that they are not garbage collected
- final static Set<ClassLoader> registeredClassLoaders = new HashSet<ClassLoader>();
-
- final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
static
{
try
{
- MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
- ClassPoolRepository.getInstance().setClassPoolFactory(new JBossUclDelegatingClassPoolFactory(new File(".")));
+ ClassPoolRepository.getInstance().setClassPoolFactory(
+ new JBossUclDelegatingClassPoolFactory(new File(".")));
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
-
- public UclClassPoolTest(String name)
+ protected TestScenario<C, L, UCLInfo> testScenario;
+
+ protected abstract TestScenario<C, L, UCLInfo> getTestScenario();
+
+ @Override
+ protected void setUp() throws Exception
{
- super(name);
- System.setProperty("javax.management.builder.initial", "org.jboss.mx.server.MBeanServerBuilderImpl");
- server = MBeanServerFactory.createMBeanServer();
- MBeanServerLocator.setJBoss(server);
+ //enableTrace("org.jboss.classpool.ucl");
+ super.setUp();
+ this.testScenario = getTestScenario();
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
try
{
- globalRepository = (LoaderRepository)server.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+ this.testScenario.destroyLoaders();
}
- catch(Exception e)
+ finally
{
-
+ super.tearDown();
}
}
+
+ public UclClassPoolTest(String name)
+ {
+ super(name);
+ System.setProperty("javax.management.builder.initial", "org.jboss.mx.server.MBeanServerBuilderImpl");
+ MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServerLocator.setJBoss(server);
+ }
+
public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
{
AbstractTestDelegate delegate = new UclClassPoolTestDelegate(clazz);
@@ -102,115 +100,18 @@
return delegate;
}
- @Override
- protected void setUp() throws Exception
+ /**
+ * The test classes should not be on the launcher classpath
+ */
+ public void testClassesNotOnClasspath()
{
- super.setUp();
- //enableTrace("org.jboss.aop.classpool");
- //enableTrace("org.jboss.classpool.ucl");
+ assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_A);
+ assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_B);
+ assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_C);
}
-
- public MBeanServer getServer()
- {
- return server;
- }
-
-
- public LoaderRepository getGlobalRepository()
- {
- return globalRepository;
- }
- protected ClassLoader createGlobalClassLoader(URL url) throws Exception
+ private void assertCannotLoadClass(ClassLoader cl, String className)
{
- ClassLoader cl = globalRepository.newClassLoader(url, true);
- registeredClassLoaders.add(cl);
- return cl;
- }
-
- protected ClassPool createGlobalClassPool(URL url) throws Exception
- {
- ClassLoader loader = createGlobalClassLoader(url);
- return ClassPoolRepository.getInstance().registerClassLoader(loader);
- }
-
- protected ClassLoader createGlobalClassLoaderWithParent(URL url, ClassLoader parent) throws Exception
- {
- ClassLoader cl = new UnifiedClassLoader3(url, null, parent, globalRepository);
- globalRepository.addClassLoader(cl);
- registeredClassLoaders.add(cl);
- return cl;
- }
-
- protected ClassPool createGlobalClassPoolWithParent(URL url, ClassPool parent) throws Exception
- {
- ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
- ClassLoader loader = createGlobalClassLoaderWithParent(url, parentLoader);
- return ClassPoolRepository.getInstance().registerClassLoader(loader);
- }
-
- protected void removeClassLoaderFromRepository(ClassLoader cl)
- {
- if (cl != null)
- {
- if (cl instanceof RepositoryClassLoader)
- {
- LoaderRepository repository = ((RepositoryClassLoader)cl).getLoaderRepository();
- repository.removeClassLoader(cl);
- }
- }
- }
-
- protected void removeClassPool(ClassPool pool)
- {
- if (pool != null)
- {
- ClassLoader cl = pool.getClassLoader();
- if (cl != null)
- {
- removeClassLoaderFromRepository(cl);
- ClassPoolRepository.getInstance().unregisterClassLoader(cl);
- registeredClassLoaders.remove(cl);
- //Delete the temporary directory since running in Eclipse does not do this automatically
- deleteTempDir();
- }
- }
- }
-
- private void deleteTempDir()
- {
- File dir = new File(".");
- String[] uclFiles = dir.list(
- new FilenameFilter()
- {
- public boolean accept(File dir, String name)
- {
- return name.startsWith("ucl");
-
- }
- });
- for (String uclFile : uclFiles)
- {
- deleteRecursively(dir, uclFile);
- }
- }
-
- private void deleteRecursively(File dir, String name)
- {
- File file = new File(dir, name);
- if (file.isDirectory())
- {
- String[] fileNames = file.list();
- for (String fileName : fileNames)
- {
- deleteRecursively(file, fileName);
- }
- }
- file.delete();
- }
-
- protected void assertCannotLoadClass(ClassLoader cl, String className)
- {
try
{
cl.loadClass(className);
@@ -220,84 +121,4 @@
{
}
}
-
- protected void assertCannotLoadCtClass(ClassPool pool, String className)
- {
- try
- {
- pool.get(className);
- }
- catch(Exception e)
- {
- }
- }
-
- protected void assertCannotLoadClass(LoaderRepository repository, String className)
- {
- try
- {
- repository.loadClass(className);
- fail("Should not have been able to load " + className);
- }
- catch(Exception expected)
- {
- }
- }
-
- protected ClassLoader createChildClassLoader(URL url, boolean parentFirst) throws Exception
- {
- HeirarchicalLoaderRepository3 repository = new HeirarchicalLoaderRepository3(getServer(), MAIN_LOADER_REPOSITORY_OBJECT_NAME);
- repository.setUseParentFirst(parentFirst);
- ClassLoader cl = repository.newClassLoader(url, true);
- registeredClassLoaders.add(cl);
- return cl;
- }
-
- protected ClassPool createChildClassPool(URL url, boolean parentFirst) throws Exception
- {
- ClassLoader loader = createChildClassLoader(url, parentFirst);
- return ClassPoolRepository.getInstance().registerClassLoader(loader);
- }
-
- protected ClassLoader createChildURLClassLoader(ClassLoader parent, URL url)
- {
- ClassLoader cl = new URLClassLoader(new URL[] {url}, parent);
- registeredClassLoaders.add(cl);
- return cl;
- }
-
- protected ClassLoader createChildURLClassLoaderParentLast(ClassLoader parent, URL url)
- {
- ClassLoader cl = new ParentLastURLClassLoader(new URL[] {url}, parent);
- registeredClassLoaders.add(cl);
- return cl;
- }
-
- protected ClassPool createChildURLClassPool(ClassPool parent, URL url)
- {
- ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
- ClassLoader cl = createChildURLClassLoader(parentLoader, url);
- registeredClassLoaders.add(cl);
- return ClassPoolRepository.getInstance().registerClassLoader(cl);
- }
-
- protected ClassPool createChildURLClassPoolParentLast(ClassPool parent, URL url)
- {
- ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
- ClassLoader cl = createChildURLClassLoaderParentLast(parentLoader, url);
- registeredClassLoaders.add(cl);
- ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(cl);
- pool.childFirstLookup = true;
- return pool;
- }
-
- /**
- * The test classes should not be on the launcher classpath
- */
- public void testClassesNotOnClasspath()
- {
- assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_A);
- assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_B);
- assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_C);
- }
-}
+}
\ No newline at end of file
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTestSuite.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTestSuite.java 2009-12-08 22:52:53 UTC (rev 97569)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTestSuite.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -41,10 +41,9 @@
{
TestSuite suite = new TestSuite("UclClassPool All Tests");
- suite.addTest(UclClassLoaderSanityTestCase.suite());
- suite.addTest(UclDelegatingClassPoolTestCase.suite());
+ suite.addTest(UCLLoaderSanityTestCase.suite());
+ suite.addTest(UCLLoaderClassPoolTestCase.suite());
-
return suite;
}
Deleted: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclDelegatingClassPoolTestCase.java 2009-12-08 22:52:53 UTC (rev 97569)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclDelegatingClassPoolTestCase.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -1,806 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.test.classpool.ucl.test;
-
-import static org.jboss.test.classpool.support.SupportArchives.JAR_A_1_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_A_2_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_B_1_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_B_2_URL;
-import static org.jboss.test.classpool.support.SupportArchives.JAR_C_1_URL;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
-import static org.jboss.test.classpool.support.SupportClasses.CLASS_C;
-import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_A;
-import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_B;
-
-import java.util.ArrayList;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.jboss.test.classpool.support.ClassFactory;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class UclDelegatingClassPoolTestCase extends UclClassPoolTest
-{
-
- public UclDelegatingClassPoolTestCase(String name)
- {
- // FIXME SimpleUclDelegatingClassPoolTestCase constructor
- super(name);
- }
-
- public static Test suite()
- {
- return new TestSuite(UclDelegatingClassPoolTestCase.class);
- }
-
-
- public void testGlobalScope() throws Exception
- {
- ClassPool globalA = null;
- ClassPool globalB = null;
- try
- {
- try
- {
- globalA = createGlobalClassPool(JAR_A_1_URL);
- globalB = createGlobalClassPool(JAR_B_1_URL);
-
- //Call twice to ensure that we hit the cache as well as creating the CtClases
- accessGlobalScope(globalA, globalB);
- accessGlobalScope(globalA, globalB);
- }
- finally
- {
- removeClassPool(globalA);
- }
- assertCannotLoadCtClass(globalB, CLASS_A);
- }
- finally
- {
- removeClassPool(globalB);
- }
- }
-
- private void accessGlobalScope(ClassPool globalA, ClassPool globalB) throws Exception
- {
- CtClass aFromA = globalA.get(CLASS_A);
- assertNotNull(aFromA);
- assertEquals(CLASS_A, aFromA.getName());
- CtClass bFromA = globalA.get(CLASS_B);
- assertNotNull(bFromA);
- assertEquals(CLASS_B, bFromA.getName());
- CtClass aFromB = globalB.get(CLASS_A);
- assertNotNull(aFromB);
- assertSame(aFromA, aFromB);
- CtClass bFromB = globalB.get(CLASS_B);
- assertNotNull(bFromB);
- assertSame(bFromA, bFromB);
- }
-
- public void testChildDomain() throws Exception
- {
- ClassPool poolA = null;
- ClassPool poolB = null;
- ClassPool poolC = null;
- try
- {
- poolA = createGlobalClassPool(JAR_A_1_URL);
- poolB = createGlobalClassPool(JAR_B_1_URL);
- poolC = createChildClassPool(JAR_C_1_URL, false);
-
- //Call twice to ensure that we hit the cache as well as creating the CtClases
- accessChildDomain(poolA, poolB, poolC);
- accessChildDomain(poolA, poolB, poolC);
- }
- finally
- {
- removeClassPool(poolA);
- removeClassPool(poolB);
- removeClassPool(poolC);
- }
- }
-
- private void accessChildDomain(ClassPool poolA, ClassPool poolB, ClassPool poolC) throws Exception
- {
- CtClass aFromA = poolA.get(CLASS_A);
- assertNotNull(aFromA);
- CtClass bFromB = poolB.get(CLASS_B);
- assertNotNull(bFromB);
- CtClass cFromC = poolC.get(CLASS_C);
- assertNotNull(cFromC);
- CtClass aFromC = poolC.get(CLASS_A);
- assertNotNull(aFromC);
- CtClass bFromC = poolC.get(CLASS_B);
- assertNotNull(bFromC);
-
- assertSame(aFromA, aFromC);
- assertSame(bFromB, bFromC);
- assertSame(poolA, aFromA.getClassPool());
- assertSame(poolB, bFromB.getClassPool());
- assertSame(poolC, cFromC.getClassPool());
-
- assertCannotLoadCtClass(poolA, CLASS_C);
- assertCannotLoadCtClass(poolB, CLASS_C);
- }
-
- public void testSiblingDomains() throws Exception
- {
- ClassPool poolA = createChildClassPool(JAR_A_1_URL, true);
- ClassPool poolB = createChildClassPool(JAR_B_1_URL, false);
-
- try
- {
- accessSiblingDomains(poolA, poolB);
- }
- finally
- {
- removeClassPool(poolA);
- removeClassPool(poolB);
- }
- }
-
- private void accessSiblingDomains(ClassPool poolA, ClassPool poolB) throws Exception
- {
- CtClass clazzA = poolA.get(CLASS_A);
- assertSame(poolA, clazzA.getClassPool());
- CtClass clazzB = poolB.get(CLASS_B);
- assertSame(poolB, clazzB.getClassPool());
- assertCannotLoadCtClass(poolA, CLASS_B);
- assertCannotLoadCtClass(poolB, CLASS_A);
- }
-
- public void testChildWithNewClassesInParent() throws Exception
- {
- ClassPool globalPool = null;
- ClassPool scopedPool = null;
- try
- {
- scopedPool = createChildClassPool(JAR_B_1_URL, true);
- assertCannotLoadCtClass(scopedPool, CLASS_A);
-
- globalPool = createGlobalClassPool(JAR_A_1_URL);
- CtClass aFromChild = scopedPool.get(CLASS_A);
- assertNotNull(aFromChild);
- CtClass aFromParent = globalPool.get(CLASS_A);
- assertNotNull(aFromParent);
- assertSame(aFromChild, aFromParent);
- assertSame(globalPool, aFromParent.getClassPool());
-
- CtClass aFromChild2 = scopedPool.get(CLASS_A);
- assertSame(aFromChild, aFromChild2);
- }
- finally
- {
- removeClassPool(globalPool);
- removeClassPool(scopedPool);
- }
- }
-
- public void testChildOverrideWithParentDelegation() throws Exception
- {
- ClassPool globalPool = null;
- ClassPool scopedPool = null;
- try
- {
- globalPool = createGlobalClassPool(JAR_A_1_URL);
- scopedPool = createChildClassPool(JAR_A_2_URL, true);
- CtClass aFromParent = globalPool.get(CLASS_A);
- assertNotNull(aFromParent);
- CtClass aFromChild = scopedPool.get(CLASS_A);
- assertNotNull(aFromChild);
- assertSame(aFromParent, aFromChild);
- assertSame(globalPool, aFromParent.getClassPool());
- }
- finally
- {
- removeClassPool(globalPool);
- removeClassPool(scopedPool);
- }
- }
-
- public void testChildOverrideWithNoParentDelegation() throws Exception
- {
- ClassPool globalPool = null;
- ClassPool scopedPool = null;
- try
- {
- globalPool = createGlobalClassPool(JAR_A_1_URL);
- scopedPool = createChildClassPool(JAR_A_2_URL, false);
- CtClass aFromParent = globalPool.get(CLASS_A);
- assertNotNull(aFromParent);
- CtClass aFromChild = scopedPool.get(CLASS_A);
- assertNotNull(aFromChild);
- assertNotSame(aFromParent, aFromChild);
- assertSame(globalPool, aFromParent.getClassPool());
- assertSame(scopedPool, aFromChild.getClassPool());
- }
- finally
- {
- removeClassPool(globalPool);
- removeClassPool(scopedPool);
- }
- }
-
- public void testURLChildOfGlobalUclParentFirst() throws Exception
- {
- ClassPool globalPool = null;
- ClassPool childA = null;
- ClassPool childB = null;
- try
- {
- globalPool = createGlobalClassPool(JAR_A_1_URL);
- childA = createChildURLClassPool(globalPool, JAR_B_1_URL);
-
- //Try loading A from child first
- CtClass aFromA = childA.get(CLASS_A);
- assertSame(globalPool, aFromA.getClassPool());
-
- //Try loading A from global
- CtClass aFromGlobal = globalPool.get(CLASS_A);
- assertSame(aFromA, aFromGlobal);
-
- //Try loading B from A
- CtClass bFromA = childA.get(CLASS_B);
- assertSame(childA, bFromA.getClassPool());
-
- //Should get the cached copy from the parent
- childB = createChildURLClassPool(globalPool, JAR_A_2_URL);
- CtClass aFromB = childB.get(CLASS_A);
- assertSame(globalPool, aFromB.getClassPool());
- }
- finally
- {
- removeClassPool(globalPool);
- removeClassPool(childA);
- removeClassPool(childB);
- }
- }
-
-
- public void testURLChildOfGlobalUcParentLast() throws Exception
- {
- ClassPool globalPool = null;
- ClassPool childA = null;
- ClassPool childB = null;
- try
- {
- globalPool = createGlobalClassPool(JAR_A_1_URL);
- childA = createChildURLClassPoolParentLast(globalPool, JAR_B_1_URL);
-
- //Try loading A from child first
- CtClass aFromA = childA.get(CLASS_A);
- assertSame(globalPool, aFromA.getClassPool());
-
- //Try loading A from global
- CtClass aFromGlobal = globalPool.get(CLASS_A);
- assertSame(aFromA, aFromGlobal);
-
- //Try loading B from A
- CtClass bFromA = childA.get(CLASS_B);
- assertSame(childA, bFromA.getClassPool());
-
- //Should get the child copy
- childB = createChildURLClassPoolParentLast(globalPool, JAR_A_2_URL/* TODO why can't I use JARA1_URL instead?/*JAR_A_1_URL*/);
- CtClass aFromB = childB.get(CLASS_A);
- assertSame(childB, aFromB.getClassPool());
- }
- finally
- {
- removeClassPool(globalPool);
- removeClassPool(childA);
- removeClassPool(childB);
- }
- }
-
- public void testURLChildOfGlobalUclParentFirstWithClassInGlobalSibling() throws Exception
- {
- ClassPool globalPoolA = null;
- ClassPool globalPoolB = null;
- ClassPool childC = null;
- ClassPool childB = null;
- try
- {
- globalPoolA = createGlobalClassPool(JAR_A_1_URL);
- globalPoolB = createGlobalClassPool(JAR_B_1_URL);
- childC = createChildURLClassPool(globalPoolA, JAR_C_1_URL);
-
- //Try loading A from child first
- CtClass bFromC = childC.get(CLASS_B);
- assertSame(globalPoolB, bFromC.getClassPool());
-
- //Try loading A from global
- CtClass bFromGlobalA = globalPoolA.get(CLASS_B);
- assertSame(bFromC, bFromGlobalA);
-
- //Try loading B from A
- CtClass cFromC = childC.get(CLASS_C);
- assertSame(childC, cFromC.getClassPool());
-
- //Should get the cached copy from the parent
- childB = createChildURLClassPool(globalPoolA, JAR_B_2_URL);
- CtClass bFromB = childB.get(CLASS_B);
- assertSame(globalPoolB, bFromB.getClassPool());
- }
- finally
- {
- removeClassPool(globalPoolA);
- removeClassPool(globalPoolB);
- removeClassPool(childC);
- removeClassPool(childB);
- }
- }
-
- public void testUndeploySibling() throws Exception
- {
- ClassPool poolA = null;
- ClassPool poolB = null;
- try
- {
- try
- {
- poolA = createGlobalClassPool(JAR_A_1_URL);
- assertCannotLoadCtClass(poolA, CLASS_B);
-
- poolB = createGlobalClassPool(JAR_B_1_URL);
- CtClass bFromA = poolA.get(CLASS_B);
- assertSame(poolB, bFromA.getClassPool());
- }
- finally
- {
- removeClassPool(poolB);
- }
- assertCannotLoadCtClass(poolA, CLASS_B);
- }
- finally
- {
- removeClassPool(poolA);
- removeClassPool(poolB);
- }
- }
-
-
-// public void testUndeployParentDomainClassLoader() throws Exception
-// {
-// ClassLoader globalA = null;
-// ClassLoader globalB = null;
-// ClassLoader child = null;
-// try
-// {
-// try
-// {
-// globalA = createGlobalClassLoader(JAR_A_1);
-// assertCannotLoadClass(globalA, CLASS_B);
-//
-// child = createChildClassLoader(JAR_C_1, true);
-// assertCannotLoadClass(child, CLASS_B);
-//
-// globalB = createGlobalClassLoader(JAR_B_1);
-// Class<?> bFromChild = child.loadClass(CLASS_B);
-// Class<?> bFromA = globalA.loadClass(CLASS_B);
-// assertSame(globalB, bFromA.getClassLoader());
-// assertSame(bFromA, bFromChild);
-// }
-// finally
-// {
-// removeClassLoaderFromRepository(globalB);
-// }
-// assertCannotLoadClass(child, CLASS_B);
-// }
-// finally
-// {
-// removeClassLoaderFromRepository(globalA);
-// }
-// }
-
- public void testUclWithParentClassLoader() throws Exception
- {
- ClassPool parent = null;
- ClassPool global = null;
- try
- {
- parent = createChildURLClassPool(null, JAR_B_1_URL);
- global = createGlobalClassPoolWithParent(JAR_A_1_URL, parent);
-
- CtClass aFromGlobal = global.get(CLASS_A);
- assertSame(global, aFromGlobal.getClassPool());
- CtClass aFromGlobal2 = global.get(CLASS_A);
- assertSame(aFromGlobal, aFromGlobal2);
-
- CtClass bFromGlobal = global.get(CLASS_B);
- assertSame(parent, bFromGlobal.getClassPool());
- CtClass bFromGlobal2 = global.get(CLASS_B);
- assertSame(bFromGlobal, bFromGlobal2);
-
- CtClass bFromParent = parent.get(CLASS_B);
- assertSame(parent, bFromParent.getClassPool());
- assertSame(bFromGlobal, bFromParent);
- CtClass bFromParent2 = parent.get(CLASS_B);
- assertSame(bFromParent, bFromParent2);
- }
- finally
- {
- removeClassPool(global);
- removeClassPool(parent);
- }
- }
-
- public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
- {
- ClassPool parent = null;
- ClassPool globalA = null;
- ClassPool globalB = null;
- try
- {
- parent = createChildURLClassPool(null, JAR_B_1_URL);
- globalA = createGlobalClassPoolWithParent(JAR_A_1_URL, parent);
-
- CtClass aFromGlobal = globalA.get(CLASS_A);
- assertSame(globalA, aFromGlobal.getClassPool());
- CtClass aFromGlobal2 = globalA.get(CLASS_A);
- assertSame(aFromGlobal, aFromGlobal2);
-
- globalB = createGlobalClassPool(JAR_B_2_URL);
- CtClass bFromGlobalA = globalA.get(CLASS_B);
- assertSame(globalB, bFromGlobalA.getClassPool());
- CtClass bFromGlobalA2 = globalA.get(CLASS_B);
- assertSame(bFromGlobalA, bFromGlobalA2);
-
-
- CtClass bFromParent = parent.get(CLASS_B);
- assertSame(parent, bFromParent.getClassPool());
- assertNotSame(bFromGlobalA, bFromParent);
- CtClass bFromParent2 = parent.get(CLASS_B);
- assertSame(bFromParent, bFromParent2);
- }
- finally
- {
- removeClassPool(globalA);
- removeClassPool(globalB);
- removeClassPool(parent);
- }
- }
-
- public void testGeneratingClassInNonDelegatingPool() throws Exception
- {
- ClassPool parent = null;
- ClassPool global = null;
- ClassPool child = null;
- try
- {
- final String PARENT = "parent.Parent";
- final String CHILD = "child.Child";
- parent = createChildURLClassPool(null, JAR_B_1_URL);
- global = createGlobalClassPoolWithParent(JAR_A_1_URL, parent);
- child = createChildURLClassPool(global, JAR_C_1_URL);
-
- assertCannotLoadCtClass(parent, PARENT);
- assertCannotLoadCtClass(global, PARENT);
- assertCannotLoadCtClass(child, PARENT);
- assertCannotLoadCtClass(child, CHILD);
-
- CtClass parentClass = parent.makeClass(PARENT);
-
- CtClass childClass = child.makeClass(CHILD);
- childClass.setSuperclass(parentClass);
-
- CtClass parentFromParent = parent.get(PARENT);
- assertSame(parent, parentFromParent.getClassPool());
- assertSame(parentClass, parentFromParent);
-
- CtClass childFromChild = child.get(CHILD);
- assertSame(child, childFromChild.getClassPool());
- assertSame(childClass, childFromChild);
-
- assertCannotLoadCtClass(global, CHILD);
-
- CtClass parentFromChildA = childClass.getSuperclass();
- assertSame(parentClass, parentFromChildA);
-
- CtClass parentFromChildB = child.get(PARENT);
- assertSame(parentClass, parentFromChildB);
-
- Class<?> parentClazz = parentClass.toClass();
- assertSame(parent.getClassLoader(), parentClazz.getClassLoader());
-
- Class<?> childClazz = childClass.toClass();
- assertSame(child.getClassLoader(), childClazz.getClassLoader());
-
- Class<?> parentClazzFromParent = parent.getClassLoader().loadClass(PARENT);
- assertSame(parentClazz, parentClazzFromParent);
-
- Class<?> parentClazzFromChild = parent.getClassLoader().loadClass(PARENT);
- assertSame(parentClazz, parentClazzFromChild);
-
- Class<?> childClazzFromChild = child.getClassLoader().loadClass(CHILD);
- assertSame(childClazz, childClazzFromChild);
-
-
- child.getClassLoader().loadClass(CLASS_A);
- }
- finally
- {
- removeClassPool(parent);
- removeClassPool(global);
- removeClassPool(child);
- }
- }
-
- public void testGeneratingClassInDelegatingPool() throws Exception
- {
- ClassPool globalA = null;
- ClassPool globalB = null;
- ClassPool child = null;
- try
- {
- globalA = createGlobalClassPool(JAR_A_1_URL);
- globalB = createGlobalClassPool(JAR_B_1_URL);
- child = createChildURLClassPool(globalA, JAR_C_1_URL);
-
- final String A_CLASS = "a.Clazz";
- final String B_CLASS = "b.Clazz";
-
- assertCannotLoadCtClass(globalA, A_CLASS);
- assertCannotLoadCtClass(globalB, A_CLASS);
- assertCannotLoadCtClass(child, A_CLASS);
- assertCannotLoadCtClass(globalA, B_CLASS);
- assertCannotLoadCtClass(globalB, B_CLASS);
- assertCannotLoadCtClass(child, B_CLASS);
-
- CtClass a = globalA.makeClass(A_CLASS);
- CtClass b = globalB.makeClass(B_CLASS);
-
- CtClass aFromA = globalA.get(A_CLASS);
- assertSame(a, aFromA);
- assertSame(globalA, aFromA.getClassPool());
- CtClass aFromB = globalB.get(A_CLASS);
- assertSame(a, aFromB);
- CtClass bFromA = globalA.get(B_CLASS);
- assertSame(b, bFromA);
- assertSame(globalB, bFromA.getClassPool());
- CtClass bFromB = globalB.get(B_CLASS);
- assertSame(b, bFromB);
- CtClass aFromChild = child.get(A_CLASS);
- assertSame(a, aFromChild);
- CtClass bFromChild = child.get(B_CLASS);
- assertSame(b, bFromChild);
-
- Class<?> clazzA = a.toClass();
- assertSame(globalA.getClassLoader(), clazzA.getClassLoader());
-
- Class<?> clazzB = b.toClass();
- assertSame(globalB.getClassLoader(), clazzB.getClassLoader());
-
- Class<?> clazzAFromA = globalA.getClassLoader().loadClass(A_CLASS);
- assertSame(clazzA, clazzAFromA);
- Class<?> clazzAFromB = globalB.getClassLoader().loadClass(A_CLASS);
- assertSame(clazzA, clazzAFromB);
- Class<?> clazzAFromChild = child.getClassLoader().loadClass(A_CLASS);
- assertSame(clazzA, clazzAFromChild);
-
- Class<?> clazzBFromA = globalA.getClassLoader().loadClass(B_CLASS);
- assertSame(clazzB, clazzBFromA);
- Class<?> clazzBFromB = globalB.getClassLoader().loadClass(B_CLASS);
- assertSame(clazzB, clazzBFromB);
- Class<?> clazzBFromChild = child.getClassLoader().loadClass(B_CLASS);
- assertSame(clazzB, clazzBFromChild);
- }
- finally
- {
- removeClassPool(globalA);
- removeClassPool(globalB);
- removeClassPool(child);
- }
- }
-
- public void testUclLoaderOrdering() throws Exception
- {
- ClassPool globalA = null;
- ClassPool globalB = null;
- ClassPool globalC = null;
- try
- {
- globalA = createGlobalClassPool(JAR_A_1_URL);
- globalB = createGlobalClassPool(JAR_A_1_URL);
- globalC = createGlobalClassPool(JAR_A_1_URL);
-
- CtClass aFromA = globalA.get(CLASS_A);
- CtClass aFromB = globalB.get(CLASS_A);
- CtClass aFromC = globalC.get(CLASS_A);
- assertSame(aFromA, aFromB);
- assertSame(aFromA, aFromC);
- assertSame(globalA, aFromA.getClassPool());
- }
- finally
- {
- removeClassPool(globalA);
- removeClassPool(globalB);
- removeClassPool(globalC);
- }
- }
-
- public void testCreateClassInSamePackage() throws Exception
- {
- ClassPool globalPoolA = null;
- ClassPool globalPoolB = null;
- try
- {
- globalPoolA = createGlobalClassPool(JAR_A_1_URL);
- globalPoolB = createGlobalClassPool(JAR_B_1_URL);
-
- ClassLoader loaderA = globalPoolA.getClassLoader();
- ClassLoader loaderB = globalPoolB.getClassLoader();
-
- Class<?> classA = loaderA.loadClass(CLASS_A);
- Class<?> classB = loaderB.loadClass(CLASS_B);
-
- Object createdA = ClassFactory.create(classA, loaderA);
- Object createdB = ClassFactory.create(classB, loaderB);
-
- Class<?> createdClassA = createdA.getClass();
- Class<?> createdClassB = createdB.getClass();
-
- assertTrue(classA.isAssignableFrom(createdClassA));
- assertTrue(classB.isAssignableFrom(createdClassB));
- assertTrue(createdClassA.getName().startsWith(PACKAGE_A));
- assertTrue(createdClassB.getName().startsWith(PACKAGE_B));
-
- assertSame(createdClassA, loaderA.loadClass(createdClassA.getName()));
- assertSame(createdClassB, loaderA.loadClass(createdClassB.getName()));
- assertSame(createdClassA, loaderB.loadClass(createdClassA.getName()));
- assertSame(createdClassB, loaderB.loadClass(createdClassB.getName()));
- }
- finally
- {
- removeClassPool(globalPoolA);
- removeClassPool(globalPoolB);
- }
- }
-
- /*public void testMakeContainerProxyInSamePackage() throws Exception
- {
- ClassPool globalPoolA = null;
- ClassPool globalPoolB = null;
- try
- {
- globalPoolA = createGlobalClassPool(JAR_A_1);
- globalPoolB = createGlobalClassPool(JAR_B_1);
-
- ClassLoader loaderA = globalPoolA.getClassLoader();
- ClassLoader loaderB = globalPoolB.getClassLoader();
-
- Object proxyA = assertMakeContainerProxy(loaderA.loadClass(CLASS_A), loaderA);
- Object proxyB = assertMakeContainerProxy(loaderB.loadClass(CLASS_B), loaderB);
-
- Class<?> clazzA = proxyA.getClass();
- Class<?> clazzB = proxyB.getClass();
-
- assertTrue(AspectManaged.class.isAssignableFrom(clazzA));
- assertTrue(AspectManaged.class.isAssignableFrom(clazzB));
- assertTrue(clazzA.getName().startsWith(PACKAGE_A));
- assertTrue(clazzB.getName().startsWith(PACKAGE_B));
-
- assertSame(clazzA, loaderA.loadClass(clazzA.getName()));
- assertSame(clazzB, loaderA.loadClass(clazzB.getName()));
- assertSame(clazzA, loaderB.loadClass(clazzA.getName()));
- assertSame(clazzB, loaderB.loadClass(clazzB.getName()));
- }
- finally
- {
- removeClassPool(globalPoolA);
- removeClassPool(globalPoolB);
- }
- }*/
-
- public void testCreatedClassForSystemClass() throws Exception
- {
- ClassPool globalPoolA = null;
- ClassPool globalPoolB = null;
- try
- {
- globalPoolA = createGlobalClassPool(JAR_A_1_URL);
- globalPoolB = createGlobalClassPool(JAR_B_1_URL);
-
- ClassLoader loaderA = globalPoolA.getClassLoader();
- ClassLoader loaderB = globalPoolB.getClassLoader();
-
- Object createdA = ClassFactory.create(ArrayList.class, loaderA);
- Object createdB = ClassFactory.create(ArrayList.class, loaderB);
-
- Class<?> createdClassA = createdA.getClass();
- Class<?> createdClassB = createdB.getClass();
-
- assertTrue(ArrayList.class.isAssignableFrom(createdClassA));
- assertTrue(ArrayList.class.isAssignableFrom(createdClassB));
- assertTrue(createdClassA.getName().startsWith(ClassFactory.PACKAGE));
- assertTrue(createdClassB.getName().startsWith(ClassFactory.PACKAGE));
-
- assertSame(createdClassA, loaderA.loadClass(createdClassA.getName()));
- assertSame(createdClassB, loaderA.loadClass(createdClassB.getName()));
- assertSame(createdClassA, loaderB.loadClass(createdClassA.getName()));
- assertSame(createdClassB, loaderB.loadClass(createdClassB.getName()));
- }
- finally
- {
- removeClassPool(globalPoolA);
- removeClassPool(globalPoolB);
- }
- }
-
- /*public void testMakeContainerProxyForSystemClass() throws Exception
- {
- ClassPool globalPoolA = null;
- ClassPool globalPoolB = null;
- try
- {
- globalPoolA = createGlobalClassPool(JAR_A_1);
- globalPoolB = createGlobalClassPool(JAR_B_1);
-
- ClassLoader loaderA = globalPoolA.getClassLoader();
- ClassLoader loaderB = globalPoolB.getClassLoader();
-
- Object proxyA = assertMakeContainerProxy(ArrayList.class, loaderA);
- Object proxyB = assertMakeContainerProxy(ArrayList.class, loaderB);
-
- Class<?> clazzA = proxyA.getClass();
- Class<?> clazzB = proxyB.getClass();
-
- assertTrue(AspectManaged.class.isAssignableFrom(clazzA));
- assertTrue(AspectManaged.class.isAssignableFrom(clazzB));
- assertTrue(clazzA.getName().startsWith(ContainerProxyFactory.PROXY_CLASSES_DEFAULT_PACKAGE));
- assertTrue(clazzB.getName().startsWith(ContainerProxyFactory.PROXY_CLASSES_DEFAULT_PACKAGE));
-
- assertSame(clazzA, loaderA.loadClass(clazzA.getName()));
- assertSame(clazzB, loaderA.loadClass(clazzB.getName()));
- assertSame(clazzA, loaderB.loadClass(clazzA.getName()));
- assertSame(clazzB, loaderB.loadClass(clazzB.getName()));
- }
- finally
- {
- removeClassPool(globalPoolA);
- removeClassPool(globalPoolB);
- }
- }*/
-
- /*private Object assertMakeContainerProxy(Class<?> parent, ClassLoader loader) throws Exception
- {
- AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
- params.setProxiedClass(parent);
- params.setTarget(parent.newInstance());
- params.setClassLoader(loader);
- params.setInterfaces(new Class<?>[] {java.io.Serializable.class});
- GeneratedAOPProxyFactory factory = new GeneratedAOPProxyFactory();
- Object proxy = factory.createAdvisedProxy(params);
- assertFalse(parent.getName() == proxy.getClass().getName());
- assertSame(loader, proxy.getClass().getClassLoader());
- return proxy;
- }*/
-
-
-}
Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclLoaderTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclLoaderTest.java (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclLoaderTest.java 2009-12-08 23:25:54 UTC (rev 97570)
@@ -0,0 +1,260 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classpool.ucl.test;
+
+import static org.jboss.test.classpool.support.SupportArchives.JAR_A_1_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_A_2_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_B_1_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_B_2_URL;
+import static org.jboss.test.classpool.support.SupportArchives.JAR_C_1_URL;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_C;
+
+import org.jboss.test.classpool.ucl.support.ChildCLInfo;
+import org.jboss.test.classpool.ucl.support.GlobalCLInfo;
+import org.jboss.test.classpool.ucl.support.UCLInfo;
+import org.jboss.test.classpool.ucl.support.URLClassLoaderInfo;
+
+/**
+ * This is here to figure out how the UCLs work, and we will duplicate this
+ * in the classpool test
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+public abstract class UclLoaderTest< C, L> extends UclClassPoolTest< C, L>
+{
+ public UclLoaderTest(String name)
+ {
+ super(name);
+ }
+
+ public void testGlobalScope() throws Exception
+ {
+ UCLInfo uclInfoA = new GlobalCLInfo(JAR_A_1_URL);
+ L loaderA = testScenario.createLoader(uclInfoA);
+ UCLInfo uclInfoB = new GlobalCLInfo(JAR_B_1_URL);
+ L loaderB = testScenario.createLoader(uclInfoB);
+ //Call twice to ensure that we hit the cache
+ accessGlobalScope(loaderA, loaderB);
+ accessGlobalScope(loaderA, loaderB);
+
+ testScenario.destroyLoader(uclInfoB);
+ testScenario.loadClass(loaderA, CLASS_A);
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+ }
+
+
+ public void testChildDomain() throws Exception
+ {
+ L loaderA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ L loaderB = testScenario.createLoader(new GlobalCLInfo(JAR_B_1_URL));
+ L loaderC = testScenario.createLoader(new ChildCLInfo(JAR_C_1_URL, false));
+ //Call twice to ensure that we hit the cache
+ accessChildDomain(loaderA, loaderB, loaderC);
+ accessChildDomain(loaderA, loaderB, loaderC);
+ }
+
+ public void testSiblingDomains() throws Exception
+ {
+ L loaderA = testScenario.createLoader(new ChildCLInfo(JAR_A_1_URL, true));
+ L loaderB = testScenario.createLoader(new ChildCLInfo(JAR_B_1_URL, false));
+
+ testScenario.loadClass(loaderA, CLASS_A);
+ testScenario.loadClass(loaderB, CLASS_B);
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+ testScenario.cannotLoadClass(loaderB, CLASS_A);
+ }
+
+ public void testChildWithNewClassesInParent() throws Exception
+ {
+ L scopedLoader = testScenario.createLoader(new ChildCLInfo(JAR_B_1_URL, true));
+ testScenario.cannotLoadClass(scopedLoader, CLASS_A);
+ L globalLoader = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ C aFromChild = testScenario.loadClass(scopedLoader, globalLoader, CLASS_A);
+ C aFromParent = testScenario.loadClass(globalLoader, CLASS_A);
+ assertSame(aFromChild, aFromParent);
+
+ C aFromChild2 = testScenario.loadClass(scopedLoader, globalLoader, CLASS_A);
+ assertSame(aFromChild, aFromChild2);
+ }
+
+ public void testChildOverrideWithParentDelegation() throws Exception
+ {
+ L globalLoader = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ L scopedLoader = testScenario.createLoader(new ChildCLInfo(JAR_A_2_URL, true));
+
+ C aFromParent = testScenario.loadClass(globalLoader, CLASS_A);
+ C aFromChild = testScenario.loadClass(scopedLoader, globalLoader, CLASS_A);
+ assertSame(aFromParent, aFromChild);
+ }
+
+ public void testChildOverrideWithNoParentDelegation() throws Exception
+ {
+ L globalLoader = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ L scopedLoader = testScenario.createLoader(new ChildCLInfo(JAR_A_2_URL, false));
+
+ C aFromParent = testScenario.loadClass(globalLoader, CLASS_A);
+ C aFromChild = testScenario.loadClass(scopedLoader, CLASS_A);
+ assertNotSame(aFromParent, aFromChild);
+ }
+
+ public void testURLChildOfGlobalUclParentFirst() throws Exception
+ {
+ L globalLoader = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ ClassLoader globalClassLoader = testScenario.getClassLoader(globalLoader);
+ L childLoaderA = testScenario.createLoader(new URLClassLoaderInfo(JAR_B_1_URL, globalClassLoader));
+
+ //Try loading A from child first
+ C aFromA = testScenario.loadClass(childLoaderA, globalLoader, CLASS_A);
+
+ //Try loading A from global
+ C aFromGlobal = testScenario.loadClass(globalLoader, CLASS_A);
+ assertSame(aFromA, aFromGlobal);
+
+ //Try loading B from A
+ testScenario.loadClass(childLoaderA, CLASS_B);
+
+ L childLoaderB = testScenario.createLoader(new URLClassLoaderInfo(JAR_A_2_URL, globalClassLoader));
+
+ //Should get the cached copy from the parent
+ C aFromB = testScenario.loadClass(childLoaderB, globalLoader, CLASS_A);
+ assertSame(aFromA, aFromB);
+ }
+
+ public void testUndeploySibling() throws Exception
+ {
+ L loaderA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+
+ UCLInfo uclInfoB = new GlobalCLInfo(JAR_B_1_URL);
+ L loaderB = testScenario.createLoader(uclInfoB);
+
+ testScenario.loadClass(loaderA, loaderB, CLASS_B);
+ testScenario.destroyLoader(uclInfoB);
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+ }
+
+ /* FIXME test doesn't work
+ public void testUndeployParentDomainClassLoader() throws Exception
+ {
+ L loaderA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+
+ L childLoader = testScenario.createLoader(new ChildCLInfo(JAR_C_1_URL, true));
+ testScenario.cannotLoadClass(childLoader, CLASS_B);
+
+ UCLInfo uclInfoB = new GlobalCLInfo(JAR_B_1_URL);
+ L loaderB = testScenario.createLoader(uclInfoB);
+
+ C bFromChild = testScenario.loadClass(childLoader, loaderB, CLASS_B);
+ C bFromA = testScenario.loadClass(loaderA, loaderB, CLASS_B);
+ assertSame(bFromA, bFromChild);
+
+ testScenario.destroyLoader(uclInfoB);
+ testScenario.cannotLoadClass(loaderA, CLASS_B);
+ testScenario.cannotLoadClass(childLoader, CLASS_B);
+ }*/
+
+ public void testUclWithParentClassLoader() throws Exception
+ {
+ L parentLoader = testScenario.createLoader(new URLClassLoaderInfo(JAR_B_1_URL));
+ L globalLoader = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL,
+ testScenario.getClassLoader(parentLoader)));
+
+ C aFromGlobal = testScenario.loadClass(globalLoader, CLASS_A);
+ C aFromGlobal2 = testScenario.loadClass(globalLoader, CLASS_A);
+ assertSame(aFromGlobal, aFromGlobal2);
+
+ C bFromGlobal = testScenario.loadClass(globalLoader, parentLoader, CLASS_B);
+ C bFromGlobal2 = testScenario.loadClass(globalLoader, parentLoader, CLASS_B);
+ assertSame(bFromGlobal, bFromGlobal2);
+
+ C bFromParent = testScenario.loadClass(parentLoader, CLASS_B);
+ C bFromParent2 = testScenario.loadClass(parentLoader, CLASS_B);
+ assertSame(bFromParent, bFromParent2);
+ assertSame(bFromGlobal, bFromParent);
+ }
+
+
+ public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
+ {
+ L parentLoader = testScenario.createLoader(new URLClassLoaderInfo(JAR_B_1_URL));
+ L globalLoaderA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL,
+ testScenario.getClassLoader(parentLoader)));
+
+ C aFromGlobal = testScenario.loadClass(globalLoaderA, CLASS_A);
+ C aFromGlobal2 = testScenario.loadClass(globalLoaderA, CLASS_A);
+ assertSame(aFromGlobal, aFromGlobal2);
+
+ L globalLoaderB = testScenario.createLoader(new GlobalCLInfo(JAR_B_2_URL));
+ C bFromGlobal = testScenario.loadClass(globalLoaderA, globalLoaderB, CLASS_B);
+ C bFromGlobal2 = testScenario.loadClass(globalLoaderA, globalLoaderB, CLASS_B);
+ assertSame(bFromGlobal, bFromGlobal2);
+
+ C bFromParent = testScenario.loadClass(parentLoader, CLASS_B);
+ C bFromParent2 = testScenario.loadClass(parentLoader, CLASS_B);
+ assertSame(bFromParent, bFromParent2);
+
+ assertNotSame(bFromGlobal, bFromParent);
+ }
+
+ public void testUclLoaderOrdering() throws Exception
+ {
+ L globalLoaderA = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ L globalLoaderB = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+ L globalLoaderC = testScenario.createLoader(new GlobalCLInfo(JAR_A_1_URL));
+
+ C aFromA = testScenario.loadClass(globalLoaderA, CLASS_A);
+ C aFromB = testScenario.loadClass(globalLoaderB, globalLoaderA, CLASS_A);
+ C aFromC = testScenario.loadClass(globalLoaderC, globalLoaderA, CLASS_A);
+ assertSame(aFromA, aFromB);
+ assertSame(aFromA, aFromC);
+ }
+
+ private void accessGlobalScope(L loaderA, L loaderB) throws Exception
+ {
+ C aFromA = testScenario.loadClass(loaderA, CLASS_A);
+ C bFromA = testScenario.loadClass(loaderA, loaderB, CLASS_B);
+ C aFromB = testScenario.loadClass(loaderB, loaderA, CLASS_A);
+ C bFromB = testScenario.loadClass(loaderB, CLASS_B);
+ assertSame(aFromA, aFromB);
+ assertSame(bFromA, bFromB);
+ }
+
+ private void accessChildDomain(L loaderA, L loaderB, L loaderC)
+ throws Exception
+ {
+ C aFromA = testScenario.loadClass(loaderA, CLASS_A);
+ C bFromB = testScenario.loadClass(loaderB, CLASS_B);
+ C aFromC = testScenario.loadClass(loaderC, loaderA, CLASS_A);
+ C bFromC = testScenario.loadClass(loaderC, loaderB, CLASS_B);
+ assertSame(aFromA, aFromC);
+ assertSame(bFromB, bFromC);
+
+ testScenario.loadClass(loaderC, CLASS_C);
+ testScenario.cannotLoadClass(loaderA, CLASS_C);
+ testScenario.cannotLoadClass(loaderB, CLASS_C);
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclLoaderTest.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
More information about the jboss-cvs-commits
mailing list