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 <[email protected]>
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));
+    }
 }

Reply via email to