You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by en...@apache.org on 2021/06/24 20:54:39 UTC
[sling-org-apache-sling-servlets-resolver] branch master updated:
SLING-10507 Refactor tests to replace usage of deprecated apis (#17)
This is an automated email from the ASF dual-hosted git repository.
enorman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new fc4a51d SLING-10507 Refactor tests to replace usage of deprecated apis (#17)
fc4a51d is described below
commit fc4a51d36284e8ae9fee455554bd991fae5f6e07
Author: Eric Norman <er...@gmail.com>
AuthorDate: Thu Jun 24 13:54:31 2021 -0700
SLING-10507 Refactor tests to replace usage of deprecated apis (#17)
use the Mock Resource Resolver Implementation from org.apache.sling.testing.resourceresolver-mock instead.
---
pom.xml | 6 +
.../internal/SecureRequestsOptingServletTest.java | 44 ++--
.../internal/SlingServletResolverTestBase.java | 93 +++-----
.../resolver/internal/helper/HelperTestBase.java | 74 +++++-
.../internal/helper/LocationIteratorTest.java | 256 +++++++++++++--------
.../internal/helper/ResourceCollectorTest.java | 63 ++---
.../internal/helper/ScriptSelectionTest.java | 4 +-
.../internal/resource/MockServletResource.java | 21 ++
8 files changed, 321 insertions(+), 240 deletions(-)
diff --git a/pom.xml b/pom.xml
index a5c9899..420959a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -339,6 +339,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.testing.resourceresolver-mock</artifactId>
+ <version>1.2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/SecureRequestsOptingServletTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/SecureRequestsOptingServletTest.java
index 31bc1e6..a5ba52a 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/SecureRequestsOptingServletTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/SecureRequestsOptingServletTest.java
@@ -20,25 +20,25 @@ package org.apache.sling.servlets.resolver.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.fail;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
import javax.servlet.Servlet;
import javax.servlet.http.HttpServlet;
import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.servlets.OptingServlet;
-import org.apache.sling.api.servlets.ServletResolverConstants;
-import org.apache.sling.commons.testing.osgi.MockServiceReference;
-import org.apache.sling.commons.testing.sling.MockResource;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
+import org.apache.sling.servlets.resolver.internal.helper.HelperTestBase;
import org.apache.sling.servlets.resolver.internal.resource.MockServletResource;
+import org.apache.sling.servlets.resolver.internal.resource.ServletResource;
import org.junit.Test;
import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
public class SecureRequestsOptingServletTest extends SlingServletResolverTestBase {
@@ -50,28 +50,24 @@ public class SecureRequestsOptingServletTest extends SlingServletResolverTestBas
protected void defineTestServlets(Bundle bundle) {
testServlet = new SecureRequestsOptingServlet();
- MockServiceReference ref = new MockServiceReference(bundle);
- ref.setProperty(Constants.SERVICE_ID, 1L);
- ref.setProperty(ServletResolverConstants.SLING_SERVLET_NAME, SERVLET_NAME);
- ref.setProperty(ServletResolverConstants.SLING_SERVLET_PATHS, SERVLET_PATH);
- ref.setProperty(ServletResolverConstants.SLING_SERVLET_EXTENSIONS, SERVLET_EXTENSION);
-
String path = "/"
+ MockSlingHttpServletRequest.RESOURCE_TYPE
+ "/"
+ ResourceUtil.getName(MockSlingHttpServletRequest.RESOURCE_TYPE)
+ ".servlet";
- MockServletResource res = new MockServletResource(mockResourceResolver,
- testServlet, path);
- mockResourceResolver.addResource(res);
-
- MockResource parent = new MockResource(mockResourceResolver,
- ResourceUtil.getParent(res.getPath()), "nt:folder");
- mockResourceResolver.addResource(parent);
-
- List<Resource> childRes = new ArrayList<>();
- childRes.add(res);
- mockResourceResolver.addChildren(parent, childRes);
+ Map<String, Object> props = new HashMap<>();
+ props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, path);
+ props.put("sling:resourceSuperType", ServletResource.DEFAULT_RESOURCE_SUPER_TYPE);
+ props.put(MockServletResource.PROP_SERVLET, testServlet);
+ HelperTestBase.addOrReplaceResource(mockResourceResolver, path, props);
+ try {
+ // commit so the resource is visible to the script resource resolver
+ // that is created later and can't see the temporary resources in
+ // this resource resolver
+ mockResourceResolver.commit();
+ } catch (PersistenceException e) {
+ fail("Did not expect a persistence exception: " + e.getMessage());
+ }
}
@Test public void testAcceptsSecureRequest() {
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTestBase.java b/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTestBase.java
index 5ec3674..0bc1788 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTestBase.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTestBase.java
@@ -19,15 +19,18 @@
package org.apache.sling.servlets.resolver.internal;
import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.List;
import java.util.Map;
-import org.apache.sling.api.resource.LoginException;
+import javax.servlet.Servlet;
+
+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.commons.testing.sling.MockResourceResolver;
+import org.apache.sling.api.wrappers.ResourceResolverWrapper;
import org.apache.sling.servlets.resolver.internal.resolution.ResolutionCache;
+import org.apache.sling.servlets.resolver.internal.resource.MockServletResource;
+import org.apache.sling.testing.resourceresolver.DefaultMockResourceFactory;
+import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory;
+import org.apache.sling.testing.resourceresolver.MockResourceResolverFactoryOptions;
import org.junit.Before;
import org.mockito.Mockito;
import org.osgi.framework.Bundle;
@@ -35,9 +38,26 @@ import org.osgi.framework.BundleContext;
public abstract class SlingServletResolverTestBase {
+ /**
+ * Custom factory that will create a MockServletResource for
+ * any resource whose path ends with .servlet and fallback
+ * to the default factory otherwise.
+ */
+ private static final class ServletMockResourceFactory extends DefaultMockResourceFactory {
+ @Override
+ public Resource newMockResource(String path, Map<String, Object> properties,
+ ResourceResolver resolver) {
+ if (path.endsWith(".servlet")) {
+ Servlet servlet = (Servlet)properties.get(MockServletResource.PROP_SERVLET);
+ return new MockServletResource(resolver, servlet, path);
+ }
+ return super.newMockResource(path, properties, resolver);
+ }
+ }
+
protected SlingServletResolver servletResolver;
- protected MockResourceResolver mockResourceResolver;
+ protected ResourceResolver mockResourceResolver;
@Before public void setUp() throws Exception {
final ResolverConfig config = Mockito.mock(ResolverConfig.class);
@@ -46,63 +66,12 @@ public abstract class SlingServletResolverTestBase {
Mockito.when(config.servletresolver_defaultExtensions()).thenReturn(new String[] {"html"});
Mockito.when(config.servletresolver_cacheSize()).thenReturn(200);
- mockResourceResolver = new MockResourceResolver() {
- @Override
- public void close() {
- // nothing to do;
- }
-
- @Override
- public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
- return null;
- }
-
- @Override
- public ResourceResolver clone(Map<String, Object> authenticationInfo)
- throws LoginException {
- throw new LoginException("MockResourceResolver can't be cloned - excepted for this test!");
- }
-
- @Override
- public void refresh() {
- // nothing to do
- }
- };
- mockResourceResolver.setSearchPath("/");
+ MockResourceResolverFactoryOptions options = new MockResourceResolverFactoryOptions()
+ .setSearchPaths(new String[] {"/"})
+ .setMockResourceFactory(new ServletMockResourceFactory());
- final ResourceResolverFactory factory = new ResourceResolverFactory() {
-
- @Override
- public ResourceResolver getAdministrativeResourceResolver(
- Map<String, Object> authenticationInfo)
- throws LoginException {
- return mockResourceResolver;
- }
-
- @Override
- public ResourceResolver getResourceResolver(
- Map<String, Object> authenticationInfo)
- throws LoginException {
- return mockResourceResolver;
- }
-
- @Override
- public ResourceResolver getServiceResourceResolver(Map<String, Object> authenticationInfo)
- throws LoginException {
- return mockResourceResolver;
- }
-
- @Override
- public ResourceResolver getThreadResourceResolver() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public List<String> getSearchPath() {
- return Collections.singletonList("/");
- }
- };
+ MockResourceResolverFactory factory = new MockResourceResolverFactory(options);
+ mockResourceResolver = new ResourceResolverWrapper(factory.getResourceResolver(null));
servletResolver = new SlingServletResolver();
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/HelperTestBase.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/HelperTestBase.java
index 9ae1018..b626c25 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/HelperTestBase.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/HelperTestBase.java
@@ -18,20 +18,28 @@
*/
package org.apache.sling.servlets.resolver.internal.helper;
-import junit.framework.TestCase;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.commons.testing.sling.MockResource;
-import org.apache.sling.commons.testing.sling.MockResourceResolver;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
+import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory;
+import org.apache.sling.testing.resourceresolver.MockResourceResolverFactoryOptions;
+import org.jetbrains.annotations.Nullable;
+
+import junit.framework.TestCase;
public abstract class HelperTestBase extends TestCase {
- protected MockResourceResolver resourceResolver;
+ protected MockResourceResolverFactoryOptions resourceResolverOptions;
+ protected ResourceResolver resourceResolver;
protected MockSlingHttpServletRequest request;
- protected MockResource resource;
+ protected Resource resource;
protected String resourcePath;
@@ -47,20 +55,66 @@ public abstract class HelperTestBase extends TestCase {
protected void setUp() throws Exception {
super.setUp();
- resourceResolver = new MockResourceResolver();
- resourceResolver.setSearchPath("/apps", "/libs");
+ resourceResolverOptions = new MockResourceResolverFactoryOptions();
+ MockResourceResolverFactory factory = new MockResourceResolverFactory(resourceResolverOptions);
+ resourceResolver = factory.getResourceResolver(null);
resourceType = "foo:bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
resourcePath = "/content/page";
- resource = new MockResource(resourceResolver, resourcePath,
- resourceType);
- resourceResolver.addResource(resource);
+ Resource parent = getOrCreateParentResource(resourceResolver, resourcePath);
+ resource = resourceResolver.create(parent, "page",
+ Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType));
request = makeRequest("GET", "print.a4", "html");
}
+ public static Resource addOrReplaceResource(ResourceResolver resolver, String path, String resourceType) {
+ return addOrReplaceResource(resolver, path,
+ Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType));
+ }
+
+ public static Resource addOrReplaceResource(ResourceResolver resolver, String path, Map<String, Object> props) {
+ Resource res = null;
+ try {
+ // if the resource already exists, then remove it
+ @Nullable
+ Resource r = resolver.getResource(path);
+ if (r != null) {
+ resolver.delete(r);
+ }
+
+ // create the new resource
+ Resource parent = getOrCreateParentResource(resolver, path);
+ res = resolver.create(parent, ResourceUtil.getName(path),
+ props);
+ } catch (PersistenceException e) {
+ fail("Did not expect a persistence exception: " + e.getMessage());
+ }
+ return res;
+ };
+
+ public static Resource getOrCreateParentResource(ResourceResolver resolver, String path) throws PersistenceException {
+ Resource parent = null;
+ Resource tmp = resolver.getResource("/");
+ String[] segments = path.split("/");
+ for (int i = 1; i < segments.length - 1; i++) {
+ String name = segments[i];
+ @Nullable
+ Resource child = tmp.getChild(name);
+ if (child == null) {
+ tmp = resolver.create(tmp, name,
+ Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, "nt:folder"));
+ } else {
+ tmp = child;
+ }
+ }
+ parent= tmp;
+
+ return parent;
+ }
+
protected MockSlingHttpServletRequest makeRequest(String method, String selectors, String extension) {
final MockSlingHttpServletRequest result =
new MockSlingHttpServletRequest(resourcePath, selectors, extension, null, null);
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java
index 450faa7..1a43385 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java
@@ -20,9 +20,13 @@ package org.apache.sling.servlets.resolver.internal.helper;
import static org.apache.sling.api.servlets.ServletResolverConstants.DEFAULT_RESOURCE_TYPE;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.commons.testing.sling.MockResource;
public class LocationIteratorTest extends HelperTestBase {
@@ -43,7 +47,7 @@ public class LocationIteratorTest extends HelperTestBase {
public void testSearchPathEmpty() {
// expect path gets { "/" }
- resourceResolver.setSearchPath((String[]) null);
+ resourceResolverOptions.setSearchPaths(null);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -62,8 +66,10 @@ public class LocationIteratorTest extends HelperTestBase {
}
public void testSearchPath1Element() {
- String root0 = "/apps";
- resourceResolver.setSearchPath(root0);
+ String root0 = "/apps/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0
+ });
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -71,20 +77,23 @@ public class LocationIteratorTest extends HelperTestBase {
// 1. /apps/foo/bar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceTypePath, li.next());
+ assertEquals(root0 + resourceTypePath, li.next());
// 2. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 3. finished
assertFalse(li.hasNext());
}
public void testSearchPath2Elements() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -92,32 +101,53 @@ public class LocationIteratorTest extends HelperTestBase {
// 1. /apps/foo/bar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceTypePath, li.next());
+ assertEquals(root0 + resourceTypePath, li.next());
// 2. /libs/foo/bar
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceTypePath, li.next());
+ assertEquals(root1 + resourceTypePath, li.next());
// 3. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 4. /libs/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
// 5. finished
assertFalse(li.hasNext());
}
+ /**
+ * Replace a resource with a different type
+ *
+ * @param res the resource to replace
+ * @param newResourceType the new resource type, or null to not change it
+ * @param newResourceSuperType the new resource super type, or null to not change it
+ * @return the new resource
+ */
+ protected void replaceResource(String newResourceType, String newResourceSuperType) {
+ @SuppressWarnings("unchecked")
+ Map<String, Object> props = new HashMap<>(resource.adaptTo(Map.class));
+ if (newResourceType != null) {
+ props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, newResourceType);
+ }
+ if (newResourceSuperType != null) {
+ props.put("sling:resourceSuperType", newResourceSuperType);
+ }
+ Resource r = addOrReplaceResource(resourceResolver, resource.getPath(), props);
+ request.setResource(r);
+ }
+
public void testSearchPathEmptyAbsoluteType() {
// expect path gets { "/" }
- resourceResolver.setSearchPath((String[]) null);
+ resourceResolverOptions.setSearchPaths(null);
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
+ replaceResource(resourceType, null);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -136,13 +166,15 @@ public class LocationIteratorTest extends HelperTestBase {
}
public void testSearchPath1ElementAbsoluteType() {
- String root0 = "/apps";
- resourceResolver.setSearchPath(root0);
+ String root0 = "/apps/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0
+ });
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
+ replaceResource(resourceType, null);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -154,21 +186,24 @@ public class LocationIteratorTest extends HelperTestBase {
// 2. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 3. finished
assertFalse(li.hasNext());
}
public void testSearchPath2ElementsAbsoluteType() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
+ replaceResource(resourceType, null);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -180,11 +215,11 @@ public class LocationIteratorTest extends HelperTestBase {
// 2. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 3. /libs/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
// 4. finished
assertFalse(li.hasNext());
@@ -192,12 +227,12 @@ public class LocationIteratorTest extends HelperTestBase {
public void testSearchPathEmptyWithSuper() {
// expect path gets { "/" }
- resourceResolver.setSearchPath((String[]) null);
+ resourceResolverOptions.setSearchPaths(null);
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(null, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -220,13 +255,15 @@ public class LocationIteratorTest extends HelperTestBase {
}
public void testSearchPath1ElementWithSuper() {
- String root0 = "/apps";
- resourceResolver.setSearchPath(root0);
+ String root0 = "/apps/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0
+ });
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(null, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -234,29 +271,32 @@ public class LocationIteratorTest extends HelperTestBase {
// 1. /apps/foo/bar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceTypePath, li.next());
+ assertEquals(root0 + resourceTypePath, li.next());
// 2. /apps/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root0 + resourceSuperTypePath, li.next());
// 3. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 4. finished
assertFalse(li.hasNext());
}
public void testSearchPath2ElementsWithSuper() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(null, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -264,27 +304,27 @@ public class LocationIteratorTest extends HelperTestBase {
// 1. /apps/foo/bar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceTypePath, li.next());
+ assertEquals(root0 + resourceTypePath, li.next());
// 2. /libs/foo/bar
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceTypePath, li.next());
+ assertEquals(root1 + resourceTypePath, li.next());
// 3. /apps/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root0 + resourceSuperTypePath, li.next());
// 4. /libs/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root1 + resourceSuperTypePath, li.next());
// 5. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 6. /libs/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
// 7. finished
assertFalse(li.hasNext());
@@ -292,17 +332,16 @@ public class LocationIteratorTest extends HelperTestBase {
public void testSearchPathEmptyAbsoluteTypeWithSuper() {
// expect path gets { "/" }
- resourceResolver.setSearchPath((String[]) null);
+ resourceResolverOptions.setSearchPaths(null);
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(resourceType, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -325,18 +364,19 @@ public class LocationIteratorTest extends HelperTestBase {
}
public void testSearchPath1ElementAbsoluteTypeWithSuper() {
- String root0 = "/apps";
- resourceResolver.setSearchPath(root0);
+ String root0 = "/apps/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0
+ });
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(resourceType, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -348,30 +388,32 @@ public class LocationIteratorTest extends HelperTestBase {
// 2. /apps/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root0 + resourceSuperTypePath, li.next());
// 3. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 4. finished
assertFalse(li.hasNext());
}
public void testSearchPath2ElementsAbsoluteTypeWithSuper() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- resource.setResourceType(resourceType);
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- resource.setResourceSuperType(resourceSuperType);
+ replaceResource(resourceType, resourceSuperType);
final Resource r = request.getResource();
LocationIterator li = getLocationIterator(r.getResourceType(),
@@ -383,28 +425,31 @@ public class LocationIteratorTest extends HelperTestBase {
// 2. /apps/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root0 + resourceSuperTypePath, li.next());
// 3. /libs/foo/superBar
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceSuperTypePath, li.next());
+ assertEquals(root1 + resourceSuperTypePath, li.next());
// 4. /apps/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
// 5. /libs/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
// 6. finished
assertFalse(li.hasNext());
}
public void testScriptNameWithoutResourceType() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
LocationIterator li = getLocationIterator("",
null,
"");
@@ -416,79 +461,102 @@ public class LocationIteratorTest extends HelperTestBase {
}
public void testScriptNameWithResourceType() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
LocationIterator li = getLocationIterator("a/b",
null);
assertTrue(li.hasNext());
- assertEquals(root0 + "/a/b", li.next());
+ assertEquals(root0 + "a/b", li.next());
assertTrue(li.hasNext());
- assertEquals(root1 + "/a/b", li.next());
+ assertEquals(root1 + "a/b", li.next());
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
assertFalse(li.hasNext());
}
public void testScriptNameWithResourceTypeAndSuperType() {
- String root0 = "/apps";
- String root1 = "/libs";
- resourceResolver.setSearchPath(root0, root1);
+ String root0 = "/apps/";
+ String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root0,
+ root1
+ });
LocationIterator li = getLocationIterator("a/b",
"c/d");
assertTrue(li.hasNext());
- assertEquals(root0 + "/a/b", li.next());
+ assertEquals(root0 + "a/b", li.next());
assertTrue(li.hasNext());
- assertEquals(root1 + "/a/b", li.next());
+ assertEquals(root1 + "a/b", li.next());
assertTrue(li.hasNext());
- assertEquals(root0 + "/c/d", li.next());
+ assertEquals(root0 + "c/d", li.next());
assertTrue(li.hasNext());
- assertEquals(root1 + "/c/d", li.next());
+ assertEquals(root1 + "c/d", li.next());
assertTrue(li.hasNext());
- assertEquals(root0 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
assertFalse(li.hasNext());
}
public void testCircularResourceTypeHierarchy() {
- final String root1 = "/libs";
- resourceResolver.setSearchPath(root1);
+ final String root1 = "/libs/";
+ resourceResolverOptions.setSearchPaths(new String[] {
+ root1
+ });
// resource type and super type for start resource
final String resourceType = "foo/bar";
final String resourceSuperType = "foo/check1";
final String resourceSuperType2 = "foo/check2";
- final Resource resource2 = new MockResource(resourceResolver,
- root1 + '/' + resourceSuperType,
- resourceType, resourceSuperType2);
- resourceResolver.addResource(resource2);
- final Resource resource3 = new MockResource(resourceResolver,
- root1 + '/' + resourceSuperType2,
- resourceType, resourceType);
- resourceResolver.addResource(resource3);
+ String resource2Path = root1 + resourceSuperType;
+ Map<String, Object> resource2Props = new HashMap<>();
+ resource2Props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
+ resource2Props.put("sling:resourceSuperType", resourceSuperType2);
+ try {
+ resourceResolver.create(getOrCreateParentResource(resourceResolver, resource2Path),
+ ResourceUtil.getName(resource2Path),
+ resource2Props);
+ } catch (PersistenceException e) {
+ fail("Did not expect a persistence exception: " + e.getMessage());
+ }
+
+ String resource3Path = root1 + resourceSuperType2;
+ Map<String, Object> resource3Props = new HashMap<>();
+ resource3Props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
+ resource3Props.put("sling:resourceSuperType", resourceType);
+ try {
+ resourceResolver.create(getOrCreateParentResource(resourceResolver, resource3Path),
+ ResourceUtil.getName(resource3Path),
+ resource3Props);
+ } catch (PersistenceException e) {
+ fail("Did not expect a persistence exception: " + e.getMessage());
+ }
LocationIterator li = getLocationIterator(resourceType,
resourceSuperType);
// 1. /libs/foo/bar
assertTrue(li.hasNext());
- assertEquals(root1 + '/' + resourceType, li.next());
+ assertEquals(root1 + resourceType, li.next());
// 1. /libs/foo/check1
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceSuperType, li.next());
+ assertEquals(root1 + resourceSuperType, li.next());
// 3. /libs/foo/check2
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + resourceSuperType2, li.next());
+ assertEquals(root1 + resourceSuperType2, li.next());
// 4. /libs/sling/servlet/default
assertTrue(li.hasNext());
- assertEquals(root1 + "/" + DEFAULT_RESOURCE_TYPE, li.next());
+ assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
// 5. finished
assertFalse(li.hasNext());
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollectorTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollectorTest.java
index faf664c..7da2270 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollectorTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ResourceCollectorTest.java
@@ -28,7 +28,6 @@ import java.util.Map;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.commons.testing.sling.MockResource;
public class ResourceCollectorTest extends HelperTestBase {
@@ -49,9 +48,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print.esp", // 4
"/print/a4.esp", // 5
"/print.html.esp", // 6
- "/print/a4.html.esp", // 7
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.esp" // 7
};
int[] baseIdxs = { 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 };
@@ -68,9 +65,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print.other.esp", // 4
"/print/other.esp", // 5
"/print.html.esp", // 6
- "/print/a4.html.esp", // 7
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.esp" // 7
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -88,9 +83,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.esp", // 5
"/print.other.esp", // 6
"/print.html.esp", // 7
- "/print/a4.html.esp", // 8
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.esp" // 8
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -109,9 +102,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.esp", // 6
"/print.other.esp", // 7
"/print.html.esp", // 8
- "/print/a4.html.esp", // 9
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.esp" // 9
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -131,9 +122,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.esp", // 7
"/print.other.esp", // 8
"/print.html.esp", // 9
- "/print/a4.html.esp", // 10
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.esp" // 10
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 };
@@ -168,9 +157,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/a4.html.esp", // 10 /libs/foo/bar/print/a4.html.esp
"/print/a4.html.js", // 11 /libs/foo/bar/print/a4.html.js
"/print/a4.html.html", // 12 /apps/foo/bar/print/a4.html.html
- "/print/a4.html.jsp", // 13 /apps/foo/bar/print/a4.html.jsp
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.jsp" // 13 /apps/foo/bar/print/a4.html.jsp
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
@@ -201,9 +188,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/a4.html.esp", // 10 /libs/foo/bar/print/a4.html.esp
"/print/a4.html.js", // 11 /libs/foo/bar/print/a4.html.js
"/print/a4.html.html", // 12 /apps/foo/bar/print/a4.html.html will win (overlays libs, comes before jsp when iterating)
- "/print/a4.html.jsp", // 13 /apps/foo/bar/print/a4.html.jsp
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.jsp" // 13 /apps/foo/bar/print/a4.html.jsp
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
@@ -232,9 +217,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/a4.html.esp", // 10 /libs/foo/bar/print/a4.html.esp
"/print/a4.html.js", // 11 /libs/foo/bar/print/a4.html.js
"/print/a4.html.jsp", // 12 /apps/foo/bar/print/a4.html.jsp will win (overlays libs, comes before html when iterating)
- "/print/a4.html.html", // 13 /apps/foo/bar/print/a4.html.html
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.html" // 13 /apps/foo/bar/print/a4.html.html
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
@@ -259,9 +242,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print.ANY.esp", // 4
"/print/a4.ANY.esp", // 5
"/print.html.ANY.esp", // 6
- "/print/a4.html.ANY.esp", // 7
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.esp" // 7
};
int[] baseIdxs = { 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 };
@@ -281,9 +262,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print.other.ANY.esp", // 4
"/print/other.ANY.esp", // 5
"/print.html.ANY.esp", // 6
- "/print/a4.html.ANY.esp", // 7
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.esp" // 7
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -304,9 +283,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.ANY.esp", // 5
"/print.other.ANY.esp", // 6
"/print.html.ANY.esp", // 7
- "/print/a4.html.ANY.esp", // 8
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.esp" // 8
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -328,9 +305,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.ANY.esp", // 6
"/print.other.ANY.esp", // 7
"/print.html.ANY.esp", // 8
- "/print/a4.html.ANY.esp", // 9
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.esp" // 9
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
@@ -353,9 +328,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/other.ANY.esp", // 7
"/print.other.ANY.esp", // 8
"/print.html.ANY.esp", // 9
- "/print/a4.html.ANY.esp", // 10
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.esp" // 10
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 };
@@ -381,9 +354,7 @@ public class ResourceCollectorTest extends HelperTestBase {
"/print/a4.html.ANY.esp", // 10 /libs/foo/bar/print/a4.html.ANY.esp
"/print/a4.html.ANY.js", // 11 /libs/foo/bar/print/a4.html.ANY.js
"/print/a4.html.ANY.html", // 12 /apps/foo/bar/print/a4.html.ANY.html
- "/print/a4.html.ANY.jsp", // 13 /apps/foo/bar/print/a4.html.ANY.jsp
- "/print", // resource to enable walking the tree
- "/print", // resource to enable walking the tree
+ "/print/a4.html.ANY.jsp" // 13 /apps/foo/bar/print/a4.html.ANY.jsp
};
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
@@ -441,9 +412,7 @@ public class ResourceCollectorTest extends HelperTestBase {
assertFalse(rIter.hasNext());
}
- protected MockResource createScriptResource(String path, String type) {
- MockResource res = new MockResource(resourceResolver, path, type);
- resourceResolver.addResource(res);
- return res;
+ protected Resource createScriptResource(String path, String type) {
+ return addOrReplaceResource(resourceResolver, path, type);
}
}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ScriptSelectionTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ScriptSelectionTest.java
index 6017c9d..251231f 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ScriptSelectionTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ScriptSelectionTest.java
@@ -22,7 +22,6 @@ import java.util.Collection;
import java.util.Collections;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.commons.testing.sling.MockResource;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
/** Various tests that explain and demonstrate how scripts are
@@ -63,8 +62,7 @@ public class ScriptSelectionTest extends HelperTestBase {
{
// Add given scripts to our mock resource resolver
for(String script : scripts) {
- final MockResource r = new MockResource(resourceResolver, script, "nt:file");
- resourceResolver.addResource(r);
+ addOrReplaceResource(resourceResolver, script, "nt:file");
}
// Create mock request and get scripts from ResourceCollector
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/resource/MockServletResource.java b/src/test/java/org/apache/sling/servlets/resolver/internal/resource/MockServletResource.java
index ec3f0ba..9cce235 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/resource/MockServletResource.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/resource/MockServletResource.java
@@ -21,11 +21,32 @@ package org.apache.sling.servlets.resolver.internal.resource;
import javax.servlet.Servlet;
import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
public class MockServletResource extends
org.apache.sling.servlets.resolver.internal.resource.ServletResource {
+
+ public static final String PROP_SERVLET = ":servlet";
+
+ private final Servlet servlet;
+
public MockServletResource(ResourceResolver resourceResolver,
Servlet servlet, String path) {
super(resourceResolver, servlet, path);
+ this.servlet = servlet;
}
+
+ @Override
+ public <T> T adaptTo(Class<T> type) {
+ if ( type == ValueMap.class ) {
+ ValueMapDecorator vm = (ValueMapDecorator)super.adaptTo(type);
+ // add the servlet to the ValueMap so we don't lose track of it
+ // when resource objects are created during traversal
+ vm.put(PROP_SERVLET, servlet);
+ return type.cast(vm);
+ }
+ return super.adaptTo(type);
+ }
+
}