Author: ritchiem
Date: Mon Jul  5 11:17:23 2010
New Revision: 960553

URL: http://svn.apache.org/viewvc?rev=960553&view=rev
Log:
QPID-2681 : Add final SCD testing for Topic and Subscriptions

Added:
    
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SubscriptionTest.java
    
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/TopicTest.java
Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/TopicConfiguration.java

Added: 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SubscriptionTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SubscriptionTest.java?rev=960553&view=auto
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SubscriptionTest.java
 (added)
+++ 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SubscriptionTest.java
 Mon Jul  5 11:17:23 2010
@@ -0,0 +1,146 @@
+/*
+ *
+ * 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.systest;
+
+import org.apache.commons.configuration.ConfigurationException;
+
+import javax.jms.Session;
+import javax.naming.NamingException;
+import java.io.IOException;
+
+/**
+ * Test SCD when configured with Subscription details.
+ *
+ * We run the subscription based tests here to validate that the
+ * subscriptionname value is correctly associated with the subscription.
+ *
+ *
+ */
+public class SubscriptionTest extends TestingBaseCase
+{
+    private int _count=0;
+    protected String CONFIG_SECTION = ".topics.topic";
+
+    /**
+     * Add configuration for the queue that relates just to this test.
+     * We use the getTestQueueName() as our subscription. To ensure the
+     * config sections do not overlap we identify each section with a _count
+     * value.
+     *
+     * This would allow each test to configure more than one section.
+     *
+     * @param property to set
+     * @param value the value to set
+     * @param deleteDurable should deleteDurable be set.
+     * @throws NamingException
+     * @throws IOException
+     * @throws ConfigurationException
+     */
+    public void setConfig(String property, String value, boolean 
deleteDurable) throws NamingException, IOException, ConfigurationException
+    {
+        setProperty(CONFIG_SECTION + "("+_count+").subscriptionName", 
"clientid:"+getTestQueueName());
+
+        setProperty(CONFIG_SECTION + "("+_count+").slow-consumer-detection." +
+                    "policy.name", "TopicDelete");
+
+        setProperty(CONFIG_SECTION + "("+_count+").slow-consumer-detection." +
+                    property, value);
+
+        if (deleteDurable)
+        {
+            setProperty(CONFIG_SECTION + 
"("+_count+").slow-consumer-detection." +
+                        "policy.topicdelete.delete-persistent", "");
+        }
+        _count++;
+    }
+
+
+    /**
+     * Test that setting messageCount takes affect on a durable Consumer
+     *
+     * Ensure we set the delete-persistent option
+     *
+     * We send 10 messages and disconnect at 9
+     *
+     * @throws Exception
+     */
+
+    public void testTopicDurableConsumerMessageCount() throws Exception
+    {
+        MAX_QUEUE_MESSAGE_COUNT = 10;
+
+        setConfig("messageCount", String.valueOf(MAX_QUEUE_MESSAGE_COUNT - 1), 
true);
+
+        //Start the broker
+        startBroker();
+
+        topicConsumer(Session.AUTO_ACKNOWLEDGE, true);
+    }
+
+    /**
+     * Test that setting depth has an effect on durable consumer topics
+     *
+     * Ensure we set the delete-persistent option
+     *
+     * Sets the message size for the test
+     * Sets the depth to be 9 * the depth
+     * Ensure that sending 10 messages causes the disconnection
+     *
+     * @throws Exception
+     */
+    public void testTopicDurableConsumerMessageSize() throws Exception
+    {
+        MAX_QUEUE_MESSAGE_COUNT = 10;
+
+        setConfig("depth", String.valueOf(MESSAGE_SIZE * 9), true);
+
+        //Start the broker
+        startBroker();
+
+        setMessageSize(MESSAGE_SIZE);
+
+        topicConsumer(Session.AUTO_ACKNOWLEDGE, true);
+    }
+
+    /**
+     * Test that setting messageAge has an effect on topics
+     *
+     * Ensure we set the delete-persistent option
+     *
+     * Sets the messageAge to be 1/5 the disconnection wait timeout (or 1sec)
+     * Send 10 messages and then ensure that we get disconnected as we will
+     * wait for the full timeout.
+     *
+     * @throws Exception
+     */
+    public void testTopicDurableConsumerMessageAge() throws Exception
+    {
+        MAX_QUEUE_MESSAGE_COUNT = 10;
+
+        setConfig("messageAge", String.valueOf(DISCONNECTION_WAIT / 5), true);
+
+        //Start the broker
+        startBroker();
+
+        topicConsumer(Session.AUTO_ACKNOWLEDGE, true);
+    }
+
+}

Added: 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/TopicTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/TopicTest.java?rev=960553&view=auto
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/TopicTest.java
 (added)
+++ 
qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/TopicTest.java
 Mon Jul  5 11:17:23 2010
@@ -0,0 +1,85 @@
+/*
+ *
+ * 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.systest;
+
+import org.apache.commons.configuration.ConfigurationException;
+
+import javax.naming.NamingException;
+import java.io.IOException;
+
+/**
+ * This Topic test extends the Global queue test so it will run all the topic
+ * and subscription tests.
+ *
+ * We redefine the CONFIG_SECTION here so that the configuration is written
+ * against a topic element.
+ *
+ * To complete the migration to testing 'topic' elements we also override
+ * the setConfig to use the test name as the topic name.
+ *
+ */
+public class TopicTest extends GlobalQueuesTest
+{
+    private int _count=0;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        CONFIG_SECTION = ".topics.topic";
+        super.setUp();
+    }
+
+    /**
+     * Add configuration for the queue that relates just to this test.
+     * We use the getTestQueueName() as our subscription. To ensure the
+     * config sections do not overlap we identify each section with a _count
+     * value.
+     *
+     * This would allow each test to configure more than one section.
+     *
+     * @param property to set
+     * @param value the value to set
+     * @param deleteDurable should deleteDurable be set.
+     * @throws NamingException
+     * @throws IOException
+     * @throws ConfigurationException
+     */
+    @Override
+    public void setConfig(String property, String value, boolean 
deleteDurable) throws NamingException, IOException, ConfigurationException
+    {
+        setProperty(CONFIG_SECTION + "("+_count+").name", getName());
+
+        setProperty(CONFIG_SECTION + "("+_count+").slow-consumer-detection." +
+                    "policy.name", "TopicDelete");
+
+        setProperty(CONFIG_SECTION + "("+_count+").slow-consumer-detection." +
+                    property, value);
+
+        if (deleteDurable)
+        {
+            setProperty(CONFIG_SECTION + 
"("+_count+").slow-consumer-detection." +
+                        "policy.topicdelete.delete-persistent", "");
+        }
+        _count++;
+    }
+
+    
+}

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/TopicConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/TopicConfiguration.java?rev=960553&r1=960552&r2=960553&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/TopicConfiguration.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/TopicConfiguration.java
 Mon Jul  5 11:17:23 2010
@@ -204,14 +204,19 @@ public class TopicConfiguration extends 
             config.addConfiguration(boundToTopics.get(0));
         }
 
+        // If we have a subscription then attempt to look it up.
+        String subscriptionName = queue.getName();
+
         // Apply subscription configurations
-        if (_subscriptions.containsKey(queue.getName()))
+        if (_subscriptions.containsKey(subscriptionName))
         {
-            Map<String, TopicConfig> topics = 
_subscriptions.get(queue.getName());
+
+            //Get all the Configuration that this subscription is bound to.
+            Map<String, TopicConfig> topics = 
_subscriptions.get(subscriptionName);
 
             TopicConfig subscriptionSpecificConfig = null;
 
-            // See if we have a TopicConfig in topics for a topic we are bound 
to. 
+            // See if we have a TopicConfig in topics for a topic we are bound 
to.
             for (Binding binding : queue.getBindings())
             {
                 if (binding.getExchange().getType().equals(TopicExchange.TYPE))
@@ -226,21 +231,19 @@ public class TopicConfiguration extends 
                 }
             }
 
-            //todo we don't account for wild cards here. only explict matching 
and all subscriptions            
+            //todo we don't account for wild cards here. only explicit 
matching and all subscriptions
             if (subscriptionSpecificConfig == null)
             {
                 // lookup the binding to see if we have a match in the 
subscription configs
                 subscriptionSpecificConfig = topics.get("#");
             }
 
-
             // Apply subscription specific config.
             if (subscriptionSpecificConfig != null)
             {
                 config.addConfiguration(subscriptionSpecificConfig);
             }
         }
-
         return config;
     }
 



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

Reply via email to