[jboss-cvs] JBoss Messaging SVN: r1949 - in trunk/tests: src/org/jboss/test/messaging/jms and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 10 12:43:12 EST 2007


Author: clebert.suconic at jboss.com
Date: 2007-01-10 12:43:10 -0500 (Wed, 10 Jan 2007)
New Revision: 1949

Added:
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java
Modified:
   trunk/tests/build.xml
   trunk/tests/src/org/jboss/test/messaging/jms/MemLeakTest.java
Log:
http://jira.jboss.org/jira/browse/JBMESSAGING-714

Modified: trunk/tests/build.xml
===================================================================
--- trunk/tests/build.xml	2007-01-10 17:27:53 UTC (rev 1948)
+++ trunk/tests/build.xml	2007-01-10 17:43:10 UTC (rev 1949)
@@ -412,7 +412,7 @@
                <exclude name="**/messaging/core/ha/**/*Test.class"/>
                <exclude name="**/jms/stress/**"/>
                <exclude name="**/jms/crash/*Test.class"/>
-               <exclude name="**/jms/MemLeakTest.class"/>
+               <exclude name="**/*LeakTest.class"/>
                <exclude name="**/jms/manual/**/*Test.class"/>
                <exclude name="**/jms/clustering/*Test.class"/>
                <exclude name="**/jms/RemotingConnectionConfigurationTest.class"/>
@@ -458,7 +458,7 @@
                <include name="**/messaging/jms/**/*Test.class"/>
                <exclude name="**/jms/stress/**"/>
                <exclude name="**/jms/crash/*Test.class"/>
-               <exclude name="**/jms/MemLeakTest.class"/>
+               <exclude name="**/*LeakTest.class"/>
                <exclude name="**/jms/manual/**/*Test.class"/>
                <exclude name="**/jms/clustering/*Test.class"/>
                <exclude name="**/jms/RemotingConnectionConfigurationTest.class"/>
@@ -467,44 +467,6 @@
       </junit>
    </target>
 
-   <target name="memory-leak-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
-           description="Runs memory-leak tests using JBossProfiler in-VM configuration">
-
-      <property name="ostarget" value="windows"/>
-
-      <junit printsummary="${junit.printsummary}"
-             fork="${junit.fork}"
-             includeantruntime="${junit.includeantruntime}"
-             haltonerror="${junit.haltonerror}"
-             haltonfailure="${junit.haltonfailure}"
-             showoutput="${junit.showoutput}"
-             timeout="${junit.timeout}">
-
-         <sysproperty key="remote" value="false"/>
-         <sysproperty key="module.output" value="${tests.output}"/>
-         <sysproperty key="test.bind.address" value="${test.bind.address}"/>
-         <sysproperty key="test.database" value="${functional.tests.database}"/>
-         <sysproperty key="test.serialization" value="${functional.tests.serialization}"/>
-         <sysproperty key="build.lib" value="${build.lib}"/>
-         <jvmarg value="-Xmx512M"/>
-         <jvmarg value="-agentpath:${jboss.profiler.jvmti.lib}/bin/windows/jbossAgent.dll"/>
-         <!--
-         <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=antjunit"/>
-         -->
-         <classpath refid="test.execution.classpath"/>
-         <formatter type="xml" usefile="${junit.formatter.usefile}"/>
-         <batchtest fork="${junit.batchtest.fork}"
-                    todir="${junit.batchtest.todir}"
-                    haltonfailure="${junit.batchtest.haltonfailure}"
-                    haltonerror="${junit.batchtest.haltonerror}">
-            <formatter type="plain" usefile="${junit.formatter.usefile}"/>
-            <fileset dir="${build.tests.classes}">
-               <include name="**/jms/MemLeakTest.class"/>
-            </fileset>
-         </batchtest>
-      </junit>
-   </target>
-
    <target name="ref-test" depends="tests-jar, prepare-testdirs, clear-test-logs"
            description="Runs all available tests an in-VM configuration">
 
@@ -537,7 +499,7 @@
                <include name="**/messaging/jms/ReferenceableTest.class"/>
                <exclude name="**/jms/stress/**"/>
                <exclude name="**/jms/crash/*Test.class"/>
-               <exclude name="**/jms/MemLeakTest.class"/>
+               <exclude name="**/*LeakTest.class"/>
                <exclude name="**/jms/clustering/*Test.class"/>
             </fileset>
          </batchtest>
@@ -645,7 +607,7 @@
                <exclude name="**/jms/ReferencingTest.class"/>
                <exclude name="**/jms/PersistenceTest.class"/>
                <exclude name="**/jms/crash/*Test.class"/>
-               <exclude name="**/jms/MemLeakTest.class"/>
+               <exclude name="**/*LeakTest.class"/>
                <exclude name="**/jms/ManifestTest.class"/>
                <exclude name="**/jms/JCAWrapperTest.class"/>
                <exclude name="**/jms/manual/**/*Test.class"/>
@@ -716,9 +678,8 @@
 
    </target>
 
-   <target name="clustering-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
-           description="Runs the clustering tests">
-
+   <!-- internal task for clustering-tests -->
+   <target name="start-clustering">
       <!-- Stop the rmi servers in case a previous run aborted -->
 
       <antcall target="stop-rmi-server-clustering">
@@ -759,6 +720,38 @@
 
       <mkdir dir="${build.tests.reports}"/>
 
+
+   </target>
+
+   <!-- internal task for clustering-tests -->
+   <target name="stop-clustering">
+      <!--
+          Stop the servers in the reverse order, so the VM that runs the RMI registry dies last.
+      -->
+
+      <antcall target="stop-rmi-server-clustering">
+         <param name="test.server.index" value="3"/>
+      </antcall>
+
+      <antcall target="stop-rmi-server-clustering">
+         <param name="test.server.index" value="2"/>
+      </antcall>
+
+      <antcall target="stop-rmi-server-clustering">
+         <param name="test.server.index" value="1"/>
+      </antcall>
+
+      <antcall target="stop-rmi-server-clustering">
+         <param name="test.server.index" value="0"/>
+      </antcall>
+   </target>
+
+   <target name="clustering-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
+           description="Runs the clustering tests">
+
+
+      <antcall target="start-clustering"/>
+
       <echo message=""/>
       <echo message="Running clustering tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}"/>
       <echo message=""/>
@@ -828,30 +821,97 @@
 
             <fileset dir="${build.tests.classes}">
                <include name="**/jms/clustering/${test-mask}.class"/>
+               <exclude name="**/*LeakTest.class"/>
             </fileset>
          </batchtest>
       </junit>
 
+      <antcall target="stop-clustering"/>
+
+   </target>
+
+   <target name="memory-leak-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
+           description="Runs MemoryLeakTests, but it starts the clustering for leak-clustering-tests">
+
+
+      <antcall target="start-clustering"/>
+
+      <echo message=""/>
+      <echo message="Running clustering tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}"/>
+      <echo message=""/>
+
       <!--
-          Stop the servers in the reverse order, so the VM that runs the RMI registry dies last.
+
+           By default, clustered tests are run in a "remote" configuration (the clustered
+           nodes physically live in different VMs. If you want to test a co-located clustered
+           configuration, use bin/runtest -clustered
       -->
 
-      <antcall target="stop-rmi-server-clustering">
-         <param name="test.server.index" value="3"/>
-      </antcall>
+      <junit printsummary="${junit.printsummary}"
+             fork="${junit.fork}"
+             includeantruntime="yes"
+             haltonerror="${junit.haltonerror}"
+             haltonfailure="${junit.haltonfailure}"
+             showoutput="${junit.showoutput}"
+             timeout="${junit.timeout}">
 
-      <antcall target="stop-rmi-server-clustering">
-         <param name="test.server.index" value="2"/>
-      </antcall>
+         <sysproperty key="remote" value="true"/>
+         <sysproperty key="module.output" value="${tests.output}"/>
+         <sysproperty key="test.bind.address" value="${test.bind.address}"/>
+         <sysproperty key="test.database" value="${clustering.tests.database}"/>
+         <sysproperty key="test.serialization" value="${functional.tests.serialization}"/>
+         <sysproperty key="test.clustered" value="true"/>
+         <sysproperty key="test.logfile.suffix" value="clustering-client"/>
+         <jvmarg value="-Xmx512M"/>
+         <jvmarg value="-Djava.net.preferIPv4Stack=true"/>
+         <jvmarg value="-agentlib:jbossAgent"/>
+         <!--
+         <jvmarg line="-Xmx512M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=n,suspend=n,address=antjunit"/>
+          -->
 
-      <antcall target="stop-rmi-server-clustering">
-         <param name="test.server.index" value="1"/>
-      </antcall>
+         <classpath>
+            <path refid="test.execution.classpath"/>
+            <!--
+                Add this when http://jira.jboss.org/jira/browse/JBAS-2554 is done
+            -->
+            <!--
+                 <path refid="jboss.test.classpath"/>
+            -->
+         </classpath>
 
-      <antcall target="stop-rmi-server-clustering">
-         <param name="test.server.index" value="0"/>
-      </antcall>
+         <!--
+              Use this when http://jira.jboss.org/jira/browse/JBAS-2554 is done
+         -->
+         <!--
+         <sysproperty key="jboss-junit-configuration" value="Remote"/>
+         <formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter"
+            usefile="${junit.formatter.usefile}" extension="-Remote.xml"/>
+         -->
 
+         <sysproperty key="messaging-test-configuration" value="Clustering"/>
+         <formatter classname="org.jboss.test.messaging.tools.ant.XMLJUnitMultipleResultFormatter"
+                    usefile="${junit.formatter.usefile}" extension="-Clustering.xml"/>
+
+         <batchtest fork="${junit.batchtest.fork}"
+                    todir="${junit.batchtest.todir}"
+                    haltonfailure="${junit.batchtest.haltonfailure}"
+                    haltonerror="${junit.batchtest.haltonerror}">
+            <formatter type="plain" usefile="${junit.formatter.usefile}"/>
+            <!--
+                 I needed a way to intercept the end of a forked ant JUnit test run, in order to
+                 perform clean-up, and this is it: register a JUnitTestSuiteListener as a JUnit
+                 batchtest formatter, and it will get notified on a endTestSuite() event.
+            -->
+            <formatter classname="org.jboss.test.messaging.tools.ant.JUnitTestSuiteListener"/>
+
+            <fileset dir="${build.tests.classes}">
+               <include name="**/*LeakTest.class"/>
+            </fileset>
+         </batchtest>
+      </junit>
+
+      <antcall target="stop-clustering"/>
+
    </target>
 
    <target name="crash-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"

Modified: trunk/tests/src/org/jboss/test/messaging/jms/MemLeakTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/MemLeakTest.java	2007-01-10 17:27:53 UTC (rev 1948)
+++ trunk/tests/src/org/jboss/test/messaging/jms/MemLeakTest.java	2007-01-10 17:43:10 UTC (rev 1949)
@@ -75,7 +75,7 @@
 
    // Static --------------------------------------------------------
 
-   public static void main(String[] args)
+   /*public static void main(String[] args)
    {
       try
       {
@@ -88,7 +88,7 @@
       {
          e.printStackTrace();
       }
-   }
+   } */
 
    // Attributes ----------------------------------------------------
 
@@ -114,9 +114,10 @@
       log.debug("setup done");
    }
 
-   public void tearDown() throws Exception
-   {
+   public void tearDown() throws Exception {
       super.tearDown();
+      ServerManagement.stop();
+
    }
    
    /** @todo I can't execute this test if executed with testExpressionParginMessages. That's why I renamed it. */
@@ -154,6 +155,8 @@
       log.info("Producing first snapshot");
       produceMessages(sess, prod, NUM_MESSAGES, cons);
       log.info("Producing second snapshot");
+      jvmti.forceReleaseOnSoftReferences();
+      jvmti.forceGC();
       Map inventory2 = jvmti.produceInventory();
       
       log.info("inventory1.size=" + inventory1.size());
@@ -729,8 +732,9 @@
       {         
       }      
    }
-   
-   public void testRemotingMemLeaks() throws Throwable
+
+   // this test is hanging.. that's why I have renamed it (Clebert)
+   public void renamedtestRemotingMemLeaks() throws Throwable
    {
       log.info("Test remoting mem leaks");
       

Added: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java	2007-01-10 17:27:53 UTC (rev 1948)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java	2007-01-10 17:43:10 UTC (rev 1949)
@@ -0,0 +1,193 @@
+/*
+   * 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.messaging.jms.clustering;
+
+import org.jboss.test.messaging.jms.clustering.base.ClusteringTestBase;
+import org.jboss.test.messaging.tools.ServerManagement;
+import org.jboss.jms.client.state.ConnectionState;
+import org.jboss.jms.client.state.ProducerState;
+import org.jboss.jms.client.delegate.DelegateSupport;
+import org.jboss.jms.client.JBossConnection;
+import org.jboss.jms.client.JBossMessageProducer;
+import org.jboss.jms.client.container.ConnectionFailureListener;
+import org.jboss.profiler.jvmti.JVMTIInterface;
+import org.jboss.profiler.jvmti.InventoryDataPoint;
+import javax.jms.Connection;
+import javax.jms.Session;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.DeliveryMode;
+import javax.jms.TextMessage;
+import java.util.Map;
+
+/**
+ * This test is executed with target "leak-tests" on the testsuite/build.xml
+ * It requires jbossAgent.dll or libJBossAgent.so on the LD_LIBRARY_PATH, so you need to set it
+ * before calling the target
+ * @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @version <tt>$Revision$</tt>
+ *          <p/>
+ *          $Id$
+ */
+public class ClusterLeakTest extends ClusteringTestBase
+{
+
+   // Constants ------------------------------------------------------------------------------------
+
+   // Attributes -----------------------------------------------------------------------------------
+
+   // Static ---------------------------------------------------------------------------------------
+
+   // Constructors ---------------------------------------------------------------------------------
+
+   public ClusterLeakTest(String name)
+   {
+      super(name);
+   }
+
+   // Public ---------------------------------------------------------------------------------------
+
+   public void testValidateFailover() throws Exception
+   {
+      Connection conn = null;
+
+      JVMTIInterface jvmti = new JVMTIInterface();
+
+      try
+      {
+         conn = cf.createConnection();
+         conn.close();
+         conn = cf.createConnection();
+         conn.start();
+
+         // make sure we're connecting to node 1
+
+         int nodeID = ((ConnectionState)((DelegateSupport)((JBossConnection)conn).
+            getDelegate()).getState()).getServerID();
+
+         assertEquals(1, nodeID);
+
+         Session s1 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         MessageConsumer c1 = s1.createConsumer(queue[1]);
+         JBossMessageProducer p1 = (JBossMessageProducer)s1.createProducer(queue[1]);
+         p1.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+         // send a message
+
+         p1.send(s1.createTextMessage("blip"));
+         assertNotNull(c1.receive());
+         p1.send(s1.createTextMessage("blip again"));
+
+         log.info("Producing inventory");
+
+         Map inventory1 = jvmti.produceInventory();
+
+         // kill node 1
+
+         ServerManagement.killAndWait(1);
+         log.info("########");
+         log.info("######## KILLED NODE 1");
+         log.info("########");
+
+         try
+         {
+            ic[1].lookup("queue"); // looking up anything
+            fail("The server still alive, kill didn't work yet");
+         }
+         catch (Exception e)
+         {
+         }
+
+         // we must receive the message
+
+         TextMessage tm = (TextMessage)c1.receive(1000);
+         assertEquals("blip again", tm.getText());
+
+         log.info("Forcing release on SoftReferences");
+         jvmti.forceReleaseOnSoftReferences();
+         jvmti.forceGC();
+
+         Map inventory2 = jvmti.produceInventory();
+
+         InventoryDataPoint dataPoint = (InventoryDataPoint) inventory2.get(ProducerState.class);
+         if (dataPoint.getInstances() > 1)
+         {
+            // We should only have this producerState... we will look for where are the
+            // other references
+            ProducerState originalState = (ProducerState )
+                ((DelegateSupport)p1.getDelegate()).getState();
+            Object obj[] = jvmti.getAllObjects(ProducerState.class);
+
+            for (int i = 0; i < obj.length; i++)
+            {
+               if (obj[i] != originalState)
+               {
+                  log.info("Exploring references on " + obj[i]);
+                  Object[] holders = jvmti.getReferenceHolders(new Object[]{obj[i]});
+
+                  for (int j = 0; j < holders.length; j++)
+                  {
+                     log.info("Holder[" + j + "] = " + holders[j]);
+                  }
+
+               }
+            }
+
+         }
+
+         assertTrue("Test produced unexpected objects", jvmti.compareInventories(System.out,
+            inventory1, inventory2, null, null,
+            new InventoryDataPoint[]{new InventoryDataPoint(Object.class, 10)}));
+
+      }
+      finally
+      {
+         if (conn != null)
+         {
+            conn.close();
+         }
+      }
+   }
+
+
+   // Package protected ----------------------------------------------------------------------------
+
+   // Protected ------------------------------------------------------------------------------------
+
+   protected void setUp() throws Exception
+   {
+      nodeCount = 2;
+
+      super.setUp();
+   }
+
+   protected void tearDown() throws Exception
+   {
+      super.tearDown();
+   }
+
+   // Private --------------------------------------------------------------------------------------
+
+   // Inner classes --------------------------------------------------------------------------------
+
+}


Property changes on: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java
___________________________________________________________________
Name: svn:keywords
   + Id LastChangedDate Author Revision




More information about the jboss-cvs-commits mailing list