You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/04/21 16:28:32 UTC

svn commit: r1588886 [4/6] - in /qpid/trunk/qpid/java: bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/server/store/b...

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostCreationTest.java Mon Apr 21 14:28:29 2014
@@ -31,7 +31,6 @@ import java.util.UUID;
 
 import junit.framework.TestCase;
 
-import org.apache.qpid.server.configuration.ConfigurationEntry;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.model.Broker;
@@ -41,41 +40,58 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
 import org.apache.qpid.server.model.SystemContext;
 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.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.TestMemoryMessageStore;
+import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
 import org.apache.qpid.server.virtualhost.StandardVirtualHost;
 
 public class VirtualHostCreationTest extends TestCase
 {
+    private VirtualHostNode<?> _virtualHostNode;
 
-    public void testCreateVirtualHostFromStoreConfigAttributes()
+    @Override
+    public void setUp() throws Exception
     {
+        super.setUp();
+
+        EventLogger eventLogger = mock(EventLogger.class);
         SecurityManager securityManager = mock(SecurityManager.class);
-        ConfigurationEntry entry = mock(ConfigurationEntry.class);
+
         SystemContext systemContext = mock(SystemContext.class);
         ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
         when(systemContext.getObjectFactory()).thenReturn(objectFactory);
         when(systemContext.getModel()).thenReturn(objectFactory.getModel());
+        when(systemContext.getEventLogger()).thenReturn(eventLogger);
 
-        Broker parent = mock(Broker.class);
-        when(parent.getObjectFactory()).thenReturn(objectFactory);
-        when(parent.getModel()).thenReturn(objectFactory.getModel());
-        when(parent.getSecurityManager()).thenReturn(securityManager);
-        when(parent.getCategoryClass()).thenReturn(Broker.class);
-        when(systemContext.getEventLogger()).thenReturn(mock(EventLogger.class));
-        when(parent.getParent(eq(SystemContext.class))).thenReturn(systemContext);
+        Broker broker = mock(Broker.class);
+        when(broker.getObjectFactory()).thenReturn(objectFactory);
+        when(broker.getModel()).thenReturn(objectFactory.getModel());
+        when(broker.getSecurityManager()).thenReturn(securityManager);
+        when(broker.getCategoryClass()).thenReturn(Broker.class);
+        when(broker.getParent(eq(SystemContext.class))).thenReturn(systemContext);
+
+        _virtualHostNode = mock(VirtualHostNode.class);
+        when(_virtualHostNode.getParent(Broker.class)).thenReturn(broker);
+        when(_virtualHostNode.getObjectFactory()).thenReturn(objectFactory);
+        when(_virtualHostNode.getConfigurationStore()).thenReturn(mock(DurableConfigurationStore.class));
+        when(_virtualHostNode.getModel()).thenReturn(objectFactory.getModel());
+    }
 
+    public void testCreateVirtualHostFromStoreConfigAttributes()
+    {
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(VirtualHost.NAME, getName());
         attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
         attributes.put(VirtualHost.ID, UUID.randomUUID());
 
         attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
-        when(entry.getAttributes()).thenReturn(attributes);
 
-        VirtualHost host = new StandardVirtualHost(attributes,parent);
+        VirtualHost<?,?,?> host = new StandardVirtualHost(attributes, _virtualHostNode);
         host.open();
+
         assertNotNull("Null is returned", host);
         assertEquals("Unexpected name", getName(), host.getName());
     }
@@ -94,19 +110,6 @@ public class VirtualHostCreationTest ext
 
     public void checkMandatoryAttributesAreValidated(String[] mandatoryAttributes, Map<String, Object> attributes)
     {
-        SecurityManager securityManager = mock(SecurityManager.class);
-        SystemContext systemContext = mock(SystemContext.class);
-        ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
-        when(systemContext.getObjectFactory()).thenReturn(objectFactory);
-        when(systemContext.getModel()).thenReturn(objectFactory.getModel());
-
-        Broker parent = mock(Broker.class);
-        when(parent.getSecurityManager()).thenReturn(securityManager);
-        when(parent.getParent(eq(SystemContext.class))).thenReturn(systemContext);
-        when(systemContext.getEventLogger()).thenReturn(mock(EventLogger.class));
-        when(parent.getObjectFactory()).thenReturn(objectFactory);
-        when(parent.getModel()).thenReturn(objectFactory.getModel());
-
         for (String name : mandatoryAttributes)
         {
             Map<String, Object> copy = new HashMap<String, Object>(attributes);
@@ -114,7 +117,7 @@ public class VirtualHostCreationTest ext
             copy.put(ConfiguredObject.ID, UUID.randomUUID());
             try
             {
-                VirtualHost host = new StandardVirtualHost(copy,parent);
+                AbstractVirtualHost<StandardVirtualHost> host = new StandardVirtualHost(copy,_virtualHostNode);
                 host.open();
                 fail("Cannot create a virtual host without a mandatory attribute " + name);
             }
@@ -126,7 +129,6 @@ public class VirtualHostCreationTest ext
             {
                 // pass
             }
-
         }
     }
 }

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java Mon Apr 21 14:28:29 2014
@@ -47,6 +47,7 @@ import org.apache.qpid.server.model.Syst
 import org.apache.qpid.server.model.Transport;
 import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider;
 import org.apache.qpid.server.security.FileKeyStore;
 import org.apache.qpid.server.security.FileTrustStore;
@@ -60,11 +61,11 @@ public abstract class ConfigurationEntry
     private MemoryConfigurationEntryStore _store;
 
     private UUID _brokerId;
-    private UUID _virtualHostId;
+    private UUID _virtualHostNodeId;
     protected UUID _authenticationProviderId;
 
     private Map<String, Object> _brokerAttributes;
-    private Map<String, Object> _virtualHostAttributes;
+    private Map<String, Object> _virtualHostNodeAttributes;
     private Map<String, Object> _authenticationProviderAttributes;
 
     private TaskExecutor _taskExecutor;
@@ -90,10 +91,10 @@ public abstract class ConfigurationEntry
         _brokerAttributes.put(Broker.STATISTICS_REPORTING_PERIOD, 4000);
         _brokerAttributes.put(Broker.STATISTICS_REPORTING_RESET_ENABLED, true);
 
-        _virtualHostId = UUID.randomUUID();
-        _virtualHostAttributes = new HashMap<String, Object>();
-        _virtualHostAttributes.put(VirtualHost.NAME, "test");
-        _virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+        _virtualHostNodeId = UUID.randomUUID();
+        _virtualHostNodeAttributes = new HashMap<String, Object>();
+        _virtualHostNodeAttributes.put(VirtualHost.NAME, "test");
+        _virtualHostNodeAttributes.put(VirtualHost.TYPE, "JSON");
 
         _authenticationProviderId = UUID.randomUUID();
         _authenticationProviderAttributes = new HashMap<String, Object>();
@@ -101,7 +102,7 @@ public abstract class ConfigurationEntry
         _authenticationProviderAttributes.put(AuthenticationProvider.TYPE, AnonymousAuthenticationManager.class.getSimpleName());
 
         _store = createStore(_brokerId, _brokerAttributes);
-        addConfiguration(_virtualHostId, VirtualHost.class.getSimpleName(), _virtualHostAttributes);
+        addConfiguration(_virtualHostNodeId, VirtualHostNode.class.getSimpleName(), _virtualHostNodeAttributes);
         addConfiguration(_authenticationProviderId, AuthenticationProvider.class.getSimpleName(), _authenticationProviderAttributes);
     }
 
@@ -282,18 +283,18 @@ public abstract class ConfigurationEntry
 
     public void testSaveExistingVirtualHost()
     {
-        ConfigurationEntry hostEntry = _store.getEntry(_virtualHostId);
+        ConfigurationEntry hostEntry = _store.getEntry(_virtualHostNodeId);
         assertNotNull("Host configuration is not found", hostEntry);
 
         Map<String, Object> virtualHostAttributes = new HashMap<String, Object>();
         virtualHostAttributes.put(VirtualHost.NAME, "test");
         virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
 
-        ConfigurationEntry updatedEntry = new ConfigurationEntryImpl(_virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes,
+        ConfigurationEntry updatedEntry = new ConfigurationEntryImpl(_virtualHostNodeId, VirtualHost.class.getSimpleName(), virtualHostAttributes,
                 hostEntry.getChildrenIds(), _store);
         _store.save(updatedEntry);
 
-        ConfigurationEntry newHostEntry = _store.getEntry(_virtualHostId);
+        ConfigurationEntry newHostEntry = _store.getEntry(_virtualHostNodeId);
         assertEquals("Unexpected virtual host configuration", updatedEntry, newHostEntry);
         assertEquals("Unexpected type", VirtualHost.class.getSimpleName(), newHostEntry.getType());
         assertEquals("Unexpected virtual host attributes", updatedEntry.getAttributes(), newHostEntry.getAttributes());

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java Mon Apr 21 14:28:29 2014
@@ -32,9 +32,9 @@ import java.util.UUID;
 import org.apache.qpid.server.configuration.ConfigurationEntryStore;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.test.utils.QpidTestCase;
 
@@ -82,13 +82,13 @@ public class StoreConfigurationChangeLis
         verify(_store).update(eq(false),any(ConfiguredObjectRecord.class));
     }
 
-    public void testChildAddedForVirtualHost()
+    public void testChildAddedForVirtualHostNode()
     {
         notifyBrokerStarted();
 
-        VirtualHost object = mock(VirtualHost.class);
-        Queue queue = mock(Queue.class);
-        _listener.childAdded(object, queue);
+        VirtualHostNode<?> object = mock(VirtualHostNode.class);
+        VirtualHost<?,?,?> virtualHost = mock(VirtualHost.class);
+        _listener.childAdded(object, virtualHost);
         verifyNoMoreInteractions(_store);
     }
 

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseActorTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseActorTestCase.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseActorTestCase.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseActorTestCase.java Mon Apr 21 14:28:29 2014
@@ -23,15 +23,13 @@ package org.apache.qpid.server.logging.a
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.LogMessage;
 import org.apache.qpid.server.logging.LogSubject;
-import org.apache.qpid.server.logging.MessageLogger;
 import org.apache.qpid.server.logging.UnitTestMessageLogger;
 import org.apache.qpid.test.utils.QpidTestCase;
 
-public class BaseActorTestCase extends QpidTestCase
+public abstract class BaseActorTestCase extends QpidTestCase
 {
     private boolean _statusUpdatesEnabled = true;
     private UnitTestMessageLogger _rawLogger;
-    private MessageLogger _rootLogger;
     private EventLogger _eventLogger;
 
     @Override
@@ -40,7 +38,6 @@ public class BaseActorTestCase extends Q
         super.setUp();
         _rawLogger = new UnitTestMessageLogger(_statusUpdatesEnabled);
         _eventLogger = new EventLogger(_rawLogger);
-        _rootLogger = _rawLogger;
     }
 
     @Override
@@ -57,10 +54,10 @@ public class BaseActorTestCase extends Q
     {
         String message = "Test logging: " + getName();
         sendTestLogMessage(message);
-        
+
         return message;
     }
-    
+
     public void sendTestLogMessage(final String message)
     {
         getEventLogger().message(new LogSubject()

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseConnectionActorTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseConnectionActorTestCase.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseConnectionActorTestCase.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/actors/BaseConnectionActorTestCase.java Mon Apr 21 14:28:29 2014
@@ -25,7 +25,7 @@ import org.apache.qpid.server.protocol.A
 import org.apache.qpid.server.util.BrokerTestHelper;
 import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 
-public class BaseConnectionActorTestCase extends BaseActorTestCase
+public abstract class BaseConnectionActorTestCase extends BaseActorTestCase
 {
     private AMQConnectionModel _session;
     private VirtualHostImpl _virtualHost;

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java Mon Apr 21 14:28:29 2014
@@ -28,9 +28,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.qpid.server.configuration.RecovererProvider;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.TestMemoryMessageStore;
 import org.apache.qpid.server.util.BrokerTestHelper;
@@ -39,11 +38,9 @@ import org.apache.qpid.test.utils.QpidTe
 
 public class VirtualHostTest extends QpidTestCase
 {
-
     private Broker _broker;
-    private StatisticsGatherer _statisticsGatherer;
-    private RecovererProvider _recovererProvider;
     private TaskExecutor _taskExecutor;
+    private VirtualHostNode<?> _virtualHostNode;
 
     @Override
     protected void setUp() throws Exception
@@ -55,8 +52,12 @@ public class VirtualHostTest extends Qpi
         _taskExecutor.start();
         when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
 
-        _recovererProvider = mock(RecovererProvider.class);
-        _statisticsGatherer = mock(StatisticsGatherer.class);
+        _virtualHostNode = mock(VirtualHostNode.class);
+        when(_virtualHostNode.getConfigurationStore()).thenReturn(mock(DurableConfigurationStore.class));
+        when(_virtualHostNode.getParent(Broker.class)).thenReturn(_broker);
+        ConfiguredObjectFactory objectFactory = _broker.getObjectFactory();
+        when(_virtualHostNode.getModel()).thenReturn(objectFactory.getModel());
+        when(_virtualHostNode.getObjectFactory()).thenReturn(objectFactory);
     }
 
 
@@ -69,26 +70,26 @@ public class VirtualHostTest extends Qpi
 
     public void testInitialisingState()
     {
-        VirtualHost host = createHost();
+        VirtualHost<?,?,?> host = createHost();
 
         assertEquals("Unexpected state", State.INITIALISING, host.getAttribute(VirtualHost.STATE));
     }
 
     public void testActiveState()
     {
-        VirtualHost host = createHost();
+        VirtualHost<?,?,?> host = createHost();
+
 
         host.setDesiredState(State.INITIALISING, State.ACTIVE);
-        host.open();
         assertEquals("Unexpected state", State.ACTIVE, host.getAttribute(VirtualHost.STATE));
     }
 
     public void testStoppedState()
     {
-        VirtualHost host = createHost();
+        VirtualHost<?,?,?> host = createHost();
 
         assertEquals("Unexpected state", State.INITIALISING, host.getAttribute(VirtualHost.STATE));
-        host.open();
+
         host.setDesiredState(State.INITIALISING, State.ACTIVE);
         assertEquals("Unexpected state", State.ACTIVE, host.getAttribute(VirtualHost.STATE));
 
@@ -98,7 +99,7 @@ public class VirtualHostTest extends Qpi
 
     public void testDeletedState()
     {
-        VirtualHost host = createHost();
+        VirtualHost<?,?,?> host = createHost();
 
         assertEquals("Unexpected state", State.INITIALISING, host.getAttribute(VirtualHost.STATE));
 
@@ -108,8 +109,8 @@ public class VirtualHostTest extends Qpi
 
     public void testCreateQueueChildHavingMessageGroupingAttributes()
     {
-        VirtualHost host = createHost();
-        host.open();
+        VirtualHost<?,?,?> host = createHost();
+
         host.setDesiredState(State.INITIALISING, State.ACTIVE);
 
         String queueName = getTestName();
@@ -120,7 +121,7 @@ public class VirtualHostTest extends Qpi
 
         host.createChild(Queue.class, arguments);
 
-        Queue queue = (Queue) ConfiguredObjectFinder.findConfiguredObjectByName(host.getQueues(), queueName);
+        Queue<?> queue = (Queue<?>) ConfiguredObjectFinder.findConfiguredObjectByName(host.getQueues(), queueName);
         Object messageGroupKey = queue.getAttribute(Queue.MESSAGE_GROUP_KEY);
         assertEquals("Unexpected message group key attribute", "mykey", messageGroupKey);
 
@@ -129,22 +130,24 @@ public class VirtualHostTest extends Qpi
 
     }
 
-    private VirtualHost createHost()
+    private VirtualHost<?,?,?> createHost()
     {
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(VirtualHost.NAME, getName());
         attributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
         attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
 
-        VirtualHost host = createHost(attributes);
+        VirtualHost<?,?,?> host = createHost(attributes);
         return host;
     }
 
-    private VirtualHost createHost(Map<String, Object> attributes)
+    private VirtualHost<?,?,?> createHost(Map<String, Object> attributes)
     {
         attributes = new HashMap<String, Object>(attributes);
         attributes.put(VirtualHost.ID, UUID.randomUUID());
-        return new StandardVirtualHost(attributes, _broker);
+        StandardVirtualHost host= new StandardVirtualHost(attributes, _virtualHostNode);
+        host.create();
+        return host;
     }
 
 }

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java Mon Apr 21 14:28:29 2014
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.verify
 import static org.mockito.Mockito.when;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -37,7 +38,6 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatcher;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
-
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.server.binding.BindingImpl;
 import org.apache.qpid.server.exchange.ExchangeImpl;
@@ -51,6 +51,7 @@ import org.apache.qpid.server.model.Excl
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.UUIDGenerator;
+import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.plugin.ExchangeType;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.security.SecurityManager;
@@ -86,6 +87,10 @@ public abstract class AbstractDurableCon
     protected Map<String, Object> _configurationStoreSettings;
     private ConfiguredObjectFactoryImpl _factory;
 
+    private ConfiguredObject<?> _parent;
+
+    private ConfiguredObjectRecord _rootRecord;
+
     public void setUp() throws Exception
     {
         super.setUp();
@@ -108,7 +113,16 @@ public abstract class AbstractDurableCon
         String argValue = "some selector expression";
         _bindingArgs.put(argKey, argValue);
 
-        reopenStore();
+
+        _parent = mock(ConfiguredObject.class);
+        when(_parent.getName()).thenReturn("testName");
+        when(_parent.getObjectFactory()).thenReturn(_factory);
+        when(_parent.getModel()).thenReturn(_factory.getModel());
+
+        _configStore = createConfigStore();
+        _configStore.openConfigurationStore(_parent, _configurationStoreSettings);
+        _rootRecord = new ConfiguredObjectRecordImpl(UUID.randomUUID(), VirtualHost.class.getSimpleName(), Collections.<String, Object>emptyMap());
+        _configStore.create(_rootRecord);
     }
 
     public void tearDown() throws Exception
@@ -130,6 +144,8 @@ public abstract class AbstractDurableCon
         _configStore.create(exchange.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
+
         verify(_handler).handle(matchesRecord(_exchangeId, EXCHANGE,
                 map( org.apache.qpid.server.model.Exchange.NAME, getName(),
                         org.apache.qpid.server.model.Exchange.TYPE, getName()+"Type",
@@ -178,6 +194,7 @@ public abstract class AbstractDurableCon
         _configStore.create(binding.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
 
         Map<String,Object> map = new HashMap<String, Object>();
         map.put(Binding.NAME, ROUTING_KEY);
@@ -280,6 +297,8 @@ public abstract class AbstractDurableCon
         _configStore.create(queue.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
+
         Map<String, Object> queueAttributes = new HashMap<String, Object>();
         queueAttributes.put(Queue.NAME, getName());
         queueAttributes.put(Queue.OWNER, getName()+"Owner");
@@ -297,7 +316,7 @@ public abstract class AbstractDurableCon
         _configStore.create(queue.asObjectRecord());
 
         reopenStore();
-
+        _configStore.visitConfiguredObjectRecords(_handler);
 
         Map<String,Object> queueAttributes = new HashMap<String, Object>();
 
@@ -317,6 +336,7 @@ public abstract class AbstractDurableCon
         _configStore.create(queue.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
 
         Map<String, Object> queueAttributes = new HashMap<String, Object>();
         queueAttributes.put(Queue.NAME, getName());
@@ -351,6 +371,7 @@ public abstract class AbstractDurableCon
         _configStore.update(false, queue.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
 
         Map<String,Object> queueAttributes = new HashMap<String, Object>();
 
@@ -377,6 +398,7 @@ public abstract class AbstractDurableCon
         _configStore.update(false, queue.asObjectRecord());
 
         reopenStore();
+        _configStore.visitConfiguredObjectRecords(_handler);
 
         Map<String,Object> queueAttributes = new HashMap<String, Object>();
 
@@ -461,6 +483,7 @@ public abstract class AbstractDurableCon
         when(objectRecord.getId()).thenReturn(_queueId);
         when(objectRecord.getType()).thenReturn(Queue.class.getSimpleName());
         when(objectRecord.getAttributes()).thenReturn(attributes);
+        when(objectRecord.getParents()).thenReturn(Collections.singletonMap(_rootRecord.getType(), _rootRecord));
         when(queue.asObjectRecord()).thenReturn(objectRecord);
         return queue;
     }
@@ -485,6 +508,7 @@ public abstract class AbstractDurableCon
         when(exchangeRecord.getId()).thenReturn(_exchangeId);
         when(exchangeRecord.getType()).thenReturn(Exchange.class.getSimpleName());
         when(exchangeRecord.getAttributes()).thenReturn(actualAttributes);
+        when(exchangeRecord.getParents()).thenReturn(Collections.singletonMap(_rootRecord.getType(), _rootRecord));
         when(exchange.asObjectRecord()).thenReturn(exchangeRecord);
         when(exchange.getExchangeType()).thenReturn(mock(ExchangeType.class));
         when(exchange.getEventLogger()).thenReturn(new EventLogger());
@@ -495,14 +519,7 @@ public abstract class AbstractDurableCon
     {
         closeConfigStore();
         _configStore = createConfigStore();
-
-        ConfiguredObject<?> parent = mock(ConfiguredObject.class);
-        when(parent.getName()).thenReturn("testName");
-
-        when(parent.getObjectFactory()).thenReturn(_factory);
-        when(parent.getModel()).thenReturn(_factory.getModel());
-        _configStore.openConfigurationStore(parent, _configurationStoreSettings);
-        _configStore.visitConfiguredObjectRecords(_handler);
+        _configStore.openConfigurationStore(_parent, _configurationStoreSettings);
     }
 
     protected abstract DurableConfigurationStore createConfigStore() throws Exception;

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java Mon Apr 21 14:28:29 2014
@@ -24,7 +24,6 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -35,9 +34,6 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import org.mockito.ArgumentMatcher;
-import org.mockito.InOrder;
-
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectFactory;
@@ -48,29 +44,34 @@ import org.apache.qpid.server.util.Serve
 import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.test.utils.TestFileUtils;
 import org.apache.qpid.util.FileUtils;
+import org.mockito.ArgumentMatcher;
+import org.mockito.InOrder;
 
 public class JsonFileConfigStoreTest extends QpidTestCase
 {
     private JsonFileConfigStore _store;
     private HashMap<String, Object> _configurationStoreSettings;
-    private ConfiguredObject<?> _virtualHost;
+    private ConfiguredObject<?> _parent;
     private File _storeLocation;
     private ConfiguredObjectRecordHandler _handler;
 
 
     private static final UUID ANY_UUID = UUID.randomUUID();
     private static final Map<String, Object> ANY_MAP = new HashMap<String, Object>();
+    private static final String VIRTUAL_HOST_TYPE = "VirtualHost";
+    private ConfiguredObjectRecord _rootRecord;
 
     @Override
     public void setUp() throws Exception
     {
         super.setUp();
 
-        _virtualHost = mock(ConfiguredObject.class);
-        when(_virtualHost.getName()).thenReturn(getName());
         ConfiguredObjectFactory factory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
-        when(_virtualHost.getObjectFactory()).thenReturn(factory);
-        when(_virtualHost.getModel()).thenReturn(factory.getModel());
+
+        _parent = mock(ConfiguredObject.class);
+        when(_parent.getName()).thenReturn(getName());
+        when(_parent.getObjectFactory()).thenReturn(factory);
+        when(_parent.getModel()).thenReturn(factory.getModel());
         _storeLocation = TestFileUtils.createTestDirectory("json", true);
         _configurationStoreSettings = new HashMap<String, Object>();
         _configurationStoreSettings.put(JsonFileConfigStore.STORE_TYPE, JsonFileConfigStore.TYPE);
@@ -99,7 +100,7 @@ public class JsonFileConfigStoreTest ext
         _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, null);
         try
         {
-            _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+            _store.openConfigurationStore(_parent, _configurationStoreSettings);
             fail("Store should not successfully configure if there is no path set");
         }
         catch (ServerScopedRuntimeException e)
@@ -114,7 +115,7 @@ public class JsonFileConfigStoreTest ext
         _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, System.getProperty("file.separator"));
         try
         {
-            _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+            _store.openConfigurationStore(_parent, _configurationStoreSettings);
             fail("Store should not successfully configure if there is an invalid path set");
         }
         catch (ServerScopedRuntimeException e)
@@ -125,50 +126,76 @@ public class JsonFileConfigStoreTest ext
 
     public void testVisitEmptyStore()
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
         _store.visitConfiguredObjectRecords(_handler);
 
         InOrder inorder = inOrder(_handler);
         inorder.verify(_handler).begin();
-        inorder.verify(_handler,never()).handle(any(ConfiguredObjectRecord.class));
+        inorder.verify(_handler,times(0)).handle(any(ConfiguredObjectRecord.class));
         inorder.verify(_handler).end();
+
+        _store.closeConfigurationStore();
+    }
+
+    public void testInsertAndUpdateTopLevelObject() throws Exception
+    {
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+        _store.closeConfigurationStore();
+
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        Map<String, Object> newAttributes = new HashMap<String, Object>(_rootRecord.getAttributes());
+        newAttributes.put("attributeName", "attributeValue");
+        _store.update(false, new ConfiguredObjectRecordImpl(_rootRecord.getId(), _rootRecord.getType(), newAttributes));
+        _store.closeConfigurationStore();
+
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+
+        _store.visitConfiguredObjectRecords(_handler);
+
+        Map<String, Object> expectedAttributes = new HashMap<String, Object>(newAttributes);
+        verify(_handler, times(1)).handle(matchesRecord(_rootRecord.getId(), _rootRecord.getType(), expectedAttributes));
         _store.closeConfigurationStore();
     }
 
     public void testCreateObject() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         final UUID queueId = new UUID(0, 1);
         final String queueType = Queue.class.getSimpleName();
         final Map<String,Object> queueAttr = Collections.singletonMap("name", (Object) "q1");
 
-        _store.create(new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr));
+        _store.create(new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr, getRootAsParentMap()));
         _store.closeConfigurationStore();
 
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
 
         _store.visitConfiguredObjectRecords(_handler);
-        verify(_handler, times(1)).handle(matchesRecord(queueId, queueType, queueAttr));
+        verify(_handler).handle(matchesRecord(queueId, queueType, queueAttr));
+        verify(_handler).handle(matchesRecord(ANY_UUID, VIRTUAL_HOST_TYPE, ANY_MAP));
         _store.closeConfigurationStore();
     }
 
     public void testCreateAndUpdateObject() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         final UUID queueId = new UUID(0, 1);
         final String queueType = Queue.class.getSimpleName();
         Map<String,Object> queueAttr = Collections.singletonMap("name", (Object) "q1");
 
-        _store.create(new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr));
-
+        _store.create(new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr, getRootAsParentMap()));
 
         queueAttr = new HashMap<String,Object>(queueAttr);
         queueAttr.put("owner", "theowner");
-        _store.update(false, new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr));
+        _store.update(false, new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr, getRootAsParentMap()));
 
         _store.closeConfigurationStore();
 
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
         _store.visitConfiguredObjectRecords(_handler);
         verify(_handler, times(1)).handle(matchesRecord(queueId, queueType, queueAttr));
         _store.closeConfigurationStore();
@@ -177,12 +204,14 @@ public class JsonFileConfigStoreTest ext
 
     public void testCreateAndRemoveObject() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         final UUID queueId = new UUID(0, 1);
         final String queueType = Queue.class.getSimpleName();
         Map<String,Object> queueAttr = Collections.singletonMap("name", (Object) "q1");
 
-        final ConfiguredObjectRecordImpl record = new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr);
+        final ConfiguredObjectRecordImpl record = new ConfiguredObjectRecordImpl(queueId, queueType, queueAttr, getRootAsParentMap());
         _store.create(record);
 
 
@@ -190,18 +219,20 @@ public class JsonFileConfigStoreTest ext
 
         _store.closeConfigurationStore();
 
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
         _store.visitConfiguredObjectRecords(_handler);
-        verify(_handler, never()).handle(any(ConfiguredObjectRecord.class));
+        verify(_handler, times(1)).handle(matchesRecord(ANY_UUID, VIRTUAL_HOST_TYPE, ANY_MAP));
         _store.closeConfigurationStore();
     }
 
     public void testCreateUnknownObjectType() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         try
         {
-            _store.create(new ConfiguredObjectRecordImpl(UUID.randomUUID(), "wibble", Collections.<String, Object>emptyMap()));
+            _store.create(new ConfiguredObjectRecordImpl(UUID.randomUUID(), "wibble", Collections.<String, Object>emptyMap(), getRootAsParentMap()));
             fail("Should not be able to create instance of type wibble");
         }
         catch (StoreException e)
@@ -212,12 +243,14 @@ public class JsonFileConfigStoreTest ext
 
     public void testTwoObjectsWithSameId() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         final UUID id = UUID.randomUUID();
-        _store.create(new ConfiguredObjectRecordImpl(id, "Queue", Collections.<String, Object>emptyMap()));
+        _store.create(new ConfiguredObjectRecordImpl(id, "Queue", Collections.<String, Object>emptyMap(), getRootAsParentMap()));
         try
         {
-            _store.create(new ConfiguredObjectRecordImpl(id, "Exchange", Collections.<String, Object>emptyMap()));
+            _store.create(new ConfiguredObjectRecordImpl(id, "Exchange", Collections.<String, Object>emptyMap(), getRootAsParentMap()));
             fail("Should not be able to create two objects with same id");
         }
         catch (StoreException e)
@@ -229,15 +262,17 @@ public class JsonFileConfigStoreTest ext
 
     public void testChangeTypeOfObject() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
+
         final UUID id = UUID.randomUUID();
-        _store.create(new ConfiguredObjectRecordImpl(id, "Queue", Collections.<String, Object>emptyMap()));
+        _store.create(new ConfiguredObjectRecordImpl(id, "Queue", Collections.<String, Object>emptyMap(), getRootAsParentMap()));
         _store.closeConfigurationStore();
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
 
         try
         {
-            _store.update(false, new ConfiguredObjectRecordImpl(id, "Exchange", Collections.<String, Object>emptyMap()));
+            _store.update(false, new ConfiguredObjectRecordImpl(id, "Exchange", Collections.<String, Object>emptyMap(), getRootAsParentMap()));
             fail("Should not be able to update object to different type");
         }
         catch (StoreException e)
@@ -248,13 +283,13 @@ public class JsonFileConfigStoreTest ext
 
     public void testLockFileGuaranteesExclusiveAccess() throws Exception
     {
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
 
         JsonFileConfigStore secondStore = new JsonFileConfigStore();
 
         try
         {
-            secondStore.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+            secondStore.openConfigurationStore(_parent, _configurationStoreSettings);
             fail("Should not be able to open a second store with the same path");
         }
         catch(ServerScopedRuntimeException e)
@@ -262,15 +297,16 @@ public class JsonFileConfigStoreTest ext
             // pass
         }
         _store.closeConfigurationStore();
-        secondStore.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        secondStore.openConfigurationStore(_parent, _configurationStoreSettings);
 
 
     }
 
     public void testCreatedNestedObjects() throws Exception
     {
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
+        createRootRecord();
 
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
         final UUID queueId = new UUID(0, 1);
         final UUID queue2Id = new UUID(1, 1);
 
@@ -280,11 +316,12 @@ public class JsonFileConfigStoreTest ext
         final UUID bindingId = new UUID(0, 3);
         final UUID binding2Id = new UUID(1, 3);
 
-        final ConfiguredObjectRecordImpl queueRecord = new ConfiguredObjectRecordImpl(queueId, "Queue", EMPTY_ATTR);
+        Map<String, ConfiguredObjectRecord> parents = getRootAsParentMap();
+        final ConfiguredObjectRecordImpl queueRecord = new ConfiguredObjectRecordImpl(queueId, "Queue", EMPTY_ATTR, parents);
         _store.create(queueRecord);
-        final ConfiguredObjectRecordImpl queue2Record = new ConfiguredObjectRecordImpl(queue2Id, "Queue", EMPTY_ATTR);
+        final ConfiguredObjectRecordImpl queue2Record = new ConfiguredObjectRecordImpl(queue2Id, "Queue", EMPTY_ATTR, parents);
         _store.create(queue2Record);
-        final ConfiguredObjectRecordImpl exchangeRecord = new ConfiguredObjectRecordImpl(exchangeId, "Exchange", EMPTY_ATTR);
+        final ConfiguredObjectRecordImpl exchangeRecord = new ConfiguredObjectRecordImpl(exchangeId, "Exchange", EMPTY_ATTR, parents);
         _store.create(exchangeRecord);
         Map<String,ConfiguredObjectRecord> bindingParents = new HashMap<String, ConfiguredObjectRecord>();
         bindingParents.put("Exchange", exchangeRecord);
@@ -300,7 +337,7 @@ public class JsonFileConfigStoreTest ext
                 new ConfiguredObjectRecordImpl(binding2Id, "Binding", EMPTY_ATTR, binding2Parents);
         _store.update(true, bindingRecord, binding2Record);
         _store.closeConfigurationStore();
-        _store.openConfigurationStore(_virtualHost, _configurationStoreSettings);
+        _store.openConfigurationStore(_parent, _configurationStoreSettings);
         _store.visitConfiguredObjectRecords(_handler);
         verify(_handler).handle(matchesRecord(queueId, "Queue", EMPTY_ATTR));
         verify(_handler).handle(matchesRecord(queue2Id, "Queue", EMPTY_ATTR));
@@ -311,22 +348,36 @@ public class JsonFileConfigStoreTest ext
 
     }
 
+
+    private void createRootRecord()
+    {
+        UUID rootRecordId = UUID.randomUUID();
+        _rootRecord = new ConfiguredObjectRecordImpl(rootRecordId, VIRTUAL_HOST_TYPE, Collections.<String, Object>emptyMap());
+        _store.create(_rootRecord);
+    }
+
+    private Map<String, ConfiguredObjectRecord> getRootAsParentMap()
+    {
+        return Collections.<String, ConfiguredObjectRecord>singletonMap(VIRTUAL_HOST_TYPE, _rootRecord);
+    }
+
     private ConfiguredObjectRecord matchesRecord(UUID id, String type, Map<String, Object> attributes)
     {
         return argThat(new ConfiguredObjectMatcher(id, type, attributes));
     }
 
+
     private static class ConfiguredObjectMatcher extends ArgumentMatcher<ConfiguredObjectRecord>
     {
-        private final Map<String,Object> _matchingMap;
-        private final UUID _id;
-        private final String _name;
+        private final Map<String,Object> _expectedAttributes;
+        private final UUID _expectedId;
+        private final String _expectedType;
 
         private ConfiguredObjectMatcher(final UUID id, final String type, final Map<String, Object> matchingMap)
         {
-            _id = id;
-            _name = type;
-            _matchingMap = matchingMap;
+            _expectedId = id;
+            _expectedType = type;
+            _expectedAttributes = matchingMap;
         }
 
         @Override
@@ -339,9 +390,9 @@ public class JsonFileConfigStoreTest ext
                 Map<String,Object> arg = new HashMap<String, Object>(binding.getAttributes());
                 arg.remove("createdBy");
                 arg.remove("createdTime");
-                return (_id == ANY_UUID || _id.equals(binding.getId()))
-                       && _name.equals(binding.getType())
-                       && (_matchingMap == ANY_MAP || arg.equals(_matchingMap));
+                return (_expectedId == ANY_UUID || _expectedId.equals(binding.getId()))
+                       && _expectedType.equals(binding.getType())
+                       && (_expectedAttributes == ANY_MAP || arg.equals(_expectedAttributes));
 
             }
             return false;

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java Mon Apr 21 14:28:29 2014
@@ -23,9 +23,10 @@ package org.apache.qpid.server.store;
 
 import java.util.Map;
 
+import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
 import org.apache.qpid.server.plugin.MessageStoreFactory;
 
-public class TestMemoryMessageStoreFactory implements MessageStoreFactory
+public class TestMemoryMessageStoreFactory implements MessageStoreFactory, DurableConfigurationStoreFactory
 {
 
     @Override
@@ -44,4 +45,15 @@ public class TestMemoryMessageStoreFacto
     public void validateAttributes(Map<String, Object> attributes)
     {
     }
+
+    @Override
+    public DurableConfigurationStore createDurableConfigurationStore()
+    {
+        return new TestMemoryMessageStore();
+    }
+
+    @Override
+    public void validateConfigurationStoreSettings(Map<String, Object> attributes)
+    {
+    }
 }

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java Mon Apr 21 14:28:29 2014
@@ -21,7 +21,6 @@
 package org.apache.qpid.server.util;
 
 import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -50,6 +49,7 @@ import org.apache.qpid.server.model.Syst
 import org.apache.qpid.server.model.SystemContextImpl;
 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;
 import org.apache.qpid.server.queue.AMQQueue;
@@ -75,29 +75,31 @@ public class BrokerTestHelper
         TASK_EXECUTOR.start();
     }
 
-    public static Broker createBrokerMock()
+    public static Broker<?> createBrokerMock()
     {
         ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
-        SubjectCreator subjectCreator = mock(SubjectCreator.class);
+        EventLogger eventLogger = new EventLogger();
+
+        SystemContext systemContext = mock(SystemContext.class);
+        when(systemContext.getEventLogger()).thenReturn(eventLogger);
+        when(systemContext.getObjectFactory()).thenReturn(objectFactory);
+        when(systemContext.getModel()).thenReturn(objectFactory.getModel());
+        when(systemContext.getCategoryClass()).thenReturn(SystemContext.class);
 
+        SubjectCreator subjectCreator = mock(SubjectCreator.class);
         when(subjectCreator.getMechanisms()).thenReturn("");
+
         Broker broker = mock(Broker.class);
         when(broker.getConnection_sessionCountLimit()).thenReturn(1);
         when(broker.getConnection_closeWhenNoRoute()).thenReturn(false);
         when(broker.getId()).thenReturn(UUID.randomUUID());
         when(broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(subjectCreator);
-        when(broker.getSecurityManager()).thenReturn(new SecurityManager(mock(Broker.class), false));
+        when(broker.getSecurityManager()).thenReturn(new SecurityManager(broker, false));
         when(broker.getObjectFactory()).thenReturn(objectFactory);
         when(broker.getModel()).thenReturn(objectFactory.getModel());
-        when(broker.getEventLogger()).thenReturn(new EventLogger());
+        when(broker.getEventLogger()).thenReturn(eventLogger);
         when(broker.getCategoryClass()).thenReturn(Broker.class);
-
-        SystemContext systemContext = mock(SystemContext.class);
-        when(systemContext.getObjectFactory()).thenReturn(objectFactory);
-        when(systemContext.getModel()).thenReturn(objectFactory.getModel());
-        when(systemContext.getCategoryClass()).thenReturn(SystemContext.class);
-        when(systemContext.getEventLogger()).thenReturn(new EventLogger());
-        when(broker.getParent(eq(SystemContext.class))).thenReturn(systemContext);
+        when(broker.getParent(SystemContext.class)).thenReturn(systemContext);
 
         return broker;
     }
@@ -110,34 +112,33 @@ public class BrokerTestHelper
     {
     }
 
-    public static VirtualHostImpl createVirtualHost(Map<String, Object> attributes)
+    public static VirtualHostImpl<?,?,?> createVirtualHost(Map<String, Object> attributes)
             throws Exception
     {
 
         //VirtualHostFactory factory = new PluggableFactoryLoader<VirtualHostFactory>(VirtualHostFactory.class).get(hostType);
+        Broker<?> broker = createBrokerMock();
+        ConfiguredObjectFactory objectFactory = broker.getObjectFactory();
         SystemContext systemContext = new SystemContextImpl(TASK_EXECUTOR,
-                                                            new ConfiguredObjectFactoryImpl(BrokerModel.getInstance()),
+                                                            objectFactory,
                                                             mock(EventLogger.class),
                                                             mock(LogRecorder.class),
                                                             new BrokerOptions());
-        ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
-        Broker broker = mock(Broker.class);
-        when(broker.getParent(eq(SystemContext.class))).thenReturn(systemContext);
         when(broker.getTaskExecutor()).thenReturn(TASK_EXECUTOR);
-        SecurityManager securityManager = new SecurityManager(broker, false);
-        when(broker.getSecurityManager()).thenReturn(securityManager);
-        when(broker.getCategoryClass()).thenReturn(Broker.class);
-        when(broker.getObjectFactory()).thenReturn(objectFactory);
-        when(broker.getModel()).thenReturn(objectFactory.getModel());
-
-        AbstractVirtualHost host = (AbstractVirtualHost) objectFactory.create(VirtualHost.class,attributes, broker);
 
+        VirtualHostNode<?> virtualHostNode = mock(VirtualHostNode.class);
+        DurableConfigurationStore dcs = mock(DurableConfigurationStore.class);
+        when(virtualHostNode.getConfigurationStore()).thenReturn(dcs);
+        when(virtualHostNode.getParent(Broker.class)).thenReturn(broker);
+        when(virtualHostNode.getModel()).thenReturn(objectFactory.getModel());
+        when(virtualHostNode.getObjectFactory()).thenReturn(objectFactory);
+        AbstractVirtualHost host = (AbstractVirtualHost) objectFactory.create(VirtualHost.class, attributes, virtualHostNode );
         host.setDesiredState(host.getState(), State.ACTIVE);
 
         return host;
     }
 
-    public static VirtualHostImpl createVirtualHost(String name) throws Exception
+    public static VirtualHostImpl<?,?,?> createVirtualHost(String name) throws Exception
     {
         Map<String,Object> attributes = new HashMap<String, Object>();
         attributes.put(org.apache.qpid.server.model.VirtualHost.TYPE, StandardVirtualHost.TYPE);
@@ -151,41 +152,40 @@ public class BrokerTestHelper
         return createVirtualHost(attributes);
     }
 
-    public static AMQSessionModel createSession(int channelId, AMQConnectionModel connection)
+    public static AMQSessionModel<?,?> createSession(int channelId, AMQConnectionModel<?,?> connection)
     {
+        @SuppressWarnings("rawtypes")
         AMQSessionModel session = mock(AMQSessionModel.class);
         when(session.getConnectionModel()).thenReturn(connection);
         when(session.getChannelId()).thenReturn(channelId);
         return session;
     }
 
-    public static AMQSessionModel createSession(int channelId) throws Exception
+    public static AMQSessionModel<?,?> createSession(int channelId) throws Exception
     {
-        AMQConnectionModel session = createConnection();
+        AMQConnectionModel<?,?> session = createConnection();
         return createSession(channelId, session);
     }
 
-    public static AMQSessionModel createSession() throws Exception
+    public static AMQSessionModel<?,?> createSession() throws Exception
     {
         return createSession(1);
     }
 
-    public static AMQConnectionModel createConnection() throws Exception
+    public static AMQConnectionModel<?,?> createConnection() throws Exception
     {
         return createConnection("test");
     }
 
-    public static AMQConnectionModel createConnection(String hostName) throws Exception
+    public static AMQConnectionModel<?,?> createConnection(String hostName) throws Exception
     {
-        VirtualHostImpl virtualHost = createVirtualHost(hostName);
-        AMQConnectionModel connection = mock(AMQConnectionModel.class);
-        return connection;
+        return mock(AMQConnectionModel.class);
     }
 
-    public static ExchangeImpl createExchange(String hostName, final boolean durable, final EventLogger eventLogger) throws Exception
+    public static ExchangeImpl<?> createExchange(String hostName, final boolean durable, final EventLogger eventLogger) throws Exception
     {
         SecurityManager securityManager = new SecurityManager(mock(Broker.class), false);
-        final VirtualHostImpl virtualHost = mock(VirtualHostImpl.class);
+        final VirtualHostImpl<?,?,?> virtualHost = mock(VirtualHostImpl.class);
         when(virtualHost.getName()).thenReturn(hostName);
         when(virtualHost.getSecurityManager()).thenReturn(securityManager);
         when(virtualHost.getEventLogger()).thenReturn(eventLogger);
@@ -210,13 +210,13 @@ public class BrokerTestHelper
 
     }
 
-    public static AMQQueue createQueue(String queueName, VirtualHostImpl virtualHost)
+    public static AMQQueue<?> createQueue(String queueName, VirtualHostImpl<?,?,?> virtualHost)
             throws QueueExistsException
     {
         Map<String,Object> attributes = new HashMap<String, Object>();
         attributes.put(Queue.ID, UUIDGenerator.generateRandomUUID());
         attributes.put(Queue.NAME, queueName);
-        AMQQueue queue = virtualHost.createQueue(attributes);
+        AMQQueue<?> queue = virtualHost.createQueue(attributes);
         return queue;
     }
 

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java Mon Apr 21 14:28:29 2014
@@ -287,12 +287,6 @@ public class MockVirtualHost implements 
     }
 
     @Override
-    public Map<String, Object> getConfigurationStoreSettings()
-    {
-        return null;
-    }
-
-    @Override
     public long getQueueCount()
     {
         return 0;
@@ -658,4 +652,11 @@ public class MockVirtualHost implements 
     {
         return false;
     }
+
+    @Override
+    public String getModelVersion()
+    {
+        return null;
+    }
+
 }

Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/VirtualHostQueueCreationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/VirtualHostQueueCreationTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/VirtualHostQueueCreationTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/VirtualHostQueueCreationTest.java Mon Apr 21 14:28:29 2014
@@ -32,42 +32,80 @@ import org.apache.qpid.exchange.Exchange
 import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.exchange.ExchangeImpl;
+import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.ConfiguredObjectFactory;
+import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
 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.SystemContext;
 import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.queue.PriorityQueue;
 import org.apache.qpid.server.queue.PriorityQueueImpl;
 import org.apache.qpid.server.queue.StandardQueueImpl;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.TestMemoryMessageStore;
-import org.apache.qpid.server.util.BrokerTestHelper;
 import org.apache.qpid.test.utils.QpidTestCase;
 
 public class VirtualHostQueueCreationTest extends QpidTestCase
 {
-    private VirtualHostImpl _virtualHost;
-    private Broker _broker;
+    private VirtualHostImpl<?,?,?> _virtualHost;
+    private VirtualHostNode<?> _virtualHostNode;
+    private TaskExecutor _taskExecutor;
 
+    @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     public void setUp() throws Exception
     {
         super.setUp();
 
-        _broker = BrokerTestHelper.createBrokerMock();
-        TaskExecutor taskExecutor = mock(TaskExecutor.class);
-        when(taskExecutor.isTaskExecutorThread()).thenReturn(true);
-        when(_broker.getTaskExecutor()).thenReturn(taskExecutor);
+        EventLogger eventLogger = mock(EventLogger.class);
+        SecurityManager securityManager = mock(SecurityManager.class);
+        ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
+
+        _taskExecutor = new TaskExecutor();
+        _taskExecutor.start();
+
+        SystemContext<?> context = mock(SystemContext.class);
+        when(context.getEventLogger()).thenReturn(eventLogger);
+
+        Broker broker = mock(Broker.class);
+        when(broker.getObjectFactory()).thenReturn(objectFactory);
+        when(broker.getCategoryClass()).thenReturn(Broker.class);
+        when(broker.getParent(SystemContext.class)).thenReturn(context);
+        when(broker.getSecurityManager()).thenReturn(securityManager);
+        when(broker.getModel()).thenReturn(objectFactory.getModel());
+        when(broker.getTaskExecutor()).thenReturn(_taskExecutor);
+
+        _virtualHostNode = mock(VirtualHostNode.class);
+        when(_virtualHostNode.getParent(Broker.class)).thenReturn(broker);
+        when(_virtualHostNode.getConfigurationStore()).thenReturn(mock(DurableConfigurationStore.class));
+        when(_virtualHostNode.getObjectFactory()).thenReturn(objectFactory);
+        when(_virtualHostNode.getModel()).thenReturn(objectFactory.getModel());
 
         _virtualHost = createHost();
-        _virtualHost.open();
-
-
+    }
 
+    @Override
+    public void tearDown() throws Exception
+    {
+        try
+        {
+            _taskExecutor.stopImmediately();
+        }
+        finally
+        {
+            super.tearDown();
+        }
     }
-    private VirtualHostImpl createHost()
+    private VirtualHostImpl<?,?,?> createHost()
     {
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(VirtualHost.NAME, getName());
@@ -77,13 +115,10 @@ public class VirtualHostQueueCreationTes
 
         attributes = new HashMap<String, Object>(attributes);
         attributes.put(VirtualHost.ID, UUID.randomUUID());
-        return new StandardVirtualHost(attributes, _broker);
-    }
-
-    @Override
-    public void tearDown() throws Exception
-    {
-        super.tearDown();
+        StandardVirtualHost host = new StandardVirtualHost(attributes, _virtualHostNode);
+        host.create();
+        host.setDesiredState(host.getState(), State.ACTIVE);
+        return host;
     }
 
     private void verifyRegisteredQueueCount(int count)

Added: 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=1588886&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java Mon Apr 21 14:28:29 2014
@@ -0,0 +1,170 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.virtualhostnode;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
+import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.SystemContext;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
+import org.apache.qpid.server.store.ConfiguredObjectRecord;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.NullMessageStore;
+import org.apache.qpid.server.store.StoreException;
+import org.apache.qpid.server.store.TestMemoryMessageStore;
+import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
+import org.apache.qpid.server.util.BrokerTestHelper;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class AbstractStandardVirtualHostNodeTest extends QpidTestCase
+{
+    private static final String TEST_VIRTUAL_HOST_NODE_NAME = "testNode";
+    private static final String TEST_VIRTUAL_HOST_NAME = "testVirtualHost";
+
+    private DurableConfigurationStoreFactory _configStoreFactory = mock(DurableConfigurationStoreFactory.class);
+    private UUID _nodeId = UUID.randomUUID();
+    private Broker<?> _broker;
+    private DurableConfigurationStore _configStore;
+    private ConfiguredObjectRecord _record;
+    private TaskExecutor _taskExecutor;
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        _broker = BrokerTestHelper.createBrokerMock();
+        SystemContext<?> systemContext = _broker.getParent(SystemContext.class);
+        when(systemContext.getObjectFactory()).thenReturn(new ConfiguredObjectFactoryImpl(mock(Model.class)));
+
+        _taskExecutor = new TaskExecutor();
+        _taskExecutor.start();
+        when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
+    }
+
+    @Override
+    protected void tearDown() throws Exception
+    {
+        try
+        {
+            _taskExecutor.stopImmediately();
+        }
+        finally
+        {
+            super.tearDown();
+        }
+    }
+    public void testActivationOpensConfigStoreWithExistingVirtualHostRecord() throws Exception
+    {
+        UUID virtualHostId = UUID.randomUUID();
+        _record = createMockVirtualHostCOR(virtualHostId);
+
+        _configStore = new NullMessageStore(){
+
+            @Override
+            public void visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws StoreException
+            {
+                handler.begin();
+                handler.handle(_record);
+                handler.end();
+            }
+        };
+        when(_configStoreFactory.createDurableConfigurationStore()).thenReturn(_configStore);
+
+        Map<String, Object> nodeAttributes = new HashMap<String, Object>();
+        nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
+        nodeAttributes.put(VirtualHostNode.ID, _nodeId);
+
+        VirtualHostNode<?> node = new TestVirtualHostNode(_broker, nodeAttributes, _taskExecutor, _configStore);
+        node.open();
+        node.setDesiredState(node.getState(), State.ACTIVE);
+
+        VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+        assertNotNull("Virtual host was not recovered", virtualHost);
+        assertTrue("Unexpected virtual host type", virtualHost instanceof StandardVirtualHost);
+        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());
+    }
+
+    public void testActivationOpensConfigStoreWithoutVirtualHostRecord() throws Exception
+    {
+        _configStore = new NullMessageStore() {
+
+            @Override
+            public void visitConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws StoreException
+            {
+                handler.begin();
+                // No records
+                handler.end();
+            }
+        };
+        when(_configStoreFactory.createDurableConfigurationStore()).thenReturn(_configStore);
+
+        Map<String, Object> nodeAttributes = new HashMap<String, Object>();
+        nodeAttributes.put(VirtualHostNode.NAME, TEST_VIRTUAL_HOST_NODE_NAME);
+        nodeAttributes.put(VirtualHostNode.ID, _nodeId);
+
+        VirtualHostNode<?> node = new TestVirtualHostNode(_broker, nodeAttributes, _taskExecutor, _configStore);
+        node.open();
+        node.setDesiredState(node.getState(), State.ACTIVE);
+
+        VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+        assertNotNull("Virtual host was not recovered", virtualHost);
+        assertTrue("Unexpected virtual host type", virtualHost instanceof StandardVirtualHost);
+
+        // 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)
+    {
+        Map<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+        virtualHostAttributes.put(VirtualHost.NAME, TEST_VIRTUAL_HOST_NAME);
+        virtualHostAttributes.put(VirtualHost.TYPE, StandardVirtualHost.TYPE);
+        virtualHostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION);
+        Map<String,Object> messageStoreSettings = new HashMap<String, Object>();
+        virtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
+        messageStoreSettings.put(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE);
+
+        ConfiguredObjectRecord record = mock(ConfiguredObjectRecord.class);
+        when(record.getId()).thenReturn(virtualHostId);
+        when(record.getAttributes()).thenReturn(virtualHostAttributes);
+        when(record.getType()).thenReturn(VirtualHost.class.getSimpleName());
+        return record;
+    }
+}

Added: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java?rev=1588886&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java Mon Apr 21 14:28:29 2014
@@ -0,0 +1,85 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.virtualhostnode;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ManagedObject;
+import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.TestMemoryMessageStore;
+import org.apache.qpid.server.store.TestMemoryMessageStoreFactory;
+@ManagedObject(type="TestMemory", category=false)
+public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVirtualHostNode>
+{
+    private final DurableConfigurationStore _store;
+
+    public TestVirtualHostNode(Broker<?> parent, Map<String, Object> attributes, TaskExecutor taskExecutor)
+    {
+        this(parent, attributes, taskExecutor, null);
+    }
+
+    public TestVirtualHostNode(Broker<?> parent, Map<String, Object> attributes, TaskExecutor taskExecutor, DurableConfigurationStore store)
+    {
+        super(parent, attributes, taskExecutor);
+        _store = store;
+    }
+
+    @Override
+    protected DurableConfigurationStoreFactory getDurableConfigurationStoreFactory()
+    {
+        if (_store != null)
+        {
+            return new DurableConfigurationStoreFactory()
+            {
+
+                @Override
+                public void validateConfigurationStoreSettings(Map<String, Object> attributes)
+                {
+                }
+
+                @Override
+                public String getType()
+                {
+                    return null;
+                }
+
+                @Override
+                public DurableConfigurationStore createDurableConfigurationStore()
+                {
+                    return _store;
+                }
+            };
+        }
+
+        return new TestMemoryMessageStoreFactory();
+    }
+
+    @Override
+    public Map<String, Object> getDefaultMessageStoreSettings()
+    {
+        return Collections.<String, Object>singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE);
+    }
+}
\ No newline at end of file

Copied: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNodeFactory.java (from r1588885, qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNodeFactory.java?p2=qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNodeFactory.java&p1=qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNodeFactory.java Mon Apr 21 14:28:29 2014
@@ -18,31 +18,26 @@
  * under the License.
  *
  */
-package org.apache.qpid.server.store.berkeleydb;
+package org.apache.qpid.server.virtualhostnode;
+
+import java.util.Map;
 
 import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-public class BDBHAVirtualHostFactory extends AbstractConfiguredObjectTypeFactory<BDBHAVirtualHost>
+public class TestVirtualHostNodeFactory extends AbstractConfiguredObjectTypeFactory<TestVirtualHostNode>
 {
-
-    public BDBHAVirtualHostFactory()
+    public TestVirtualHostNodeFactory()
     {
-        super(BDBHAVirtualHost.class);
+        super(TestVirtualHostNode.class);
     }
 
     @Override
-    public BDBHAVirtualHost createInstance(final Map<String, Object> attributes,
-                                                 final ConfiguredObject<?>... parents)
+    public TestVirtualHostNode createInstance(Map<String, Object> attributes, ConfiguredObject<?>... parents)
     {
-        final Broker broker = getParent(Broker.class, parents);
-        return new BDBHAVirtualHost(attributes, broker);
+        Broker<?> broker = getParent(Broker.class, parents);
+        return new TestVirtualHostNode(broker, attributes, broker.getTaskExecutor());
     }
 
-
 }

Copied: qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory (from r1588885, qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory?p2=qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory&p1=qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory Mon Apr 21 14:28:29 2014
@@ -16,4 +16,5 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostFactory
+org.apache.qpid.server.virtualhostnode.TestVirtualHostNodeFactory
+

Copied: qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.DurableConfigurationStoreFactory (from r1588885, qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.DurableConfigurationStoreFactory?p2=qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.DurableConfigurationStoreFactory&p1=qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.DurableConfigurationStoreFactory Mon Apr 21 14:28:29 2014
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.qpid.server.store.berkeleydb.BDBHAVirtualHostFactory
+org.apache.qpid.server.store.TestMemoryMessageStoreFactory

Modified: qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java Mon Apr 21 14:28:29 2014
@@ -66,8 +66,11 @@ public class DerbyMessageStoreFactory im
             }
         }
 
-        @SuppressWarnings("unchecked")
-        Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+    }
+
+    @Override
+    public void validateConfigurationStoreSettings(Map<String, Object> configurationStoreSettings)
+    {
         if(configurationStoreSettings != null && getType().equals(configurationStoreSettings.get(DurableConfigurationStore.STORE_TYPE)))
         {
             Object storePath = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);

Added: qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java?rev=1588886&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNode.java Mon Apr 21 14:28:29 2014
@@ -0,0 +1,63 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.server.virtualhostnode.derby;
+
+import java.util.Map;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.ManagedObject;
+import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
+import org.apache.qpid.server.store.derby.DerbyMessageStoreFactory;
+import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.FileBasedVirtualHostNode;
+
+@ManagedObject( category = false, type = "DERBY" )
+public class DerbyVirtualHostNode extends AbstractStandardVirtualHostNode<DerbyVirtualHostNode> implements FileBasedVirtualHostNode<DerbyVirtualHostNode>
+{
+    @ManagedAttributeField
+    private String _storePath;
+
+    public DerbyVirtualHostNode(Broker<?> parent, Map<String, Object> attributes, TaskExecutor taskExecutor)
+    {
+        super(parent, attributes, taskExecutor);
+    }
+
+    @Override
+    protected DurableConfigurationStoreFactory getDurableConfigurationStoreFactory()
+    {
+        return new DerbyMessageStoreFactory();
+    }
+
+    @Override
+    public String getStorePath()
+    {
+        return _storePath;
+    }
+
+    @Override
+    public String toString()
+    {
+        return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]";
+    }
+}

Copied: qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeFactory.java (from r1588885, qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeFactory.java?p2=qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeFactory.java&p1=qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostFactory.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeFactory.java Mon Apr 21 14:28:29 2014
@@ -18,31 +18,28 @@
  * under the License.
  *
  */
-package org.apache.qpid.server.store.berkeleydb;
+
+package org.apache.qpid.server.virtualhostnode.derby;
+
+import java.util.Map;
 
 import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-public class BDBHAVirtualHostFactory extends AbstractConfiguredObjectTypeFactory<BDBHAVirtualHost>
+public class DerbyVirtualHostNodeFactory extends AbstractConfiguredObjectTypeFactory<DerbyVirtualHostNode>
 {
 
-    public BDBHAVirtualHostFactory()
+    public DerbyVirtualHostNodeFactory()
     {
-        super(BDBHAVirtualHost.class);
+        super(DerbyVirtualHostNode.class);
     }
 
     @Override
-    public BDBHAVirtualHost createInstance(final Map<String, Object> attributes,
-                                                 final ConfiguredObject<?>... parents)
+    public DerbyVirtualHostNode createInstance(Map<String, Object> attributes, ConfiguredObject<?>... parents)
     {
-        final Broker broker = getParent(Broker.class, parents);
-        return new BDBHAVirtualHost(attributes, broker);
+        Broker<?> broker = getParent(Broker.class, parents);
+        return new DerbyVirtualHostNode(broker, attributes, broker.getTaskExecutor());
     }
 
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org