diff options
| author | Alex Rudyy <orudyy@apache.org> | 2013-10-05 00:26:00 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2013-10-05 00:26:00 +0000 |
| commit | 9366c44105c48ed2470dbe32d0681b14c3f7ad9e (patch) | |
| tree | b460590f0911ef68868d6a5c8f25e5a4741b71b0 /qpid/java | |
| parent | b1e78aeaaa374515af41e2632df1ac7daa084aad (diff) | |
| download | qpid-python-9366c44105c48ed2470dbe32d0681b14c3f7ad9e.tar.gz | |
QPID-5138: Simplify the evaluation of child configured object class in configuration store and add tests
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1529359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
4 files changed, 127 insertions, 27 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index 92d170fad9..56b0aec7dd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -70,7 +70,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore private final ObjectMapper _objectMapper; private final Map<UUID, ConfigurationEntry> _entries; - private final Map<String, Class<? extends ConfiguredObject>> _relationshipClasses; + private final Map<String, Class<? extends ConfiguredObject>> _brokerChildrenRelationshipMap; private final ConfigurationEntryStoreUtil _util = new ConfigurationEntryStoreUtil(); private String _storeLocation; @@ -86,7 +86,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore _objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); _objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true); _entries = new HashMap<UUID, ConfigurationEntry>(); - _relationshipClasses = buildRelationshipClassMap(); + _brokerChildrenRelationshipMap = buildRelationshipClassMap(); _resolver = new Strings.ChainedResolver(Strings.SYSTEM_RESOLVER, new Strings.MapResolver(configProperties)); } @@ -291,7 +291,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore + " can not be loaded by store of version " + STORE_VERSION); } - ConfigurationEntry brokerEntry = toEntry(node, Broker.class, _entries, null); + ConfigurationEntry brokerEntry = toEntry(node, Broker.class, _entries); _rootId = brokerEntry.getId(); } catch (IOException e) @@ -370,7 +370,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore byte[] bytes = json.getBytes("UTF-8"); bais = new ByteArrayInputStream(bytes); JsonNode node = loadJsonNodes(bais, _objectMapper); - ConfigurationEntry brokerEntry = toEntry(node, Broker.class, _entries, null); + ConfigurationEntry brokerEntry = toEntry(node, Broker.class, _entries); _rootId = brokerEntry.getId(); } catch(Exception e) @@ -490,7 +490,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore return root; } - private ConfigurationEntry toEntry(JsonNode parent, Class<? extends ConfiguredObject> expectedConfiguredObjectClass, Map<UUID, ConfigurationEntry> entries, Class<? extends ConfiguredObject> parentClass) + private ConfigurationEntry toEntry(JsonNode parent, Class<? extends ConfiguredObject> expectedConfiguredObjectClass, Map<UUID, ConfigurationEntry> entries) { Map<String, Object> attributes = null; Set<UUID> childrenIds = new TreeSet<UUID>(); @@ -519,23 +519,11 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore JsonNode element = elements.next(); if (element.isObject()) { - Class<? extends ConfiguredObject> expectedChildConfiguredObjectClass = _relationshipClasses.get(fieldName); - if (expectedChildConfiguredObjectClass == null && expectedConfiguredObjectClass != null) - { - Collection<Class<? extends ConfiguredObject>> childTypes = Model.getInstance().getChildTypes(expectedConfiguredObjectClass); - for (Class<? extends ConfiguredObject> childType : childTypes) - { - String relationship = childType.getSimpleName().toLowerCase(); - relationship += relationship.endsWith("s") ? "es": "s"; - if (fieldName.equals(relationship)) - { - expectedChildConfiguredObjectClass = childType; - break; - } - } - } + Class<? extends ConfiguredObject> expectedChildConfiguredObjectClass = findExpectedChildConfiguredObjectClass( + fieldName, expectedConfiguredObjectClass); + // assuming it is a child node - ConfigurationEntry entry = toEntry(element, expectedChildConfiguredObjectClass, entries, expectedConfiguredObjectClass); + ConfigurationEntry entry = toEntry(element, expectedChildConfiguredObjectClass, entries); childrenIds.add(entry.getId()); } else @@ -629,6 +617,34 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore return entry; } + private Class<? extends ConfiguredObject> findExpectedChildConfiguredObjectClass(String parentFieldName, + Class<? extends ConfiguredObject> parentConfiguredObjectClass) + { + if (parentConfiguredObjectClass == Broker.class) + { + return _brokerChildrenRelationshipMap.get(parentFieldName); + } + + // for non-broker parent classes + // try to determine the child class from the model by iterating through the children classes + // for the parent configured object class + if (parentConfiguredObjectClass != null) + { + Collection<Class<? extends ConfiguredObject>> childTypes = Model.getInstance().getChildTypes(parentConfiguredObjectClass); + for (Class<? extends ConfiguredObject> childType : childTypes) + { + String relationship = childType.getSimpleName().toLowerCase(); + relationship += relationship.endsWith("s") ? "es": "s"; + if (parentFieldName.equals(relationship)) + { + return childType; + } + } + } + + return null; + } + private Object toObject(JsonNode node) { if (node.isValueNode()) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java index d56481340b..df7e06e2e6 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java @@ -33,9 +33,11 @@ import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.Port; +import org.apache.qpid.server.model.PreferencesProvider; 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.adapter.FileSystemPreferencesProvider; import org.apache.qpid.server.plugin.AuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager; import org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager; @@ -47,7 +49,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase private UUID _brokerId; private UUID _virtualHostId; - private UUID _authenticationProviderId; + protected UUID _authenticationProviderId; private Map<String, Object> _brokerAttributes; private Map<String, Object> _virtualHostAttributes; @@ -93,7 +95,12 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase // ??? perhaps it should not be abstract protected abstract ConfigurationEntryStore createStore(UUID brokerId, Map<String, Object> brokerAttributes) throws Exception; - protected abstract void addConfiguration(UUID id, String type, Map<String, Object> attributes); + protected abstract void addConfiguration(UUID id, String type, Map<String, Object> attributes, UUID parentId); + + protected final void addConfiguration(UUID id, String type, Map<String, Object> attributes) + { + addConfiguration(id, type, attributes, _brokerId); + } protected ConfigurationEntryStore getStore() { @@ -388,4 +395,43 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase assertNotNull("Virtual host is not found", _store.getEntry(virtualHostId)); assertNotNull("Key store is not found", _store.getEntry(keyStoreId)); } + + public void testAddPreferencesProvider() + { + UUID preferencesProviderId = UUID.randomUUID(); + String path = TMP_FOLDER; + String name = getTestName(); + + addPreferencesProvider(preferencesProviderId, name, path); + + assertEquals("Unexpected preference provider ID in authentication provider children set", preferencesProviderId, _store + .getEntry(_authenticationProviderId).getChildrenIds().iterator().next()); + ConfigurationEntry preferencesProviderEntry = _store.getEntry(preferencesProviderId); + assertNotNull("Preferences providert is not found", preferencesProviderEntry); + assertEquals("Unexpected preferences providert id", preferencesProviderId, preferencesProviderEntry.getId()); + Map<String, Object> attributes = preferencesProviderEntry.getAttributes(); + assertEquals("Unexpected preferences provider name", name, attributes.get(PreferencesProvider.NAME)); + assertEquals("Unexpected preferences provider path", path, attributes.get(FileSystemPreferencesProvider.PATH)); + assertEquals("Unexpected preferences provider type", FileSystemPreferencesProvider.PROVIDER_TYPE, + attributes.get(PreferencesProvider.TYPE)); + } + + protected void addPreferencesProvider(UUID preferencesProviderId, String name, String path) + { + ConfigurationEntry authenticationProviderEntry = _store.getEntry(_authenticationProviderId); + ConfigurationEntry newAuthenticationProviderConfigEntry = new ConfigurationEntry(authenticationProviderEntry.getId(), + authenticationProviderEntry.getType(), authenticationProviderEntry.getAttributes(), + Collections.<UUID>singleton(preferencesProviderId), _store); + + Map<String, Object> preferencesProviderAttributes = new HashMap<String, Object>(); + preferencesProviderAttributes.put(PreferencesProvider.TYPE, FileSystemPreferencesProvider.PROVIDER_TYPE); + preferencesProviderAttributes.put(FileSystemPreferencesProvider.PATH, path); + preferencesProviderAttributes.put(PreferencesProvider.NAME, name); + + ConfigurationEntry preferencesProviderEntry = new ConfigurationEntry(preferencesProviderId, PreferencesProvider.class.getSimpleName(), + preferencesProviderAttributes, Collections.<UUID> emptySet(), _store); + + _store.save(newAuthenticationProviderConfigEntry, preferencesProviderEntry); + } + } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java index 3412543030..54c8592c2b 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java @@ -25,13 +25,17 @@ import java.io.IOException; import java.io.StringWriter; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.UUID; import org.apache.qpid.server.configuration.ConfigurationEntry; import org.apache.qpid.server.configuration.ConfigurationEntryStore; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.PreferencesProvider; +import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider; import org.apache.qpid.test.utils.TestFileUtils; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; @@ -43,6 +47,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest private File _storeFile; private ObjectMapper _objectMapper; + @Override public void setUp() throws Exception { @@ -93,10 +98,14 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest } @Override - protected void addConfiguration(UUID id, String type, Map<String, Object> attributes) + protected void addConfiguration(UUID id, String type, Map<String, Object> attributes, UUID parentId) { ConfigurationEntryStore store = getStore(); - store.save(new ConfigurationEntry(id, type, attributes, Collections.<UUID> emptySet(), store)); + ConfigurationEntry parentEntry = getStore().getEntry(parentId); + Set<UUID> children = new HashSet<UUID>(parentEntry.getChildrenIds()); + children.add(id); + ConfigurationEntry newParentEntry = new ConfigurationEntry(parentEntry.getId(), parentEntry.getType(), parentEntry.getAttributes(), children, store); + store.save(newParentEntry, new ConfigurationEntry(id, type, attributes, Collections.<UUID> emptySet(), store)); } public void testAttributeIsResolvedFromSystemProperties() @@ -233,4 +242,27 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest } } } + + public void testGetPreferencesProvider() throws Exception + { + UUID preferencesProviderId = UUID.randomUUID(); + String path = TMP_FOLDER; + String name = getTestName(); + + addPreferencesProvider(preferencesProviderId, name, path); + + // verify that store can deserialise child of a child + JsonConfigurationEntryStore newStore = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null, false, Collections.<String, String>emptyMap()); + + ConfigurationEntry authenticationProviderEntry = newStore.getEntry(_authenticationProviderId); + assertEquals("Unexpected preference provider ID in authentication provider children set", preferencesProviderId, authenticationProviderEntry.getChildrenIds().iterator().next()); + ConfigurationEntry preferencesProviderEntry = newStore.getEntry(preferencesProviderId); + assertNotNull("Preferences providert is not found", preferencesProviderEntry); + assertEquals("Unexpected preferences providert id", preferencesProviderId, preferencesProviderEntry.getId()); + Map<String, Object> attributes = preferencesProviderEntry.getAttributes(); + assertEquals("Unexpected preferences provider name", name, attributes.get(PreferencesProvider.NAME)); + assertEquals("Unexpected preferences provider path", path, attributes.get(FileSystemPreferencesProvider.PATH)); + assertEquals("Unexpected preferences provider type", FileSystemPreferencesProvider.PROVIDER_TYPE, + attributes.get(PreferencesProvider.TYPE)); + } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java index d7ecaeafd2..ffb084f767 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java @@ -23,7 +23,9 @@ package org.apache.qpid.server.configuration.store; import java.io.File; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.UUID; import org.apache.qpid.server.BrokerOptions; @@ -48,10 +50,14 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe } @Override - protected void addConfiguration(UUID id, String type, Map<String, Object> attributes) + protected void addConfiguration(UUID id, String type, Map<String, Object> attributes, UUID parentId) { ConfigurationEntryStore store = getStore(); - store.save(new ConfigurationEntry(id, type, attributes, Collections.<UUID> emptySet(), store)); + ConfigurationEntry parentEntry = getStore().getEntry(parentId); + Set<UUID> children = new HashSet<UUID>(parentEntry.getChildrenIds()); + children.add(id); + ConfigurationEntry newParentEntry = new ConfigurationEntry(parentEntry.getId(), parentEntry.getType(), parentEntry.getAttributes(), children, store); + store.save(newParentEntry, new ConfigurationEntry(id, type, attributes, Collections.<UUID> emptySet(), store)); } public void testCreateWithNullLocationAndNullInitialStore() |
