[jboss-cvs] JBossAS SVN: r71730 - in trunk/testsuite/src/main/org/jboss/test/classloader/leak: test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 4 15:22:11 EDT 2008


Author: bstansberry at jboss.com
Date: 2008-04-04 15:22:11 -0400 (Fri, 04 Apr 2008)
New Revision: 71730

Modified:
   trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java
   trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/LeakAnalyzer.java
   trunk/testsuite/src/main/org/jboss/test/classloader/leak/test/ClassloaderLeakTestBase.java
Log:
Sync classloader leak tests with 4.x branch

Modified: trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java	2008-04-04 19:09:21 UTC (rev 71729)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java	2008-04-04 19:22:11 UTC (rev 71730)
@@ -21,9 +21,14 @@
  */
 package org.jboss.test.classloader.leak.clstore;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.io.PrintStream;
+import java.io.Serializable;
 import java.lang.ref.WeakReference;
 import java.util.HashMap;
 import java.util.Map;
@@ -167,10 +172,10 @@
    private void fillMemory(WeakReference ref)
    {
       Runtime rt = Runtime.getRuntime();
-      
-      for (int i = 0; i < 15; i++) 
+      int[] adds = { 0, 10, 20, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 };
+      for (int i = 0; i < adds.length; i++) 
       {
-          int toAdd = Math.min(i, 4);
+          int toAdd = adds[i];
           System.gc();
           
           if (ref.get() == null)
@@ -179,9 +184,10 @@
           // create garbage, filling a larger and larger % of
           // free memory on each loop
           long avail = rt.freeMemory();
-          int create = (int) (avail / 100 * (95 + toAdd));
+          int create = (int) (avail / 1000 * (950 + toAdd));
+          String pct = (95 + (toAdd/10)) + "." + (toAdd - ((toAdd/10) * 10));
           int bucket = create / 1000;
-          log.info("Filling " + (95 + toAdd) + "% of free memory. Free memory=" + avail + 
+          log.info("Filling " + pct + "% of free memory. Free memory=" + avail + 
                    " Total Memory=" + rt.totalMemory() + " Max Memory=" + rt.maxMemory());
           
           try
@@ -197,6 +203,23 @@
           }
       }
       
+      try
+      {
+         ByteArrayOutputStream byteout = new ByteArrayOutputStream();
+         ObjectOutputStream out = new ObjectOutputStream(byteout);
+        
+         out.writeObject(new Dummy());
+        
+         ByteArrayInputStream byteInput = new ByteArrayInputStream(byteout.toByteArray());
+         ObjectInputStream input = new ObjectInputStream(byteInput);
+         input.readObject();
+        
+      }
+      catch (Exception e)
+      {
+         e.printStackTrace();
+      }
+      
       if (ref.get() != null)
          System.gc();
    }
@@ -205,4 +228,10 @@
    {
       classloaders.remove(key);
    }
+   
+   /** Used just to serialize anything and release SoftCache on java Serialization */
+   private static class Dummy implements Serializable
+   {
+        private static final long serialVersionUID = 1L;
+   }
 }

Modified: trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/LeakAnalyzer.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/LeakAnalyzer.java	2008-04-04 19:09:21 UTC (rev 71729)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/LeakAnalyzer.java	2008-04-04 19:22:11 UTC (rev 71730)
@@ -58,6 +58,23 @@
       super();
    }
 
+   public boolean isActive()
+   {
+      // System.loadLibrary fails if it is called twice, which it will
+      // be if this class is redeployed. So, the first time we get a positive
+      // result, store it in a system property, and thereafter return
+      // the system property
+      String existing = System.getProperty("jboss.test.jbossAgent.avail");
+      if (existing != null)
+         return Boolean.parseBoolean(existing);
+      
+      boolean active = super.isActive();
+      System.setProperty("jboss.test.jbossAgent.avail", Boolean.toString(active));
+      return active;
+   }
+
+
+
    /**
     * Show the reference holders tree of an object. This returns a report you
     * can visualize through MBean.

Modified: trunk/testsuite/src/main/org/jboss/test/classloader/leak/test/ClassloaderLeakTestBase.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/leak/test/ClassloaderLeakTestBase.java	2008-04-04 19:09:21 UTC (rev 71729)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/leak/test/ClassloaderLeakTestBase.java	2008-04-04 19:22:11 UTC (rev 71730)
@@ -110,7 +110,7 @@
          throws Exception
    {
       try
-      {
+      {         
          undeploy(deployment);
          deployments.remove(deployment);
       }
@@ -119,7 +119,10 @@
          if (propagateFailure)
             throw e;
          else
+         {
             log.error("Exception during undeploy of " + deployment, e);
+            deployments.remove(deployment);
+         }
       }
    }
    
@@ -286,11 +289,18 @@
    
    private void removeClassLoader(String key) throws Exception
    {
-      MBeanServerConnection adaptor = delegate.getServer();
-      ObjectName on = new ObjectName(ClassLoaderTrackerMBean.OBJECT_NAME);
-      Object[] params = { key };
-      String[] signature = new String[] { String.class.getName() };
-      adaptor.invoke(on, "removeClassLoader", params, signature);
+      try
+      {
+         MBeanServerConnection adaptor = delegate.getServer();
+         ObjectName on = new ObjectName(ClassLoaderTrackerMBean.OBJECT_NAME);
+         Object[] params = { key };
+         String[] signature = new String[] { String.class.getName() };
+         adaptor.invoke(on, "removeClassLoader", params, signature);
+      }
+      catch (Exception e)
+      {
+         log.error("Caught exception removing classloader under key " + key, e);
+      }
    }
    
    private void flushSecurityCache(String domain) throws Exception




More information about the jboss-cvs-commits mailing list