Author: kwall
Date: Fri Jun 20 12:42:40 2014
New Revision: 1604164
URL: http://svn.apache.org/r1604164
Log:
QPID-5803: [Java Broker] Add a utilised flag to the VHN context after the
blueprint has been used.
This prevents the virtualhost from being automatically recreated by the
blueprint, should the user choose to the VH.
Strenghthen unit tests.
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java?rev=1604164&r1=1604163&r2=1604164&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
Fri Jun 20 12:42:40 2014
@@ -45,6 +45,7 @@ public abstract class AbstractStandardVi
{
private static final Logger LOGGER =
Logger.getLogger(AbstractStandardVirtualHostNode.class);
public static final String VIRTUALHOST_BLUEPRINT_CONTEXT_VAR =
"virtualhostBlueprint";
+ public static final String VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR =
"virtualhostBlueprintUtilised";
public AbstractStandardVirtualHostNode(Map<String, Object> attributes,
Broker<?> parent)
@@ -97,7 +98,12 @@ public abstract class AbstractStandardVi
if (host == null)
{
- if (getContext() != null &&
getContext().containsKey(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR))
+
+ boolean hasBlueprint =
getContext().containsKey(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR);
+ boolean blueprintUtilised =
getContext().containsKey(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR)
+ &&
Boolean.parseBoolean(String.valueOf(getContext().get(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR)));
+
+ if (hasBlueprint && !blueprintUtilised)
{
Map<String, Object> virtualhostBlueprint =
getContextValue(Map.class, VIRTUALHOST_BLUEPRINT_CONTEXT_VAR);
@@ -122,6 +128,12 @@ public abstract class AbstractStandardVi
{
LOGGER.debug("Created new virtualhost: " + host);
}
+
+ // Update the context with the utilised flag
+ Map<String, String> actualContext = (Map<String, String>)
getActualAttributes().get(CONTEXT);
+ Map<String, String> context = new HashMap<>(actualContext);
+ context.put(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR,
Boolean.TRUE.toString());
+ setAttribute(CONTEXT, getContext(), context);
}
}
else
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java?rev=1604164&r1=1604163&r2=1604164&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
Fri Jun 20 12:42:40 2014
@@ -20,9 +20,11 @@
*/
package org.apache.qpid.server.virtualhostnode;
+import static
org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -53,8 +55,6 @@ public class AbstractStandardVirtualHost
private UUID _nodeId = UUID.randomUUID();
private Broker<?> _broker;
- private DurableConfigurationStore _configStore;
- private ConfiguredObjectRecord _record;
private TaskExecutor _taskExecutor;
@Override
@@ -83,27 +83,22 @@ public class AbstractStandardVirtualHost
super.tearDown();
}
}
- public void testActivationOpensConfigStoreWithExistingVirtualHostRecord()
throws Exception
+
+ /**
+ * Tests activating a virtualhostnode with a config store that specifies a
+ * virtualhost. Ensures that the virtualhost created.
+ */
+ public void testActivateVHN_StoreHasVH() throws Exception
{
UUID virtualHostId = UUID.randomUUID();
- _record = createMockVirtualHostCOR(virtualHostId);
-
- _configStore = new NullMessageStore(){
+ ConfiguredObjectRecord vhostRecord =
createVirtualHostConfiguredObjectRecord(virtualHostId);
+ DurableConfigurationStore configStore =
configStoreThatProduces(vhostRecord);
- @Override
- public void
visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws
StoreException
- {
- handler.begin();
- handler.handle(_record);
- handler.end();
- }
- };
-
- Map<String, Object> nodeAttributes = new HashMap<String, Object>();
+ Map<String, Object> nodeAttributes = new HashMap<>();
nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
nodeAttributes.put(VirtualHostNode.ID, _nodeId);
- VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, _configStore);
+ VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, configStore);
node.open();
node.start();
@@ -114,24 +109,20 @@ public class AbstractStandardVirtualHost
assertEquals("Unexpected virtual host id", virtualHostId,
virtualHost.getId());
}
- public void testActivationOpensConfigStoreWithoutVirtualHostRecord()
throws Exception
- {
- _configStore = new NullMessageStore() {
- @Override
- public void
visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws
StoreException
- {
- handler.begin();
- // No records
- handler.end();
- }
- };
+ /**
+ * Tests activating a virtualhostnode with a config store which does not
specify
+ * a virtualhost. Checks no virtualhost is created.
+ */
+ public void testActivateVHN_StoreHasNoVH() throws Exception
+ {
+ DurableConfigurationStore configStore =
configStoreThatProducesNoRecords();
- Map<String, Object> nodeAttributes = new HashMap<String, Object>();
+ Map<String, Object> nodeAttributes = new HashMap<>();
nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
nodeAttributes.put(VirtualHostNode.ID, _nodeId);
- VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, _configStore);
+ VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, configStore);
node.open();
node.start();
@@ -140,9 +131,111 @@ public class AbstractStandardVirtualHost
}
- private ConfiguredObjectRecord createMockVirtualHostCOR(UUID virtualHostId)
+ /**
+ * Tests activating a virtualhostnode with a blueprint context variable.
Config store
+ * does not specify a virtualhost. Checks virtualhost is created from
the blueprint.
+ */
+ public void testActivateVHNWithVHBlueprint_StoreHasNoVH() throws Exception
{
- Map<String, Object> virtualHostAttributes = new HashMap<String,
Object>();
+ DurableConfigurationStore configStore =
configStoreThatProducesNoRecords();
+
+ String vhBlueprint = String.format("{ \"type\" : \"%s\", \"name\" :
\"%s\"}",
+
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
+ TEST_VIRTUAL_HOST_NAME);
+ Map<String, String> context =
Collections.singletonMap(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+
+ Map<String, Object> nodeAttributes = new HashMap<>();
+ nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
+ nodeAttributes.put(VirtualHostNode.ID, _nodeId);
+ nodeAttributes.put(VirtualHostNode.CONTEXT, context);
+
+ VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, configStore);
+ node.open();
+ node.start();
+
+ VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+
+ assertNotNull("Virtual host should be created by blueprint",
virtualHost);
+ assertEquals("Unexpected virtual host name", TEST_VIRTUAL_HOST_NAME,
virtualHost.getName());
+ assertEquals("Unexpected virtual host state", State.ACTIVE,
virtualHost.getState());
+ assertNotNull("Unexpected virtual host id", virtualHost.getId());
+
+ Map<String, String> updatedContext = node.getContext();
+
+ assertTrue("Context should now have utilised flag",
updatedContext.containsKey(
+ VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
+ assertEquals("Utilised flag should be true",
+ Boolean.TRUE.toString(),
+
updatedContext.get(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR));
+ }
+
+ /**
+ * Tests activating a virtualhostnode with blueprint context variable and
the
+ * marked utilised flag. Config store does not specify a virtualhost.
+ * Checks virtualhost is not recreated from the blueprint.
+ */
+ public void testActivateVHNWithVHBlueprintUsed_StoreHasNoVH() throws
Exception
+ {
+ DurableConfigurationStore configStore =
configStoreThatProducesNoRecords();
+
+ String vhBlueprint = String.format("{ \"type\" : \"%s\", \"name\" :
\"%s\"}",
+
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
+ TEST_VIRTUAL_HOST_NAME);
+ Map<String, String> context = new HashMap<>();
+ context.put(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+ context.put(VIRTUALHOST_BLUEPRINT_UTILISED_CONTEXT_VAR,
Boolean.TRUE.toString());
+
+ Map<String, Object> nodeAttributes = new HashMap<>();
+ nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
+ nodeAttributes.put(VirtualHostNode.ID, _nodeId);
+ nodeAttributes.put(VirtualHostNode.CONTEXT, context);
+
+ VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, configStore);
+ node.open();
+ node.start();
+
+ VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+
+ assertNull("Virtual host should not be created by blueprint",
virtualHost);
+ }
+
+ /**
+ * Tests activating a virtualhostnode with a blueprint context variable.
Config store
+ * does specify a virtualhost. Checks that virtualhost is recovered from
store and
+ * blueprint is ignored..
+ */
+ public void testActivateVHNWithVHBlueprint_StoreHasExistingVH() throws
Exception
+ {
+ UUID virtualHostId = UUID.randomUUID();
+ ConfiguredObjectRecord record =
createVirtualHostConfiguredObjectRecord(virtualHostId);
+
+ DurableConfigurationStore configStore =
configStoreThatProduces(record);
+
+ String vhBlueprint = String.format("{ \"type\" : \"%s\", \"name\" :
\"%s\"}",
+
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE,
+ "vhFromBlueprint");
+ Map<String, String> context =
Collections.singletonMap(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR, vhBlueprint);
+
+ Map<String, Object> nodeAttributes = new HashMap<>();
+ nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
+ nodeAttributes.put(VirtualHostNode.ID, _nodeId);
+ nodeAttributes.put(VirtualHostNode.CONTEXT, context);
+
+ VirtualHostNode<?> node = new TestVirtualHostNode(_broker,
nodeAttributes, configStore);
+ node.open();
+ node.start();
+
+ VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+
+ assertNotNull("Virtual host should be recovered", virtualHost);
+ assertEquals("Unexpected virtual host name", TEST_VIRTUAL_HOST_NAME,
virtualHost.getName());
+ assertEquals("Unexpected virtual host state", State.ACTIVE,
virtualHost.getState());
+ assertEquals("Unexpected virtual host id", virtualHostId,
virtualHost.getId());
+ }
+
+ private ConfiguredObjectRecord
createVirtualHostConfiguredObjectRecord(UUID virtualHostId)
+ {
+ Map<String, Object> virtualHostAttributes = new HashMap<>();
virtualHostAttributes.put(VirtualHost.NAME, TEST_VIRTUAL_HOST_NAME);
virtualHostAttributes.put(VirtualHost.TYPE,
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE);
virtualHostAttributes.put(VirtualHost.MODEL_VERSION,
BrokerModel.MODEL_VERSION);
@@ -153,4 +246,26 @@ public class AbstractStandardVirtualHost
when(record.getType()).thenReturn(VirtualHost.class.getSimpleName());
return record;
}
+
+ private NullMessageStore configStoreThatProduces(final
ConfiguredObjectRecord record)
+ {
+ return new NullMessageStore(){
+
+ @Override
+ public void
visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws
StoreException
+ {
+ handler.begin();
+ if (record != null)
+ {
+ handler.handle(record);
+ }
+ handler.end();
+ }
+ };
+ }
+ private NullMessageStore configStoreThatProducesNoRecords()
+ {
+ return configStoreThatProduces(null);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]