You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2009/06/23 01:44:23 UTC

svn commit: r787446 - in /activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq: apollo/perf/ legacy/test6/

Author: chirino
Date: Mon Jun 22 23:44:22 2009
New Revision: 787446

URL: http://svn.apache.org/viewvc?rev=787446&view=rev
Log:
Moving some more passing tests to a perf package.

Added:
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/JmsMultipleClientsTestSupport.java
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java   (with props)
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java   (with props)
Removed:
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/JmsMultipleClientsTestSupport.java
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/QueueSubscriptionTest.java
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/TopicSubscriptionTest.java
Modified:
    activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/NioQueueSubscriptionTest.java

Added: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/JmsMultipleClientsTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/JmsMultipleClientsTestSupport.java?rev=787446&view=auto
==============================================================================
--- activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/JmsMultipleClientsTestSupport.java (added)
+++ activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/JmsMultipleClientsTestSupport.java Mon Jun 22 23:44:22 2009
@@ -0,0 +1,288 @@
+/**
+ * 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.activemq.apollo.perf;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.TopicSubscriber;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.apollo.CombinationTestSupport;
+import org.apache.activemq.apollo.broker.Broker;
+import org.apache.activemq.apollo.broker.BrokerFactory;
+import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.command.ActiveMQQueue;
+import org.apache.activemq.command.ActiveMQTopic;
+import org.apache.activemq.transport.TransportFactory;
+import org.apache.activemq.util.MessageIdList;
+
+/**
+ * Test case support used to test multiple message comsumers and message
+ * producers connecting to a single broker.
+ * 
+ * @version $Revision$
+ */
+public class JmsMultipleClientsTestSupport extends CombinationTestSupport {
+
+    protected Map<MessageConsumer, MessageIdList> consumers = new HashMap<MessageConsumer, MessageIdList>(); // Map of consumer with messages
+                                                // received
+    protected int consumerCount = 1;
+    protected int producerCount = 1;
+
+    protected int messageSize = 1024;
+
+    protected boolean useConcurrentSend = true;
+    protected boolean durable;
+    protected boolean topic;
+    protected boolean persistent;
+
+    protected Destination destination;
+    protected List<Connection> connections = Collections.synchronizedList(new ArrayList<Connection>());
+    protected MessageIdList allMessagesList = new MessageIdList();
+
+    private AtomicInteger producerLock;
+	private Broker broker;
+
+    protected void startProducers(Destination dest, int msgCount) throws Exception {
+        startProducers(createConnectionFactory(), dest, msgCount);
+    }
+
+    protected void startProducers(final ConnectionFactory factory, final Destination dest, final int msgCount) throws Exception {
+        // Use concurrent send
+        if (useConcurrentSend) {
+            producerLock = new AtomicInteger(producerCount);
+
+            for (int i = 0; i < producerCount; i++) {
+                Thread t = new Thread(new Runnable() {
+                    public void run() {
+                        try {
+                            sendMessages(factory.createConnection(), dest, msgCount);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+
+                        synchronized (producerLock) {
+                            producerLock.decrementAndGet();
+                            producerLock.notifyAll();
+                        }
+                    }
+                });
+
+                t.start();
+            }
+
+            // Wait for all producers to finish sending
+            synchronized (producerLock) {
+                while (producerLock.get() != 0) {
+                    producerLock.wait(2000);
+                }
+            }
+
+            // Use serialized send
+        } else {
+            for (int i = 0; i < producerCount; i++) {
+                sendMessages(factory.createConnection(), dest, msgCount);
+            }
+        }
+    }
+
+    protected void sendMessages(Connection connection, Destination destination, int count) throws Exception {
+        connection.start();
+
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        MessageProducer producer = session.createProducer(destination);
+        producer.setDeliveryMode(persistent ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT);
+
+        for (int i = 0; i < count; i++) {
+            TextMessage msg = createTextMessage(session, "" + i);
+            producer.send(msg);
+        }
+
+        producer.close();
+        session.close();
+        connection.close();
+    }
+
+    protected TextMessage createTextMessage(Session session, String initText) throws Exception {
+        TextMessage msg = session.createTextMessage();
+
+        // Pad message text
+        if (initText.length() < messageSize) {
+            char[] data = new char[messageSize - initText.length()];
+            Arrays.fill(data, '*');
+            String str = new String(data);
+            msg.setText(initText + str);
+
+            // Do not pad message text
+        } else {
+            msg.setText(initText);
+        }
+
+        return msg;
+    }
+
+    protected void startConsumers(Destination dest) throws Exception {
+        startConsumers(createConnectionFactory(), dest);
+    }
+
+    protected void startConsumers(ConnectionFactory factory, Destination dest) throws Exception {
+        MessageConsumer consumer;
+        for (int i = 0; i < consumerCount; i++) {
+            if (durable && topic) {
+                consumer = createDurableSubscriber(factory.createConnection(), dest, "consumer" + (i + 1));
+            } else {
+                consumer = createMessageConsumer(factory.createConnection(), dest);
+            }
+            MessageIdList list = new MessageIdList();
+            list.setParent(allMessagesList);
+            consumer.setMessageListener(list);
+            consumers.put(consumer, list);
+        }
+    }
+
+    protected MessageConsumer createMessageConsumer(Connection conn, Destination dest) throws Exception {
+        connections.add(conn);
+
+        Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final MessageConsumer consumer = sess.createConsumer(dest);
+        conn.start();
+
+        return consumer;
+    }
+
+    protected TopicSubscriber createDurableSubscriber(Connection conn, Destination dest, String name) throws Exception {
+        conn.setClientID(name);
+        connections.add(conn);
+        conn.start();
+
+        Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        final TopicSubscriber consumer = sess.createDurableSubscriber((javax.jms.Topic)dest, name);
+
+        return consumer;
+    }
+
+    protected void waitForAllMessagesToBeReceived(int messageCount) throws Exception {
+        allMessagesList.waitForMessagesToArrive(messageCount);
+    }
+
+    protected ActiveMQDestination createDestination() throws JMSException {
+        String name = "." + getClass().getName() + "." + getName();
+        if (topic) {
+            destination = new ActiveMQTopic("Topic" + name);
+            return (ActiveMQDestination)destination;
+        } else {
+            destination = new ActiveMQQueue("Queue" + name);
+            return (ActiveMQDestination)destination;
+        }
+    }
+
+    protected ConnectionFactory createConnectionFactory() throws Exception {
+        return new ActiveMQConnectionFactory("pipe://localhost");
+    }
+
+    protected Broker createBroker() throws Exception {
+        Broker broker = BrokerFactory.createBroker(new URI("jaxb:classpath:non-persistent-activemq.xml"));
+        broker.addTransportServer(TransportFactory.bind(new URI("pipe://localhost")));
+        return broker;
+    }
+
+    protected void setUp() throws Exception {
+        super.setAutoFail(true);
+        super.setUp();
+        broker = createBroker();
+        broker.start();
+    }
+
+    protected void tearDown() throws Exception {
+        for (Iterator<Connection> iter = connections.iterator(); iter.hasNext();) {
+            Connection conn = iter.next();
+            try {
+                conn.close();
+            } catch (Throwable e) {
+            }
+        }
+        broker.stop();
+        allMessagesList.flushMessages();
+        consumers.clear();
+        super.tearDown();
+    }
+
+    /*
+     * Some helpful assertions for multiple consumers.
+     */
+    protected void assertConsumerReceivedAtLeastXMessages(MessageConsumer consumer, int msgCount) {
+        MessageIdList messageIdList = consumers.get(consumer);
+        messageIdList.assertAtLeastMessagesReceived(msgCount);
+    }
+
+    protected void assertConsumerReceivedAtMostXMessages(MessageConsumer consumer, int msgCount) {
+        MessageIdList messageIdList = consumers.get(consumer);
+        messageIdList.assertAtMostMessagesReceived(msgCount);
+    }
+
+    protected void assertConsumerReceivedXMessages(MessageConsumer consumer, int msgCount) {
+        MessageIdList messageIdList = consumers.get(consumer);
+        messageIdList.assertMessagesReceivedNoWait(msgCount);
+    }
+
+    protected void assertEachConsumerReceivedAtLeastXMessages(int msgCount) {
+        for (Iterator<MessageConsumer> i = consumers.keySet().iterator(); i.hasNext();) {
+            assertConsumerReceivedAtLeastXMessages(i.next(), msgCount);
+        }
+    }
+
+    protected void assertEachConsumerReceivedAtMostXMessages(int msgCount) {
+        for (Iterator<MessageConsumer> i = consumers.keySet().iterator(); i.hasNext();) {
+            assertConsumerReceivedAtMostXMessages(i.next(), msgCount);
+        }
+    }
+
+    protected void assertEachConsumerReceivedXMessages(int msgCount) {
+        for (Iterator<MessageConsumer> i = consumers.keySet().iterator(); i.hasNext();) {
+            assertConsumerReceivedXMessages(i.next(), msgCount);
+        }
+    }
+
+    protected void assertTotalMessagesReceived(int msgCount) {
+        allMessagesList.assertMessagesReceivedNoWait(msgCount);
+
+        // now lets count the individual messages received
+        int totalMsg = 0;
+        for (Iterator<MessageConsumer> i = consumers.keySet().iterator(); i.hasNext();) {
+            MessageIdList messageIdList = consumers.get(i.next());
+            totalMsg += messageIdList.getMessageCount();
+        }
+        assertEquals("Total of consumers message count", msgCount, totalMsg);
+    }
+}

Added: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java?rev=787446&view=auto
==============================================================================
--- activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java (added)
+++ activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java Mon Jun 22 23:44:22 2009
@@ -0,0 +1,156 @@
+/**
+ * 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.activemq.apollo.perf;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.command.ActiveMQDestination;
+
+public class QueueSubscriptionTest extends JmsMultipleClientsTestSupport {
+    protected int messageCount = 1000; // 1000 Messages per producer
+    protected int prefetchCount = 10;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        durable = false;
+        topic = false;
+    }
+
+    public void testManyProducersOneConsumer() throws Exception {
+        consumerCount = 1;
+        producerCount = 10;
+        messageCount = 100;
+        messageSize = 1; // 1 byte
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersSmallMessagesOnePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount = 1000;
+        messageSize = 1024; // 1 Kb
+        configurePrefetchOfOne();
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersSmallMessagesLargePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount = 1000;
+        prefetchCount = messageCount * 2;
+        messageSize = 1024; // 1 Kb
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersLargeMessagesOnePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount = 10;
+        messageSize = 1024 * 1024 * 1; // 2 MB
+        configurePrefetchOfOne();
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersLargeMessagesLargePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount = 10;
+        prefetchCount = messageCount * 2;
+        messageSize = 1024 * 1024 * 1; // 2 MB
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerManyConsumersFewMessages() throws Exception {
+        consumerCount = 50;
+        producerCount = 1;
+        messageCount = 10;
+        messageSize = 1; // 1 byte
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testOneProducerManyConsumersManyMessages() throws Exception {
+        consumerCount = 50;
+        producerCount = 1;
+        messageCount = 1000;
+        messageSize = 1; // 1 byte
+        prefetchCount = messageCount / consumerCount;
+        allMessagesList.setMaximumDuration(allMessagesList.getMaximumDuration() * 20);
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    public void testManyProducersManyConsumers() throws Exception {
+        consumerCount = 200;
+        producerCount = 50;
+        messageCount = 100;
+        messageSize = 1; // 1 byte
+        prefetchCount = 100;
+        allMessagesList.setMaximumDuration(allMessagesList.getMaximumDuration() * 20);
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount);
+    }
+
+    protected void configurePrefetchOfOne() {
+        prefetchCount = 1;
+
+        // this is gonna be a bit slow what with the low prefetch so bump up the
+        // wait time
+        allMessagesList.setMaximumDuration(allMessagesList.getMaximumDuration() * 20);
+    }
+
+    public void doMultipleClientsTest() throws Exception {
+        // Create destination
+        final ActiveMQDestination dest = createDestination();
+
+        // Create consumers
+        ActiveMQConnectionFactory consumerFactory = (ActiveMQConnectionFactory)createConnectionFactory();
+        consumerFactory.getPrefetchPolicy().setAll(prefetchCount);
+
+        startConsumers(consumerFactory, dest);
+
+        startProducers(dest, messageCount);
+
+        // Wait for messages to be received. Make it proportional to the
+        // messages delivered.
+        int totalMessageCount = messageCount * producerCount;
+        if (dest.isTopic()) {
+            totalMessageCount *= consumerCount;
+        }
+        waitForAllMessagesToBeReceived(totalMessageCount);
+    }
+}

Propchange: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/QueueSubscriptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java?rev=787446&view=auto
==============================================================================
--- activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java (added)
+++ activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java Mon Jun 22 23:44:22 2009
@@ -0,0 +1,124 @@
+/**
+ * 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.activemq.apollo.perf;
+
+
+public class TopicSubscriptionTest extends QueueSubscriptionTest {
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        durable = true;
+        topic = true;
+    }
+
+    public void testManyProducersManyConsumers() throws Exception {
+        consumerCount = 40;
+        producerCount = 20;
+        messageCount  = 100;
+        messageSize   = 1; 
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount * consumerCount);
+    }
+
+    public void testOneProducerTwoConsumersLargeMessagesOnePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount  = 10;
+        messageSize   = 1024 * 1024 * 1; // 1 MB
+        prefetchCount = 1;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersSmallMessagesOnePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        prefetchCount = 1;
+        messageSize   = 1024;
+        messageCount  = 1000;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersSmallMessagesLargePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount  = 1000;
+        messageSize   = 1024;
+        prefetchCount = messageCount * 2;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+    public void testOneProducerTwoConsumersLargeMessagesLargePrefetch() throws Exception {
+        consumerCount = 2;
+        producerCount = 1;
+        messageCount  = 10;
+        messageSize   = 1024 * 1024 * 1; // 1 MB
+        prefetchCount = messageCount * 2;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+    public void testOneProducerManyConsumersFewMessages() throws Exception {
+        consumerCount = 50;
+        producerCount = 1;
+        messageCount  = 10;
+        messageSize   = 1; // 1 byte
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+    public void testOneProducerManyConsumersManyMessages() throws Exception {
+        consumerCount = 50;
+        producerCount = 1;
+        messageCount  = 100;
+        messageSize   = 1; // 1 byte
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * consumerCount * producerCount);
+    }
+
+
+    public void testManyProducersOneConsumer() throws Exception {
+        consumerCount = 1;
+        producerCount = 20;
+        messageCount  = 100;
+        messageSize   = 1; // 1 byte
+        prefetchCount = 10;
+
+        doMultipleClientsTest();
+
+        assertTotalMessagesReceived(messageCount * producerCount * consumerCount);
+    }
+}

Propchange: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/apollo/perf/TopicSubscriptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/NioQueueSubscriptionTest.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/NioQueueSubscriptionTest.java?rev=787446&r1=787445&r2=787446&view=diff
==============================================================================
--- activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/NioQueueSubscriptionTest.java (original)
+++ activemq/sandbox/activemq-flow/activemq-client/src/test/java/org/apache/activemq/legacy/test6/NioQueueSubscriptionTest.java Mon Jun 22 23:44:22 2009
@@ -32,6 +32,7 @@
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.apollo.broker.Broker;
 import org.apache.activemq.apollo.broker.BrokerFactory;
+import org.apache.activemq.apollo.perf.QueueSubscriptionTest;
 import org.apache.activemq.transport.TransportFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;