You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gr...@apache.org on 2010/11/08 18:05:09 UTC

svn commit: r1032643 [2/2] - in /qpid/branches/0.5.x-dev/qpid/java: broker/src/main/java/org/apache/qpid/server/ broker/src/main/java/org/apache/qpid/server/configuration/ broker/src/main/java/org/apache/qpid/server/information/management/ broker/src/m...

Added: qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTest.java?rev=1032643&view=auto
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTest.java (added)
+++ qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTest.java Mon Nov  8 17:05:08 2010
@@ -0,0 +1,211 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.jmx;
+
+import javax.jms.Connection;
+
+import org.apache.qpid.client.AMQConnection;
+import org.apache.qpid.management.common.mbeans.ManagedBroker;
+import org.apache.qpid.management.common.mbeans.ManagedConnection;
+
+/**
+ * Test generation of message statistics.
+ */
+public class MessageStatisticsTest extends MessageStatisticsTestCase
+{
+    public void configureStatistics() throws Exception
+    {
+        setConfigurationProperty("statistics.generation.broker", "true");
+        setConfigurationProperty("statistics.generation.virtualhosts", "true");
+        setConfigurationProperty("statistics.generation.connections", "true");
+    }
+
+    /**
+     * Test message totals.
+     */
+    public void testMessageTotals() throws Exception
+    {
+        sendUsing(_test, 10, 100);
+        sendUsing(_dev, 20, 100);
+        sendUsing(_local, 5, 100);
+        sendUsing(_local, 5, 100);
+        sendUsing(_local, 5, 100);
+        
+        ManagedBroker test = _jmxUtils.getManagedBroker("test");
+        ManagedBroker dev = _jmxUtils.getManagedBroker("development");
+        ManagedBroker local = _jmxUtils.getManagedBroker("localhost");
+
+        long total = 0;
+        long data = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("*"))
+        {
+            total += mc.getTotalMessages();
+            data += mc.getTotalData();
+        }
+        assertEquals("Incorrect connection total", 45, total);
+        assertEquals("Incorrect connection data", 45 * 100, data);
+        if (!_broker.equals(VM))
+        {
+            assertEquals("Incorrect server total", 45, _jmxUtils.getServerInformation().getTotalMessages());
+            assertEquals("Incorrect server data", 45 * 100, _jmxUtils.getServerInformation().getTotalData());
+        }
+        
+        long testTotal = 0;
+        long testData = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("test"))
+        {
+            testTotal += mc.getTotalMessages();
+            testData += mc.getTotalData();
+        }
+        assertEquals("Incorrect test connection total", 10, testTotal);
+        assertEquals("Incorrect test vhost total", 10, test.getTotalMessages());
+        assertEquals("Incorrect test connection data", 10 * 100, testData);
+        assertEquals("Incorrect test vhost data", 10 * 100, test.getTotalData());
+        
+        long devTotal = 0;
+        long devData = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("development"))
+        {
+            devTotal += mc.getTotalMessages();
+            devData += mc.getTotalData();
+        }
+        assertEquals("Incorrect test connection total", 20, devTotal);
+        assertEquals("Incorrect development total", 20, dev.getTotalMessages());
+        assertEquals("Incorrect test connection data", 20 * 100, devData);
+        assertEquals("Incorrect development data", 20 * 100, dev.getTotalData());
+        
+        long localTotal = 0;
+        long localData = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("localhost"))
+        {
+            localTotal += mc.getTotalMessages();
+            localData += mc.getTotalData();
+        }
+        assertEquals("Incorrect test connection total", 15, localTotal);
+        assertEquals("Incorrect localhost total", 15, local.getTotalMessages());
+        assertEquals("Incorrect test connection data", 15 * 100, localData);
+        assertEquals("Incorrect localhost data", 15 * 100, local.getTotalData());
+    }
+
+    /**
+     * Test message totals when a connection is closed.
+     */
+    public void testMessageTotalsWithClosedConnections() throws Exception
+    {
+        Connection temp = new AMQConnection(_brokerUrl, USER, USER, "clientid", "test");
+        temp.start();
+        
+        sendUsing(_test, 10, 100);
+        sendUsing(temp, 10, 100);
+        sendUsing(_test, 10, 100);
+        
+        temp.close();
+        
+        ManagedBroker test = _jmxUtils.getManagedBroker("test");
+
+        long total = 0;
+        long data = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("*"))
+        {
+            total += mc.getTotalMessages();
+            data += mc.getTotalData();
+        }
+        assertEquals("Incorrect active connection total", 20, total);
+        assertEquals("Incorrect active connection data", 20 * 100, data);
+        if (!_broker.equals(VM))
+        {
+            assertEquals("Incorrect server total", 30, _jmxUtils.getServerInformation().getTotalMessages());
+            assertEquals("Incorrect server data", 30 * 100, _jmxUtils.getServerInformation().getTotalData());
+        }
+        
+        long testTotal = 0;
+        long testData = 0;
+        for (ManagedConnection mc : _jmxUtils.getManagedConnections("test"))
+        {
+            testTotal += mc.getTotalMessages();
+            testData += mc.getTotalData();
+        }
+        assertEquals("Incorrect test active connection total", 20, testTotal);
+        assertEquals("Incorrect test vhost total", 30, test.getTotalMessages());
+        assertEquals("Incorrect test active connection data", 20 * 100, testData);
+        assertEquals("Incorrect test vhost data", 30 * 100, test.getTotalData());
+    }
+    
+    /**
+     * Test message peak rate generation.
+     */
+    public void testMessagePeakRates() throws Exception
+    {
+        sendUsing(_test, 1, 10000);
+        Thread.sleep(10 * 1000);
+        sendUsing(_dev, 10, 10);
+        
+        ManagedBroker test = _jmxUtils.getManagedBroker("test");
+        ManagedBroker dev = _jmxUtils.getManagedBroker("development");
+        
+        assertEquals("Incorrect test vhost peak messages", 1.0d, test.getPeakMessageRate());
+        assertEquals("Incorrect test vhost peak data", 10000.0d, test.getPeakDataRate());
+        assertEquals("Incorrect dev vhost peak messages", 10.0d, dev.getPeakMessageRate());
+        assertEquals("Incorrect dev vhost peak data", 100.0d, dev.getPeakDataRate());
+
+        if (!_broker.equals(VM))
+        {
+            assertEquals("Incorrect server peak messages", 10.0d, _jmxUtils.getServerInformation().getPeakMessageRate());
+            assertEquals("Incorrect server peak data", 10000.0d, _jmxUtils.getServerInformation().getPeakDataRate());
+        }
+    }
+    
+    /**
+     * Test message totals when a vhost has its statistics reset
+     */
+    public void testMessageTotalVhostReset() throws Exception
+    {
+        sendUsing(_test, 10, 10);
+        sendUsing(_dev, 10, 10);
+        
+        ManagedBroker test = _jmxUtils.getManagedBroker("test");
+        ManagedBroker dev = _jmxUtils.getManagedBroker("development");
+        
+        assertEquals("Incorrect test vhost total messages", 10, test.getTotalMessages());
+        assertEquals("Incorrect test vhost total data", 100, test.getTotalData());
+        assertEquals("Incorrect dev vhost total messages", 10, dev.getTotalMessages());
+        assertEquals("Incorrect dev vhost total data", 100, dev.getTotalData());
+
+        if (!_broker.equals(VM))
+        {
+            assertEquals("Incorrect server total messages", 20, _jmxUtils.getServerInformation().getTotalMessages());
+            assertEquals("Incorrect server total data", 200, _jmxUtils.getServerInformation().getTotalData());
+        }
+        
+        test.resetStatistics();
+        
+        assertEquals("Incorrect test vhost total messages", 0, test.getTotalMessages());
+        assertEquals("Incorrect test vhost total data", 0, test.getTotalData());
+        assertEquals("Incorrect dev vhost total messages", 10, dev.getTotalMessages());
+        assertEquals("Incorrect dev vhost total data", 100, dev.getTotalData());
+
+        if (!_broker.equals(VM))
+        {
+            assertEquals("Incorrect server total messages", 20, _jmxUtils.getServerInformation().getTotalMessages());
+            assertEquals("Incorrect server total data", 200, _jmxUtils.getServerInformation().getTotalData());
+        }
+    }
+}

Added: qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTestCase.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTestCase.java?rev=1032643&view=auto
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTestCase.java (added)
+++ qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/management/jmx/MessageStatisticsTestCase.java Mon Nov  8 17:05:08 2010
@@ -0,0 +1,99 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.jmx;
+
+import javax.jms.Connection;
+import javax.jms.Destination;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import org.apache.qpid.client.AMQConnection;
+import org.apache.qpid.client.AMQQueue;
+import org.apache.qpid.exchange.ExchangeDefaults;
+import org.apache.qpid.test.utils.JMXTestUtils;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+/**
+ * Test generation of message statistics.
+ */
+public abstract class MessageStatisticsTestCase extends QpidTestCase
+{
+    protected static final String USER = "admin";
+    
+    protected JMXTestUtils _jmxUtils;
+    protected Connection _test, _dev, _local;
+    protected Destination _queue;
+    protected String _brokerUrl;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        _jmxUtils = new JMXTestUtils(this, USER, USER);
+        _jmxUtils.setUp();
+        
+        configureStatistics();
+        
+        super.setUp();
+        
+        _queue = new AMQQueue(ExchangeDefaults.DIRECT_EXCHANGE_NAME, "queue");
+        
+        _brokerUrl = getBroker().toString();
+        _test = new AMQConnection(_brokerUrl, USER, USER, "clientid", "test");
+        _dev = new AMQConnection(_brokerUrl, USER, USER, "clientid", "development");
+        _local = new AMQConnection(_brokerUrl, USER, USER, "clientid", "localhost");
+        
+        _test.start();
+        _dev.start();
+        _local.start();
+        
+        _jmxUtils.open();
+    }
+
+    @Override
+    public void tearDown() throws Exception
+    {
+        _jmxUtils.close();
+        
+        _test.close();
+        _dev.close();
+        _local.close();
+        
+        super.tearDown();
+    }
+    
+    /**
+     * Configure statistics generation properties on the broker.
+     */
+    public abstract void configureStatistics() throws Exception;
+
+    protected void sendUsing(Connection con, int number, int size) throws Exception
+    {
+        Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        MessageProducer producer = session.createProducer(_queue);
+        String content = new String(new byte[size]);
+        TextMessage msg = session.createTextMessage(content);
+        for (int i = 0; i < number; i++)
+        {
+            producer.send(msg);
+        }
+    }
+}

Modified: qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java?rev=1032643&r1=1032642&r2=1032643&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java Mon Nov  8 17:05:08 2010
@@ -92,7 +92,7 @@ public class ConnectionCloseTest extends
 
         assertTrue("Spurious thread creation exceeded threshold, " +
                    delta.size() + " threads created.",
-                   delta.size() < 10);
+                   delta.size() < 20);
     }
 
     private void dumpStacks(Map<Thread,StackTraceElement[]> map)

Modified: qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java?rev=1032643&r1=1032642&r2=1032643&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java Mon Nov  8 17:05:08 2010
@@ -24,7 +24,9 @@ import org.apache.commons.configuration.
 import org.apache.qpid.commands.objects.AllObjects;
 import org.apache.qpid.management.common.JMXConnnectionFactory;
 import org.apache.qpid.management.common.mbeans.ManagedBroker;
+import org.apache.qpid.management.common.mbeans.ManagedConnection;
 import org.apache.qpid.management.common.mbeans.ManagedExchange;
+import org.apache.qpid.management.common.mbeans.ServerInformation;
 
 import javax.management.JMException;
 import javax.management.MBeanException;
@@ -33,8 +35,12 @@ import javax.management.MBeanServerInvoc
 import javax.management.ObjectName;
 import javax.management.remote.JMXConnector;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Set;
 
+import junit.framework.TestCase;
+
 /**
  * 
  */
@@ -57,6 +63,7 @@ public class JMXTestUtils
     public void setUp() throws IOException, ConfigurationException, Exception
     {
         _test.setConfigurationProperty("management.enabled", "true");       
+        _test.setSystemProperty("qpid.management.disableCustomSocketFactory", "true");
     }
 
     public void open() throws Exception
@@ -209,4 +216,44 @@ public class JMXTestUtils
                 newProxyInstance(_mbsc, getExchangeObjectName("test", exchangeName),
                                  ManagedExchange.class, false);
     }
+
+    /**
+     * Retrive {@link ServerInformation} JMX MBean.
+     */
+    public ServerInformation getServerInformation()
+    {
+        // Get the name of the test manager
+        AllObjects allObject = new AllObjects(_mbsc);
+        allObject.querystring = "org.apache.qpid:type=ServerInformation,name=ServerInformation,*";
+
+        Set<ObjectName> objectNames = allObject.returnObjects();
+
+        TestCase.assertNotNull("Null ObjectName Set returned", objectNames);
+        TestCase.assertEquals("Incorrect number of objects returned", 1, objectNames.size());
+
+        // We have verified we have only one value in objectNames so return it
+        return getManagedObject(ServerInformation.class, objectNames.iterator().next());
+    }
+
+    /**
+     * Retrive all {@link ManagedConnection} objects.
+     */
+    public List<ManagedConnection> getManagedConnections(String vhost)
+    {
+        // Get the name of the test manager
+        AllObjects allObject = new AllObjects(_mbsc);
+        allObject.querystring = "org.apache.qpid:type=VirtualHost.Connection,VirtualHost=" + vhost + ",name=*";
+
+        Set<ObjectName> objectNames = allObject.returnObjects();
+
+        TestCase.assertNotNull("Null ObjectName Set returned", objectNames);
+
+        // Collect all the connection objects
+        List<ManagedConnection> connections = new ArrayList<ManagedConnection>();
+        for (ObjectName name : objectNames)
+        {
+            connections.add(getManagedObject(ManagedConnection.class, name));
+        }
+        return connections; 
+    }
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org