This is an automated email from the ASF dual-hosted git repository.

bdelacretaz pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git

commit 7d342f0749a7b777cedc92c6706f27780273b0e9
Author: Bertrand Delacretaz <[email protected]>
AuthorDate: Wed Jan 29 12:57:29 2020 +0100

    SLING-8110 - PathBasedServletAcceptorTest added + renamed activation 
property
---
 pom.xml                                            |   2 +-
 .../internal/PathBasedServletAcceptor.java         |   4 +-
 .../internal/PathBasedServletAcceptorTest.java     | 210 +++++++++++++++++++++
 .../resolver/it/ServletResolverTestSupport.java    |   2 +-
 .../servlets/resolver/it/ServletSelectionIT.java   |   2 +-
 5 files changed, 215 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index ee1d2d1..1d33cb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,7 +46,7 @@
         <site.jira.version.id>12314292</site.jira.version.id>
         <pax.exam.version>4.13.1</pax.exam.version>
         <!-- To debug the pax process, override this with -D -->
-        <pax.vm.options>-Xmx256M -XX:MaxPermSize=256m</pax.vm.options>
+        <pax.vm.options>-Xmx512M</pax.vm.options>
     </properties>
 
     <build>
diff --git 
a/src/main/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptor.java
 
b/src/main/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptor.java
index cb5d1c2..adcc150 100644
--- 
a/src/main/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptor.java
+++ 
b/src/main/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptor.java
@@ -37,7 +37,7 @@ class PathBasedServletAcceptor {
     public static final Logger LOGGER = 
LoggerFactory.getLogger(PathBasedServletAcceptor.class);
 
     // TODO should be in ServletResolverConstants
-    public static final String EXTPATHS_SERVICE_PROPERTY = 
"sling.servlet.extpaths";
+    private static final String STRICT_PATHS_SERVICE_PROPERTY = 
"sling.servlet.paths.strict";
 
     boolean accept(SlingHttpServletRequest request, Servlet servlet) {
         // Get OSGi service properties from the SlingServletConfig
@@ -51,7 +51,7 @@ class PathBasedServletAcceptor {
 
         // If the servlet properties have the "extpaths" option, check 
extension, selector etc.
         boolean accepted = true;
-        final Object extpaths = 
config.getServiceProperty(EXTPATHS_SERVICE_PROPERTY);
+        final Object extpaths = 
config.getServiceProperty(STRICT_PATHS_SERVICE_PROPERTY);
         if(extpaths != null && Boolean.valueOf(extpaths.toString())) {
             accepted = 
                 accept(servletName, config, 
ServletResolverConstants.SLING_SERVLET_EXTENSIONS, 
request.getRequestPathInfo().getExtension())
diff --git 
a/src/test/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptorTest.java
 
b/src/test/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptorTest.java
new file mode 100644
index 0000000..5bcc91f
--- /dev/null
+++ 
b/src/test/java/org/apache/sling/servlets/resolver/internal/PathBasedServletAcceptorTest.java
@@ -0,0 +1,210 @@
+/*
+ * 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.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.RequestPathInfo;
+import org.apache.sling.servlets.resolver.internal.resource.SlingServletConfig;
+import org.apache.sling.servlets.resolver.it.ServletResolverTestSupport;
+import org.junit.Test;
+import org.osgi.framework.ServiceReference;
+
+public class PathBasedServletAcceptorTest {
+
+    public static final String [] STRING_ARRAY = new String[0];
+
+    private final PathBasedServletAcceptor acceptor = new 
PathBasedServletAcceptor();
+
+    private class TestCase {
+        private Dictionary<String, Object> serviceProperties = new 
Hashtable<>();
+        private String extension;
+        private List<String> selectors = new ArrayList<>();
+        private String method;
+
+        TestCase() {
+            serviceProperties.put(ServletResolverTestSupport.P_STRICT_PATHS, 
true);
+        }
+
+        TestCase withServiceProperty(String key, Object value) {
+            serviceProperties.put(key, value);
+            return this;
+        }
+
+        TestCase withServiceProperty(String key, Object ... values) {
+            serviceProperties.put(key, values);
+            return this;
+        }
+
+        TestCase withExtension(String ext) {
+            extension = ext;
+            return this;
+        }
+
+        TestCase withSelector(String sel) {
+            selectors.add(sel);
+            return this;
+        }
+
+        TestCase withSelectors(String ... sels) {
+            selectors.addAll(Arrays.asList(sels));
+            return this;
+        }
+
+        TestCase withMethod(String m) {
+            method = m;
+            return this;
+        }
+
+        void assertAccept(boolean expected) {
+
+            // Stub the ServiceReference with our service properties
+            final ServiceReference<Servlet> reference = 
mock(ServiceReference.class);
+            final String [] keys = 
Collections.list(serviceProperties.keys()).toArray(STRING_ARRAY);
+            when(reference.getPropertyKeys()).thenReturn(keys);
+            for(String key: keys) {
+                
when(reference.getProperty(key)).thenReturn(serviceProperties.get(key));
+            }
+
+            // Wire the Servlet to our ServiceReference
+            final ServletContext sc = mock(ServletContext.class);
+            final SlingServletConfig ssc = new SlingServletConfig(sc, 
reference, "42");
+            final Servlet servlet = mock(Servlet.class);
+            when(servlet.getServletConfig()).thenReturn(ssc);
+
+            // Setup the request values
+            final RequestPathInfo rpi = mock(RequestPathInfo.class);
+            when(rpi.getExtension()).thenReturn(extension);
+            
when(rpi.getSelectors()).thenReturn(selectors.toArray(STRING_ARRAY));
+
+            final SlingHttpServletRequest request = 
mock(SlingHttpServletRequest.class);
+            when(request.getRequestPathInfo()).thenReturn(rpi);
+            when(request.getMethod()).thenReturn(method);
+
+            // And call the acceptor
+            final boolean actual = acceptor.accept(request, servlet);
+            assertEquals(expected, actual);
+        }
+
+    }
+
+    @Test
+    public void extensionNoMatch() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_EXTENSIONS, "sp")
+        .withExtension("somethingElse")
+        .assertAccept(false);
+    }
+
+    @Test
+    public void extensionPropertyNotSet() {
+        new TestCase()
+        .withExtension("somethingElse")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void selectorNoMatch() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_SELECTORS, "sel")
+        .withSelector("somethingElse")
+        .assertAccept(false);
+    }
+
+    @Test
+    public void selectorOneMatchesOne() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_SELECTORS, "sel")
+        .withSelector("sel")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void selectorOneAmongSeveral() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_SELECTORS, "one")
+        .withServiceProperty(ServletResolverTestSupport.P_SELECTORS, "two")
+        .withServiceProperty(ServletResolverTestSupport.P_SELECTORS, "three")
+        .withSelector("three")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void selectorPropertyNotSet() {
+        new TestCase()
+        .withSelector("somethingElse")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void methodNoMatch() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_METHODS, "meth")
+        .withMethod("somethingElse")
+        .assertAccept(false);
+    }
+
+    @Test
+    public void methodPropertyNotSet() {
+        new TestCase()
+        .withMethod("somethingElse")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void testStringStrict() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_STRICT_PATHS, "true")
+        .withServiceProperty(ServletResolverTestSupport.P_METHODS, "meth")
+        .withMethod("somethingElse")
+        .assertAccept(false);
+    }
+
+    @Test
+    public void testStringFalseStrict() {
+        new TestCase()
+        .withServiceProperty(ServletResolverTestSupport.P_STRICT_PATHS, 
"false")
+        .withServiceProperty(ServletResolverTestSupport.P_METHODS, "meth")
+        .withMethod("somethingElse")
+        .assertAccept(true);
+    }
+
+    @Test
+    public void testNoSlingServletConfig() {
+        final Servlet s = mock(Servlet.class);
+        when(s.getServletConfig()).thenReturn(mock(ServletConfig.class));
+        assertTrue(acceptor.accept(null, s));
+    }
+
+}
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 3ce1b27..6c30337 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
@@ -71,7 +71,7 @@ public class ServletResolverTestSupport extends TestSupport {
     public static final String P_METHODS = "sling.servlet.methods";
     public static final String P_EXTENSIONS = "sling.servlet.extensions";
     public static final String P_SELECTORS = "sling.servlet.selectors";
-    public static final String P_EXTPATHS = "sling.servlet.extpaths";
+    public static final String P_STRICT_PATHS = "sling.servlet.paths.strict";
     public static final String RT_DEFAULT = "sling/servlet/default";
     public static final String M_GET = "GET";
     public static final String M_POST = "POST";
diff --git 
a/src/test/java/org/apache/sling/servlets/resolver/it/ServletSelectionIT.java 
b/src/test/java/org/apache/sling/servlets/resolver/it/ServletSelectionIT.java
index fdcacfa..0f4cf5f 100644
--- 
a/src/test/java/org/apache/sling/servlets/resolver/it/ServletSelectionIT.java
+++ 
b/src/test/java/org/apache/sling/servlets/resolver/it/ServletSelectionIT.java
@@ -70,7 +70,7 @@ public class ServletSelectionIT extends 
ServletResolverTestSupport {
 
         new TestServlet("ExtPaths")
         .with(P_PATHS, "/extpaths")
-        .with(P_EXTPATHS, "true")
+        .with(P_STRICT_PATHS, "true")
         .with(P_METHODS, "POST")
         .with(P_EXTENSIONS, "extPathsExt")
         .with(P_SELECTORS, "extPathsSel")

Reply via email to