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]>.

Reply via email to