Author: robbie
Date: Tue Dec  7 12:26:21 2010
New Revision: 1043003

URL: http://svn.apache.org/viewvc?rev=1043003&view=rev
Log:
QPID-2974: add configuration for enabling/disabling DLQ functionality

Applied patch from Andrew Kennedy.

Modified:
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
    
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
 Tue Dec  7 12:26:21 2010
@@ -127,5 +127,13 @@ public class QueueConfiguration
     {
         return _config.getString("lvqKey", null);
     }
+    
+    /**
+     * Check if dead letter queue delivery is enabled, deferring to the 
virtualhost configuration if not set.
+     */
+    public boolean isDeadLetterQueueEnabled()
+    {
+        return _config.getBoolean("deadLetterQueues", 
_vHostConfig.isDeadLetterQueueEnabled());
+    }
 
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
 Tue Dec  7 12:26:21 2010
@@ -712,4 +712,12 @@ public class ServerConfiguration impleme
     {
         return getConfig().getString("deadLetterQueueSuffix", 
AMQQueueFactory.DEFAULT_DLQ_NAME_SUFFIX);
     }
+
+    /**
+     * Check if dead letter queue delivery is enabled, defaults to disabled if 
not set.
+     */
+    public boolean isDeadLetterQueueEnabled()
+    {
+        return getConfig().getBoolean("deadLetterQueues", false);
+    }
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
 Tue Dec  7 12:26:21 2010
@@ -195,4 +195,12 @@ public class VirtualHostConfiguration
     {
         return _config.getLong("transactionTimeout.idleClose", 0L);
     }
+    
+    /**
+     * Check if dead letter queue delivery is enabled, deferring to the broker 
configuration if not set.
+     */
+    public boolean isDeadLetterQueueEnabled()
+    {
+        return _config.getBoolean("queues.deadLetterQueues", 
ApplicationRegistry.getInstance().getConfiguration().isDeadLetterQueueEnabled());
+    }
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
 Tue Dec  7 12:26:21 2010
@@ -34,7 +34,6 @@ import org.apache.qpid.server.virtualhos
 
 public class AMQQueueFactory
 {
-    public static final boolean CONSTANT_THAT_NEEDS_REPLACED_IS_DLQ_CONFIGURED 
= true;//TODO: take from queue configuration
     public static final AMQShortString DLQ_ROUTING_KEY = new 
AMQShortString("dlq");
     public static final AMQShortString X_QPID_DLQ_ENABLED = new 
AMQShortString("x-qpid-dlq-enabled");
     public static final String DEFAULT_DLQ_NAME_SUFFIX = "_DLQ";
@@ -185,7 +184,7 @@ public class AMQQueueFactory
 
         boolean dlqArgPresent = (arguments != null && 
(arguments.containsKey(X_QPID_DLQ_ENABLED)));
 
-        if(dlqArgPresent || CONSTANT_THAT_NEEDS_REPLACED_IS_DLQ_CONFIGURED)
+        if(dlqArgPresent || qConfig.isDeadLetterQueueEnabled())
         {
             //verify that the argument isn't explicitly disabling DLQ for this 
queue.
             boolean dlqEnabled = true;
@@ -286,7 +285,7 @@ public class AMQQueueFactory
             arguments.setString(QPID_LAST_VALUE_QUEUE_KEY, config.getLVQKey() 
== null ? QPID_LVQ_KEY : config.getLVQKey());
 
         }
-        if (!config.getAutoDelete() && 
CONSTANT_THAT_NEEDS_REPLACED_IS_DLQ_CONFIGURED)
+        if (!config.getAutoDelete() && config.isDeadLetterQueueEnabled())
         {
             if(arguments == null)
             {

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java
 Tue Dec  7 12:26:21 2010
@@ -43,6 +43,7 @@ public class QueueConfigurationTest exte
         fullEnv.setProperty("queues.maximumMessageSize", 1);
         fullEnv.setProperty("queues.maximumMessageCount", 1);
         fullEnv.setProperty("queues.minimumAlertRepeatGap", 1);
+        fullEnv.setProperty("queues.deadLetterQueues", true);
 
         _fullHostConf = new VirtualHostConfiguration("test", fullEnv);
         
@@ -133,4 +134,24 @@ public class QueueConfigurationTest exte
         assertEquals(1, qConf.getMinimumAlertRepeatGap());
     }
 
+    /**
+     * Tests that the default setting for DLQ configuration is disabled, and 
verifies that it can be overridden
+     * at a broker or virtualhost level.
+     */
+    public void testIsDeadLetterQueueEnabled()
+    {
+        // Check default value
+        QueueConfiguration qConf = new QueueConfiguration("test", _env, 
_emptyConf);        
+        assertFalse(qConf.isDeadLetterQueueEnabled());
+
+        // Check explicit value
+        PropertiesConfiguration fullEnv = new PropertiesConfiguration();
+        fullEnv.setProperty("deadLetterQueues", true);
+        qConf = new QueueConfiguration("test", fullEnv, _fullHostConf);        
+        assertTrue(qConf.isDeadLetterQueueEnabled());
+        
+        // Check inherited value
+        qConf = new QueueConfiguration("test", _env, _fullHostConf);        
+        assertTrue(qConf.isDeadLetterQueueEnabled());
+    }
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
 Tue Dec  7 12:26:21 2010
@@ -24,6 +24,7 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.io.Writer;
 import java.util.List;
 import java.util.Locale;
 
@@ -37,6 +38,7 @@ import org.apache.qpid.server.exchange.E
 import org.apache.qpid.server.protocol.AMQMinaProtocolSession;
 import org.apache.qpid.server.protocol.AMQProtocolSession;
 import org.apache.qpid.server.protocol.TestIoSession;
+import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry;
 import org.apache.qpid.server.virtualhost.VirtualHost;
@@ -466,6 +468,18 @@ public class ServerConfigurationTest ext
         assertEquals(10, serverConfig.getMinimumAlertRepeatGap());
     }
 
+    public void testIsDeadLetterQueueEnabled() throws ConfigurationException
+    {
+        // Check default
+        ServerConfiguration serverConfig = new ServerConfiguration(_config);
+        assertFalse(serverConfig.isDeadLetterQueueEnabled());
+
+        // Check value we set
+        _config.setProperty("deadLetterQueues", true);
+        serverConfig = new ServerConfiguration(_config);
+        assertTrue(serverConfig.isDeadLetterQueueEnabled());
+    }
+
     public void testGetProcessors() throws ConfigurationException
     {
         // Check default
@@ -1640,4 +1654,105 @@ public class ServerConfigurationTest ext
         assertEquals("Incorrect virtualhost count", 1, 
config.getVirtualHosts().length);
         assertEquals("Incorrect virtualhost name", "test-one", 
oneHost.getName());
     }
+
+    /**
+     * Convenience method to output required security preamble for broker 
config
+     */
+    private void writeSecurity(Writer out) throws Exception
+    {
+        out.write("\t<management><enabled>false</enabled></management>\n");
+        out.write("\t<security>\n");
+        out.write("\t\t<principal-databases>\n");
+        out.write("\t\t\t<principal-database>\n");
+        out.write("\t\t\t\t<name>passwordfile</name>\n");
+        
out.write("\t\t\t\t<class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class>\n");
+        out.write("\t\t\t\t<attributes>\n");
+        out.write("\t\t\t\t\t<attribute>\n");
+        out.write("\t\t\t\t\t\t<name>passwordFile</name>\n");
+        out.write("\t\t\t\t\t\t<value>/dev/null</value>\n");
+        out.write("\t\t\t\t\t</attribute>\n");
+        out.write("\t\t\t\t</attributes>\n");
+        out.write("\t\t\t</principal-database>\n");
+        out.write("\t\t</principal-databases>\n");
+        out.write("\t\t<jmx>\n");
+        out.write("\t\t\t<access>/dev/null</access>\n");
+        
out.write("\t\t\t<principal-database>passwordfile</principal-database>\n");
+        out.write("\t\t</jmx>\n");
+        out.write("\t</security>\n");
+    }
+
+    /**
+     * Test XML configuration file correctly enables dead letter queues
+     */
+    public void testDeadLetterQueueConfigurationFile() throws Exception
+    {
+        // Write config
+        File xml = File.createTempFile(getClass().getName(), "xml");
+        xml.deleteOnExit();
+        FileWriter config = new FileWriter(xml);
+        config.write("<broker>\n");
+        writeSecurity(config);
+        config.write("<deadLetterQueues>true</deadLetterQueues>\n");
+        config.write("<virtualhosts>\n");
+        config.write("<virtualhost>\n");
+        config.write("<name>test</name>\n");
+        config.write("<test>\n");
+        config.write("<queues>\n");
+        config.write("<deadLetterQueues>false</deadLetterQueues>\n");
+        config.write("<queue>\n");
+        config.write("<name>biggles</name>\n");
+        config.write("<biggles>\n");
+        config.write("<deadLetterQueues>true</deadLetterQueues>\n");
+        config.write("</biggles>\n");
+        config.write("</queue>\n");
+        config.write("<queue>\n");
+        config.write("<name>beetle</name>\n");
+        config.write("<beetle />\n");
+        config.write("</queue>\n");
+        config.write("</queues>\n");
+        config.write("</test>\n");
+        config.write("</virtualhost>\n");
+        config.write("<virtualhost>\n");
+        config.write("<name>extra</name>\n");
+        config.write("<extra>\n");
+        config.write("<queues>\n");
+        config.write("<queue>\n");
+        config.write("<name>r2d2</name>\n");
+        config.write("<r2d2>\n");
+        config.write("<deadLetterQueues>false</deadLetterQueues>\n");
+        config.write("</r2d2>\n");
+        config.write("</queue>\n");
+        config.write("<queue>\n");
+        config.write("<name>c3p0</name>\n");
+        config.write("<c3p0 />\n");
+        config.write("</queue>\n");
+        config.write("</queues>\n");
+        config.write("</extra>\n");
+        config.write("</virtualhost>\n");
+        config.write("</virtualhosts>\n");
+        config.write("</broker>\n");
+        config.close();
+        
+        // Load config
+        ServerConfiguration server = new 
ServerConfiguration(xml.getAbsoluteFile());
+        ApplicationRegistry registry = new 
ConfigurationFileApplicationRegistry(xml);
+        ApplicationRegistry.initialise(registry, 1);
+        
+        VirtualHostConfiguration test = server.getVirtualHostConfig("test");
+        VirtualHostConfiguration extra = server.getVirtualHostConfig("extra");
+        
+        QueueConfiguration biggles = test.getQueueConfiguration("biggles");
+        QueueConfiguration beetle = test.getQueueConfiguration("beetle");
+        QueueConfiguration r2d2 = extra.getQueueConfiguration("r2d2");
+        QueueConfiguration c3p0 = extra.getQueueConfiguration("c3p0");
+
+        // Validate config
+        assertTrue("Broker DLQ should be configured as enabled", 
server.isDeadLetterQueueEnabled());
+        assertFalse("Test vhost DLQ should be configured as disabled", 
test.isDeadLetterQueueEnabled());
+        assertTrue("Extra vhost DLQ should be enabled, using broker default", 
extra.isDeadLetterQueueEnabled());
+        assertTrue("Biggles queue DLQ should be configured as enabled", 
biggles.isDeadLetterQueueEnabled());
+        assertFalse("Beetle queue DLQ should be disabled, using test vhost 
default", beetle.isDeadLetterQueueEnabled());
+        assertFalse("R2D2 queue DLQ should be configured as disabled", 
r2d2.isDeadLetterQueueEnabled());
+        assertTrue("C3P0 queue DLQ should be enabled, using broker default", 
c3p0.isDeadLetterQueueEnabled());
+    }
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
 Tue Dec  7 12:26:21 2010
@@ -21,9 +21,7 @@ package org.apache.qpid.server.configura
 
 
 import junit.framework.TestCase;
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.qpid.AMQException;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.server.queue.AMQPriorityQueue;
 import org.apache.qpid.server.queue.AMQQueue;
@@ -46,6 +44,7 @@ public class VirtualHostConfigurationTes
         configXml = new XMLConfiguration();
         configXml.setRootElementName("virtualhosts");
         configXml.addProperty("virtualhost(-1).name", "test");
+        configXml.addProperty("virtualhost(-1).name", "extra");
     }
 
     public void tearDown() throws Exception
@@ -59,28 +58,19 @@ public class VirtualHostConfigurationTes
     public void testQueuePriority() throws Exception
     {
         // Set up queue with 5 priorities
-        
configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name(-1)", 
-                              "atest");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest(-1).exchange", 
-                              "amq.direct");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest.priorities", 
-                              "5");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"atest");
+        configXml.addProperty("virtualhost.test.queues.queue.atest.exchange", 
"amq.direct");
+        
configXml.addProperty("virtualhost.test.queues.queue.atest.priorities",  "5");
 
         // Set up queue with JMS style priorities
-        
configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name(-1)", 
-                              "ptest");
-        
configXml.addProperty("virtualhost.test.queues.queue.ptest(-1).exchange", 
-                              "amq.direct");
-        configXml.addProperty("virtualhost.test.queues.queue.ptest.priority", 
-                               "true");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"ptest");
+        configXml.addProperty("virtualhost.test.queues.queue.ptest.exchange", 
"amq.direct");
+        configXml.addProperty("virtualhost.test.queues.queue.ptest.priority", 
"true");
         
         // Set up queue with no priorities
-        
configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name(-1)", 
-                              "ntest");
-        
configXml.addProperty("virtualhost.test.queues.queue.ntest(-1).exchange", 
-                              "amq.direct");
-        configXml.addProperty("virtualhost.test.queues.queue.ntest.priority", 
-                              "false");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"ntest");
+        configXml.addProperty("virtualhost.test.queues.queue.ntest.exchange", 
"amq.direct");
+        configXml.addProperty("virtualhost.test.queues.queue.ntest.priority", 
"false");
         
         VirtualHost vhost = new VirtualHost(new 
VirtualHostConfiguration("test", configXml.subset("virtualhost.test")));
         
@@ -107,13 +97,13 @@ public class VirtualHostConfigurationTes
         configXml.addProperty("virtualhost.test.queues.maximumMessageSize", 
"2");
         configXml.addProperty("virtualhost.test.queues.maximumMessageAge", 
"3");
         
-        configXml.addProperty("virtualhost.test.queues(-1).queue(1).name(1)", 
"atest");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest(-1).exchange", 
"amq.direct");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest(-1).maximumQueueDepth",
 "4");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest(-1).maximumMessageSize",
 "5");
-        
configXml.addProperty("virtualhost.test.queues.queue.atest(-1).maximumMessageAge",
 "6");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"atest");
+        configXml.addProperty("virtualhost.test.queues.queue.atest.exchange", 
"amq.direct");
+        
configXml.addProperty("virtualhost.test.queues.queue.atest.maximumQueueDepth", 
"4");
+        
configXml.addProperty("virtualhost.test.queues.queue.atest.maximumMessageSize", 
"5");
+        
configXml.addProperty("virtualhost.test.queues.queue.atest.maximumMessageAge", 
"6");
 
-        
configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name(-1)", 
"btest");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"btest");
         
         VirtualHost vhost = new VirtualHost(new 
VirtualHostConfiguration("test", configXml.subset("virtualhost.test")));
         
@@ -130,5 +120,57 @@ public class VirtualHostConfigurationTes
         assertEquals(3, bTest.getMaximumMessageAge());
         
     }
+
+    /**
+     * Tests the full set of configuration options for enabling DLQs in the 
broker configuration.
+     */
+    public void testIsDeadLetterQueueEnabled() throws Exception
+    {
+        // Set up vhosts and queues
+        configXml.addProperty("virtualhost.test.queues.deadLetterQueues", 
"true");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"biggles");
+        
configXml.addProperty("virtualhost.test.queues.queue.biggles.deadLetterQueues", 
"false");
+        configXml.addProperty("virtualhost.test.queues(-1).queue(-1).name", 
"beetle");
+
+        configXml.addProperty("virtualhost.extra.queues(-1).queue(-1).name", 
"r2d2");
+        
configXml.addProperty("virtualhost.extra.queues.queue.r2d2.deadLetterQueues", 
"true");
+        configXml.addProperty("virtualhost.extra.queues(-1).queue(-1).name", 
"c3p0");
+
+        // Get vhosts
+        VirtualHost test = new VirtualHost(new 
VirtualHostConfiguration("test", configXml.subset("virtualhost.test")));
+        VirtualHost extra = new VirtualHost(new 
VirtualHostConfiguration("extra", configXml.subset("virtualhost.extra")));
+        
+        // Enabled specifically
+        assertTrue("Test vhost DLQ was configured as enabled", 
test.getConfiguration().isDeadLetterQueueEnabled());
+        assertTrue("r2d2 queue DLQ was configured as enabled", 
extra.getConfiguration().getQueueConfiguration("r2d2").isDeadLetterQueueEnabled());
+
+        // Enabled by test vhost default
+        assertTrue("beetle queue DLQ was configured as enabled", 
test.getConfiguration().getQueueConfiguration("beetle").isDeadLetterQueueEnabled());
+        
+        // Disabled specifically
+        assertFalse("Biggles queue DLQ was configured as disabled", 
test.getConfiguration().getQueueConfiguration("biggles").isDeadLetterQueueEnabled());
+
+        // Using broker default of disabled
+        assertFalse("Extra vhost DLQ disabled, using broker default", 
extra.getConfiguration().isDeadLetterQueueEnabled());
+        assertFalse("c3p0 queue DLQ was configured as disabled", 
extra.getConfiguration().getQueueConfiguration("c3p0").isDeadLetterQueueEnabled());
+
+        // Get queues
+        AMQQueue biggles = test.getQueueRegistry().getQueue(new 
AMQShortString("biggles"));
+        AMQQueue beetle = test.getQueueRegistry().getQueue(new 
AMQShortString("beetle"));
+        AMQQueue r2d2 = extra.getQueueRegistry().getQueue(new 
AMQShortString("r2d2"));
+        AMQQueue c3p0 = extra.getQueueRegistry().getQueue(new 
AMQShortString("c3p0"));
+
+        // Disabled specifically for this queue, overriding virtualhost setting
+        assertNull("Biggles queue should not have alt exchange as DLQ should 
be configured as disabled: " + biggles.getAlternateExchange(), 
biggles.getAlternateExchange());
+
+        // Enabled for all queues on the virtualhost
+        assertNotNull("Beetle queue should have an alt exchange as DLQ should 
be enabled, using test vhost default", beetle.getAlternateExchange());
+
+        // Enabled specifically for this queue, overriding the default broker 
setting of disabled
+        assertNotNull("R2D2 queue should have an alt exchange as DLQ should be 
configured as enabled", r2d2.getAlternateExchange());
+
+        // Disabled by the default broker setting
+        assertNull("C3PO queue should not have an alt exchange as DLQ should 
be disabled, using broker default", c3p0.getAlternateExchange());
+    }
     
 }

Modified: 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java?rev=1043003&r1=1043002&r2=1043003&view=diff
==============================================================================
--- 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
 (original)
+++ 
qpid/branches/0.5.x-dev/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
 Tue Dec  7 12:26:21 2010
@@ -76,6 +76,27 @@ public class AMQQueueFactoryTest extends
             AMQQueue queue = AMQQueueFactory.createAMQQueueImpl(new 
AMQShortString("testQueue"), false, new AMQShortString("owner"), false,
                                                _virtualHost, null);
             assertEquals("Queue not a simple queue", SimpleAMQQueue.class, 
queue.getClass());
+            assertNull("Queue should not have alternate exchange as DLQ isnt 
enabled", queue.getAlternateExchange());
+        }
+        catch (AMQException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests that setting the {...@link AMQQueueFactory#X_QPID_DLQ_ENABLED} 
argument causes the alternate exchange to be set.
+     */
+    public void testDeadLetterQueueEnabled()
+    {
+        FieldTable fieldTable = new FieldTable();
+        fieldTable.put(new AMQShortString(AMQQueueFactory.X_QPID_DLQ_ENABLED), 
true);
+        
+        try
+        {
+            AMQQueue queue = AMQQueueFactory.createAMQQueueImpl(new 
AMQShortString("testQueue"), false, new AMQShortString("owner"), false,
+                                               _virtualHost, fieldTable);
+            assertNotNull("Queue should have an alternate exchange as DLQ is 
enabled", queue.getAlternateExchange());
         }
         catch (AMQException e)
         {



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to