[jboss-cvs] JBossAS SVN: r64748 - projects/aop/trunk/aop/src/test/org/jboss/test/aop/memoryleaks.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 21 14:01:12 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-08-21 14:01:12 -0400 (Tue, 21 Aug 2007)
New Revision: 64748

Modified:
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java
Log:
Fix URL for undeploy so it works on linux


Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java	2007-08-21 18:00:07 UTC (rev 64747)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java	2007-08-21 18:01:12 UTC (rev 64748)
@@ -18,7 +18,7 @@
 * 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.aop.memoryleaks;
 
 import java.io.File;
@@ -44,13 +44,13 @@
 import org.jboss.profiler.jvmti.JVMTIInterface;
 
 /**
- * 
+ *
  * @author <a href="clebert.suconic at jboss.com">Clebert Suconic</a>
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  */
 public class MemoryLeakTestCase extends TestCase
 {
-   
+
    /**
     * Constructor for UndeployTester.
     * @param arg0
@@ -59,7 +59,7 @@
    {
       super(name);
    }
-   
+
    public MemoryLeakTestCase()
    {
       super();
@@ -67,7 +67,7 @@
 
    public void testWithClassLoader() throws Exception
    {
-	  
+
 	  LogManager.getLogManager(); // this is just to avoid a thread to be created using this ContextClassLoader inside LogManager
       WeakReference weakReferenceOnLoader = null;
       Class xmlLoader = null; // we need to keep that reference, so only the customer's classLoader will go away.
@@ -80,45 +80,45 @@
             ClassLoader oldloader = Thread.currentThread().getContextClassLoader();
             ClassLoader loader = newClassLoader();
             weakReferenceOnLoader = new WeakReference(loader);
-            
+
             Thread.currentThread().setContextClassLoader(loader);
-      
+
             Class testClass = getTestCaseClass(loader);
             className = testClass.getName();
-            
+
             Class aspectManagerClass = loader.loadClass("org.jboss.aop.AspectManager");
             assertNotSame(aspectManagerClass.getClassLoader(), this.getClass().getClassLoader());
-            
+
             System.out.println("oldLoader");
-   
+
             xmlLoader = loader.loadClass("org.jboss.aop.AspectXmlLoader");
             assertNotSame(xmlLoader.getClassLoader(),loader);
-   
+
             ArrayList methods = getTestMethods(testClass);
             Object testInstance = getTestInstance(testClass);
-            
+
             boolean passed = runTests(testInstance, methods);
             assertTrue(passed);
-            
+
             undeploy(xmlLoader);
-   
+
             passed = runTests(testInstance, methods, true);
             System.out.println("============ Ran tests after undeploy with errors: " + passed);
-            
+
             unregisterClassLoader(aspectManagerClass, loader);
-            
+
             loader=null;
             testClass=null;
             testInstance = null;
             methods.clear();
-            //xmlLoader = null; 
+            //xmlLoader = null;
             Thread.currentThread().setContextClassLoader(oldloader);
          }
 
          assertEquals(1, countInstances("org.jboss.aop.AspectManager", true));
          //checkUnload( weakReferenceOnLoader,"org.jboss.test.aop.memoryleaks.Test");
          checkUnload( weakReferenceOnLoader, className);
-         
+
          // I'm pretty sure nobody would clear that reference. I'm keeping this assertion here just to make it clear why we can't clear xmlLoader
          assertNotNull("The masterClassLoader needs to keep a reference, only the customer's classLoader needs to go away",xmlLoader);
       }
@@ -127,22 +127,22 @@
          e.printStackTrace();
          throw e;
       }
-      
+
       System.out.println("Done!");
    }
 
    private Object getTestInstance(Class testClass) throws Exception
    {
-      
+
       Constructor[] constructors = testClass.getConstructors();
       Constructor defaultConstructor =  null;
       Constructor nameConstructor =  null;
-      
+
       for (int i = 0 ; i < constructors.length ; i++)
       {
          System.out.println("found ctor " + constructors[i]);
          Class[] params = constructors[i].getParameterTypes();
-         
+
          if (params.length == 0)
          {
             defaultConstructor = constructors[i];
@@ -152,10 +152,10 @@
             nameConstructor = constructors[i];
          }
       }
-      
+
       if (nameConstructor != null)
       {
-         return nameConstructor.newInstance(new Object[] {testClass.getName()}); 
+         return nameConstructor.newInstance(new Object[] {testClass.getName()});
       }
       if (defaultConstructor != null)
       {
@@ -177,12 +177,12 @@
       }
       return testMethods;
    }
-   
+
    private boolean runTests(Object testInstance, ArrayList methods)
    {
       return runTests(testInstance, methods, false);
    }
-   
+
    private boolean runTests(Object testInstance, ArrayList methods, boolean breakOnError)
    {
       Method setup = null;
@@ -204,7 +204,7 @@
       catch (Exception e)
       {
       }
-      
+
       boolean passed = true;
       for (Iterator it = methods.iterator() ; it.hasNext() ; )
       {
@@ -212,12 +212,12 @@
          try
          {
             System.out.println("============ Running test " + testInstance.getClass().getName() + "." + test.getName());
-            
-            if (setup != null) 
+
+            if (setup != null)
             {
                setup.invoke(testInstance, new Object[0]);
             }
-            
+
             test.invoke(testInstance, new Object[0]);
             if (!breakOnError)
             {
@@ -239,7 +239,7 @@
          }
          finally
          {
-            if (tearDown != null) 
+            if (tearDown != null)
             {
                try
                {
@@ -252,15 +252,15 @@
 
          }
       }
-      
+
       return passed;
    }
-   
+
    private Class getTestCaseClass(ClassLoader loader) throws Exception
    {
       String className = System.getProperty("test.to.run");
       assertNotNull("Test to be run must be passed in test.to.run system property", className);
-      
+
       Class testClass  = loader.loadClass(className);
       assertSame("Fix your classpath, this test is not valid",loader, testClass.getClassLoader());
       assertNotSame(testClass.getClassLoader(), this.getClass().getClassLoader());
@@ -272,7 +272,7 @@
       JVMTIInterface jvmti = new JVMTIInterface();
       if (jvmti.isActive())
       {
-         
+
          //clearEverySingleFieldOnInstances("org.jboss.aop.AspectManager"); // This part is not intended to be commited. It could be used during debug, and you could use to release references on purpose, just to evaluate behavior
 
          jvmti.forceReleaseOnSoftReferences();
@@ -282,9 +282,9 @@
          {
             jvmti.heapSnapshot("snapshot", "mem");
             clazz=null;
-            
+
             String report =jvmti.exploreClassReferences(className, 15, true, false, false, false, false);
-            
+
             //System.out.println(report);
             String reportDir = System.getProperty("leak.report.dir");
             assertNotNull("You must pass in the directory for the reports as leak.report.dir", reportDir);
@@ -293,23 +293,23 @@
             PrintStream realoutput = new PrintStream(outfile);
             realoutput.println(report);
             realoutput.close();
-            
-            
+
+
             jvmti.forceGC();
-            
+
             clazz = jvmti.getClassByName(className);
-            
+
             if (clazz==null)
             {
                 System.out.println("Attention: After clearing every field on AspectManager, GC could release the classLoader");
             }
-            
+
             fail ("Class " + className + " still referenced. Look at report for more details");
          }
       }
       assertNull("The classLoader is supposed to be released. Something is holding a reference. If you activate -agentlib:jbossAgent this testcase will generate a report with referenceHolders.",weakReferenceOnLoader.get());
    }
-   
+
    public Field[] getDeclaredFields(Class clazz)
    {
       ArrayList list = new ArrayList();
@@ -321,20 +321,20 @@
              fields[i].setAccessible(true);
              list.add(fields[i]);
           }
-          
+
       }
-      
+
       return (Field[]) list.toArray(new Field[list.size()]);
    }
-   
-   
+
+
    private void clearEverySingleFieldOnInstances(String className)
    {
       System.out.println("Clearing " + className);
       JVMTIInterface jvmti = new JVMTIInterface();
       Class classes[] = jvmti.getLoadedClasses();
       Object objects[] = null;
-      
+
       for (int i=0;i<classes.length;i++)
       {
          if (classes[i].getName().equals(className))
@@ -385,7 +385,7 @@
             subClasses++;
          }
       }
-      
+
       return objects.length - subClasses;
    }
 
@@ -394,7 +394,7 @@
       System.out.println("============ Unregistering ClassLoader");
       Method instance = aspectManagerClass.getDeclaredMethod("instance", new Class[0]);
       Object aspectManager = instance.invoke(null, new Object[0]);
-      
+
       Method unregisterClassLoader = aspectManagerClass.getDeclaredMethod("unregisterClassLoader", new Class[] {ClassLoader.class});
       unregisterClassLoader.invoke(aspectManager, new Object[] {loader});
    }
@@ -403,7 +403,7 @@
    {
       Properties props = System.getProperties();
       Enumeration iter = props.keys();
-      
+
       System.out.println("properties:");
       while (iter.hasMoreElements())
       {
@@ -425,8 +425,8 @@
        {
           System.out.println("pathIgnore=" + pathIgnore);
        }
-       
-       
+
+
        ArrayList urls = new ArrayList();
        while (tokenString.hasMoreElements())
        {
@@ -438,42 +438,42 @@
              urls.add(itemLocation);
           }
        }
-       
+
        URL[] urlArray= (URL[])urls.toArray(new URL[urls.size()]);
-       
+
        ClassLoader masterClassLoader = URLClassLoader.newInstance(urlArray,null);
-       
-       
+
+
        ClassLoader appClassLoader = URLClassLoader.newInstance(new URL[] {classLocation},masterClassLoader);
-       
+
        return appClassLoader;
     }
-       
 
+
    private void undeploy(Class xmlLoader) throws Exception
    {
 
       String strurl = (String)AccessController.doPrivileged(new PrivilegedAction(){
-      
+
          public Object run()
          {
             return System.getProperty("jboss.aop.path");
          }
-      
+
       });
 //      String strurl = System.getProperty("jboss.aop.path");
       assertNotNull("Property jboss.aop.path should be defined",strurl);
       strurl = strurl.replace('\\','/');
-      URL url = new URL("file:/" + strurl);
-      
+      URL url = new URL("file://" + strurl);
+
       Method method = xmlLoader.getDeclaredMethod("undeployXML", new Class[] {URL.class});
       method.invoke(null, new Object[] {url});
-      
+
       System.out.println("\n====================================================================");
       System.out.println("!!!! Undeployed " + url);
       System.out.println("=====================================================================\n");
 
       //AspectXmlLoader.undeployXML(url); -- I need to use reflection operations as I don't want to take the chance on letting the JVM using a different classLoader
    }
-   
+
 }




More information about the jboss-cvs-commits mailing list