You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2022/06/14 14:00:56 UTC

[sling-org-apache-sling-resourceresolver] branch feature/resource-provider-mode updated: Add additional test

This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch feature/resource-provider-mode
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git


The following commit(s) were added to refs/heads/feature/resource-provider-mode by this push:
     new 45203a1  Add additional test
45203a1 is described below

commit 45203a1a1885558fd2c06c6ca7a84c2cb8f724bd
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Jun 14 16:00:51 2022 +0200

    Add additional test
---
 .../impl/helper/ResourceResolverControl.java       |  2 +-
 .../sling/resourceresolver/impl/Fixture.java       | 13 +++++--
 .../impl/helper/ResourceResolverControlTest.java   | 43 +++++++++++++++++++++-
 3 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java b/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
index aeede94..0c0eb62 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
@@ -800,7 +800,7 @@ public class ResourceResolverControl {
      * @param path The path
      * @return The modifiable provider or {@code null}
      */
-    private @Nullable AuthenticatedResourceProvider getBestMatchingModifiableProvider(
+    @Nullable AuthenticatedResourceProvider getBestMatchingModifiableProvider(
             final ResourceResolverContext context,
             final String path)  {
         String resourcePath = path;
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/Fixture.java b/src/test/java/org/apache/sling/resourceresolver/impl/Fixture.java
index a4a1eda..a7bada6 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/Fixture.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/Fixture.java
@@ -51,14 +51,21 @@ public class Fixture {
 
     public ResourceProviderInfo registerResourceProvider(ResourceProvider<?> rp, String root, 
             AuthType authType, int serviceRanking) throws InvalidSyntaxException {
-        
-        Dictionary<String, Object> props = new Hashtable<>();
+        return registerResourceProvider(rp, root, authType, serviceRanking, true, null);
+    }
+
+    public ResourceProviderInfo registerResourceProvider(ResourceProvider<?> rp, String root, 
+    AuthType authType, int serviceRanking, boolean modifiable, ResourceProviderInfo.Mode mode) throws InvalidSyntaxException {
+            Dictionary<String, Object> props = new Hashtable<>();
         props.put(ResourceProvider.PROPERTY_ROOT, root);
         props.put(ResourceProvider.PROPERTY_AUTHENTICATE, authType.name());
-        props.put(ResourceProvider.PROPERTY_MODIFIABLE, Boolean.TRUE.toString());
+        props.put(ResourceProvider.PROPERTY_MODIFIABLE, modifiable);
         if (serviceRanking != 0) {
             props.put(Constants.SERVICE_RANKING, serviceRanking);
         }
+        if ( mode != null ) {
+            props.put(ResourceProviderInfo.PROP_MODE, mode.name());
+        }
         
         ServiceRegistration registration = bc.registerService(ResourceProvider.class.getName(), rp, props);
         
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
index 0c2690a..6026738 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
@@ -61,6 +61,7 @@ import org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderInfo;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker;
 import org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider;
 import org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager;
 import org.apache.sling.resourceresolver.impl.providers.tree.PathTree;
@@ -491,11 +492,11 @@ public class ResourceResolverControlTest {
         int count = 0;
 
         while ( resources.hasNext() ) {
-            assertThat("resources[0].path", resources.next().getPath(), equalTo("/some/path/object"));
+            assertEquals("resources[0].path", "/some/path/object", resources.next().getPath());
             count++;
         }
 
-        assertThat("query result count", count, Matchers.equalTo(1));
+        assertEquals("query result count", 1, count);
     }
 
     @Test
@@ -664,4 +665,42 @@ public class ResourceResolverControlTest {
             throw new UnsupportedOperationException();
         }
     }
+
+    @Test public void testGetBestMatchingModifiableResourceProviderPassthrough() throws Exception {
+        BundleContext bc = MockOsgi.newBundleContext();
+
+        Fixture fixture = new Fixture(bc);
+
+        // root provider
+        final ResourceProvider<?> rootProvider = Mockito.mock(ResourceProvider.class);
+        ResourceProviderInfo info = fixture.registerResourceProvider(rootProvider, "/", AuthType.required);
+        ResourceProviderHandler handler = new ResourceProviderHandler(bc, info);
+        // sub provider
+        ResourceProvider<?> subProvider = Mockito.mock(ResourceProvider.class);
+        ResourceProviderInfo subInfo = fixture.registerResourceProvider(subProvider, "/libs", AuthType.required, 0, false, ResourceProviderInfo.Mode.PASSTHROUGH);
+        ResourceProviderHandler subHandler = new ResourceProviderHandler(bc, subInfo);
+
+        handler.activate();
+        subHandler.activate();
+
+        ResourceResolver rr = mock(ResourceResolver.class);
+        ResourceAccessSecurityTracker securityTracker = Mockito.mock(ResourceAccessSecurityTracker.class);
+        authInfo = getAuthInfo();
+
+        handlers = Arrays.asList(handler, subHandler);
+        final ResourceProviderStorage storage = new ResourceProviderStorage(handlers);
+
+        final ResourceResolverControl control = new ResourceResolverControl(false, getAuthInfo(), new ResourceProviderStorageProvider() {
+
+            @Override
+            public ResourceProviderStorage getResourceProviderStorage() {
+                return storage;
+            }
+        });
+        final ResourceResolverContext rrContext = new ResourceResolverContext(rr, securityTracker);
+
+        final AuthenticatedResourceProvider p = control.getBestMatchingModifiableProvider(rrContext, "/libs/foo");
+        p.create(rr, "/foo", null);
+        Mockito.verify(rootProvider).create(Mockito.any(), Mockito.eq("/foo"), Mockito.isNull(Map.class));
+    }
 }