summaryrefslogtreecommitdiff
path: root/java/systests
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2013-05-04 22:17:08 +0000
committerAlex Rudyy <orudyy@apache.org>2013-05-04 22:17:08 +0000
commit1c29cea5e195a651a028e677dfe551bc6773c18b (patch)
tree38c5c07aa043f57aef10d586be227caf56cbfea5 /java/systests
parent9899f29d97cc325b1be846b0eb450387a68d2a57 (diff)
downloadqpid-python-1c29cea5e195a651a028e677dfe551bc6773c18b.tar.gz
QPID-4813: Protect operations to update queue and exchange attributes with ACL
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1479200 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/systests')
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/BindingRestTest.java21
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java21
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java38
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/acl/ExchangeRestACLTest.java235
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/acl/QueueRestACLTest.java189
5 files changed, 504 insertions, 0 deletions
diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/BindingRestTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/BindingRestTest.java
index 372db8f560..9a57429062 100644
--- a/java/systests/src/main/java/org/apache/qpid/systest/rest/BindingRestTest.java
+++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/BindingRestTest.java
@@ -127,4 +127,25 @@ public class BindingRestTest extends QpidRestTestCase
Asserts.assertBinding(bindingName, "queue", "amq.direct", binding);
}
+ public void testSetBindingAttributesUnsupported() throws Exception
+ {
+ String bindingName = getTestName();
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Binding.NAME, bindingName);
+ attributes.put(Binding.QUEUE, "queue");
+ attributes.put(Binding.EXCHANGE, "amq.direct");
+
+ int responseCode = getRestTestHelper().submitRequest("/rest/binding/test/amq.direct/queue/" + bindingName, "PUT", attributes);
+ assertEquals("Unexpected response code", 201, responseCode);
+
+ Map<String, Object> binding = getRestTestHelper().getJsonAsSingletonList("/rest/binding/test/amq.direct/queue/" + bindingName);
+
+ Asserts.assertBinding(bindingName, "queue", "amq.direct", binding);
+
+ attributes.put(Binding.ID, binding.get(Binding.ID));
+ attributes.put(Binding.ARGUMENTS, null);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/binding/test/amq.direct/queue/" + bindingName, "PUT", attributes);
+ assertEquals("Update should be unsupported", 409, responseCode);
+ }
}
diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java
index ec9791db13..1da1c6394e 100644
--- a/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java
+++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java
@@ -21,6 +21,7 @@
package org.apache.qpid.systest.rest;
import java.net.URLDecoder;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -62,6 +63,26 @@ public class ExchangeRestTest extends QpidRestTestCase
}
}
+ public void testSetExchangeAttributesUnsupported() throws Exception
+ {
+ String exchangeName = getTestName();
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Exchange.NAME, exchangeName);
+ attributes.put(Exchange.TYPE, "direct");
+ int responseCode =getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "PUT", attributes);
+
+ Map<String, Object> exchange = getRestTestHelper().getJsonAsSingletonList("/rest/exchange/test/" + exchangeName);
+ assertNotNull("Exchange not found", exchange);
+
+ attributes = new HashMap<String, Object>();
+ attributes.put(Exchange.NAME, exchangeName);
+ attributes.put(Exchange.ALTERNATE_EXCHANGE, "my-alternate-exchange");
+
+ responseCode = getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "PUT", attributes);
+ assertEquals("Exchange update should be unsupported", 409, responseCode);
+ }
+
private void assertExchange(String exchangeName, Map<String, Object> exchange)
{
assertNotNull("Exchange with name " + exchangeName + " is not found", exchange);
diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java
index 1f441e7cbb..d6eae154cf 100644
--- a/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java
+++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java
@@ -127,6 +127,44 @@ public class QueueRestTest extends QpidRestTestCase
assertConsumer(consumers.get(0));
}
+ public void testUpdateQueue() throws Exception
+ {
+ String queueName = getTestName();
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Queue.NAME, queueName);
+
+ int responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "PUT", attributes);
+
+ Map<String, Object> queueDetails = getRestTestHelper().getJsonAsSingletonList("/rest/queue/test/" + queueName);
+ Asserts.assertQueue(queueName, "standard", queueDetails);
+
+ attributes = new HashMap<String, Object>();
+ attributes.put(Queue.NAME, queueName);
+ attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 100000);
+ attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 80000);
+ attributes.put(Queue.ALERT_REPEAT_GAP, 10000);
+ attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, 20000);
+ attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, 30000);
+ attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, 40000);
+ attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, 50000);
+ attributes.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, 10);
+ attributes.put(Queue.EXCLUSIVE, true);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "PUT", attributes);
+ assertEquals("Setting of queue attribites should be allowed", 200, responseCode);
+
+ Map<String, Object> queueData = getRestTestHelper().getJsonAsSingletonList("/rest/queue/test/" + queueName);
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 100000, queueData.get(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES) );
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 80000, queueData.get(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES) );
+ assertEquals("Unexpected " + Queue.ALERT_REPEAT_GAP, 10000, queueData.get(Queue.ALERT_REPEAT_GAP) );
+ assertEquals("Unexpected " + Queue.ALERT_THRESHOLD_MESSAGE_AGE, 20000, queueData.get(Queue.ALERT_THRESHOLD_MESSAGE_AGE) );
+ assertEquals("Unexpected " + Queue.ALERT_THRESHOLD_MESSAGE_SIZE, 30000, queueData.get(Queue.ALERT_THRESHOLD_MESSAGE_SIZE) );
+ assertEquals("Unexpected " + Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, 40000, queueData.get(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES) );
+ assertEquals("Unexpected " + Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, 50000, queueData.get(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES) );
+ assertEquals("Unexpected " + Queue.EXCLUSIVE, true, queueData.get(Queue.EXCLUSIVE) );
+ }
+
public void testPutCreateBinding() throws Exception
{
String queueName = getTestQueueName();
diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/ExchangeRestACLTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/ExchangeRestACLTest.java
new file mode 100644
index 0000000000..b39d994198
--- /dev/null
+++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/ExchangeRestACLTest.java
@@ -0,0 +1,235 @@
+/*
+ *
+ * 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.rest.acl;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.management.plugin.HttpManagement;
+import org.apache.qpid.server.model.Binding;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.security.acl.AbstractACLTestCase;
+import org.apache.qpid.systest.rest.QpidRestTestCase;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+
+public class ExchangeRestACLTest extends QpidRestTestCase
+{
+ private static final String ALLOWED_USER = "user1";
+ private static final String DENIED_USER = "user2";
+
+ @Override
+ protected void customizeConfiguration() throws ConfigurationException, IOException
+ {
+ super.customizeConfiguration();
+ getRestTestHelper().configureTemporaryPasswordFile(this, ALLOWED_USER, DENIED_USER);
+
+ AbstractACLTestCase.writeACLFileUtil(this, null,
+ "ACL ALLOW-LOG ALL ACCESS MANAGEMENT",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " CREATE EXCHANGE",
+ "ACL DENY-LOG " + DENIED_USER + " CREATE EXCHANGE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " UPDATE EXCHANGE",
+ "ACL DENY-LOG " + DENIED_USER + " UPDATE EXCHANGE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " DELETE EXCHANGE",
+ "ACL DENY-LOG " + DENIED_USER + " DELETE EXCHANGE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " BIND EXCHANGE",
+ "ACL DENY-LOG " + DENIED_USER + " BIND EXCHANGE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " UNBIND EXCHANGE",
+ "ACL DENY-LOG " + DENIED_USER + " UNBIND EXCHANGE",
+ "ACL DENY-LOG ALL ALL");
+
+ getBrokerConfiguration().setObjectAttribute(TestBrokerConfiguration.ENTRY_NAME_HTTP_MANAGEMENT,
+ HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED, true);
+ }
+
+ public void testCreateExchangeAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+ assertEquals("Exchange creation should be allowed", 201, responseCode);
+
+ assertExchangeExists(exchangeName);
+ }
+
+ public void testCreateExchangeDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+ assertEquals("Exchange creation should be denied", 403, responseCode);
+
+ assertExchangeDoesNotExist(exchangeName);
+ }
+
+ public void testDeleteExchangeAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+ assertEquals("Exchange creation should be allowed", 201, responseCode);
+
+ assertExchangeExists(exchangeName);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "DELETE", null);
+ assertEquals("Exchange deletion should be allowed", 200, responseCode);
+
+ assertExchangeDoesNotExist(TEST2_VIRTUALHOST);
+ }
+
+ public void testDeleteExchangeDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+ assertEquals("Exchange creation should be allowed", 201, responseCode);
+
+ assertExchangeExists(exchangeName);
+
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+ responseCode = getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "DELETE", null);
+ assertEquals("Exchange deletion should be denied", 403, responseCode);
+
+ assertExchangeExists(exchangeName);
+ }
+
+ public void testSetExchangeAttributesAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+
+ assertExchangeExists(exchangeName);
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Exchange.NAME, exchangeName);
+ attributes.put(Exchange.ALTERNATE_EXCHANGE, "my-alternate-exchange");
+
+ responseCode = getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "PUT", attributes);
+ assertEquals("Setting of exchange attribites should be allowed but it is currently unsupported", 409, responseCode);
+ }
+
+ public void testSetExchangeAttributesDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String exchangeName = getTestName();
+
+ int responseCode = createExchange(exchangeName);
+ assertExchangeExists(exchangeName);
+
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Exchange.NAME, exchangeName);
+ attributes.put(Exchange.ALTERNATE_EXCHANGE, "my-alternate-exchange");
+
+ responseCode = getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "PUT", attributes);
+ assertEquals("Setting of exchange attribites should be allowed", 403, responseCode);
+ }
+
+ public void testBindToExchangeAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String bindingName = getTestName();
+ int responseCode = createBinding(bindingName);
+ assertEquals("Binding creation should be allowed", 201, responseCode);
+
+ assertBindingExists(bindingName);
+ }
+
+ public void testBindToExchangeDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+
+ String bindingName = getTestName();
+ int responseCode = createBinding(bindingName);
+ assertEquals("Binding creation should be denied", 403, responseCode);
+
+ assertBindingDoesNotExist(bindingName);
+ }
+
+ private int createExchange(String exchangeName) throws Exception
+ {
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Exchange.NAME, exchangeName);
+ attributes.put(Exchange.TYPE, "direct");
+ return getRestTestHelper().submitRequest("/rest/exchange/test/" + exchangeName, "PUT", attributes);
+ }
+
+ private void assertExchangeDoesNotExist(String exchangeName) throws Exception
+ {
+ assertExchangeExistence(exchangeName, false);
+ }
+
+ private void assertExchangeExists(String exchangeName) throws Exception
+ {
+ assertExchangeExistence(exchangeName, true);
+ }
+
+ private void assertExchangeExistence(String exchangeName, boolean exists) throws Exception
+ {
+ List<Map<String, Object>> exchanges = getRestTestHelper().getJsonAsList("/rest/exchange/test/" + exchangeName);
+ assertEquals("Unexpected result", exists, !exchanges.isEmpty());
+ }
+
+ private int createBinding(String bindingName) throws IOException, JsonGenerationException, JsonMappingException
+ {
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Binding.NAME, bindingName);
+ attributes.put(Binding.QUEUE, "queue");
+ attributes.put(Binding.EXCHANGE, "amq.direct");
+
+ int responseCode = getRestTestHelper().submitRequest("/rest/binding/test/amq.direct/queue/" + bindingName, "PUT", attributes);
+ return responseCode;
+ }
+
+ private void assertBindingDoesNotExist(String bindingName) throws Exception
+ {
+ assertBindingExistence(bindingName, false);
+ }
+
+ private void assertBindingExists(String bindingName) throws Exception
+ {
+ assertBindingExistence(bindingName, true);
+ }
+
+ private void assertBindingExistence(String bindingName, boolean exists) throws Exception
+ {
+ List<Map<String, Object>> bindings = getRestTestHelper().getJsonAsList("/rest/binding/test/amq.direct/queue/" + bindingName);
+ assertEquals("Unexpected result", exists, !bindings.isEmpty());
+ }
+}
diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/QueueRestACLTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/QueueRestACLTest.java
new file mode 100644
index 0000000000..b187ca955a
--- /dev/null
+++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/QueueRestACLTest.java
@@ -0,0 +1,189 @@
+/*
+ *
+ * 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.rest.acl;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.management.plugin.HttpManagement;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.security.acl.AbstractACLTestCase;
+import org.apache.qpid.systest.rest.QpidRestTestCase;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+
+public class QueueRestACLTest extends QpidRestTestCase
+{
+ private static final String ALLOWED_USER = "user1";
+ private static final String DENIED_USER = "user2";
+
+ @Override
+ protected void customizeConfiguration() throws ConfigurationException, IOException
+ {
+ super.customizeConfiguration();
+ getRestTestHelper().configureTemporaryPasswordFile(this, ALLOWED_USER, DENIED_USER);
+
+ AbstractACLTestCase.writeACLFileUtil(this, null,
+ "ACL ALLOW-LOG ALL ACCESS MANAGEMENT",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " CREATE QUEUE",
+ "ACL DENY-LOG " + DENIED_USER + " CREATE QUEUE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " UPDATE QUEUE",
+ "ACL DENY-LOG " + DENIED_USER + " UPDATE QUEUE",
+ "ACL ALLOW-LOG " + ALLOWED_USER + " DELETE QUEUE",
+ "ACL DENY-LOG " + DENIED_USER + " DELETE QUEUE",
+ "ACL DENY-LOG ALL ALL");
+
+ getBrokerConfiguration().setObjectAttribute(TestBrokerConfiguration.ENTRY_NAME_HTTP_MANAGEMENT,
+ HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED, true);
+ }
+
+ public void testCreateQueueAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+ assertEquals("Queue creation should be allowed", 201, responseCode);
+
+ assertQueueExists(queueName);
+ }
+
+ public void testCreateQueueDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+ assertEquals("Queue creation should be denied", 403, responseCode);
+
+ assertQueueDoesNotExist(queueName);
+ }
+
+ public void testDeleteQueueAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+ assertEquals("Queue creation should be allowed", 201, responseCode);
+
+ assertQueueExists(queueName);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "DELETE", null);
+ assertEquals("Queue deletion should be allowed", 200, responseCode);
+
+ assertQueueDoesNotExist(TEST2_VIRTUALHOST);
+ }
+
+ public void testDeleteQueueDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+ assertEquals("Queue creation should be allowed", 201, responseCode);
+
+ assertQueueExists(queueName);
+
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+ responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "DELETE", null);
+ assertEquals("Queue deletion should be denied", 403, responseCode);
+
+ assertQueueExists(queueName);
+ }
+
+ public void testSetQueueAttributesAllowed() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+
+ assertQueueExists(queueName);
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Queue.NAME, queueName);
+ attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 100000);
+ attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 80000);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "PUT", attributes);
+ assertEquals("Setting of queue attribites should be allowed", 200, responseCode);
+
+ Map<String, Object> queueData = getRestTestHelper().getJsonAsSingletonList("/rest/queue/test/" + queueName);
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 100000, queueData.get(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES) );
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 80000, queueData.get(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES) );
+ }
+
+ public void testSetQueueAttributesDenied() throws Exception
+ {
+ getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
+
+ String queueName = getTestName();
+
+ int responseCode = createQueue(queueName);
+ assertQueueExists(queueName);
+
+ getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
+
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Queue.NAME, queueName);
+ attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 100000);
+ attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 80000);
+
+ responseCode = getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "PUT", attributes);
+ assertEquals("Setting of queue attribites should be allowed", 403, responseCode);
+
+ Map<String, Object> queueData = getRestTestHelper().getJsonAsSingletonList("/rest/queue/test/" + queueName);
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 0, queueData.get(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES) );
+ assertEquals("Unexpected " + Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 0, queueData.get(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES) );
+ }
+
+ private int createQueue(String queueName) throws Exception
+ {
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes.put(Queue.NAME, queueName);
+
+ return getRestTestHelper().submitRequest("/rest/queue/test/" + queueName, "PUT", attributes);
+ }
+
+ private void assertQueueDoesNotExist(String queueName) throws Exception
+ {
+ assertQueueExistence(queueName, false);
+ }
+
+ private void assertQueueExists(String queueName) throws Exception
+ {
+ assertQueueExistence(queueName, true);
+ }
+
+ private void assertQueueExistence(String queueName, boolean exists) throws Exception
+ {
+ List<Map<String, Object>> queues = getRestTestHelper().getJsonAsList("/rest/queue/test/" + queueName);
+ assertEquals("Unexpected result", exists, !queues.isEmpty());
+ }
+}