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