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