This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-caconfig-mock-plugin.git
commit 0d64470f5e9e31635478b85f40c2fa4541701e7c Author: Stefan Seifert <[email protected]> AuthorDate: Wed May 24 12:38:50 2017 +0000 SLING-6880 CAConfig Mock Plugin: Add helper methods for writing configurations also drop support for 1.x versions of SPI/Impl git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1796051 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 22 +++--- .../testing/mock/caconfig/ContextPlugins.java | 8 +- .../mock/caconfig/MockContextAwareConfig.java | 58 ++++++++++++++ .../sling/testing/mock/caconfig/package-info.java | 2 +- .../testing/mock/caconfig/CompatibilityUtil.java | 68 ---------------- .../testing/mock/caconfig/ContextPluginsTest.java | 12 +-- .../mock/caconfig/MockContextAwareConfigTest.java | 90 ++++++++++++++++++++++ .../example/{SimpleConfig.java => ListConfig.java} | 4 +- .../mock/caconfig/example/SimpleConfig.java | 2 +- 9 files changed, 172 insertions(+), 94 deletions(-) diff --git a/pom.xml b/pom.xml index d5bd7b2..e0ef829 100644 --- a/pom.xml +++ b/pom.xml @@ -90,34 +90,34 @@ <profiles> - <!-- Test with Sling CAConfig Impl/SPI 1.1 --> + <!-- Test with Sling CAConfig Impl/SPI 1.2 --> <profile> - <id>caconfig-1.1</id> + <id>caconfig-1.2</id> <dependencies> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.api</artifactId> - <version>1.0.0</version> + <version>1.1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.spi</artifactId> - <version>1.1.0</version> + <version>1.2.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.impl</artifactId> - <version>1.1.0</version> + <version>1.2.0</version> <scope>compile</scope> </dependency> </dependencies> </profile> - <!-- Test with Sling CAConfig Impl/SPI 1.2 --> + <!-- Test with Sling CAConfig Impl/SPI 1.3 --> <profile> - <id>caconfig-1.2</id> + <id>caconfig-1.3</id> <dependencies> <dependency> <groupId>org.apache.sling</groupId> @@ -128,13 +128,13 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.spi</artifactId> - <version>1.2.0</version> + <version>1.3.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.impl</artifactId> - <version>1.2.0</version> + <version>1.3.0</version> <scope>compile</scope> </dependency> </dependencies> @@ -142,7 +142,7 @@ <!-- Test with Sling CAConfig Impl/SPI 1.3 --> <profile> - <id>caconfig-1.3</id> + <id>caconfig-1.4</id> <dependencies> <dependency> <groupId>org.apache.sling</groupId> @@ -159,7 +159,7 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.caconfig.impl</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> <scope>compile</scope> </dependency> </dependencies> diff --git a/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java b/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java index 4197bff..03e124b 100644 --- a/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java +++ b/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java @@ -23,6 +23,7 @@ import org.apache.sling.caconfig.impl.ConfigurationResolverImpl; import org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy; import org.apache.sling.caconfig.impl.metadata.AnnotationClassConfigurationMetadataProvider; import org.apache.sling.caconfig.management.impl.ConfigurationManagerImpl; +import org.apache.sling.caconfig.management.impl.ContextPathStrategyMultiplexerImpl; import org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolverImpl; import org.apache.sling.caconfig.resource.impl.def.DefaultConfigurationResourceResolvingStrategy; import org.apache.sling.caconfig.resource.impl.def.DefaultContextPathStrategy; @@ -33,7 +34,7 @@ import org.osgi.annotation.versioning.ProviderType; /** * Mock context plugins. - * The plugin supports all versions from 1.0 to the most recent versions of the Impl/SPI. + * The plugin supports all versions from 1.2 to the most recent versions of the Impl/SPI. */ @ProviderType public final class ContextPlugins { @@ -77,10 +78,7 @@ public final class ContextPlugins { */ private static void registerConfigurationResourceResolver(SlingContextImpl context) { - if (!registerByClassName(context, "org.apache.sling.caconfig.management.impl.ContextPathStrategyMultiplexerImpl")) { - // fallback to impl 1.1 - registerByClassName(context, "org.apache.sling.caconfig.resource.impl.ContextPathStrategyMultiplexer"); - } + context.registerInjectActivateService(new ContextPathStrategyMultiplexerImpl()); if (!registerByClassName(context, "org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexerImpl")) { // fallback to impl 1.2 diff --git a/src/main/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfig.java b/src/main/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfig.java index 03b0212..d5a539b 100644 --- a/src/main/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfig.java +++ b/src/main/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfig.java @@ -18,6 +18,16 @@ */ package org.apache.sling.testing.mock.caconfig; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.caconfig.management.ConfigurationManager; +import org.apache.sling.caconfig.spi.ConfigurationCollectionPersistData; +import org.apache.sling.caconfig.spi.ConfigurationPersistData; +import org.apache.sling.testing.mock.osgi.MapUtil; import org.apache.sling.testing.mock.sling.context.SlingContextImpl; import org.osgi.annotation.versioning.ProviderType; @@ -49,4 +59,52 @@ public final class MockContextAwareConfig { ConfigurationMetadataUtil.registerAnnotationClasses(context.bundleContext(), classes); } + /** + * Writes configuration parameters using the primary configured persistence + * provider. + * @param context Sling context + * @param contextPath Configuration id + * @param configName Config name + * @param values Configuration values + */ + public static void writeConfiguration(SlingContextImpl context, String contextPath, String configName, + Map<String, Object> values) { + ConfigurationManager configManager = context.getService(ConfigurationManager.class); + Resource contextResource = context.resourceResolver().getResource(contextPath); + configManager.persistConfiguration(contextResource, configName, new ConfigurationPersistData(values)); + } + + /** + * Writes configuration parameters using the primary configured persistence + * provider. + * @param context Sling context + * @param contextPath Configuration id + * @param configName Config name + * @param values Configuration values + */ + public static void writeConfiguration(SlingContextImpl context, String contextPath, String configName, Object... values) { + writeConfiguration(context, contextPath, configName, MapUtil.toMap(values)); + } + + /** + * Writes a collection of configuration parameters using the primary + * configured persistence provider. + * @param context Sling context + * @param contextPath Configuration id + * @param configName Config name + * @param values Configuration values + */ + public static void writeConfigurationCollection(SlingContextImpl context, String contextPath, String configName, + Collection<Map<String, Object>> values) { + ConfigurationManager configManager = context.getService(ConfigurationManager.class); + Resource contextResource = context.resourceResolver().getResource(contextPath); + List<ConfigurationPersistData> items = new ArrayList<>(); + int index = 0; + for (Map<String, Object> map : values) { + items.add(new ConfigurationPersistData(map).collectionItemName("item" + (index++))); + } + configManager.persistConfigurationCollection(contextResource, configName, + new ConfigurationCollectionPersistData(items)); + } + } diff --git a/src/main/java/org/apache/sling/testing/mock/caconfig/package-info.java b/src/main/java/org/apache/sling/testing/mock/caconfig/package-info.java index de6d18e..99d628c 100644 --- a/src/main/java/org/apache/sling/testing/mock/caconfig/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/caconfig/package-info.java @@ -19,5 +19,5 @@ /** * Apache Sling Context-Aware Configuration Mock Plugin */ [email protected]("1.0.0") [email protected]("1.1.0") package org.apache.sling.testing.mock.caconfig; diff --git a/src/test/java/org/apache/sling/testing/mock/caconfig/CompatibilityUtil.java b/src/test/java/org/apache/sling/testing/mock/caconfig/CompatibilityUtil.java deleted file mode 100644 index 56a40bf..0000000 --- a/src/test/java/org/apache/sling/testing/mock/caconfig/CompatibilityUtil.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.sling.testing.mock.caconfig; - -import java.lang.reflect.Method; -import java.util.Map; - -import org.apache.sling.api.resource.Resource; -import org.apache.sling.caconfig.management.ConfigurationManager; -import org.apache.sling.testing.mock.sling.junit.SlingContext; - -/** - * Helper methods interacting with Context-Aware context supporting both version 1.1 and 2.0 of - * the Management API via reflection. - */ -public class CompatibilityUtil { - - /** - * Write configuration for impl 1.2 - */ - public static void writeConfig(SlingContext context, Resource contextResource, String configName, Map<String,Object> props) { - try { - Class<?> configurationPersistDataClass; - try { - configurationPersistDataClass = Class.forName("org.apache.sling.caconfig.spi.ConfigurationPersistData"); - } - catch (ClassNotFoundException e) { - // fallback to caconfig impl 1.1 - writeConfigImpl11(context, contextResource, configName, props); - return; - } - - Object persistData = configurationPersistDataClass.getConstructor(Map.class).newInstance(props); - ConfigurationManager configManager = context.getService(ConfigurationManager.class); - Method persistMethod = ConfigurationManager.class.getMethod("persistConfiguration", Resource.class, String.class, configurationPersistDataClass); - persistMethod.invoke(configManager, contextResource, configName, persistData); - } - catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - /** - * Fallback: Write configuration for impl 1.1 - */ - public static void writeConfigImpl11(SlingContext context, Resource contextResource, String configName, Map<String,Object> props) throws Exception { - ConfigurationManager configManager = context.getService(ConfigurationManager.class); - Method persistMethod = ConfigurationManager.class.getMethod("persist", Resource.class, String.class, Map.class); - persistMethod.invoke(configManager, contextResource, configName, props); - } - -} diff --git a/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java b/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java index bacb27d..1db5779 100644 --- a/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java +++ b/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java @@ -32,14 +32,14 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import com.google.common.collect.ImmutableMap; - public class ContextPluginsTest { - private static final String CONFIG_NAME = "testConfig"; + private static final String CONFIG_NAME = SimpleConfig.class.getName(); @Rule - public SlingContext context = new SlingContextBuilder().plugin(CACONFIG).build(); + public SlingContext context = new SlingContextBuilder() + .plugin(CACONFIG) + .build(); private Resource contextResource; @@ -52,10 +52,10 @@ public class ContextPluginsTest { MockContextAwareConfig.registerAnnotationClasses(context, SimpleConfig.class); // write config - CompatibilityUtil.writeConfig(context, contextResource, CONFIG_NAME, ImmutableMap.<String, Object>of( + MockContextAwareConfig.writeConfiguration(context, contextResource.getPath(), CONFIG_NAME, "stringParam", "value1", "intParam", 123, - "boolParam", true)); + "boolParam", true); } @Test diff --git a/src/test/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfigTest.java b/src/test/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfigTest.java new file mode 100644 index 0000000..916b025 --- /dev/null +++ b/src/test/java/org/apache/sling/testing/mock/caconfig/MockContextAwareConfigTest.java @@ -0,0 +1,90 @@ +/* + * 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.sling.testing.mock.caconfig; + +import static org.apache.sling.testing.mock.caconfig.ContextPlugins.CACONFIG; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.caconfig.ConfigurationBuilder; +import org.apache.sling.testing.mock.caconfig.example.ListConfig; +import org.apache.sling.testing.mock.caconfig.example.SimpleConfig; +import org.apache.sling.testing.mock.sling.junit.SlingContext; +import org.apache.sling.testing.mock.sling.junit.SlingContextBuilder; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; + +public class MockContextAwareConfigTest { + + @Rule + public SlingContext context = new SlingContextBuilder() + .plugin(CACONFIG) + .build(); + + @Before + public void setUp() { + MockContextAwareConfig.registerAnnotationClasses(context, SimpleConfig.class, ListConfig.class); + + context.create().resource("/content/region/site", "sling:configRef", "/conf/region/site"); + + context.currentResource(context.create().resource("/content/region/site/en")); + + MockContextAwareConfig.writeConfiguration(context, "/content/region/site", SimpleConfig.class.getName(), + "stringParam", "value1"); + + MockContextAwareConfig.writeConfigurationCollection(context, "/content/region/site", ListConfig.class.getName(), + ImmutableList.of((Map<String, Object>) ImmutableMap.<String, Object> of("stringParam", "value1"), + (Map<String, Object>) ImmutableMap.<String, Object> of("stringParam", "value2"))); + } + + @Test + public void testSingletonConfig() { + Resource resource = context.request().getResource(); + SimpleConfig config = resource.adaptTo(ConfigurationBuilder.class).as(SimpleConfig.class); + assertNotNull(config); + assertEquals("value1", config.stringParam()); + assertEquals(5, config.intParam()); + } + + @Test + public void testConfigCollection() { + Resource resource = context.request().getResource(); + Collection<ListConfig> config = resource.adaptTo(ConfigurationBuilder.class).asCollection(ListConfig.class); + assertEquals(2, config.size()); + Iterator<ListConfig> items = config.iterator(); + + ListConfig item1 = items.next(); + assertEquals("value1", item1.stringParam()); + assertEquals(5, item1.intParam()); + + ListConfig item2 = items.next(); + assertEquals("value2", item2.stringParam()); + assertEquals(5, item2.intParam()); + } + +} diff --git a/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java b/src/test/java/org/apache/sling/testing/mock/caconfig/example/ListConfig.java similarity index 93% copy from src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java copy to src/test/java/org/apache/sling/testing/mock/caconfig/example/ListConfig.java index 821bd9e..85806a8 100644 --- a/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java +++ b/src/test/java/org/apache/sling/testing/mock/caconfig/example/ListConfig.java @@ -20,8 +20,8 @@ package org.apache.sling.testing.mock.caconfig.example; import org.apache.sling.caconfig.annotation.Configuration; -@Configuration(name = "testConfig") -public @interface SimpleConfig { +@Configuration(collection = true) +public @interface ListConfig { String stringParam(); diff --git a/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java b/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java index 821bd9e..b314fb3 100644 --- a/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java +++ b/src/test/java/org/apache/sling/testing/mock/caconfig/example/SimpleConfig.java @@ -20,7 +20,7 @@ package org.apache.sling.testing.mock.caconfig.example; import org.apache.sling.caconfig.annotation.Configuration; -@Configuration(name = "testConfig") +@Configuration public @interface SimpleConfig { String stringParam(); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
