You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by js...@apache.org on 2026/08/15 13:32:25 UTC
(sling-org-apache-sling-servlets-resolver) 01/28: SLING-12608 : Implement Jakarta Servlet based Sling API (#52)
This is an automated email from the ASF dual-hosted git repository.
jsedding pushed a commit to branch resolver-2.x-backports
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git
commit c750faa3d2bffaf86f499b81b7a5578338db5fe7
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Mar 28 06:37:12 2025 +0100
SLING-12608 : Implement Jakarta Servlet based Sling API (#52)
* backport: retain only changes *not* related to Jakarta Servlet
* Update dependency to latest API with jakarta support
* Implement SlingServletResolver, fix test cases
* Fix test cases
* Use Sling api to wrap request/response
* Use servlet wrapper from api
* Support jakarta servlet registration
* Try to use latest pax exam for java 17 support
* Adjust pom
* Fix some pax exam tests
* Fix pax exam tests
* Clean up pom
* Remove dependency to outdated commons testing
* Use Testing Paxexam 4.1.0
* Remove temporary optional import
(cherry picked from commit e76580daf56902318fc147b9928de0c6dbf5fe97)
---
pom.xml | 71 ++----
.../resolver/internal/SlingServletResolver.java | 10 +-
.../defaults/DefaultErrorHandlerServlet.java | 22 +-
.../internal/SecureRequestsOptingServletTest.java | 52 ++--
.../defaults/DefaultErrorHandlerServletTest.java | 49 ++--
.../resolver/internal/helper/HelperTestBase.java | 46 ++--
.../internal/helper/LocationCollectorTest.java | 264 +++++++++++----------
.../internal/helper/ResourceCollectorTest.java | 64 ++---
.../internal/helper/ScriptSelectionTest.java | 4 +-
.../internal/resourcehiding/ServletHidingTest.java | 16 +-
.../sling/servlets/resolver/it/SLING10478IT.java | 40 ++--
.../resolver/it/ScriptEngineManagerMock.java | 29 +++
.../resolver/it/ServletResolverTestSupport.java | 152 ++++++------
.../servlets/resolver/it/ServletResourceIT.java | 21 +-
.../servlets/resolver/it/TestResourceProvider.java | 21 --
15 files changed, 468 insertions(+), 393 deletions(-)
diff --git a/pom.xml b/pom.xml
index f791515..d7b75ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,13 +39,14 @@
<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git</connection>
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git</developerConnection>
<url>https://github.com/apache/sling-org-apache-sling-servlets-resolver.git</url>
- <tag>org.apache.sling.servlets.resolver-2.11.10</tag>
+ <tag>resolver-2.x</tag>
</scm>
<properties>
<project.build.outputTimestamp>2025-07-11T14:46:48Z</project.build.outputTimestamp>
<site.jira.version.id>12314292</site.jira.version.id>
- <org.ops4j.pax.exam.version>4.13.3</org.ops4j.pax.exam.version>
+ <sling.java.version>17</sling.java.version>
+ <org.ops4j.pax.exam.version>4.14.0</org.ops4j.pax.exam.version>
<!-- To debug the pax process, override this with -D -->
<pax.vm.options>-Xmx512M</pax.vm.options>
</properties>
@@ -117,16 +118,10 @@
</executions>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
- <systemProperties>
- <property>
- <name>bundle.filename</name>
- <value>${basedir}/target/${project.build.finalName}.jar</value>
- </property>
- <property>
- <name>pax.vm.options</name>
- <value>${pax.vm.options}</value>
- </property>
- </systemProperties>
+ <systemPropertyVariables>
+ <bundle.filename>${basedir}/target/${project.build.finalName}.jar</bundle.filename>
+ <pax.vm.options>${pax.vm.options}</pax.vm.options>
+ </systemPropertyVariables>
</configuration>
</plugin>
</plugins>
@@ -174,11 +169,10 @@
<version>1.0.4</version>
<scope>provided</scope>
</dependency>
-
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>2.14.0</version>
+ <version>2.18.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -199,12 +193,13 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
+ <version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>jakarta.json</groupId>
- <artifactId>jakarta.json-api</artifactId>
- <version>2.0.2</version>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.johnzon</artifactId>
+ <version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -217,7 +212,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.serviceusermapper</artifactId>
- <version>1.2.0</version>
+ <version>1.5.8</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -251,7 +246,7 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
- <version>3.4</version>
+ <version>3.17.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -289,13 +284,13 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.paxexam</artifactId>
- <version>3.1.0</version>
+ <version>4.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.testing</artifactId>
- <version>2.1.2</version>
+ <artifactId>org.apache.sling.auth.core</artifactId>
+ <version>1.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -304,6 +299,12 @@
<version>2.9.2</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.resourceresolver</artifactId>
+ <version>1.10.0</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.osgi-mock.core</artifactId>
@@ -341,7 +342,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>3.9.0</version>
+ <version>5.15.2</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -386,30 +387,6 @@
<version>7.0.5</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.servlet-helpers</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.resourceresolver</artifactId>
- <version>1.10.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.scripting.core</artifactId>
- <version>2.2.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.glassfish</groupId>
- <artifactId>jakarta.json</artifactId>
- <version>2.0.1</version>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-atinject_1.0_spec</artifactId>
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
index 12b3b68..2827d76 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
@@ -87,7 +87,7 @@ import org.slf4j.LoggerFactory;
* In case the thread is handling a request, the {@link #onEvent(SlingRequestEvent)} method is called by the
* Sling engine and a per-thread ResourceResolver is created, used and also closed when the request is
* finished.
- *
+ *
* In case the thread does execute not within the context of a request, a shared ResourceResolver instance is used.
*
*/
@@ -148,9 +148,9 @@ public class SlingServletResolver
* The default extensions
*/
private AtomicReference<String[]> defaultExtensions = new AtomicReference<>();
-
+
private boolean useResourceCaching;
-
+
private final PathBasedServletAcceptor pathBasedServletAcceptor = new PathBasedServletAcceptor();
@@ -189,7 +189,7 @@ public class SlingServletResolver
servlet = resolveServletInternal(request, null, resourceType, scriptResolver);
}
- // last resort, use the core bundle default servlet
+ // last resort, use the default servlet
if (servlet == null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("No specific servlet found, trying default");
@@ -861,7 +861,7 @@ public class SlingServletResolver
}
return executionPaths;
}
-
+
protected void invalidateCache(ResourceResolver r) {
LocationCollector.clearCache(r);
AbstractResourceCollector.clearCache(r);
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java b/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
index 7e64683..2a5e783 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
@@ -25,6 +25,7 @@ import java.io.StringWriter;
import jakarta.json.Json;
import jakarta.json.stream.JsonGenerator;
import javax.servlet.GenericServlet;
+import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
@@ -32,7 +33,6 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.header.MediaRangeList;
import org.apache.sling.api.request.RequestProgressTracker;
@@ -67,10 +67,10 @@ public class DefaultErrorHandlerServlet extends GenericServlet {
throws IOException {
// get settings
- Integer scObject = (Integer) req.getAttribute(SlingConstants.ERROR_STATUS);
- String statusMessage = (String) req.getAttribute(SlingConstants.ERROR_MESSAGE);
- String requestUri = (String) req.getAttribute(SlingConstants.ERROR_REQUEST_URI);
- String servletName = (String) req.getAttribute(SlingConstants.ERROR_SERVLET_NAME);
+ Integer scObject = (Integer) req.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
+ String statusMessage = (String) req.getAttribute(RequestDispatcher.ERROR_MESSAGE);
+ String requestUri = (String) req.getAttribute(RequestDispatcher.ERROR_REQUEST_URI);
+ String servletName = (String) req.getAttribute(RequestDispatcher.ERROR_SERVLET_NAME);
// ensure values
int statusCode = (scObject != null)
@@ -104,8 +104,8 @@ public class DefaultErrorHandlerServlet extends GenericServlet {
ResponseUtil.getXmlEscapingWriter(pw));
// dump the stack trace
- if (req.getAttribute(SlingConstants.ERROR_EXCEPTION) instanceof Throwable) {
- final Throwable throwable = (Throwable) req.getAttribute(SlingConstants.ERROR_EXCEPTION);
+ if (req.getAttribute(RequestDispatcher.ERROR_EXCEPTION) instanceof Throwable) {
+ final Throwable throwable = (Throwable) req.getAttribute(RequestDispatcher.ERROR_EXCEPTION);
pw.println("<h3>Exception:</h3>");
pw.println("<pre>");
pw.flush();
@@ -144,7 +144,7 @@ public class DefaultErrorHandlerServlet extends GenericServlet {
jsonGenerator.writeStartObject();
jsonGenerator.write("status", statusCode);
- String msg = (String)req.getAttribute(SlingConstants.ERROR_MESSAGE);
+ String msg = (String)req.getAttribute(RequestDispatcher.ERROR_MESSAGE);
if (msg != null && !msg.isEmpty()) {
jsonGenerator.write("message", statusMessage);
}
@@ -159,7 +159,7 @@ public class DefaultErrorHandlerServlet extends GenericServlet {
// SLING-10615 - for backward compatibility check for either a
// String or Class value
- Object exceptionTypeObj = req.getAttribute(SlingConstants.ERROR_EXCEPTION_TYPE);
+ Object exceptionTypeObj = req.getAttribute(RequestDispatcher.ERROR_EXCEPTION_TYPE);
String exceptionType = null;
if (exceptionTypeObj instanceof String) {
exceptionType = (String)exceptionTypeObj;
@@ -171,8 +171,8 @@ public class DefaultErrorHandlerServlet extends GenericServlet {
}
// dump the stack trace
- if (req.getAttribute(SlingConstants.ERROR_EXCEPTION) instanceof Throwable) {
- final Throwable throwable = (Throwable) req.getAttribute(SlingConstants.ERROR_EXCEPTION);
+ if (req.getAttribute(RequestDispatcher.ERROR_EXCEPTION) instanceof Throwable) {
+ final Throwable throwable = (Throwable) req.getAttribute(RequestDispatcher.ERROR_EXCEPTION);
try (StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw)) {
printStackTrace(pw, throwable);
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 a5ba52a..c08844f 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
@@ -29,31 +29,37 @@ import javax.servlet.Servlet;
import javax.servlet.http.HttpServlet;
import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.builder.Builders;
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.api.servlets.OptingServlet;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
+import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
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.mockito.Mockito;
import org.osgi.framework.Bundle;
+@SuppressWarnings("deprecation")
public class SecureRequestsOptingServletTest extends SlingServletResolverTestBase {
- protected static final String SERVLET_PATH = "/mock";
- protected static final String SERVLET_NAME = "TestServlet";
+ protected static final String SERVLET_PATH = "/mock";
+ protected static final String SERVLET_NAME = "TestServlet";
protected static final String SERVLET_EXTENSION = "html";
+ protected static final String RESOURCE_TYPE = "foo/bar";
+
private Servlet testServlet;
protected void defineTestServlets(Bundle bundle) {
testServlet = new SecureRequestsOptingServlet();
String path = "/"
- + MockSlingHttpServletRequest.RESOURCE_TYPE
+ + RESOURCE_TYPE
+ "/"
- + ResourceUtil.getName(MockSlingHttpServletRequest.RESOURCE_TYPE)
+ + ResourceUtil.getName(RESOURCE_TYPE)
+ ".servlet";
Map<String, Object> props = new HashMap<>();
props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, path);
@@ -71,25 +77,43 @@ public class SecureRequestsOptingServletTest extends SlingServletResolverTestBas
}
@Test public void testAcceptsSecureRequest() {
- MockSlingHttpServletRequest secureRequest = new MockSlingHttpServletRequest(
- SERVLET_PATH, null, SERVLET_EXTENSION, null, null);
- secureRequest.setResourceResolver(mockResourceResolver);
- secureRequest.setSecure(true);
+ final Resource resource = Mockito.mock(Resource.class);
+ Mockito.when(resource.getResourceType()).thenReturn(RESOURCE_TYPE);
+ Mockito.when(resource.getPath()).thenReturn("/" + RESOURCE_TYPE);
+
+ SlingHttpServletRequest secureRequest = new SecureRequest(
+ Builders.newRequestBuilder(resource)
+ .withExtension(SERVLET_EXTENSION)
+ .build());
Servlet result = servletResolver.resolveServlet(secureRequest);
assertEquals("Expecting our test servlet", testServlet, result);
}
@Test public void testIgnoreInsecureRequest() {
- MockSlingHttpServletRequest insecureRequest = new MockSlingHttpServletRequest(
- SERVLET_PATH, null, SERVLET_EXTENSION, null, null);
- insecureRequest.setResourceResolver(mockResourceResolver);
- insecureRequest.setSecure(false);
+ final Resource resource = Mockito.mock(Resource.class);
+ Mockito.when(resource.getResourceType()).thenReturn(RESOURCE_TYPE);
+ Mockito.when(resource.getPath()).thenReturn("/" + RESOURCE_TYPE);
+
+ SlingHttpServletRequest insecureRequest = Builders.newRequestBuilder(resource)
+ .withExtension(SERVLET_EXTENSION)
+ .build();
Servlet result = servletResolver.resolveServlet(insecureRequest);
assertNotSame("Expecting a different servlet than our own",
result.getClass(), SecureRequestsOptingServlet.class);
}
- @SuppressWarnings("serial")
+ public static class SecureRequest extends SlingHttpServletRequestWrapper {
+
+ public SecureRequest(final SlingHttpServletRequest request) {
+ super(request);
+ }
+
+ @Override
+ public boolean isSecure() {
+ return true;
+ }
+ }
+
private static class SecureRequestsOptingServlet extends HttpServlet
implements OptingServlet {
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
index e771001..aedb542 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
@@ -35,24 +35,30 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import org.apache.sling.api.SlingConstants;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletResponse;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.request.builder.Builders;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
+import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* SLING-10021 test 'Accept' content-type handling in the default error handler servlet
*/
+@SuppressWarnings("deprecation")
public class DefaultErrorHandlerServletTest {
- protected void assertJsonErrorResponse(MockSlingHttpServletRequest req) throws ServletException, IOException {
- MockSlingHttpServletResponse res = new MockErrorSlingHttpServletResponse(false);
+ protected void assertJsonErrorResponse(SlingHttpServletRequest req) throws ServletException, IOException {
+ MockErrorSlingHttpServletResponse res = new MockErrorSlingHttpServletResponse(Builders.newResponseBuilder().build(), false);
DefaultErrorHandlerServlet errorServlet = new DefaultErrorHandlerServlet();
errorServlet.init(new MockServletConfig());
errorServlet.service(req, res);
// verify we got json back
- assertEquals("application/json", res.getContentType());
+ assertEquals("application/json;charset=UTF-8", res.getContentType());
String responseOutput = res.getOutput().toString();
// check the json content matches what would be sent from the DefaultErrorHandlingServlet
@@ -70,8 +76,11 @@ public class DefaultErrorHandlerServletTest {
@Test
public void testJsonErrorResponse() throws IOException, ServletException {
+ final Resource resource = Mockito.mock(Resource.class);
+ final SlingHttpServletRequest request = Builders.newRequestBuilder(resource).build();
+
// mock a request that accepts a json response
- MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("application/json,*/*;q=0.9");
+ MockErrorSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest(request, "application/json,*/*;q=0.9");
assertJsonErrorResponse(req);
}
@@ -81,8 +90,11 @@ public class DefaultErrorHandlerServletTest {
*/
@Test
public void testJsonErrorResponseWithClassExceptionTypeAttributeValue() throws IOException, ServletException {
+ final Resource resource = Mockito.mock(Resource.class);
+ final SlingHttpServletRequest request = Builders.newRequestBuilder(resource).build();
+
// mock a request that accepts a json response
- MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("application/json,*/*;q=0.9") {
+ SlingHttpServletRequest req = new MockErrorSlingHttpServletRequest(request, "application/json,*/*;q=0.9") {
@Override
public Object getAttribute(String name) {
@@ -98,16 +110,19 @@ public class DefaultErrorHandlerServletTest {
@Test
public void testHtmlErrorResponse() throws IOException, ServletException {
+ final Resource resource = Mockito.mock(Resource.class);
+ final SlingHttpServletRequest request = Builders.newRequestBuilder(resource).build();
+
// mock a request that accepts an html response
- MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
- MockSlingHttpServletResponse res = new MockErrorSlingHttpServletResponse(false);
+ SlingHttpServletRequest req = new MockErrorSlingHttpServletRequest(request, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+ MockErrorSlingHttpServletResponse res = new MockErrorSlingHttpServletResponse(Builders.newResponseBuilder().build(), false);
DefaultErrorHandlerServlet errorServlet = new DefaultErrorHandlerServlet();
errorServlet.init(new MockServletConfig());
errorServlet.service(req, res);
// verify we got html back
- assertEquals("text/html", res.getContentType());
+ assertEquals("text/html;charset=UTF-8", res.getContentType());
String responseOutput = res.getOutput().toString();
// check the html content matches what would be sent from the DefaultErrorHandlingServlet
@@ -152,14 +167,14 @@ public class DefaultErrorHandlerServletTest {
/**
* Mock impl to simulate an error response
*/
- private static final class MockErrorSlingHttpServletResponse extends MockSlingHttpServletResponse {
+ private static final class MockErrorSlingHttpServletResponse extends SlingHttpServletResponseWrapper {
private PrintWriter writer;
private StringWriter strWriter;
private boolean committed;
- public MockErrorSlingHttpServletResponse(boolean committed) {
- super();
+ public MockErrorSlingHttpServletResponse(final SlingHttpServletResponse response, final boolean committed) {
+ super(response);
this.committed = committed;
}
@@ -186,21 +201,19 @@ public class DefaultErrorHandlerServletTest {
return this.writer;
}
- @Override
public StringBuffer getOutput() {
return strWriter.getBuffer();
}
-
}
/**
* Mock impl to simulate an error request
*/
- private static class MockErrorSlingHttpServletRequest extends MockSlingHttpServletRequest {
+ private static class MockErrorSlingHttpServletRequest extends SlingHttpServletRequestWrapper {
private String accept;
- private MockErrorSlingHttpServletRequest(String accept) {
- super(null, null, null, null, null);
+ private MockErrorSlingHttpServletRequest(final SlingHttpServletRequest request, final String accept) {
+ super(request);
this.accept = accept;
}
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 b626c25..7dbf76c 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
@@ -21,14 +21,18 @@ package org.apache.sling.servlets.resolver.internal.helper;
import java.util.Collections;
import java.util.Map;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.builder.Builders;
+import org.apache.sling.api.request.builder.SlingHttpServletRequestBuilder;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
-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 org.mockito.Mockito;
import junit.framework.TestCase;
@@ -37,8 +41,6 @@ public abstract class HelperTestBase extends TestCase {
protected MockResourceResolverFactoryOptions resourceResolverOptions;
protected ResourceResolver resourceResolver;
- protected MockSlingHttpServletRequest request;
-
protected Resource resource;
protected String resourcePath;
@@ -66,12 +68,10 @@ public abstract class HelperTestBase extends TestCase {
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,
+ return addOrReplaceResource(resolver, path,
Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType));
}
@@ -83,7 +83,7 @@ public abstract class HelperTestBase extends TestCase {
Resource r = resolver.getResource(path);
if (r != null) {
resolver.delete(r);
- }
+ }
// create the new resource
Resource parent = getOrCreateParentResource(resolver, path);
@@ -115,13 +115,29 @@ public abstract class HelperTestBase extends TestCase {
return parent;
}
- protected MockSlingHttpServletRequest makeRequest(String method, String selectors, String extension) {
- final MockSlingHttpServletRequest result =
- new MockSlingHttpServletRequest(resourcePath, selectors, extension, null, null);
- result.setMethod(method);
- result.setResourceResolver(resourceResolver);
- result.setResource(resource);
- return result;
+ protected SlingHttpServletRequest makeRequest(String method, String selectors, String extension) {
+ final Resource rsrc = Mockito.mock(Resource.class);
+ final ResourceMetadata md = new ResourceMetadata();
+ Mockito.when(rsrc.getResourceResolver()).thenReturn(resourceResolver);
+ Mockito.when(rsrc.getPath()).thenReturn(this.resource.getPath());
+ Mockito.when(rsrc.getName()).thenReturn(this.resource.getName());
+ Mockito.when(rsrc.getResourceType()).thenReturn(this.resource.getResourceType());
+ md.setResolutionPath(rsrc.getPath());
+ StringBuilder sb = new StringBuilder();
+ sb.append(".");
+ if ( selectors != null ) {
+ sb.append(selectors);
+ sb.append(".");
+ }
+ sb.append(extension);
+ md.setResolutionPathInfo(sb.toString());
+ SlingHttpServletRequestBuilder builder = Builders.newRequestBuilder(rsrc);
+ builder.withExtension(extension);
+ if (selectors != null) {
+ builder.withSelectors(selectors.split("\\."));
+ }
+ builder.withRequestMethod(method);
+ return builder.build();
}
@Override
@@ -129,8 +145,6 @@ public abstract class HelperTestBase extends TestCase {
super.tearDown();
resourceResolver = null;
- request = null;
resource = null;
}
-
}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationCollectorTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationCollectorTest.java
index 2133887..c93e214 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationCollectorTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationCollectorTest.java
@@ -32,12 +32,13 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.builder.Builders;
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.api.resource.SyntheticResource;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.junit.Before;
import org.junit.Rule;
@@ -50,41 +51,40 @@ import org.mockito.Mockito;
@RunWith(Parameterized.class)
public class LocationCollectorTest {
-
- // Run the test both with and without resource caching enabled
- @Parameters
- public static Iterable<Object> data() {
- return Arrays.asList(true, false);
- }
-
- @Parameter
- public boolean useResourceCaching;
-
- @Rule
- public final SlingContext context = new SlingContext();
-
- SearchPathOptions searchPathOptions = new SearchPathOptions();
+
+ // Run the test both with and without resource caching enabled
+ @Parameters
+ public static Iterable<Object> data() {
+ return Arrays.asList(true, false);
+ }
+
+ @Parameter
+ public boolean useResourceCaching;
+
+ @Rule
+ public final SlingContext context = new SlingContext();
+
+ SearchPathOptions searchPathOptions = new SearchPathOptions();
+
protected String resourcePath;
protected String resourceType;
protected String resourceTypePath;
protected String resourceSuperType;
protected String resourceSuperTypePath;
-
- protected Resource resource;
- protected MockSlingHttpServletRequest request;
-
-
- protected ResourceResolver resolver; // required because of the spy
-
- @Before
- public void setup() throws Exception {
-
- searchPathOptions = new SearchPathOptions();
- resolver = Mockito.spy(context.resourceResolver());
- Mockito.when(resolver.getSearchPath()).thenAnswer( invocation -> {
- return searchPathOptions.getSearchPath();
- });
-
+
+ protected Resource resource;
+
+ protected ResourceResolver resolver; // required because of the spy
+
+ @Before
+ public void setup() throws Exception {
+
+ searchPathOptions = new SearchPathOptions();
+ resolver = Mockito.spy(context.resourceResolver());
+ Mockito.when(resolver.getSearchPath()).thenAnswer( invocation -> {
+ return searchPathOptions.getSearchPath();
+ });
+
resourceType = "foo:bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
@@ -93,31 +93,35 @@ public class LocationCollectorTest {
Resource parent = resolver.getResource("/content");
resource = resolver.create(parent, "page",
Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType));
+ }
+
+ protected SlingHttpServletRequest createRequest(final Resource r) {
+ return Builders.newRequestBuilder(r)
+ .withExtension("html")
+ .withSelectors("print", "A4")
+ .withRequestMethod("GET")
+ .build();
+ }
- request = new MockSlingHttpServletRequest(resourcePath, "print.A4", "html", null, null);
- request.setMethod("GET");
- request.setResourceResolver(resolver);
- request.setResource(resource);
-
- }
-
@Test
public void testSearchPathEmpty() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
// expect path gets { "/" }
searchPathOptions.setSearchPaths(null);
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r("/" + resourceTypePath), // /foo/bar
r("/" + DEFAULT_RESOURCE_TYPE)); // /sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath1Element() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root0
@@ -126,15 +130,16 @@ public class LocationCollectorTest {
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(root0 + resourceTypePath), // /apps/foo/bar
r(root0 + DEFAULT_RESOURCE_TYPE)); // /apps/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath2Elements() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
String root1 = "/libs/";
searchPathOptions.setSearchPaths(new String[] {
@@ -145,7 +150,7 @@ public class LocationCollectorTest {
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(root0 + resourceTypePath), // /apps/foo/bar
r(root1 + resourceTypePath), // /libs/foo/bar
@@ -153,16 +158,16 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE)); // /libs/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
/**
* 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) {
+ protected Resource replaceResource(String newResourceType, String newResourceSuperType) {
@SuppressWarnings("unchecked")
Map<String, Object> props = new HashMap<>(resource.adaptTo(Map.class));
if (newResourceType != null) {
@@ -172,11 +177,12 @@ public class LocationCollectorTest {
props.put("sling:resourceSuperType", newResourceSuperType);
}
Resource r = addOrReplaceResource(resolver, resource.getPath(), props);
- request.setResource(r);
+ return r;
}
@Test
public void testSearchPathEmptyAbsoluteType() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
// expect path gets { "/" }
searchPathOptions.setSearchPaths(null);
@@ -188,15 +194,16 @@ public class LocationCollectorTest {
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r("/" + DEFAULT_RESOURCE_TYPE)); // /sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath1ElementAbsoluteType() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root0
@@ -205,21 +212,22 @@ public class LocationCollectorTest {
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- replaceResource(resourceType, null);
+ request = this.createRequest(replaceResource(resourceType, null));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
-
+
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r(root0 + DEFAULT_RESOURCE_TYPE)); // /apps/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath2ElementsAbsoluteType() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
String root1 = "/libs/";
searchPathOptions.setSearchPaths(new String[] {
@@ -230,42 +238,44 @@ public class LocationCollectorTest {
// absolute resource type
resourceType = "/foo/bar";
resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
- replaceResource(resourceType, null);
+ request = this.createRequest(replaceResource(resourceType, null));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r(root0 + DEFAULT_RESOURCE_TYPE), // /apps/sling/servlet/default
r(root1 + DEFAULT_RESOURCE_TYPE)); // /libs/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPathEmptyWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
// expect path gets { "/" }
searchPathOptions.setSearchPaths(null);
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(null, resourceSuperType);
+ request = this.createRequest(replaceResource(null, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r("/" + resourceTypePath), // /foo/bar
r("/" + resourceSuperTypePath), // /foo/superBar
r("/" + DEFAULT_RESOURCE_TYPE)); // /sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath1ElementWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root0
@@ -274,21 +284,22 @@ public class LocationCollectorTest {
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(null, resourceSuperType);
+ request = this.createRequest(replaceResource(null, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(root0 + resourceTypePath), // /apps/foo/bar
r(root0 + resourceSuperTypePath), // /apps/foo/superBar
r(root0 + DEFAULT_RESOURCE_TYPE)); // /apps/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath2ElementsWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
String root1 = "/libs/";
searchPathOptions.setSearchPaths(new String[] {
@@ -299,12 +310,12 @@ public class LocationCollectorTest {
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(null, resourceSuperType);
+ request = this.createRequest(replaceResource(null, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(root0 + resourceTypePath), // /apps/foo/bar
r(root1 + resourceTypePath), // /libs/foo/bar
@@ -314,9 +325,10 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE)); // /libs/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPathEmptyAbsoluteTypeWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
// expect path gets { "/" }
searchPathOptions.setSearchPaths(null);
@@ -327,21 +339,22 @@ public class LocationCollectorTest {
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(resourceType, resourceSuperType);
+ request = this.createRequest(replaceResource(resourceType, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r("/" + resourceSuperTypePath), // /foo/superBar
r("/" + DEFAULT_RESOURCE_TYPE)); // /sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath1ElementAbsoluteTypeWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root0
@@ -354,21 +367,22 @@ public class LocationCollectorTest {
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(resourceType, resourceSuperType);
+ request = this.createRequest(replaceResource(resourceType, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r(root0 + resourceSuperTypePath), // /apps/foo/superBar
r(root0 + DEFAULT_RESOURCE_TYPE)); // /apps/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testSearchPath2ElementsAbsoluteTypeWithSuper() {
+ SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
String root1 = "/libs/";
searchPathOptions.setSearchPaths(new String[] {
@@ -383,12 +397,12 @@ public class LocationCollectorTest {
// set resource super type
resourceSuperType = "foo:superBar";
resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
- replaceResource(resourceType, resourceSuperType);
+ request = this.createRequest(replaceResource(resourceType, resourceSuperType));
final Resource r = request.getResource();
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /foo/bar
r(root0 + resourceSuperTypePath), // /apps/foo/superBar
@@ -397,9 +411,10 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE)); // /libs/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testScriptNameWithoutResourceType() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
String root0 = "/apps/";
String root1 = "/libs/";
searchPathOptions.setSearchPaths(new String[] {
@@ -408,13 +423,13 @@ public class LocationCollectorTest {
});
List<Resource> loc = getLocations("",
null,"");
-
+
List<Resource> expected = Arrays.asList(
r("/apps"),
r("/libs"));
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testScriptNameWithResourceType() {
String root0 = "/apps/";
@@ -424,7 +439,7 @@ public class LocationCollectorTest {
root1
});
List<Resource> loc = getLocations("a/b", null);
-
+
List<Resource> expected = Arrays.asList(
r(root0 + "a/b"),
r(root1 + "a/b"),
@@ -432,7 +447,7 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE));
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testScriptNameWithResourceTypeAndSuperType() {
String root0 = "/apps/";
@@ -441,7 +456,7 @@ public class LocationCollectorTest {
root0,
root1
});
-
+
List<Resource> loc = getLocations("a/b", "c/d");
List<Resource> expected = Arrays.asList(
@@ -453,7 +468,7 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE));
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testCircularResourceTypeHierarchy() throws PersistenceException {
final String root1 = "/libs/";
@@ -482,7 +497,7 @@ public class LocationCollectorTest {
resource3Props);
List<Resource> loc = getLocations(resourceType, resourceSuperType);
-
+
List<Resource> expected = Arrays.asList(
r(root1 + resourceType), // /libs/foo/bar
r(root1 + resourceSuperType), // /libs/foo/check1
@@ -490,17 +505,17 @@ public class LocationCollectorTest {
r(root1 + DEFAULT_RESOURCE_TYPE)); // /libs/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testResolveDefaultResourceType() {
-
+
searchPathOptions.setSearchPaths(new String[] {
"/apps/",
"/libs/"
});
-
+
List<Resource> loc = getLocations(DEFAULT_RESOURCE_TYPE, resourceSuperType);
-
+
List<Resource> expected = Arrays.asList(
r("/apps/sling/servlet/default"),
r("/libs/sling/servlet/default"),
@@ -508,32 +523,32 @@ public class LocationCollectorTest {
r("/libs/sling/servlet/default"));
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testAbsoluteResourceSuperType() throws Exception {
final String root = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root
});
-
+
String resourceType="a/b";
String resourceTypePath= root + resourceType;
-
+
String resourceSuperType= "/apps/c/d";
String resourceSuperTypePath = resourceSuperType;
-
+
Map<String, Object> resourceTypeProps = new HashMap<>();
resourceTypeProps.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
resourceTypeProps.put("sling:resourceSuperType", resourceSuperType);
-
+
resolver.create(getOrCreateParentResource(resolver, resourceTypePath),
ResourceUtil.getName(resourceTypePath), resourceTypeProps);
resolver.create(getOrCreateParentResource(resolver, resourceSuperTypePath),
ResourceUtil.getName(resourceSuperTypePath), null);
-
-
+
+
List<Resource> loc = getLocations(resourceType, resourceSuperType);
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /apps/a/b
r(resourceSuperTypePath), // /apps/c/d
@@ -541,42 +556,43 @@ public class LocationCollectorTest {
);
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void testNoSuperType() throws Exception {
final String root = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root
});
-
+
String resourceType="a/b";
String resourceTypePath= root + resourceType;
-
+
Map<String, Object> resourceTypeProps = new HashMap<>();
resourceTypeProps.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
-
+
resolver.create(getOrCreateParentResource(resolver, resourceTypePath),
ResourceUtil.getName(resourceTypePath), resourceTypeProps);
-
-
+
+
List<Resource> loc = getLocations(resourceType, resourceSuperType);
-
+
List<Resource> expected = Arrays.asList(
r(resourceTypePath), // /apps/a/b
r(root + DEFAULT_RESOURCE_TYPE) // /apps/sling/servlet/default
);
assertThat(loc,isSameResourceList(expected));
}
-
+
@Test
public void checkThatTheCacheIsUsed() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
// skip if the test runs without caching
if (!useResourceCaching) {
return;
}
-
+
// The basic test setup is copied from testSearchPath2ElementsWithSuper
String root0 = "/apps/";
String root1 = "/libs/";
@@ -591,7 +607,7 @@ public class LocationCollectorTest {
replaceResource(null, resourceSuperType);
final Resource r = request.getResource();
-
+
// Execute the same call twice and expect that on 2nd time the ResourceResolver
// is never used, because all is taken from the cache
getLocations(r.getResourceType(),
@@ -600,20 +616,21 @@ public class LocationCollectorTest {
getLocations(r.getResourceType(),
r.getResourceSuperType());
Mockito.verify(resolver, Mockito.never()).getResource(Mockito.anyString());
-
+
// validate the cache cleanup
int cacheEntries = ((Map<String,Resource>) resolver.getPropertyMap().get(LocationCollector.CACHE_KEY)).size();
assertTrue(cacheEntries > 0);
LocationCollector.clearCache(resolver);
assertEquals(0,((Map<String,Resource>) resolver.getPropertyMap().get(LocationCollector.CACHE_KEY)).size());
-
+
}
-
+
@Test
public void testWithCacheMapKeyAlreadyUsed() {
+ final SlingHttpServletRequest request = this.createRequest(this.resource);
// if the cacheKey in the ResourceResolverMap is already used, make sure that it's not overwritten
// this is an adapted copy of the testSearchPath1Element testcase
-
+
String root0 = "/apps/";
searchPathOptions.setSearchPaths(new String[] {
root0
@@ -624,49 +641,47 @@ public class LocationCollectorTest {
r.getResourceResolver().getPropertyMap().put(LocationCollector.CACHE_KEY, storedElement);
List<Resource> loc = getLocations(r.getResourceType(),
r.getResourceSuperType());
-
+
List<Resource> expected = Arrays.asList(
r(root0 + resourceTypePath), // /apps/foo/bar
r(root0 + DEFAULT_RESOURCE_TYPE)); // /apps/sling/servlet/default
assertThat(loc,isSameResourceList(expected));
-
+
assertEquals(storedElement, r.getResourceResolver().getPropertyMap().get(LocationCollector.CACHE_KEY));
-
+
// make sure that a cache clear does not clear this entry
LocationCollector.clearCache(resolver);
assertEquals(storedElement, r.getResourceResolver().getPropertyMap().get(LocationCollector.CACHE_KEY));
-
-
}
-
-
+
+
// --- helper ---
-
+
private Resource r (String path) {
return new SyntheticResource(resolver, path, "resourcetype");
}
-
-
+
+
List<Resource> getLocations(final String resourceType,
final String resourceSuperType) {
return getLocations(resourceType, resourceSuperType, DEFAULT_RESOURCE_TYPE);
}
-
+
List<Resource> getLocations( final String resourceType,
final String resourceSuperType,
final String baseResourceType) {
-
+
return LocationCollector.getLocations(resourceType,
resourceSuperType,
baseResourceType,
resolver, useResourceCaching);
}
-
+
// Mimic the searchpath semantic of the ResourceResolverFactory
public class SearchPathOptions {
-
+
String[] searchPath = new String[0];
-
+
public void setSearchPaths(String[] searchpath) {
if (searchpath == null) {
this.searchPath = new String[0];
@@ -674,12 +689,9 @@ public class LocationCollectorTest {
this.searchPath = searchpath;
}
}
-
+
public String[] getSearchPath() {
return searchPath;
}
}
-
-
-
}
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 965bc6b..7196dbb 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
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
@@ -41,6 +42,7 @@ public class ResourceCollectorTest extends HelperTestBase {
}
public void testGetServlets0() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = { "/" + label + ".esp", // 0
"/GET.esp", // 1
"/" + label + ".html.esp", // 2
@@ -54,10 +56,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 };
int[] indices = { 7, 5, 6, 4, 2, 3, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServlets1() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = { "/" + label + ".esp", // 0
"/GET.esp", // 1
"/" + label + ".html.esp", // 2
@@ -71,10 +74,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 7, 6, 3, 2, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServlets2() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = { "/" + label + ".esp", // 0
"/GET.esp", // 1
"/" + label + ".html.esp", // 2
@@ -89,10 +93,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 8, 7, 2, 3, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServlets3() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = { ".servlet", // 0
"/" + label + ".esp", // 1
"/GET.esp", // 2
@@ -108,10 +113,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 9, 8, 3, 4, 1, 2, 0 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServlets4() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = { ".servlet", // 0
"/" + label + ".esp", // 1
"/GET.esp", // 2
@@ -128,10 +134,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 };
int[] indices = { 10, 9, 3, 4, 1, 2, 0 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServletsWithMethod() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = {
"/html.servlet", // 7
"/html.GET.servlet"
@@ -140,10 +147,11 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 1, 1};
int[] indices = { 1, 0};
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testGetServletsScriptExtensionsPriority() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
String[] names = {".servlet", // 0
"/" + label + ".esp", // 1
"/GET.esp", // 2
@@ -163,7 +171,7 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
int[] indices = {12, 13, 11, 10, 9, 3, 4, 1, 2, 0};
- effectiveTest(names, baseIdxs, indices, new ArrayList<String>(){
+ effectiveTest(req, names, baseIdxs, indices, new ArrayList<String>(){
private static final long serialVersionUID = -2278401285444759128L;
{
add("esp");
@@ -174,6 +182,7 @@ public class ResourceCollectorTest extends HelperTestBase {
}
public void testGetServletsScriptExtensionsPriority2() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
// scripts with extensions not registered by script engine factories
String[] names = {".servlet", // 0
"/" + label + ".esp", // 1
@@ -194,7 +203,7 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
int[] indices = {12, 13, 11, 10, 9, 3, 4, 1, 2, 0};
- effectiveTest(names, baseIdxs, indices, new ArrayList<String>(){
+ effectiveTest(req, names, baseIdxs, indices, new ArrayList<String>(){
private static final long serialVersionUID = 4918721764309621104L;
{
add("esp");
@@ -203,6 +212,7 @@ public class ResourceCollectorTest extends HelperTestBase {
}
public void testGetServletsScriptExtensionsPriority3() {
+ SlingHttpServletRequest req = makeRequest("GET", "print.a4", "html");
// scripts with extensions not registered by script engine factories
String[] names = {".servlet", // 0
"/" + label + ".esp", // 1
@@ -223,7 +233,7 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
int[] indices = {12, 13, 11, 10, 9, 3, 4, 1, 2, 0};
- effectiveTest(names, baseIdxs, indices, new ArrayList<String>(){
+ effectiveTest(req, names, baseIdxs, indices, new ArrayList<String>(){
private static final long serialVersionUID = 1527098044127506711L;
{
add("esp");
@@ -233,7 +243,7 @@ public class ResourceCollectorTest extends HelperTestBase {
public void testAnyServlets0() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = { "/" + label + ".ANY.esp", // 0
"/ANY.esp", // 1
@@ -248,12 +258,12 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 };
int[] indices = { 7, 5, 6, 4, 2, 3, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testAnyServlets1() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = { "/" + label + ".ANY.esp", // 0
"/ANY.esp", // 1
@@ -268,12 +278,12 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 7, 6, 3, 2, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testAnyServlets2() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = { "/" + label + ".ANY.esp", // 0
"/ANY.esp", // 1
@@ -289,12 +299,12 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 8, 7, 2, 3, 0, 1 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testAnyServlets3() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = { ".servlet", // 0
"/" + label + ".ANY.esp", // 1
@@ -311,12 +321,12 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int[] indices = { 9, 8, 3, 4, 1, 2, 0 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testAnyServlets4() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = { ".servlet", // 0
"/" + label + ".ANY.esp", // 1
@@ -334,12 +344,12 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 };
int[] indices = { 10, 9, 3, 4, 1, 2, 0 };
- effectiveTest(names, baseIdxs, indices);
+ effectiveTest(req, names, baseIdxs, indices);
}
public void testAnyServletsScriptExtensionsPriority() {
// use a request with another request method "ANY"
- request.setMethod("ANY");
+ SlingHttpServletRequest req = makeRequest("ANY", "print.a4", "html");
String[] names = {".servlet", // 0
"/" + label + ".ANY.esp", // 1
@@ -360,7 +370,7 @@ public class ResourceCollectorTest extends HelperTestBase {
int[] baseIdxs = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0 , 0 , 1, 0};
int[] indices = {12, 13, 11, 10, 9, 3, 4, 1, 2, 0};
- effectiveTest(names, baseIdxs, indices, new ArrayList<String>(){
+ effectiveTest(req, names, baseIdxs, indices, new ArrayList<String>(){
private static final long serialVersionUID = 3909592432283252117L;
{
add("esp");
@@ -370,11 +380,11 @@ public class ResourceCollectorTest extends HelperTestBase {
}});
}
- protected void effectiveTest(String[] names, int[] baseIdxs, int[] indices) {
- effectiveTest(names, baseIdxs, indices, null);
+ protected void effectiveTest(SlingHttpServletRequest r, String[] names, int[] baseIdxs, int[] indices) {
+ effectiveTest(r, names, baseIdxs, indices, null);
}
- protected void effectiveTest(String[] names, int[] baseIdxs, int[] indices, List<String> scriptEngineExtensions) {
+ protected void effectiveTest(SlingHttpServletRequest r, String[] names, int[] baseIdxs, int[] indices, List<String> scriptEngineExtensions) {
String[] base = { "/apps/" + resourceTypePath,
"/libs/" + resourceTypePath };
@@ -389,12 +399,12 @@ public class ResourceCollectorTest extends HelperTestBase {
pathMap.put(name, path);
}
- ResourceCollector lu = ResourceCollector.create(request, null, new String[] {"html"}, true);
+ ResourceCollector lu = ResourceCollector.create(r, null, new String[] {"html"}, true);
Collection<Resource> res;
if (scriptEngineExtensions != null) {
- res = lu.getServlets(request.getResourceResolver(), scriptEngineExtensions);
+ res = lu.getServlets(r.getResourceResolver(), scriptEngineExtensions);
} else {
- res = lu.getServlets(request.getResourceResolver(), Collections.emptyList());
+ res = lu.getServlets(r.getResourceResolver(), Collections.emptyList());
}
Iterator<Resource> rIter = res.iterator();
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 be28f2d..ee0ddb6 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
@@ -21,8 +21,8 @@ package org.apache.sling.servlets.resolver.internal.helper;
import java.util.Collection;
import java.util.Collections;
+import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
/** Various tests that explain and demonstrate how scripts are
* selected. See the assertScript methods for how to interpret
@@ -66,7 +66,7 @@ public class ScriptSelectionTest extends HelperTestBase {
}
// Create mock request and get scripts from ResourceCollector
- final MockSlingHttpServletRequest req = makeRequest(method, selectors, extension);
+ final SlingHttpServletRequest req = makeRequest(method, selectors, extension);
final ResourceCollector u = ResourceCollector.create(req, null, new String[] {"html"}, true);
final Collection<Resource> s = u.getServlets(req.getResourceResolver(), Collections.emptyList());
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/resourcehiding/ServletHidingTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/resourcehiding/ServletHidingTest.java
index 9a6b285..468f5a0 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/resourcehiding/ServletHidingTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/resourcehiding/ServletHidingTest.java
@@ -33,8 +33,11 @@ import javax.servlet.Servlet;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.SyntheticResource;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
-import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.builder.Builders;
+import org.apache.sling.api.resource.Resource;
import org.apache.sling.servlets.resolver.api.IgnoredServletResourcePredicate;
import org.apache.sling.servlets.resolver.internal.SlingServletResolverTestBase;
import org.apache.sling.servlets.resolver.internal.helper.HelperTestBase;
@@ -46,6 +49,8 @@ public class ServletHidingTest extends SlingServletResolverTestBase {
private static final String TEST_ID = UUID.randomUUID().toString();
+ private static final String TEST_RESOURCE_TYPE = "foo/bar";
+
protected static class TestServlet extends SlingSafeMethodsServlet {
private final String id;
@@ -77,15 +82,16 @@ public class ServletHidingTest extends SlingServletResolverTestBase {
}
private Servlet resolveServlet() {
- MockSlingHttpServletRequest req = new MockSlingHttpServletRequest(
- MockSlingHttpServletRequest.RESOURCE_TYPE, null, "html", null, null);
- req.setResourceResolver(mockResourceResolver);
+ final Resource resource = new SyntheticResource(mockResourceResolver, "/content/foobar", TEST_RESOURCE_TYPE);
+ SlingHttpServletRequest req = Builders.newRequestBuilder(resource)
+ .withExtension("html")
+ .build();
return servletResolver.resolveServlet(req);
}
@Override
protected void defineTestServlets(Bundle bundle) {
- registerServlet(TEST_ID, MockSlingHttpServletRequest.RESOURCE_TYPE);
+ registerServlet(TEST_ID, TEST_RESOURCE_TYPE);
}
private void assertResolvesToTestServletId(String info, boolean expectMatch) {
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/SLING10478IT.java b/src/test/java/org/apache/sling/servlets/resolver/it/SLING10478IT.java
index 6d4df30..5d30a9d 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/SLING10478IT.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/SLING10478IT.java
@@ -32,7 +32,10 @@ import jakarta.json.stream.JsonGenerator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.sling.servlethelpers.MockSlingHttpServletResponse;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.request.builder.Builders;
+import org.apache.sling.api.request.builder.SlingHttpServletResponseResult;
+import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -84,7 +87,7 @@ public class SLING10478IT extends ServletResolverTestSupport {
resp.setContentType("text/plain");
resp.getWriter().print("hello error");
-
+
// response writer remains unclosed
}
@@ -96,11 +99,6 @@ public class SLING10478IT extends ServletResolverTestSupport {
.register(bundleContext);
}
- @Override
- protected MockSlingHttpServletResponse createMockSlingHttpServletResponse() {
- return new HandleErrorMockSlingHttpServletResponse();
- }
-
/**
* Test an error handling servlet that closes the response writer
*/
@@ -117,9 +115,15 @@ public class SLING10478IT extends ServletResolverTestSupport {
checkErrorHandlerServlet("/not_real_path.noclose");
}
+ protected SlingHttpServletResponse createMockSlingHttpServletResponse() {
+ final SlingHttpServletResponse response = Builders.newResponseBuilder().build();
+ return new HandleErrorMockSlingHttpServletResponse(response);
+ }
+
void checkErrorHandlerServlet(String path) throws Exception, InvocationTargetException {
try {
- final String output = executeRequest(M_GET, path, HttpServletResponse.SC_NOT_FOUND).getOutputAsString();
+ final SlingHttpServletResponse response = executeRequest(M_GET, path, HttpServletResponse.SC_NOT_FOUND);
+ final String output = ((SlingHttpServletResponseResult)((HandleErrorMockSlingHttpServletResponse)response).getResponse()).getOutputAsString();
assertNotNull(output);
assertTrue(output, output.contains("hello"));
} catch (InvocationTargetException t) {
@@ -132,15 +136,19 @@ public class SLING10478IT extends ServletResolverTestSupport {
}
}
-
- /**
- * Subclass to simulate what the SlingHttpServletResponseImpl writer does
+ /**
+ * Subclass to simulate what the SlingHttpServletResponseImpl writer does
*/
- private static final class HandleErrorMockSlingHttpServletResponse extends MockSlingHttpServletResponse {
+ private static final class HandleErrorMockSlingHttpServletResponse extends SlingHttpServletResponseWrapper {
+
private HandleErrorResponseWriter writer = null;
+ public HandleErrorMockSlingHttpServletResponse(final SlingHttpServletResponse r) {
+ super(r);
+ }
+
@Override
- public PrintWriter getWriter() {
+ public PrintWriter getWriter() throws IOException{
if (writer == null) {
writer = new HandleErrorResponseWriter(super.getWriter());
}
@@ -148,7 +156,7 @@ public class SLING10478IT extends ServletResolverTestSupport {
}
@Override
- public void flushBuffer() {
+ public void flushBuffer() throws IOException {
if (!writer.isOpen()) {
throw new IllegalStateException("Writer Already Closed");
}
@@ -157,7 +165,7 @@ public class SLING10478IT extends ServletResolverTestSupport {
}
/**
- * Subclass to simulate what the SlingHttpServletResponseImpl writer does
+ * Subclass to simulate what the SlingHttpServletResponseImpl writer does
*/
private static final class HandleErrorResponseWriter extends PrintWriter {
@@ -176,7 +184,5 @@ public class SLING10478IT extends ServletResolverTestSupport {
public boolean isOpen() {
return open;
}
-
}
-
}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/ScriptEngineManagerMock.java b/src/test/java/org/apache/sling/servlets/resolver/it/ScriptEngineManagerMock.java
new file mode 100644
index 0000000..a1cb7cc
--- /dev/null
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/ScriptEngineManagerMock.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.servlets.resolver.it;
+
+import javax.script.ScriptEngineManager;
+
+import org.osgi.service.component.annotations.Component;
+
+@Component(service = ScriptEngineManager.class)
+public class ScriptEngineManagerMock extends ScriptEngineManager {
+
+ // nothing to do
+}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
index a0ae52e..5641bef 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
@@ -18,34 +18,32 @@
*/
package org.apache.sling.servlets.resolver.it;
-import java.lang.reflect.Method;
-
import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.request.builder.Builders;
+import org.apache.sling.api.request.builder.SlingHttpServletResponseResult;
+import org.apache.sling.api.resource.AbstractResource;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.engine.SlingRequestProcessor;
-import org.apache.sling.servlethelpers.MockSlingHttpServletRequest;
-import org.apache.sling.servlethelpers.MockSlingHttpServletResponse;
import org.apache.sling.testing.paxexam.TestSupport;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.options.extra.VMOption;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
-import static org.apache.sling.testing.paxexam.SlingOptions.sling;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingScripting;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingXss;
-import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
-import static org.apache.sling.testing.paxexam.SlingVersionResolver.SLING_GROUP_ID;
+import static org.apache.sling.testing.paxexam.SlingOptions.eventadmin;
+import static org.apache.sling.testing.paxexam.SlingOptions.scr;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.vmOption;
@@ -56,15 +54,11 @@ import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
public class ServletResolverTestSupport extends TestSupport {
@Inject
- private ResourceResolverFactory resourceResolverFactory;
+ protected ResourceResolverFactory resourceResolverFactory;
@Inject
protected BundleContext bundleContext;
- @SuppressWarnings("unused")
- @Inject
- private SlingRequestProcessor slingRequestProcessor;
-
public static final String P_PATHS = "sling.servlet.paths";
public static final String P_RESOURCE_TYPES = "sling.servlet.resourceTypes";
public static final String P_METHODS = "sling.servlet.methods";
@@ -96,37 +90,37 @@ public class ServletResolverTestSupport extends TestSupport {
}
final int httpPort = findFreePort();
- versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.api");
- versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.resourceresolver");
- versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.scripting.core");
- versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.commons.johnzon");
- versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.engine");
- versionResolver.setVersion(SLING_GROUP_ID, "org.apache.sling.auth.core", "1.6.0");
- versionResolver.setVersion("commons-fileupload", "commons-fileupload", "1.5");
return options(
composite(
when(debugOption != null).useOptions(debugOption),
when(vmOption != null).useOptions(vmOption),
when(jacocoCommand != null).useOptions(jacocoCommand),
baseConfiguration(),
- sling(),
- slingScripting(),
- slingXss(),
+ mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.servlet-api").version("3.0.0"),
+ mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.jetty12").version("1.0.26"),
+ scr(),
+ eventadmin(),
+ mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.9"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.johnzon").versionAsInProject(),
+ mavenBundle().groupId("commons-io").artifactId("commons-io").versionAsInProject(),
+ mavenBundle().groupId("commons-codec").artifactId("commons-codec").version("1.15"),
+ mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").versionAsInProject(),
+ mavenBundle().groupId("org.apache.commons").artifactId("commons-collections4").version("4.4"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.mime").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.osgi").version("2.4.2"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.spi").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.serviceusermapper").versionAsInProject(),
+ mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.healthcheck.api").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.auth.core").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.settings").version("1.4.2"),
+ mavenBundle().groupId("commons-fileupload").artifactId("commons-fileupload").version("1.5"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.engine").versionAsInProject(),
+
factoryConfiguration("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended")
.put("user.mapping", new String[]{"org.apache.sling.servlets.resolver:console=sling-readall", "org.apache.sling.servlets.resolver:scripts=sling-scripting"})
.asOption(),
-
- mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.9"), // new Sling API dependency
- testBundle(),
- mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.spi").versionAsInProject(),
- mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlet-helpers").versionAsInProject(),
- mavenBundle().groupId("org.glassfish").artifactId("jakarta.json").versionAsInProject(),
- //
- mavenBundle().groupId("commons-codec").artifactId("commons-codec").version("1.15"),
- //
- mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.healthcheck.api").versionAsInProject(),
- //
- junitBundles(),
newConfiguration("org.apache.felix.http")
.put("org.osgi.service.http.port", httpPort)
.asOption(),
@@ -135,8 +129,12 @@ public class ServletResolverTestSupport extends TestSupport {
.asOption(),
buildBundleWithBnd(
TestResourceProvider.class,
- TestServiceUserValidator.class
+ TestServiceUserValidator.class,
+ ScriptEngineManagerMock.class
),
+
+ testBundle(),
+
newConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist")
.put("whitelist.bundles.regexp", "^PAXEXAM.*$")
.asOption(),
@@ -151,38 +149,56 @@ public class ServletResolverTestSupport extends TestSupport {
return testBundle("bundle.filename");
}
- protected MockSlingHttpServletResponse executeRequest(final String path, final int expectedStatus) throws Exception {
+ protected SlingHttpServletResponse createMockSlingHttpServletResponse() {
+ return Builders.newResponseBuilder().build();
+ }
+
+ protected SlingHttpServletResponse executeRequest(final String path, final int expectedStatus) throws Exception {
return executeRequest("GET", path, expectedStatus);
}
- protected MockSlingHttpServletResponse executeRequest(final String method, final String path, final int expectedStatus) throws Exception {
+ protected SlingHttpServletResponse executeRequest(final String method, final String path, final int expectedStatus) throws Exception {
final ResourceResolver resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
assertNotNull("Expecting ResourceResolver", resourceResolver);
- final MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(resourceResolver) {
+ final Resource resource = new AbstractResource() {
@Override
- public String getMethod() {
- return method;
+ public String getPath() {
+ return path;
+ }
+
+ @Override
+ public @NotNull String getResourceType() {
+ return "foo/bar";
+ }
+
+ @Override
+ public @Nullable String getResourceSuperType() {
+ return null;
+ }
+
+ @Override
+ public @NotNull ResourceMetadata getResourceMetadata() {
+ return new ResourceMetadata();
+ }
+
+ @Override
+ public @NotNull ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
};
- request.setPathInfo(path);
- final MockSlingHttpServletResponse response = createMockSlingHttpServletResponse();
-
- // Get SlingRequestProcessor.processRequest method and execute request
- // This module depends on an older version of the sling.engine module and I don't want
- // to change it just for these tests, so using reflection to get the processor, as we're
- // running with a more recent version of sling.engine in the pax exam environment
- final String slingRequestProcessorClassName = "org.apache.sling.engine.SlingRequestProcessor";
- final ServiceReference<?> ref = bundleContext.getServiceReference(slingRequestProcessorClassName);
- assertNotNull("Expecting service:" + slingRequestProcessorClassName, ref);
-
- final Object processor = bundleContext.getService(ref);
+
+ final SlingHttpServletRequest request = Builders
+ .newRequestBuilder(resource)
+ .withRequestMethod(method)
+ .build();
+ final SlingHttpServletResponse response = createMockSlingHttpServletResponse();
+
+ final ServiceReference<SlingRequestProcessor> ref = bundleContext.getServiceReference(SlingRequestProcessor.class);
+ assertNotNull("Expecting service:" + SlingRequestProcessor.class, ref);
+
+ final SlingRequestProcessor processor = bundleContext.getService(ref);
try {
- // void processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse resource, ResourceResolver resourceResolver)
- final Method processMethod = processor.getClass().getMethod(
- "processRequest",
- HttpServletRequest.class, HttpServletResponse.class, ResourceResolver.class);
- assertNotNull("Expecting processRequest method", processMethod);
- processMethod.invoke(processor, request, response, resourceResolver);
+ processor.processRequest(request, response, resourceResolver);
} finally {
bundleContext.ungetService(ref);
}
@@ -195,10 +211,6 @@ public class ServletResolverTestSupport extends TestSupport {
return response;
}
- protected MockSlingHttpServletResponse createMockSlingHttpServletResponse() {
- return new MockSlingHttpServletResponse();
- }
-
protected void assertTestServlet(final String path, int expectedStatus) throws Exception {
assertTestServlet(M_GET, path, expectedStatus);
}
@@ -212,9 +224,9 @@ public class ServletResolverTestSupport extends TestSupport {
}
protected void assertTestServlet(final String method, final String path, final String servletName) throws Exception {
- final String output = executeRequest(method, path, TestServlet.IM_A_TEAPOT).getOutputAsString();
+ final SlingHttpServletResponse response = executeRequest(method, path, TestServlet.IM_A_TEAPOT);
+ final String output = ((SlingHttpServletResponseResult) response).getOutputAsString();
final String expected = TestServlet.SERVED_BY_PREFIX + servletName;
assertTrue("Expecting output to contain " + expected + ", got " + output, output.contains(expected));
}
-
}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
index ee66b13..ebcda66 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
@@ -19,13 +19,13 @@
package org.apache.sling.servlets.resolver.it;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.LinkedHashSet;
import java.util.Set;
+import java.util.jar.JarInputStream;
-import javax.inject.Inject;
import javax.script.ScriptException;
import javax.servlet.Servlet;
import javax.servlet.http.HttpServletRequest;
@@ -34,7 +34,6 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.sling.api.resource.LoginException;
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.api.servlets.ServletResolverConstants;
import org.apache.sling.scripting.spi.bundle.BundledRenderUnit;
import org.apache.sling.scripting.spi.bundle.TypeProvider;
@@ -48,8 +47,8 @@ import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
-import org.ops4j.pax.tinybundles.core.TinyBundle;
-import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.ops4j.pax.tinybundles.TinyBundle;
+import org.ops4j.pax.tinybundles.TinyBundles;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -63,19 +62,13 @@ public class ServletResourceIT extends ServletResolverTestSupport {
private BundledRenderUnit bundledRenderUnit;
- @Inject
- private ResourceResolverFactory resourceResolverFactory;
-
- @Inject
- private BundleContext bundleContext;
-
protected Option testBundle() {
try {
- TinyBundle bundle = TinyBundles.bundle().read(new FileInputStream(System.getProperty("bundle.filename")));
+ TinyBundle bundle = TinyBundles.bundle().readIn(new JarInputStream(new FileInputStream(System.getProperty("bundle.filename"))));
String header = bundle.getHeader("Export-Package");
- bundle.set("Export-Package", header + ",org.apache.sling.servlets.resolver.internal.bundle");
+ bundle.setHeader("Export-Package", header + ",org.apache.sling.servlets.resolver.internal.bundle");
return streamBundle(bundle.build()).start();
- } catch (FileNotFoundException e) {
+ } catch (IOException e) {
throw new RuntimeException(e);
}
}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/TestResourceProvider.java b/src/test/java/org/apache/sling/servlets/resolver/it/TestResourceProvider.java
index cec1ca0..518ce34 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/TestResourceProvider.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/TestResourceProvider.java
@@ -19,9 +19,7 @@
package org.apache.sling.servlets.resolver.it;
import java.util.Iterator;
-
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.spi.resource.provider.ProviderContext;
import org.apache.sling.spi.resource.provider.ResolveContext;
import org.apache.sling.spi.resource.provider.ResourceContext;
import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -37,9 +35,6 @@ import org.osgi.service.component.annotations.Component;
)
public class TestResourceProvider extends ResourceProvider<Void> {
- public TestResourceProvider() {
- }
-
@Override
public @Nullable Resource getResource(@NotNull ResolveContext<Void> ctx, @NotNull String path, @NotNull ResourceContext resourceContext, @Nullable Resource parent) {
return null;
@@ -49,20 +44,4 @@ public class TestResourceProvider extends ResourceProvider<Void> {
public @Nullable Iterator<Resource> listChildren(@NotNull ResolveContext<Void> ctx, @NotNull Resource parent) {
return null;
}
-
- @Override
- public void start(@NotNull ProviderContext ctx) {
- super.start(ctx);
- }
-
- @Override
- public void stop() {
- super.stop();
- }
-
- @Override
- public void update(long changeSet) {
- super.update(changeSet);
- }
-
}