diff options
| author | Martin Ritchie <ritchiem@apache.org> | 2009-03-06 12:25:04 +0000 |
|---|---|---|
| committer | Martin Ritchie <ritchiem@apache.org> | 2009-03-06 12:25:04 +0000 |
| commit | c76fdc86647faa33b2bcf3f911a1a7773f377eb9 (patch) | |
| tree | 45e526698f243f76bfb5c71623c047d894d34ebe /java | |
| parent | b7fb9f5027f2bf8920a6e32c649c4181db405fa9 (diff) | |
| download | qpid-python-c76fdc86647faa33b2bcf3f911a1a7773f377eb9.tar.gz | |
QPID-1639 : Added test to ensure that properties passed on QueueDeclare are applied to queue.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@750867 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
3 files changed, 243 insertions, 5 deletions
diff --git a/java/ExcludeList b/java/ExcludeList index 509f74bbbd..c992e37646 100644 --- a/java/ExcludeList +++ b/java/ExcludeList @@ -6,3 +6,8 @@ org.apache.qpid.test.client.QueueBrowserDupsOkTest#testBrowsingWithSelector org.apache.qpid.test.client.QueueBrowserNoAckTest#testBrowsingWithSelector org.apache.qpid.test.client.QueueBrowserPreAckTest#testBrowsingWithSelector org.apache.qpid.test.client.QueueBrowserTransactedTest#testBrowsingWithSelector +// QPID-1715, QPID-1715 : Client Error Handling on close is still broken +org.apache.qpid.server.queue.QueueCreateTest#testCreatePriorityString +org.apache.qpid.server.queue.QueueCreateTest#testCreateFlowToDiskValidNoSize +org.apache.qpid.server.queue.QueueCreateTest#testCreateFlowToDiskInvalid +org.apache.qpid.server.queue.QueueCreateTest#testCreateFlowToDiskInvalidSize diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java b/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java index f977dc0449..a2b514af68 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java +++ b/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java @@ -23,13 +23,17 @@ package org.apache.qpid.server.queue; import org.apache.qpid.AMQException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.FieldTable; +import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.configuration.QueueConfiguration; import org.apache.qpid.server.virtualhost.VirtualHost; - public class AMQQueueFactory { public static final AMQShortString X_QPID_PRIORITIES = new AMQShortString("x-qpid-priorities"); + public static final AMQShortString QPID_MAX_COUNT = new AMQShortString("qpid.max_count"); + public static final AMQShortString QPID_MAX_SIZE = new AMQShortString("qpid.max_size"); + public static final AMQShortString QPID_POLICY_TYPE = new AMQShortString("qpid.policy_type"); + public static final String QPID_FLOW_TO_DISK = "flow_to_disk"; public static AMQQueue createAMQQueueImpl(AMQShortString name, boolean durable, @@ -39,10 +43,26 @@ public class AMQQueueFactory throws AMQException { - final int priorities = arguments == null ? 1 : arguments.containsKey(X_QPID_PRIORITIES) ? arguments.getInteger(X_QPID_PRIORITIES) : 1; + int priorities = 1; + + if (arguments != null && arguments.containsKey(X_QPID_PRIORITIES)) + { + Integer priority = arguments.getInteger(X_QPID_PRIORITIES); + + if (priority != null) + { + priorities = priority.intValue(); + } + else + { + throw new AMQException(AMQConstant.INVALID_ARGUMENT, + "Queue create request with non integer value for :" + X_QPID_PRIORITIES + "=" + arguments.get(X_QPID_PRIORITIES), null); + } + + } AMQQueue q = null; - if(priorities > 1) + if (priorities > 1) { q = new AMQPriorityQueue(name, durable, owner, autoDelete, virtualHost, priorities); } @@ -51,6 +71,40 @@ public class AMQQueueFactory q = new SimpleAMQQueue(name, durable, owner, autoDelete, virtualHost); } + final String queuePolicyType = arguments == null ? null : + arguments.containsKey(QPID_POLICY_TYPE) ? arguments.getString(QPID_POLICY_TYPE) : null; + + if (queuePolicyType != null) + { + if (queuePolicyType.equals(QPID_FLOW_TO_DISK)) + { + if (arguments.containsKey(QPID_MAX_SIZE)) + { + + final long queueSize = arguments.getInteger(QPID_MAX_SIZE); + + if (queueSize < 0) + { + throw new AMQException(AMQConstant.INVALID_ARGUMENT, + "Queue create request with negative size:" + queueSize, null); + } + + q.setMaximumMessageSize(queueSize); + } + else + { + throw new AMQException(AMQConstant.INVALID_ARGUMENT, + "Queue create request with no qpid.max_size value,", null); + } + } + else + { + throw new AMQException(AMQConstant.NOT_IMPLEMENTED, + "Queue create request with unknown Policy Type:" + queuePolicyType, null); + } + + } + //Register the new queue virtualHost.getQueueRegistry().registerQueue(q); return q; @@ -66,9 +120,9 @@ public class AMQQueueFactory FieldTable arguments = null; boolean priority = config.getPriority(); int priorities = config.getPriorities(); - if(priority || priorities > 0) + if (priority || priorities > 0) { - if(arguments == null) + if (arguments == null) { arguments = new FieldTable(); } diff --git a/java/systests/src/main/java/org/apache/qpid/server/queue/QueueCreateTest.java b/java/systests/src/main/java/org/apache/qpid/server/queue/QueueCreateTest.java new file mode 100644 index 0000000000..dd9b35c475 --- /dev/null +++ b/java/systests/src/main/java/org/apache/qpid/server/queue/QueueCreateTest.java @@ -0,0 +1,179 @@ +/* + * + * 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.server.queue; + +import org.apache.qpid.AMQException; +import org.apache.qpid.client.AMQSession; +import org.apache.qpid.client.failover.FailoverException; +import org.apache.qpid.framing.AMQShortString; +import org.apache.qpid.test.utils.QpidTestCase; + +import javax.jms.Connection; +import javax.jms.JMSException; +import javax.jms.Session; +import javax.naming.NamingException; +import java.util.HashMap; +import java.util.Map; + +/** The purpose of this set of tests is to ensure */ +public class QueueCreateTest extends QpidTestCase +{ + private Connection _connection; + private AMQSession _session; + private int _queueCount = 0; + + public void setUp() throws Exception + { + _connection = getConnection(); + + _session = (AMQSession) _connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + } + + private void testQueueWithArguments(Map<String, Object> arguments) throws AMQException + { + _session.createQueue(new AMQShortString(this.getName() + (_queueCount++)), false, false, false, arguments); + } + + public void testCreateNoArguments() throws AMQException, FailoverException + { + Map<String, Object> arguments = null; + testQueueWithArguments(arguments); + } + + public void testCreatePriorityInt() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + //Ensure we can call createQueue with a priority int value + arguments.put(AMQQueueFactory.X_QPID_PRIORITIES.toString(), 7); + testQueueWithArguments(arguments); + } + + /** + * @link https://issues.apache.org/jira/browse/QPID-1715, QPID-1716 + * + * @throws AMQException + * @throws FailoverException + */ + public void testCreatePriorityString() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + //Ensure we can call createQueue with a priority value that is not an int + arguments.put(AMQQueueFactory.X_QPID_PRIORITIES.toString(), "seven"); + try + { + + testQueueWithArguments(arguments); + fail("Invalid Property value still succeeds."); + } + catch (Exception e) + { + assertTrue("Incorrect error message thrown:" + e.getMessage(), + e.getMessage().startsWith("Queue create request with non integer value for :x-qpid-priorities=seven")); + } + } + + public void testCreateFlowToDiskValid() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + //Ensure we can call createQueue with a priority int value + arguments.put(AMQQueueFactory.QPID_POLICY_TYPE.toString(), AMQQueueFactory.QPID_FLOW_TO_DISK); + arguments.put(AMQQueueFactory.QPID_MAX_SIZE.toString(), 100); + testQueueWithArguments(arguments); + } + + /** + * @link https://issues.apache.org/jira/browse/QPID-1715, QPID-1716 + * @throws AMQException + * @throws FailoverException + */ + public void testCreateFlowToDiskValidNoSize() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + //Ensure we can call createQueue with a priority int value + arguments.put(AMQQueueFactory.QPID_POLICY_TYPE.toString(), AMQQueueFactory.QPID_FLOW_TO_DISK); + try + { + testQueueWithArguments(arguments); + } + catch (AMQException e) + { + assertTrue("Incorrect Error throw:" + e.getMessage() + + ":expecting:Queue create request with no qpid.max_size value", + e.getMessage().contains("Queue create request with no qpid.max_size value")); + } + } + + /** + * @link https://issues.apache.org/jira/browse/QPID-1715, QPID-1716 + * @throws AMQException + * @throws FailoverException + */ + public void testCreateFlowToDiskInvalid() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + arguments.put(AMQQueueFactory.QPID_POLICY_TYPE.toString(), "infinite"); + try + { + testQueueWithArguments(arguments); + fail("Invalid Property value still succeeds."); + } + catch (Exception e) + { + //Check error is correct + assertTrue("Incorrect error message thrown:" + e.getMessage(), + e.getMessage().startsWith("Queue create request with unknown Policy Type:infinite")); + } + + } + + /** + * @link https://issues.apache.org/jira/browse/QPID-1715, QPID-1716 + * @throws AMQException + * @throws FailoverException + */ + public void testCreateFlowToDiskInvalidSize() throws AMQException, FailoverException + { + Map<String, Object> arguments = new HashMap<String, Object>(); + + arguments.put(AMQQueueFactory.QPID_POLICY_TYPE.toString(), AMQQueueFactory.QPID_FLOW_TO_DISK); + arguments.put(AMQQueueFactory.QPID_MAX_SIZE.toString(), -1); + try + { + testQueueWithArguments(arguments); + fail("Invalid Property value still succeeds."); + } + catch (Exception e) + { + //Check error is correct + assertTrue("Incorrect error message thrown:" + e.getMessage(), + e.getMessage().startsWith("Queue create request with negative size:-1")); + } + + } + + +} |
