diff options
| author | Keith Wall <kwall@apache.org> | 2014-06-07 19:01:03 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-06-07 19:01:03 +0000 |
| commit | 2a511e6a3b5f278f9c8b572a306b96490f180805 (patch) | |
| tree | a6c30ce39a23aeeb86844fb6434a21c669fba854 /qpid/java | |
| parent | 21aceae395ef19dca56dc603ed3f2af744b620a7 (diff) | |
| download | qpid-python-2a511e6a3b5f278f9c8b572a306b96490f180805.tar.gz | |
QPID-5803: [Java Broker] Add ability for the virtualhostnode to create a virtualhost using a blueprint supplied by context variable
* This commit reenables the SplitStoreTest.
* The UI has not been refactored by this commit, so it will not be possible to create a non-HA virtualhost from the UI
(the UI will create only a virtualhostnode).. REST API is okay.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1601163 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
19 files changed, 147 insertions, 139 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java index 591623510f..61c01c7003 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java @@ -30,9 +30,11 @@ import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -@ManagedObject( category = false, type = "BDB" ) +@ManagedObject(type = BDBVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false) public class BDBVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<BDBVirtualHostNodeImpl> implements BDBVirtualHostNode<BDBVirtualHostNodeImpl> { + public static final String VIRTUAL_HOST_NODE_TYPE = "BDB"; + @ManagedAttributeField private String _storePath; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java index e37eeb17bf..9ce4779a1c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.virtualhostnode; -import java.io.File; import java.security.PrivilegedAction; import java.util.Collection; import java.util.Collections; @@ -39,15 +38,13 @@ import org.apache.qpid.server.model.RemoteReplicationNode; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.security.SecurityManager; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.MessageStoreProvider; import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer; -import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandardVirtualHostNode<X>> extends AbstractVirtualHostNode<X> implements VirtualHostNode<X> { private static final Logger LOGGER = Logger.getLogger(AbstractStandardVirtualHostNode.class); + public static final String VIRTUALHOST_BLUEPRINT_CONTEXT_VAR = "virtualhostBlueprint"; public AbstractStandardVirtualHostNode(Map<String, Object> attributes, Broker<?> parent) @@ -100,25 +97,32 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard if (host == null) { - // TODO normal case - we should not create VH, - // TODO out if box case - if blueprint vh context variable is set, use it to create a VH - if (LOGGER.isDebugEnabled()) + if (getContext() != null && getContext().containsKey(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR)) { - LOGGER.debug("Creating new virtualhost with name : " + getName()); - } - Map<String, Object> hostAttributes = new HashMap<String, Object>(); - hostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION); - hostAttributes.put(VirtualHost.NAME, getName()); - if (getConfigurationStore() instanceof MessageStoreProvider) - { - hostAttributes.put(VirtualHost.TYPE, ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); - } - else - { - hostAttributes.put(VirtualHost.TYPE, "DERBY"); - hostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, getDefaultMessageStoreSettings()); + Map<String, Object> virtualhostBlueprint = getContextValue(Map.class, VIRTUALHOST_BLUEPRINT_CONTEXT_VAR); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Using virtualhost blueprint " + virtualhostBlueprint); + } + + Map<String, Object> virtualhostAttributes = new HashMap<>(); + virtualhostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION); + virtualhostAttributes.put(VirtualHost.NAME, getName()); + virtualhostAttributes.putAll(virtualhostBlueprint); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Creating new virtualhost named " + virtualhostAttributes.get(VirtualHost.NAME)); + } + + host = createChild(VirtualHost.class, virtualhostAttributes); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Created new virtualhost: " + host); + } } - host = createChild(VirtualHost.class, hostAttributes); } else { @@ -146,16 +150,4 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard { return Collections.emptyList(); } - - // protected for unit testing purposes - protected Map<String, Object> getDefaultMessageStoreSettings() - { - // TODO perhaps look for the MS with the default annotation and associated default. - Map<String, Object> settings = new HashMap<String, Object>(); - settings.put(MessageStore.STORE_TYPE, "DERBY"); - settings.put(MessageStore.STORE_PATH, "${qpid.work_dir}" + File.separator + "derbystore" + File.separator + getName()); - return settings; - } - - } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java index 67f690a2b9..6d26decd72 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java @@ -29,9 +29,11 @@ import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.JsonFileConfigStore; -@ManagedObject(category=false, type="JSON") +@ManagedObject(type=JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category=false) public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JsonVirtualHostNodeImpl> implements FileBasedVirtualHostNode<JsonVirtualHostNodeImpl> { + public static final String VIRTUAL_HOST_NODE_TYPE = "JSON"; + @ManagedAttributeField private String _storePath; diff --git a/qpid/java/broker-core/src/main/resources/initial-config.json b/qpid/java/broker-core/src/main/resources/initial-config.json index 45b02bd550..d220fefa50 100644 --- a/qpid/java/broker-core/src/main/resources/initial-config.json +++ b/qpid/java/broker-core/src/main/resources/initial-config.json @@ -55,7 +55,10 @@ "virtualhostnodes" : [ { "name" : "default", "type" : "JSON", - "storePath" : "${qpid.work_dir}/json/default" + "storePath" : "${qpid.work_dir}/default/config", + "context" : { + "virtualhostBlueprint" : "{ \"type\" : \"DERBY\", \"messageStoreSettings\" : { \"storePath\" : \"${qpid.work_dir}/default/messages\" }}" + } } ], "plugins" : [ { "type" : "MANAGEMENT-HTTP", diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java index e0a56bc39c..397f83b712 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java @@ -136,12 +136,8 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase node.start(); VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost(); - assertNotNull("Virtual host was not created", virtualHost); + assertNull("Virtual host should not be automatically created", virtualHost); - // Virtualhost name taken from VHN and ID is random. - assertEquals("Unexpected virtual host name", TEST_VIRTUAL_HOST_NODE_NAME, virtualHost.getName()); - assertEquals("Unexpected virtual host state", State.ACTIVE, virtualHost.getState()); - assertNotNull("Unexpected virtual host id", virtualHost.getId()); } private ConfiguredObjectRecord createMockVirtualHostCOR(UUID virtualHostId) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java index 16a9aa5550..18d394d4f7 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java @@ -20,18 +20,17 @@ */ package org.apache.qpid.server.virtualhostnode; -import java.util.Collections; import java.util.Map; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.TestMemoryMessageStore; -@ManagedObject(type="TestMemory", category=false) +@ManagedObject(type=TestVirtualHostNode.VIRTUAL_HOST_NODE_TYPE, category=false) public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVirtualHostNode> { + public static final String VIRTUAL_HOST_NODE_TYPE = "TestMemory"; + private final DurableConfigurationStore _store; public TestVirtualHostNode(Broker<?> parent, Map<String, Object> attributes) @@ -53,9 +52,4 @@ public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVir return _store; } - @Override - public Map<String, Object> getDefaultMessageStoreSettings() - { - return Collections.<String, Object>singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE); - } } diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java index 9dc68d0343..ffc19832fa 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java @@ -32,9 +32,11 @@ import org.apache.qpid.server.store.derby.DerbyMessageStore; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; -@ManagedObject( category = false, type = "DERBY" ) +@ManagedObject( category = false, type = DerbyVirtualHostNode.VIRTUAL_HOST_NODE_TYPE ) public class DerbyVirtualHostNode extends AbstractStandardVirtualHostNode<DerbyVirtualHostNode> implements FileBasedVirtualHostNode<DerbyVirtualHostNode> { + public static final String VIRTUAL_HOST_NODE_TYPE = "DERBY"; + @ManagedAttributeField private String _storePath; diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java index 29986335d0..2108b4e09a 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java @@ -30,9 +30,11 @@ import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.jdbc.JDBCMessageStore; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -@ManagedObject( category = false, type = "JDBC" ) +@ManagedObject(type = JDBCVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false ) public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDBCVirtualHostNodeImpl> implements JDBCVirtualHostNode<JDBCVirtualHostNodeImpl> { + public static final String VIRTUAL_HOST_NODE_TYPE = "JDBC"; + @ManagedAttributeField private String _connectionUrl; diff --git a/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java b/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java index 1fd4717ae1..fec2432d5b 100644 --- a/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java +++ b/qpid/java/broker-plugins/memory-store/src/main/java/org/apache/qpid/server/virtualhostnode/memory/MemoryVirtualHostNode.java @@ -29,9 +29,10 @@ import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MemoryConfigurationStore; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; -@ManagedObject(type="Memory",category=false) +@ManagedObject(type=MemoryVirtualHostNode.VIRTUAL_HOST_NODE_TYPE, category=false) public class MemoryVirtualHostNode extends AbstractStandardVirtualHostNode<MemoryVirtualHostNode> { + public static final String VIRTUAL_HOST_NODE_TYPE = "Memory"; @ManagedObjectFactoryConstructor public MemoryVirtualHostNode(Map<String, Object> attributes, Broker<?> parent) diff --git a/qpid/java/systests/etc/config-systests.json b/qpid/java/systests/etc/config-systests.json index 91d79a4319..ac5c46ad6a 100644 --- a/qpid/java/systests/etc/config-systests.json +++ b/qpid/java/systests/etc/config-systests.json @@ -60,6 +60,9 @@ "virtualhostnodes" : [ { "name" : "test", "type" : "${messagestore.type}", - "storePath" : "${QPID_WORK}/test/${test.port}" + "storePath" : "${QPID_WORK}/${test.port}/test/config", + "context" : { + "virtualhostBlueprint" : "{ \"type\" : \"ProvidedStore\" }" + } } ] } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java index 53c0563aee..0f67121212 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SplitStoreTest.java @@ -21,6 +21,7 @@ package org.apache.qpid.server.store; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -32,10 +33,11 @@ import javax.jms.Session; import org.apache.qpid.configuration.ClientProperties; import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.test.utils.QpidBrokerTestCase; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; -import org.apache.qpid.test.utils.TestUtils; import org.apache.qpid.util.FileUtils; public class SplitStoreTest extends QpidBrokerTestCase @@ -72,39 +74,27 @@ public class SplitStoreTest extends QpidBrokerTestCase // Overridden to prevent QBTC starting the Broker. } - public void testPass() + public void testJsonConfigurationStoreWithPersistentMessageStore() throws Exception { - + doTest(JsonFileConfigStore.TYPE, getTestProfileMessageStoreType()); } - // TODO reenable once we can specify a virtualhost blueprint context variable with necessary message store location - public void xtestJsonConfigurationStoreWithPersistentMessageStore() throws Exception + public void testSeparateConfigurationAndMessageStoresOfTheSameType() throws Exception { - - doTest(JsonFileConfigStore.TYPE, _configStorePath); + doTest(getTestProfileVirtualHostNodeType(), getTestProfileMessageStoreType()); } - // TODO test will currently create a provided VH which will share config/message store - // TODO reenable once we can specify a virtualhost blueprint context variable - public void xtestSeparateConfigurationAndMessageStoresOfTheSameType() throws Exception + private void configureAndStartBroker(String virtualHostNodeType, String virtualHostType) throws Exception { - doTest(getTestProfileVirtualHostNodeType(), _configStorePath); - } + final String blueprint = String.format( + "{ \"type\" : \"%s\", \"messageStoreSettings\" : { \"storePath\" : \"%s\" } }", virtualHostType, _messageStorePath); + final Map<String, String> contextMap = Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, + blueprint); - private void configureAndStartBroker(String nodeType, String storePath) throws Exception - { TestBrokerConfiguration config = getBrokerConfiguration(); - config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, VirtualHostNode.TYPE, nodeType); - config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, DurableConfigurationStore.STORE_PATH, storePath); - - Map<String, Object> messageStoreSettings = new HashMap<String, Object>(); - messageStoreSettings.put(MessageStore.STORE_TYPE, getTestProfileMessageStoreType()); - messageStoreSettings.put(MessageStore.STORE_PATH, _messageStorePath); - - // TODO initialise the virtualhost with the required attributes using the virtualhost blueprint - // mechanism. - - //TestUtils.createStoreWithVirtualHostEntry(messageStoreSettings, config, nodeType); + config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, VirtualHostNode.TYPE, virtualHostNodeType); + config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, VirtualHostNode.CONTEXT, contextMap); + config.setObjectAttribute(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST, FileBasedVirtualHostNode.STORE_PATH, _configStorePath); super.startBroker(); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java index 256690ea71..430fadc2f1 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java @@ -30,7 +30,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import javax.security.auth.Subject; @@ -57,6 +56,7 @@ import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; @@ -121,7 +121,8 @@ public class VirtualHostMessageStoreTest extends QpidTestCase { super.setUp(); - String hostName = getName(); + String nodeName = "node" + getName(); + String hostName = "host" + getName(); _storePath = System.getProperty("QPID_WORK", TMP_FOLDER + File.separator + getTestName()) + File.separator + hostName; cleanup(new File(_storePath)); @@ -131,14 +132,18 @@ public class VirtualHostMessageStoreTest extends QpidTestCase when(broker.getTaskExecutor()).thenReturn(_taskExecutor); ConfiguredObjectFactory factory = broker.getObjectFactory(); - Map<String, Object> nodeAttributes = new HashMap<String, Object>(); + Map<String, Object> nodeAttributes = new HashMap<>(); nodeAttributes.put(ConfiguredObject.TYPE, getTestProfileVirtualHostNodeType()); nodeAttributes.put(FileBasedVirtualHostNode.STORE_PATH, _storePath); - nodeAttributes.put(VirtualHostNode.NAME, hostName); - nodeAttributes.put(VirtualHostNode.ID, UUID.randomUUID()); + nodeAttributes.put(VirtualHostNode.NAME, nodeName); _node = factory.create(VirtualHostNode.class, nodeAttributes, broker); _node.start(); + final Map<String,Object> virtualHostAttributes = new HashMap<>(); + virtualHostAttributes.put(VirtualHost.NAME, hostName); + + _node.createChild(VirtualHost.class, virtualHostAttributes, _node); + _virtualHost = (VirtualHostImpl<?,?,?>)_node.getVirtualHost(); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java index 78db198185..b79c4bdc40 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/MBeanLifeCycleTest.java @@ -25,14 +25,18 @@ import java.util.HashMap; import java.util.Map; import javax.management.ObjectName; +import javax.servlet.http.HttpServletResponse; import org.apache.qpid.management.common.mbeans.ManagedBroker; import org.apache.qpid.server.management.plugin.HttpManagement; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; +import org.apache.qpid.server.virtualhostnode.memory.MemoryVirtualHostNode; import org.apache.qpid.systest.rest.QpidRestTestCase; import org.apache.qpid.test.utils.JMXTestUtils; import org.apache.qpid.test.utils.TestBrokerConfiguration; @@ -81,14 +85,24 @@ public class MBeanLifeCycleTest extends QpidRestTestCase public void testVirtualHostMBeanIsRegisteredOnVirtualHostCreation() throws Exception { - String nodeName = "tmp"; - Map<String, Object> nodeData = new HashMap<String, Object>(); + String nodeName = "ntmp"; + String hostName = "htmp"; + + Map<String, Object> nodeData = new HashMap<>(); nodeData.put(VirtualHostNode.NAME, nodeName); - nodeData.put(VirtualHostNode.TYPE, "Memory"); - int status = getRestTestHelper().submitRequest("virtualhostnode/" + nodeName, "PUT", nodeData); - assertEquals("Unexpected code", 201, status); + nodeData.put(VirtualHostNode.TYPE, MemoryVirtualHostNode.VIRTUAL_HOST_NODE_TYPE); + getRestTestHelper().submitRequest("virtualhostnode/" + nodeName, "PUT", nodeData, HttpServletResponse.SC_CREATED); + + Map<String, Object> virtualhostData = new HashMap<>(); + virtualhostData.put(VirtualHost.NAME, nodeName); + virtualhostData.put(VirtualHost.TYPE, ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); + getRestTestHelper().submitRequest("virtualhost/" + nodeName + "/" + hostName, + "PUT", + virtualhostData, + HttpServletResponse.SC_CREATED); + - ManagedBroker managedBroker = _jmxUtils.getManagedBroker(nodeName); + ManagedBroker managedBroker = _jmxUtils.getManagedBroker(hostName); assertNotNull("Host mBean is not created", managedBroker); } @@ -99,8 +113,7 @@ public class MBeanLifeCycleTest extends QpidRestTestCase boolean mBeanExists =_jmxUtils.doesManagedObjectExist(query); assertTrue("Host mBean is not registered", mBeanExists); - int status = getRestTestHelper().submitRequest("virtualhostnode/" + TEST2_VIRTUALHOST, "DELETE"); - assertEquals("Unexpected code", 200, status); + getRestTestHelper().submitRequest("virtualhostnode/" + TEST2_VIRTUALHOST, "DELETE", HttpServletResponse.SC_OK); mBeanExists =_jmxUtils.doesManagedObjectExist(query); assertFalse("Host mBean is not unregistered", mBeanExists); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java index 86c37cd50a..63c9852dc4 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java @@ -277,7 +277,7 @@ public class RestTestHelper List<Map<String, Object>> response = getJsonAsList(path); Assert.assertNotNull("Response cannot be null", response); - Assert.assertEquals("Unexpected response", 1, response.size()); + Assert.assertEquals("Unexpected response from " + path, 1, response.size()); return response.get(0); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java index 2d5f083380..8004a91168 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java @@ -31,7 +31,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.VirtualHostNode; -import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.test.utils.TestBrokerConfiguration; /** @@ -53,7 +53,7 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase } } - public void testCreateAndDeleteNodeWithTestProfileStore() throws Exception + public void testCreateAndDeleteVirtualHostNode() throws Exception { String storeType = getTestProfileVirtualHostNodeType(); String nodeName = "virtualhostnode-" + getTestName(); @@ -63,17 +63,6 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase assertFalse("Store should not exist after deletion", storePathAsFile.exists()); } - public void testCreateAndDeleteNodeWithJsonStore() throws Exception - { - String storeType = "JSON"; - String nodeName = "virtualhostnode-" + getTestName(); - File storePathAsFile = new File(getStoreLocation(nodeName)); - - createAndDeleteVirtualHostNode(storeType, nodeName, storePathAsFile); - // TODO Defect: JSON store currently can't delete itself, uncomment once this is resolved - //assertFalse("Store should not exist after deletion", storePathAsFile.exists()); - } - public void testRecoverVirtualHostNodeWithDesiredStateStopped() throws Exception { stopBroker(); @@ -118,18 +107,20 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase assertEquals(newDescription, virtualhostNode.get(VirtualHostNode.DESCRIPTION)); } - private void createAndDeleteVirtualHostNode(final String storeType, + private void createAndDeleteVirtualHostNode(final String virtualhostNodeType, final String nodeName, final File storePathAsFile) throws Exception { assertFalse("Store should not exist", storePathAsFile.exists()); - createVirtualHostNode(nodeName, storePathAsFile.getAbsolutePath(), storeType); + createVirtualHostNode(nodeName, storePathAsFile.getAbsolutePath(), virtualhostNodeType); assertTrue("Store should exist after creation of node", storePathAsFile.exists()); String restUrl = "virtualhostnode/" + nodeName; Map<String, Object> virtualhostNode = getRestTestHelper().getJsonAsSingletonList(restUrl); Asserts.assertVirtualHostNode(nodeName, virtualhostNode); + assertNull("Virtualhostnode should not automatically get a virtualhost child", + virtualhostNode.get("virtualhosts")); getRestTestHelper().submitRequest(restUrl, "DELETE", HttpServletResponse.SC_OK); @@ -158,7 +149,7 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase Map<String, Object> nodeData = new HashMap<String, Object>(); nodeData.put(VirtualHostNode.NAME, nodeName); nodeData.put(VirtualHostNode.TYPE, storeType); - nodeData.put(DurableConfigurationStore.STORE_PATH, configStorePath); + nodeData.put(FileBasedVirtualHostNode.STORE_PATH, configStorePath); getRestTestHelper().submitRequest("virtualhostnode/" + nodeName, "PUT", diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java index 392ed362a4..54dca95e9b 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java @@ -41,8 +41,9 @@ import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.queue.LastValueQueue; import org.apache.qpid.server.queue.PriorityQueue; import org.apache.qpid.server.queue.SortedQueue; -import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; +import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.util.FileUtils; public class VirtualHostRestTest extends QpidRestTestCase @@ -105,11 +106,11 @@ public class VirtualHostRestTest extends QpidRestTestCase Asserts.assertConnection(connections.get(0), _connection); } - public void testPutCreateVirtualHostUsingStoreType() throws Exception + public void testPutCreateVirtualHostUsingProfileNodeType() throws Exception { String hostName = getTestName(); - String storeType = getTestProfileVirtualHostNodeType(); - String storeLocation = createHost(hostName, storeType, null); + String virtualhostNodeType = getTestProfileVirtualHostNodeType(); + String storeLocation = createVirtualHostNodeAndVirtualHost(hostName, virtualhostNodeType); try { // make sure that the host is saved in the broker store @@ -525,12 +526,28 @@ public class VirtualHostRestTest extends QpidRestTestCase return getRestTestHelper().submitRequest("queue/test/test/" + queueName, "PUT", queueData); } - private String createHost(String hostName, String storeType, String configPath) throws IOException, JsonGenerationException, - JsonMappingException + private String createVirtualHostNodeAndVirtualHost(String virtualHostName, + String virtualHostNodeType) throws Exception { - String storePath = getStoreLocation(hostName); - int responseCode = tryCreateVirtualHostNode(hostName, storeType, storePath, configPath); - assertEquals("Unexpected response code", 201, responseCode); + String storePath = getStoreLocation(virtualHostName); + + Map<String, Object> nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, virtualHostName); + nodeData.put(VirtualHostNode.TYPE, virtualHostNodeType); + nodeData.put(FileBasedVirtualHostNode.STORE_PATH, storePath); + + getRestTestHelper().submitRequest("virtualhostnode/" + virtualHostName, "PUT", nodeData, HttpServletResponse.SC_CREATED); + + Map<String, Object> virtualhostData = new HashMap<>(); + virtualhostData.put(VirtualHost.NAME, virtualHostName); + virtualhostData.put(VirtualHost.TYPE, ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); + + getRestTestHelper().submitRequest("virtualhost/" + virtualHostName + "/" + virtualHostName, + "PUT", + virtualhostData, + HttpServletResponse.SC_CREATED); + + return storePath; } @@ -539,21 +556,6 @@ public class VirtualHostRestTest extends QpidRestTestCase return new File(TMP_FOLDER, "store-" + hostName + "-" + System.currentTimeMillis()).getAbsolutePath(); } - private int tryCreateVirtualHostNode(String hostName, - String virtualHostNodeType, - String storePath, - String configPath) throws IOException, - JsonGenerationException, JsonMappingException - { - - Map<String, Object> hostData = new HashMap<String, Object>(); - hostData.put(VirtualHostNode.NAME, hostName); - hostData.put(VirtualHostNode.TYPE, virtualHostNodeType); - hostData.put(DurableConfigurationStore.STORE_PATH, storePath); - - return getRestTestHelper().submitRequest("virtualhostnode/" + hostName, "PUT", hostData); - } - private void assertNewVirtualHost(Map<String, Object> hostDetails) { @SuppressWarnings("unchecked") diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java index 8a9da5d93c..4fd0695545 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java @@ -49,7 +49,7 @@ import org.apache.qpid.server.security.access.FileAccessControlProviderConstants import org.apache.qpid.server.security.acl.AbstractACLTestCase; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; import org.apache.qpid.server.security.auth.manager.PlainPasswordDatabaseAuthenticationManager; -import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.systest.rest.QpidRestTestCase; import org.apache.qpid.test.utils.TestBrokerConfiguration; import org.apache.qpid.test.utils.TestFileUtils; @@ -982,7 +982,7 @@ public class BrokerACLTest extends QpidRestTestCase Map<String, Object> data = new HashMap<String, Object>(); data.put(VirtualHostNode.NAME, virtualHostNodeName); data.put(VirtualHostNode.TYPE, getTestProfileVirtualHostNodeType()); - data.put(DurableConfigurationStore.STORE_PATH, getStoreLocation(virtualHostNodeName)); + data.put(FileBasedVirtualHostNode.STORE_PATH, getStoreLocation(virtualHostNodeName)); return getRestTestHelper().submitRequest("virtualhostnode/" + virtualHostNodeName, "PUT", data); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java index 16526c9d84..88e7ee20c8 100755 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java @@ -22,6 +22,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -63,11 +64,15 @@ import org.apache.qpid.server.BrokerOptions; import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.configuration.updater.TaskExecutorImpl; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MemoryConfigurationStore; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; +import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; +import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode; import org.apache.qpid.url.URLSyntaxException; import org.apache.qpid.util.FileUtils; import org.apache.qpid.util.SystemUtils; @@ -859,14 +864,18 @@ public class QpidBrokerTestCase extends QpidTestCase storeDir = "${QPID_WORK}" + File.separator + virtualHostNodeName + File.separator + brokerPort; } - // add new virtual host configuration to the broker store + // add new virtual host node with vhost blueprint configuration to the broker store Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(VirtualHostNode.NAME, virtualHostNodeName); attributes.put(VirtualHostNode.TYPE, storeType); if (storeDir != null) { - attributes.put(DurableConfigurationStore.STORE_PATH, storeDir); + attributes.put(FileBasedVirtualHostNode.STORE_PATH, storeDir); } + final String blueprint = String.format("{ \"type\" : \"%s\" } }", ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); + attributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap(AbstractStandardVirtualHostNode.VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, + blueprint)); + int port = getPort(brokerPort); getBrokerConfiguration(port).addObjectConfiguration(VirtualHostNode.class, attributes); } diff --git a/qpid/java/test-profiles/JavaTransientExcludes b/qpid/java/test-profiles/JavaTransientExcludes index 2252d0962f..31bae4849a 100644 --- a/qpid/java/test-profiles/JavaTransientExcludes +++ b/qpid/java/test-profiles/JavaTransientExcludes @@ -53,8 +53,9 @@ org.apache.qpid.systest.management.jmx.QueueManagementTest#testCopyMessageBetwee org.apache.qpid.test.unit.client.MaxDeliveryCountTest#testWhenBrokerIsRestartedAfterEnqeuingMessages +org.apache.qpid.systest.rest.VirtualHostRestTest#testPutCreateVirtualHostUsingProfileNodeType org.apache.qpid.systest.rest.VirtualHostRestTest#testRecoverVirtualHostInDesiredStateStoppedWithDescription -org.apache.qpid.systest.rest.VirtualHostNodeRestTest#testCreateAndDeleteNodeWithTestProfileStore -org.apache.qpid.systest.rest.VirtualHostNodeRestTest#testCreateAndDeleteNodeWithJsonStore +org.apache.qpid.systest.rest.VirtualHostNodeRestTest#testCreateAndDeleteVirtualHostNode + |
