[jboss-cvs] JBossAS SVN: r64747 - projects/aop/branches/leaks/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:00:08 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-08-21 14:00:07 -0400 (Tue, 21 Aug 2007)
New Revision: 64747

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


Modified: projects/aop/branches/leaks/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java
===================================================================
--- projects/aop/branches/leaks/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java	2007-08-21 17:24:32 UTC (rev 64746)
+++ projects/aop/branches/leaks/aop/src/test/org/jboss/test/aop/memoryleaks/MemoryLeakTestCase.java	2007-08-21 18:00:07 UTC (rev 64747)
@@ -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;
@@ -45,7 +45,7 @@
 import org.jboss.test.aop.AOPTestWithSetup;
 
 /**
- * 
+ *
  * @author <a href="clebert.suconic at jboss.com">Clebert Suconic</a>
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  */
@@ -56,7 +56,7 @@
    Method aspectXmkLoaderUndeployXmlMethod;
    Method aspectManagerInstanceMethod;
    Method aspectManagerUnregisterClassLoader;
-   
+
    /**
     * Constructor for UndeployTester.
     * @param arg0
@@ -65,7 +65,7 @@
    {
       super(name);
    }
-   
+
    public MemoryLeakTestCase()
    {
       super();
@@ -76,7 +76,7 @@
       MemoryLeakTestCase test = new MemoryLeakTestCase();
       test.testWithClassLoader();
    }
-   
+
    @Override
    protected void setUp() throws Exception
    {
@@ -88,7 +88,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.
@@ -101,50 +101,50 @@
             final ClassLoader oldloader = Thread.currentThread().getContextClassLoader();
             ClassLoader loader = newClassLoader(oldloader);
             weakReferenceOnLoader = new WeakReference(loader);
-            
+
             Thread.currentThread().setContextClassLoader(loader);
             System.out.println("OLD Loader " + oldloader);
             System.out.println("NEW Loader " + loader);
-            
+
             ClassLoader parent = loader.getParent();
             while (parent != null)
             {
                System.out.println("Parent " + parent);
                parent = parent.getParent();
             }
-            
-            
+
+
             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");
             initMethods(aspectManagerClass, xmlLoader);
-            
+
             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;
             AccessController.doPrivileged(new PrivilegedAction()
             {
                public Object run()
@@ -156,7 +156,7 @@
          }
 
          assertEquals(1, countInstances("org.jboss.aop.AspectManager", true));
-         
+
          if (extraClasses != null)
          {
             StringTokenizer tok = new StringTokenizer(extraClasses, ":;,");
@@ -172,9 +172,9 @@
                }
             }
          }
-         
+
          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);
       }
@@ -183,22 +183,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];
@@ -208,10 +208,10 @@
             nameConstructor = constructors[i];
          }
       }
-      
+
       if (nameConstructor != null)
       {
-         return nameConstructor.newInstance(new Object[] {testClass.getName()}); 
+         return nameConstructor.newInstance(new Object[] {testClass.getName()});
       }
       if (defaultConstructor != null)
       {
@@ -233,12 +233,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;
@@ -260,7 +260,7 @@
       catch (Exception e)
       {
       }
-      
+
       boolean passed = true;
       for (Iterator it = methods.iterator() ; it.hasNext() ; )
       {
@@ -268,12 +268,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)
             {
@@ -295,7 +295,7 @@
          }
          finally
          {
-            if (tearDown != null) 
+            if (tearDown != null)
             {
                try
                {
@@ -308,15 +308,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());
@@ -328,7 +328,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();
@@ -338,9 +338,9 @@
          {
             jvmti.heapSnapshot("snapshot", "mem");
             clazz=null;
-            
+
             String report =jvmti.exploreClassReferences(className, 15, true, false, false, false, true);
-            
+
             //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);
@@ -349,12 +349,12 @@
             PrintStream realoutput = new PrintStream(outfile);
             realoutput.println(report);
             realoutput.close();
-            
-            
+
+
             jvmti.forceGC();
-            
+
             clazz = jvmti.getClassByName(className);
-            
+
             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
 
             clazz = jvmti.getClassByName(className);
@@ -362,18 +362,18 @@
             {
                 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");
          }
       }
    }
-   
+
    private void reportInstanceReferences(WeakReference weakReferenceOnLoader, String className) throws Exception
    {
       JVMTIInterface jvmti = new JVMTIInterface();
       if (jvmti.isActive())
       {
-         
+
          jvmti.forceReleaseOnSoftReferences();
          jvmti.forceGC();
          Class clazz = jvmti.getClassByName(className);
@@ -383,12 +383,12 @@
             clazz=null;
             Object[] objects = jvmti.getAllObjects(className);
             System.out.println("============> Instances of " + className + " " + objects.length);
-            
+
             //String report =jvmti.exploreClassReferences(className, 15, true, false, false, false, true);
             String report = jvmti.exploreObjectReferences(className, 15, false);
-            
-            
-            
+
+
+
             System.out.println("================= " + className + " ================");
             System.out.println(report);
             String reportDir = System.getProperty("leak.report.dir");
@@ -397,11 +397,11 @@
             FileOutputStream outfile = new FileOutputStream(outputfile);
             PrintStream realoutput = new PrintStream(outfile);
             realoutput.println(report);
-            realoutput.close();            
+            realoutput.close();
          }
       }
    }
-   
+
    public Field[] getDeclaredFields(Class clazz)
    {
       ArrayList list = new ArrayList();
@@ -413,20 +413,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))
@@ -477,7 +477,7 @@
             subClasses++;
          }
       }
-      
+
       return objects.length - subClasses;
    }
 
@@ -485,7 +485,7 @@
    {
       System.out.println("============ Unregistering ClassLoader");
       Object aspectManager = aspectManagerInstanceMethod.invoke(null, new Object[0]);
-      
+
       aspectManagerUnregisterClassLoader.invoke(aspectManager, new Object[] {loader});
    }
 
@@ -493,7 +493,7 @@
    {
       Properties props = System.getProperties();
       Enumeration iter = props.keys();
-      
+
       System.out.println("properties:");
       while (iter.hasMoreElements())
       {
@@ -517,8 +517,8 @@
        {
           System.out.println("pathIgnore=" + pathIgnore);
        }
-       
-       
+
+
        ArrayList urls = new ArrayList();
        while (tokenString.hasMoreElements())
        {
@@ -533,14 +533,14 @@
              System.out.println("Skipping " + classLocation);
           }
        }
-       
+
        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;
     }
 
@@ -556,13 +556,13 @@
       String strurl = jbossAopPath;
       assertNotNull("Property jboss.aop.path should be defined",strurl);
       strurl = strurl.replace('\\','/');
-      URL url = new URL("file:/" + strurl);
-      
+      URL url = new URL("file://" + strurl);
+
       aspectXmkLoaderUndeployXmlMethod.invoke(null, new Object[] {url});
-      
+
       System.out.println("\n====================================================================");
       System.out.println("!!!! Undeployed " + url);
       System.out.println("=====================================================================\n");
    }
-   
+
 }




More information about the jboss-cvs-commits mailing list