You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2021/04/02 15:58:19 UTC
[sling-whiteboard] branch master updated: Added DD Resource
Provider Tests
This is an automated email from the ASF dual-hosted git repository.
andysch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new f732b89 Added DD Resource Provider Tests
f732b89 is described below
commit f732b89987c6e309dd82a4343a6ee60053f62d9b
Author: Andreas Schaefer <sc...@me.com>
AuthorDate: Fri Apr 2 08:58:02 2021 -0700
Added DD Resource Provider Tests
---
.../DeclarativeDynamicResourceProviderHandler.java | 4 +-
...larativeDynamicResourceProviderHandlerTest.java | 158 +++++++++++++++++++++
2 files changed, 160 insertions(+), 2 deletions(-)
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
index 7b5c061..fc3b899 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
@@ -81,8 +81,8 @@ public class DeclarativeDynamicResourceProviderHandler
this.targetRootPath = targetRootPath;
this.providerRootPath = providerRootPath;
this.resourceResolverFactory = resourceResolverFactory;
- this.allowedDDRFilter = allowedDDRFilter;
- this.prohibitedDDRFilter = prohibitedDDRFilter;
+ this.allowedDDRFilter = allowedDDRFilter == null ? new HashMap<String, List<String>>(): allowedDDRFilter;
+ this.prohibitedDDRFilter = prohibitedDDRFilter == null ? new HashMap<String, List<String>>(): prohibitedDDRFilter;
log.info("Target Root Path: '{}', Provider Root Paths: '{}'", targetRootPath, providerRootPath);
final Dictionary<String, Object> props = new Hashtable<>();
diff --git a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
index 0c9a8ad..3d3a209 100644
--- a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
+++ b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
@@ -16,5 +16,163 @@
*/
package org.apache.sling.ddr.core;
+import com.google.common.collect.ImmutableList;
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.spi.resource.provider.ResolveContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
+import org.apache.sling.testing.mock.sling.NodeTypeDefinitionScanner;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.Silent.class)
public class DeclarativeDynamicResourceProviderHandlerTest {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Rule
+ public SlingContext context = new SlingContext(ResourceResolverType.JCR_OAK);
+
+ @Mock
+ private ResolveContext resolveContext;
+ @Mock
+ private ResourceContext resourceContext;
+
+ @Mock
+ private ResourceResolverFactory resourceResolverFactory;
+ private ResourceResolver resourceResolver;
+
+ private DeclarativeDynamicResourceProviderHandler declarativeDynamicResourceProviderHandler =
+ new DeclarativeDynamicResourceProviderHandler();
+
+ @Before
+ public void setup() throws LoginException, RepositoryException {
+ resourceResolver = spy(context.resourceResolver());
+ log.info("Adapt Context-RR: '{}' to Session: '{}'", resourceResolver, resourceResolver.adaptTo(Session.class));
+ when(resourceResolverFactory.getServiceResourceResolver(any(Map.class)))
+ .thenReturn(resourceResolver);
+ when(resolveContext.getResourceResolver()).thenReturn(resourceResolver);
+
+ try {
+ NodeTypeDefinitionScanner.get().register(context.resourceResolver().adaptTo(Session.class),
+ ImmutableList.of("SLING-CONTENT/nodetypes/ddr.cnd"),
+ ResourceResolverType.JCR_OAK.getNodeTypeMode());
+ }
+ catch (RepositoryException ex) {
+ throw new RuntimeException("Unable to register namespaces.", ex);
+ }
+
+ log.info("Before Loading Test Resources");
+ context.load().json("/ddr-filter/ddr-conf-settings.json", "/conf");
+ context.load().json("/ddr-filter/ddr-apps-settings.json", "/apps");
+ log.info("After Loading Test Resources");
+ }
+
+ @Test
+ public void testGetResource() throws Exception {
+ String resourceName1 = "test1";
+ String resourceName2 = "test2";
+ String resourceName3 = "test3";
+ String confResourceRoot = "/conf/testFilter/settings/dynamic";
+ String dynamicResourceRoot = "/apps/dynamicFilter";
+ final String testPropertyKey = "jcr:title";
+ final String testPropertyValue = "Test-1";
+
+ Resource dynamicParent = resourceResolver.getResource(dynamicResourceRoot);
+ declarativeDynamicResourceProviderHandler.registerService(
+ context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
+ resourceResolverFactory, null,
+ new HashMap<String, List<String>>() {{
+ put("sling:resourceType", Arrays.asList("nt:file"));
+ }}
+ );
+
+ Resource test1 = declarativeDynamicResourceProviderHandler.getResource(
+ resolveContext, dynamicResourceRoot + "/" + resourceName1, resourceContext, dynamicParent
+ );
+ // The Query for Node Type sling:DDR will not return even though a Resource is there
+ assertNotNull("Test1 DDR not found", test1);
+ assertEquals("Wrong DDR Dynamic Path", dynamicResourceRoot + "/" + resourceName1, test1.getPath());
+ ValueMap properties = test1.getValueMap();
+ String title = properties.get(testPropertyKey, String.class);
+ assertNotNull("Title Property not found", title);
+ assertEquals("Title Property wrong", testPropertyValue, title);
+ Resource test2 = declarativeDynamicResourceProviderHandler.getResource(
+ resolveContext, dynamicResourceRoot + "/" + resourceName2, resourceContext, dynamicParent
+ );
+ assertNull("Test2 should not be returned", test2);
+ Resource test3 = declarativeDynamicResourceProviderHandler.getResource(
+ resolveContext, dynamicResourceRoot + "/" + resourceName3, resourceContext, dynamicParent
+ );
+ assertNotNull("Test1 DDR not found", test3);
+ assertEquals("Wrong DDR Dynamic Path", dynamicResourceRoot + "/" + resourceName3, test3.getPath());
+ }
+
+ @Test
+ public void testListChildren() throws Exception {
+ String resourceName = "test1";
+ String confResourceRoot = "/conf/testFilter/settings/dynamic";
+ String dynamicResourceRoot = "/apps/dynamicFilter";
+ final String testPropertyKey = "jcr:title";
+ final String testPropertyValue = "Test-1";
+
+ Resource dynamicParent = resourceResolver.getResource(dynamicResourceRoot);
+
+ declarativeDynamicResourceProviderHandler.registerService(
+ context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
+ resourceResolverFactory, null,
+ new HashMap<String, List<String>>() {{
+ put("sling:resourceType", Arrays.asList("nt:file", "nt:resource"));
+ }}
+ );
+
+ // List all the children and make sure that only one is returned
+ Iterator<Resource> i = declarativeDynamicResourceProviderHandler.listChildren(
+ resolveContext, dynamicParent
+ );
+ List<Resource> children = new ArrayList<>();
+ while(i.hasNext()) {
+ children.add(i.next());
+ }
+
+ // The Query for Node Type sling:DDR will not return even though a Resource is there
+ assertFalse("No DDR Registered", children.isEmpty());
+ assertEquals("Only one DDR should be Registered", 1, children.size());
+ Resource child = children.get(0);
+ assertEquals("Wrong DDR Dynamic Path", dynamicResourceRoot + "/" + resourceName, child.getPath());
+ ValueMap properties = child.getValueMap();
+ String title = properties.get(testPropertyKey, String.class);
+ assertNotNull("Title Property not found", title);
+ assertEquals("Title Property wrong", testPropertyValue, title);
+ }
}