blob: fb2c94120354688f11fd29d8b00fd9b8a42c2ca3 [file] [log] [blame]
/*
*
* 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;
import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jms.Session;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.server.model.Exchange;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.test.utils.TestFileUtils;
import org.apache.qpid.util.FileUtils;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
public class VirtualHostRestTest extends QpidRestTestCase
{
private static final String VIRTUALHOST_EXCHANGES_ATTRIBUTE = "exchanges";
public static final String VIRTUALHOST_QUEUES_ATTRIBUTE = "queues";
public static final String VIRTUALHOST_CONNECTIONS_ATTRIBUTE = "connections";
private AMQConnection _connection;
public void testGet() throws Exception
{
List<Map<String, Object>> hosts = getRestTestHelper().getJsonAsList("/rest/virtualhost/");
assertNotNull("Hosts data cannot be null", hosts);
assertEquals("Unexpected number of hosts", EXPECTED_VIRTUALHOSTS.length, hosts.size());
for (String hostName : EXPECTED_VIRTUALHOSTS)
{
Map<String, Object> host = getRestTestHelper().find("name", hostName, hosts);
Asserts.assertVirtualHost(hostName, host);
}
}
public void testGetHost() throws Exception
{
// create AMQP connection to get connection JSON details
_connection = (AMQConnection) getConnection();
_connection.createSession(true, Session.SESSION_TRANSACTED);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
Asserts.assertVirtualHost("test", hostDetails);
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE);
assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length, statistics.get(VirtualHost.EXCHANGE_COUNT));
assertEquals("Unexpected number of queues in statistics", EXPECTED_QUEUES.length, statistics.get(VirtualHost.QUEUE_COUNT));
assertEquals("Unexpected number of connections in statistics", 1, statistics.get(VirtualHost.CONNECTION_COUNT));
@SuppressWarnings("unchecked")
List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE);
assertEquals("Unexpected number of exchanges", EXPECTED_EXCHANGES.length, exchanges.size());
Asserts.assertDurableExchange("amq.fanout", "fanout", getRestTestHelper().find(Exchange.NAME, "amq.fanout", exchanges));
Asserts.assertDurableExchange("amq.topic", "topic", getRestTestHelper().find(Exchange.NAME, "amq.topic", exchanges));
Asserts.assertDurableExchange("amq.direct", "direct", getRestTestHelper().find(Exchange.NAME, "amq.direct", exchanges));
Asserts.assertDurableExchange("amq.match", "headers", getRestTestHelper().find(Exchange.NAME, "amq.match", exchanges));
Asserts.assertDurableExchange("<<default>>", "direct", getRestTestHelper().find(Exchange.NAME, "<<default>>", exchanges));
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VIRTUALHOST_QUEUES_ATTRIBUTE);
assertEquals("Unexpected number of queues", EXPECTED_QUEUES.length, queues.size());
Map<String, Object> queue = getRestTestHelper().find(Queue.NAME, "queue", queues);
Map<String, Object> ping = getRestTestHelper().find(Queue.NAME, "ping", queues);
Asserts.assertQueue("queue", "standard", queue);
Asserts.assertQueue("ping", "standard", ping);
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.FALSE, queue.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.FALSE, ping.get(Queue.DURABLE));
@SuppressWarnings("unchecked")
List<Map<String, Object>> connections = (List<Map<String, Object>>) hostDetails
.get(VIRTUALHOST_CONNECTIONS_ATTRIBUTE);
assertEquals("Unexpected number of connections", 1, connections.size());
Asserts.assertConnection(connections.get(0), _connection);
}
public void testPutCreateVirtualHostUsingStoreType() throws Exception
{
String hostName = getTestName();
String storeType = getTestProfileMessageStoreType();
String storeLocation = createHost(hostName, storeType, null);
try
{
// make sure that the host is saved in the broker store
restartBroker();
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/" + hostName);
Asserts.assertVirtualHost(hostName, hostDetails);
assertEquals("Unexpected store type", storeType, hostDetails.get(VirtualHost.STORE_TYPE));
assertNewVirtualHost(hostDetails);
}
finally
{
if (storeLocation != null)
{
FileUtils.delete(new File(storeLocation), true);
}
}
}
public void testPutCreateVirtualHostUsingConfigPath() throws Exception
{
String hostName = getTestName();
File configFile = TestFileUtils.createTempFile(this, hostName + "-config.xml");
String configPath = configFile.getAbsolutePath();
String storeLocation = getStoreLocation(hostName);
createAndSaveVirtualHostConfiguration(hostName, configFile, storeLocation);
createHost(hostName, null, configPath);
try
{
// make sure that the host is saved in the broker store
restartBroker();
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/" + hostName);
Asserts.assertVirtualHost(hostName, hostDetails);
assertEquals("Unexpected config path", configPath, hostDetails.get(VirtualHost.CONFIG_PATH));
assertNewVirtualHost(hostDetails);
}
finally
{
if (storeLocation != null)
{
FileUtils.delete(new File(storeLocation), true);
}
configFile.delete();
}
}
public void testDeleteHost() throws Exception
{
String hostToDelete = TEST3_VIRTUALHOST;
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/virtualhost/" + hostToDelete, "DELETE");
connection.connect();
assertEquals("Unexpected response code", 200, connection.getResponseCode());
// make sure that changes are saved in the broker store
restartBroker();
List<Map<String, Object>> hosts = getRestTestHelper().getJsonAsList("/rest/virtualhost/" + hostToDelete);
assertEquals("Host should be deleted", 0, hosts.size());
}
public void testPutCreateQueue() throws Exception
{
String queueName = getTestQueueName();
createQueue(queueName + "-standard", "standard", null);
Map<String, Object> sortedQueueAttributes = new HashMap<String, Object>();
sortedQueueAttributes.put(Queue.SORT_KEY, "sortme");
createQueue(queueName + "-sorted", "sorted", sortedQueueAttributes);
Map<String, Object> priorityQueueAttributes = new HashMap<String, Object>();
priorityQueueAttributes.put(Queue.PRIORITIES, 10);
createQueue(queueName + "-priority", "priority", priorityQueueAttributes);
Map<String, Object> lvqQueueAttributes = new HashMap<String, Object>();
lvqQueueAttributes.put(Queue.LVQ_KEY, "LVQ");
createQueue(queueName + "-lvq", "lvq", lvqQueueAttributes);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> standardQueue = getRestTestHelper().find(Queue.NAME, queueName + "-standard" , queues);
Map<String, Object> sortedQueue = getRestTestHelper().find(Queue.NAME, queueName + "-sorted" , queues);
Map<String, Object> priorityQueue = getRestTestHelper().find(Queue.NAME, queueName + "-priority" , queues);
Map<String, Object> lvqQueue = getRestTestHelper().find(Queue.NAME, queueName + "-lvq" , queues);
Asserts.assertQueue(queueName + "-standard", "standard", standardQueue);
Asserts.assertQueue(queueName + "-sorted", "sorted", sortedQueue);
Asserts.assertQueue(queueName + "-priority", "priority", priorityQueue);
Asserts.assertQueue(queueName + "-lvq", "lvq", lvqQueue);
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, standardQueue.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, sortedQueue.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, priorityQueue.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, lvqQueue.get(Queue.DURABLE));
assertEquals("Unexpected sorted key attribute", "sortme", sortedQueue.get(Queue.SORT_KEY));
assertEquals("Unexpected lvq key attribute", "LVQ", lvqQueue.get(Queue.LVQ_KEY));
assertEquals("Unexpected priorities key attribute", 10, priorityQueue.get(Queue.PRIORITIES));
}
public void testPutCreateExchange() throws Exception
{
String exchangeName = getTestName();
createExchange(exchangeName + "-direct", "direct");
createExchange(exchangeName + "-topic", "topic");
createExchange(exchangeName + "-headers", "headers");
createExchange(exchangeName + "-fanout", "fanout");
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_EXCHANGES_ATTRIBUTE);
Map<String, Object> directExchange = getRestTestHelper().find(Queue.NAME, exchangeName + "-direct" , exchanges);
Map<String, Object> topicExchange = getRestTestHelper().find(Queue.NAME, exchangeName + "-topic" , exchanges);
Map<String, Object> headersExchange = getRestTestHelper().find(Queue.NAME, exchangeName + "-headers" , exchanges);
Map<String, Object> fanoutExchange = getRestTestHelper().find(Queue.NAME, exchangeName + "-fanout" , exchanges);
Asserts.assertDurableExchange(exchangeName + "-direct", "direct", directExchange);
Asserts.assertDurableExchange(exchangeName + "-topic", "topic", topicExchange);
Asserts.assertDurableExchange(exchangeName + "-headers", "headers", headersExchange);
Asserts.assertDurableExchange(exchangeName + "-fanout", "fanout", fanoutExchange);
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, directExchange.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, topicExchange.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, headersExchange.get(Queue.DURABLE));
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, fanoutExchange.get(Queue.DURABLE));
}
public void testPutCreateLVQWithoutKey() throws Exception
{
String queueName = getTestQueueName()+ "-lvq";
createQueue(queueName, "lvq", null);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> lvqQueue = getRestTestHelper().find(Queue.NAME, queueName , queues);
Asserts.assertQueue(queueName , "lvq", lvqQueue);
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, lvqQueue.get(Queue.DURABLE));
assertEquals("Unexpected lvq key attribute", AMQQueueFactory.QPID_LVQ_KEY, lvqQueue.get(Queue.LVQ_KEY));
}
public void testPutCreateSortedQueueWithoutKey() throws Exception
{
String queueName = getTestQueueName() + "-sorted";
int responseCode = tryCreateQueue(queueName, "sorted", null);
assertEquals("Unexpected response code", HttpServletResponse.SC_CONFLICT, responseCode);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> testQueue = getRestTestHelper().find(Queue.NAME, queueName , queues);
assertNull("Sorted queue without a key was created ", testQueue);
}
public void testPutCreatePriorityQueueWithoutKey() throws Exception
{
String queueName = getTestQueueName()+ "-priority";
createQueue(queueName, "priority", null);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> priorityQueue = getRestTestHelper().find(Queue.NAME, queueName , queues);
Asserts.assertQueue(queueName , "priority", priorityQueue);
assertEquals("Unexpected value of queue attribute " + Queue.DURABLE, Boolean.TRUE, priorityQueue.get(Queue.DURABLE));
assertEquals("Unexpected number of priorities", 10, priorityQueue.get(Queue.PRIORITIES));
}
public void testPutCreateStandardQueueWithoutType() throws Exception
{
String queueName = getTestQueueName();
createQueue(queueName, null, null);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> queue = getRestTestHelper().find(Queue.NAME, queueName , queues);
Asserts.assertQueue(queueName , "standard", queue);
}
public void testPutCreateQueueOfUnsupportedType() throws Exception
{
String queueName = getTestQueueName();
int responseCode = tryCreateQueue(queueName, "unsupported", null);
assertEquals("Unexpected response code", HttpServletResponse.SC_CONFLICT, responseCode);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> queue = getRestTestHelper().find(Queue.NAME, queueName , queues);
assertNull("Queue of unsupported type was created", queue);
}
public void testDeleteQueue() throws Exception
{
String queueName = getTestQueueName();
createQueue(queueName, null, null);
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/queue/test/" + queueName, "DELETE");
connection.connect();
assertEquals("Unexpected response code", 200, connection.getResponseCode());
List<Map<String, Object>> queues = getRestTestHelper().getJsonAsList("/rest/queue/test/" + queueName);
assertEquals("Queue should be deleted", 0, queues.size());
}
public void testDeleteQueueById() throws Exception
{
String queueName = getTestQueueName();
createQueue(queueName, null, null);
Map<String, Object> queueDetails = getRestTestHelper().getJsonAsSingletonList("/rest/queue/test/" + queueName);
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/queue/test?id=" + queueDetails.get(Queue.ID), "DELETE");
connection.connect();
assertEquals("Unexpected response code", 200, connection.getResponseCode());
List<Map<String, Object>> queues = getRestTestHelper().getJsonAsList("/rest/queue/test/" + queueName);
assertEquals("Queue should be deleted", 0, queues.size());
}
public void testDeleteExchange() throws Exception
{
String exchangeName = getTestName();
createExchange(exchangeName, "direct");
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/exchange/test/" + exchangeName, "DELETE");
connection.connect();
assertEquals("Unexpected response code", 200, connection.getResponseCode());
List<Map<String, Object>> queues = getRestTestHelper().getJsonAsList("/rest/exchange/test/" + exchangeName);
assertEquals("Exchange should be deleted", 0, queues.size());
}
public void testDeleteExchangeById() throws Exception
{
String exchangeName = getTestName();
createExchange(exchangeName, "direct");
Map<String, Object> echangeDetails = getRestTestHelper().getJsonAsSingletonList("/rest/exchange/test/" + exchangeName);
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/exchange/test?id=" + echangeDetails.get(Exchange.ID), "DELETE");
connection.connect();
assertEquals("Unexpected response code", 200, connection.getResponseCode());
List<Map<String, Object>> queues = getRestTestHelper().getJsonAsList("/rest/exchange/test/" + exchangeName);
assertEquals("Exchange should be deleted", 0, queues.size());
}
public void testPutCreateQueueWithAttributes() throws Exception
{
String queueName = getTestQueueName();
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(Queue.ALERT_REPEAT_GAP, 1000);
attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, 3600000);
attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, 1000000000);
attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, 800);
attributes.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, 15);
attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 2000000000);
attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 1500000000);
createQueue(queueName + "-standard", "standard", attributes);
Map<String, Object> sortedQueueAttributes = new HashMap<String, Object>();
sortedQueueAttributes.putAll(attributes);
sortedQueueAttributes.put(Queue.SORT_KEY, "sortme");
createQueue(queueName + "-sorted", "sorted", sortedQueueAttributes);
Map<String, Object> priorityQueueAttributes = new HashMap<String, Object>();
priorityQueueAttributes.putAll(attributes);
priorityQueueAttributes.put(Queue.PRIORITIES, 10);
createQueue(queueName + "-priority", "priority", priorityQueueAttributes);
Map<String, Object> lvqQueueAttributes = new HashMap<String, Object>();
lvqQueueAttributes.putAll(attributes);
lvqQueueAttributes.put(Queue.LVQ_KEY, "LVQ");
createQueue(queueName + "-lvq", "lvq", lvqQueueAttributes);
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
@SuppressWarnings("unchecked")
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
Map<String, Object> standardQueue = getRestTestHelper().find(Queue.NAME, queueName + "-standard" , queues);
Map<String, Object> sortedQueue = getRestTestHelper().find(Queue.NAME, queueName + "-sorted" , queues);
Map<String, Object> priorityQueue = getRestTestHelper().find(Queue.NAME, queueName + "-priority" , queues);
Map<String, Object> lvqQueue = getRestTestHelper().find(Queue.NAME, queueName + "-lvq" , queues);
attributes.put(Queue.DURABLE, Boolean.TRUE);
Asserts.assertQueue(queueName + "-standard", "standard", standardQueue, attributes);
Asserts.assertQueue(queueName + "-sorted", "sorted", sortedQueue, attributes);
Asserts.assertQueue(queueName + "-priority", "priority", priorityQueue, attributes);
Asserts.assertQueue(queueName + "-lvq", "lvq", lvqQueue, attributes);
assertEquals("Unexpected sorted key attribute", "sortme", sortedQueue.get(Queue.SORT_KEY));
assertEquals("Unexpected lvq key attribute", "LVQ", lvqQueue.get(Queue.LVQ_KEY));
assertEquals("Unexpected priorities key attribute", 10, priorityQueue.get(Queue.PRIORITIES));
}
@SuppressWarnings("unchecked")
public void testCreateQueueWithDLQEnabled() throws Exception
{
String queueName = getTestQueueName();
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(AMQQueueFactory.X_QPID_DLQ_ENABLED, true);
//verify the starting state
Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_EXCHANGES_ATTRIBUTE);
assertNull("queue should not have already been present", getRestTestHelper().find(Queue.NAME, queueName , queues));
assertNull("queue should not have already been present", getRestTestHelper().find(Queue.NAME, queueName + "_DLQ" , queues));
assertNull("exchange should not have already been present", getRestTestHelper().find(Exchange.NAME, queueName + "_DLE" , exchanges));
//create the queue
createQueue(queueName, "standard", attributes);
//verify the new queue, as well as the DLQueue and DLExchange have been created
hostDetails = getRestTestHelper().getJsonAsSingletonList("/rest/virtualhost/test");
queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE);
exchanges = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_EXCHANGES_ATTRIBUTE);
Map<String, Object> queue = getRestTestHelper().find(Queue.NAME, queueName , queues);
Map<String, Object> dlqQueue = getRestTestHelper().find(Queue.NAME, queueName + "_DLQ" , queues);
Map<String, Object> dlExchange = getRestTestHelper().find(Exchange.NAME, queueName + "_DLE" , exchanges);
assertNotNull("queue should not have been present", queue);
assertNotNull("queue should not have been present", dlqQueue);
assertNotNull("exchange should not have been present", dlExchange);
//verify that the alternate exchange is set as expected on the new queue
Map<String, Object> queueAttributes = new HashMap<String, Object>();
queueAttributes.put(Queue.ALTERNATE_EXCHANGE, queueName + "_DLE");
Asserts.assertQueue(queueName, "standard", queue, queueAttributes);
Asserts.assertQueue(queueName, "standard", queue, null);
}
private void createExchange(String exchangeName, String exchangeType) throws IOException
{
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/exchange/test/" + exchangeName, "PUT");
Map<String, Object> queueData = new HashMap<String, Object>();
queueData.put(Exchange.NAME, exchangeName);
queueData.put(Exchange.DURABLE, Boolean.TRUE);
queueData.put(Exchange.TYPE, exchangeType);
getRestTestHelper().writeJsonRequest(connection, queueData);
assertEquals("Unexpected response code", 201, connection.getResponseCode());
connection.disconnect();
}
private void createQueue(String queueName, String queueType, Map<String, Object> attributes) throws IOException,
JsonGenerationException, JsonMappingException
{
int responseCode = tryCreateQueue(queueName, queueType, attributes);
assertEquals("Unexpected response code", 201, responseCode);
}
private int tryCreateQueue(String queueName, String queueType, Map<String, Object> attributes) throws IOException,
JsonGenerationException, JsonMappingException
{
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/queue/test/" + queueName, "PUT");
Map<String, Object> queueData = new HashMap<String, Object>();
queueData.put(Queue.NAME, queueName);
queueData.put(Queue.DURABLE, Boolean.TRUE);
if (queueType != null)
{
queueData.put(Queue.TYPE, queueType);
}
if (attributes != null)
{
queueData.putAll(attributes);
}
getRestTestHelper().writeJsonRequest(connection, queueData);
int responseCode = connection.getResponseCode();
connection.disconnect();
return responseCode;
}
private String createHost(String hostName, String storeType, String configPath) throws IOException, JsonGenerationException,
JsonMappingException
{
String storePath = getStoreLocation(hostName);
int responseCode = tryCreateVirtualHost(hostName, storeType, storePath, configPath);
assertEquals("Unexpected response code", 201, responseCode);
return storePath;
}
private String getStoreLocation(String hostName)
{
return new File(TMP_FOLDER, "store-" + hostName + "-" + System.currentTimeMillis()).getAbsolutePath();
}
private int tryCreateVirtualHost(String hostName, String storeType, String storePath, String configPath) throws IOException,
JsonGenerationException, JsonMappingException
{
HttpURLConnection connection = getRestTestHelper().openManagementConnection("/rest/virtualhost/" + hostName, "PUT");
Map<String, Object> hostData = new HashMap<String, Object>();
hostData.put(VirtualHost.NAME, hostName);
if (storeType == null)
{
hostData.put(VirtualHost.CONFIG_PATH, configPath);
}
else
{
hostData.put(VirtualHost.STORE_PATH, storePath);
hostData.put(VirtualHost.STORE_TYPE, storeType);
}
getRestTestHelper().writeJsonRequest(connection, hostData);
int responseCode = connection.getResponseCode();
connection.disconnect();
return responseCode;
}
private XMLConfiguration createAndSaveVirtualHostConfiguration(String hostName, File configFile, String storeLocation)
throws ConfigurationException
{
XMLConfiguration testConfiguration = new XMLConfiguration();
testConfiguration.setProperty("virtualhosts.virtualhost." + hostName + ".store.class",
getTestProfileMessageStoreClassName());
testConfiguration.setProperty("virtualhosts.virtualhost." + hostName + ".store.environment-path", storeLocation);
testConfiguration.save(configFile);
return testConfiguration;
}
private void assertNewVirtualHost(Map<String, Object> hostDetails)
{
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) hostDetails.get(Asserts.STATISTICS_ATTRIBUTE);
assertEquals("Unexpected number of exchanges in statistics", EXPECTED_EXCHANGES.length,
statistics.get(VirtualHost.EXCHANGE_COUNT));
assertEquals("Unexpected number of queues in statistics", 0, statistics.get(VirtualHost.QUEUE_COUNT));
assertEquals("Unexpected number of connections in statistics", 0, statistics.get(VirtualHost.CONNECTION_COUNT));
@SuppressWarnings("unchecked")
List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VIRTUALHOST_EXCHANGES_ATTRIBUTE);
assertEquals("Unexpected number of exchanges", EXPECTED_EXCHANGES.length, exchanges.size());
RestTestHelper restTestHelper = getRestTestHelper();
Asserts.assertDurableExchange("amq.fanout", "fanout", restTestHelper.find(Exchange.NAME, "amq.fanout", exchanges));
Asserts.assertDurableExchange("amq.topic", "topic", restTestHelper.find(Exchange.NAME, "amq.topic", exchanges));
Asserts.assertDurableExchange("amq.direct", "direct", restTestHelper.find(Exchange.NAME, "amq.direct", exchanges));
Asserts.assertDurableExchange("amq.match", "headers", restTestHelper.find(Exchange.NAME, "amq.match", exchanges));
Asserts.assertDurableExchange("<<default>>", "direct", restTestHelper.find(Exchange.NAME, "<<default>>", exchanges));
assertNull("Unexpected queues", hostDetails.get(VIRTUALHOST_QUEUES_ATTRIBUTE));
assertNull("Unexpected connections", hostDetails.get(VIRTUALHOST_CONNECTIONS_ATTRIBUTE));
}
}