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);
+    }
 }