[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