You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2010/09/27 17:16:36 UTC

svn commit: r1001774 - in /sling/trunk: bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ launchpad/integration-te...

Author: fmeschbe
Date: Mon Sep 27 15:16:33 2010
New Revision: 1001774

URL: http://svn.apache.org/viewvc?rev=1001774&view=rev
Log:
SLING-1069 Apply my patch for full-permutation of script registration and add Bertrand's integration tests and add a few unit tests

Added:
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java   (with props)
    sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java   (with props)
Modified:
    sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
    sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ResolutionTestBase.java

Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java?rev=1001774&r1=1001773&r2=1001774&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java Mon Sep 27 15:16:33 2010
@@ -279,17 +279,25 @@ public class ServletResourceProviderFact
                 }
 
                 boolean pathAdded = false;
-
-                // create paths with extensions
                 if (extensions != null) {
-                    for (String ext : extensions) {
-                        pathSet.add(selPath + ext + SERVLET_PATH_EXTENSION);
-                        pathAdded = true;
+                    if (methods != null) {
+                        // both methods and extensions declared
+                        for (String ext : extensions) {
+                            for (String method : methods) {
+                                pathSet.add(selPath + ext + "." + method
+                                    + SERVLET_PATH_EXTENSION);
+                                pathAdded = true;
+                            }
+                        }
+                    } else {
+                        // only extensions declared
+                        for (String ext : extensions) {
+                            pathSet.add(selPath + ext + SERVLET_PATH_EXTENSION);
+                            pathAdded = true;
+                        }
                     }
-                }
-
-                // create paths with method names
-                if (methods != null) {
+                } else if (methods != null) {
+                    // only methods declared
                     for (String method : methods) {
                         pathSet.add(selPath + method + SERVLET_PATH_EXTENSION);
                         pathAdded = true;

Modified: sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java?rev=1001774&r1=1001773&r2=1001774&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java Mon Sep 27 15:16:33 2010
@@ -160,4 +160,74 @@ public class ServletResourceProviderCrea
         assertTrue(checkerSet.isEmpty());
     }
 
+    public void testCreateSelectorsExtensions() {
+        MockServiceReference msr = new MockServiceReference(null);
+
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES,
+            RES_TYPE);
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_METHODS,
+            new String[] { HttpConstants.METHOD_GET });
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_SELECTORS,
+            new String[] { "ext" });
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_EXTENSIONS,
+            new String[] { "json" });
+
+        ServletResourceProvider srp = factory.create(msr);
+        assertNotNull(srp);
+        srp.setServlet(TEST_SERVLET);
+
+        String[] paths = srp.getServletPaths();
+        assertNotNull(paths);
+        assertEquals(1, paths.length);
+
+        Set<String> checkerSet = new HashSet<String>();
+        checkerSet.add(ROOT + RES_TYPE_PATH + "/ext.json."
+            + HttpConstants.METHOD_GET
+            + ServletResourceProviderFactory.SERVLET_PATH_EXTENSION);
+
+        for (String path : paths) {
+            assertTrue(path + " not expected", checkerSet.remove(path));
+        }
+
+        assertTrue(checkerSet.isEmpty());
+    }
+    public void testCreateMethodsExtensions() {
+        MockServiceReference msr = new MockServiceReference(null);
+
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES,
+            RES_TYPE);
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_METHODS,
+            new String[] { HttpConstants.METHOD_GET, HttpConstants.METHOD_POST });
+        msr.setProperty(ServletResolverConstants.SLING_SERVLET_EXTENSIONS,
+            new String[] { "json", "html" });
+
+        ServletResourceProvider srp = factory.create(msr);
+        assertNotNull(srp);
+        srp.setServlet(TEST_SERVLET);
+
+        String[] paths = srp.getServletPaths();
+        assertNotNull(paths);
+        assertEquals(4, paths.length);
+
+        Set<String> checkerSet = new HashSet<String>();
+        checkerSet.add(ROOT + RES_TYPE_PATH + "/json."
+            + HttpConstants.METHOD_GET
+            + ServletResourceProviderFactory.SERVLET_PATH_EXTENSION);
+        checkerSet.add(ROOT + RES_TYPE_PATH + "/html."
+            + HttpConstants.METHOD_GET
+            + ServletResourceProviderFactory.SERVLET_PATH_EXTENSION);
+        checkerSet.add(ROOT + RES_TYPE_PATH + "/json."
+            + HttpConstants.METHOD_POST
+            + ServletResourceProviderFactory.SERVLET_PATH_EXTENSION);
+        checkerSet.add(ROOT + RES_TYPE_PATH + "/html."
+            + HttpConstants.METHOD_POST
+            + ServletResourceProviderFactory.SERVLET_PATH_EXTENSION);
+
+        for (String path : paths) {
+            assertTrue(path + " not expected", checkerSet.remove(path));
+        }
+
+        assertTrue(checkerSet.isEmpty());
+    }
+
 }

Added: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java?rev=1001774&view=auto
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java (added)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java Mon Sep 27 15:16:33 2010
@@ -0,0 +1,66 @@
+/*
+ * 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.launchpad.webapp.integrationtest.servlets.resolution;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.NameValuePair;
+
+/** Test for SLING-1069 */
+public class HtmlDefaultServletTest extends ResolutionTestBase {
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        // enable the HtmlDefaultServlet before testing
+        changeComponent(
+            "org.apache.sling.launchpad.testservices.servlets.HtmlDefaultServlet",
+            "enable");
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        // disable the HtmlDefaultServlet before testing
+        changeComponent(
+            "org.apache.sling.launchpad.testservices.servlets.HtmlDefaultServlet",
+            "disable");
+        super.tearDown();
+    }
+
+    public void testHtmlExtension() throws IOException {
+        assertServlet(
+            getContent(testNodeNORT.nodeUrl + ".html", CONTENT_TYPE_PLAIN),
+            HTML_DEFAULT_SERVLET_SUFFIX);
+    }
+
+    public void testJsonExtension() throws IOException {
+        assertNotTestServlet(getContent(testNodeNORT.nodeUrl + ".json",
+            CONTENT_TYPE_DONTCARE));
+    }
+
+    protected void changeComponent(final String component, final String action)
+            throws IOException {
+        List<NameValuePair> pars = new ArrayList<NameValuePair>();
+        pars.add(new NameValuePair("action", action));
+        assertPostStatus(HTTP_BASE_URL + "/system/console/components/"
+            + component, HttpServletResponse.SC_OK, pars, null);
+    }
+}

Propchange: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/HtmlDefaultServletTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Modified: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ResolutionTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ResolutionTestBase.java?rev=1001774&r1=1001773&r2=1001774&view=diff
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ResolutionTestBase.java (original)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ResolutionTestBase.java Mon Sep 27 15:16:33 2010
@@ -31,20 +31,21 @@ class ResolutionTestBase extends HttpTes
   public static final String TEST_SERVLET_MARKER = "created by org.apache.sling.launchpad.testservices.servlets";
   public static final String TEST_RESOURCE_TYPE = "LAUNCHPAD_TEST_ResourceType";
   public static final String TEST_PATH = "/servlet-resolution-tests/" + System.currentTimeMillis();
-  public static final String NONEXISTING_RESOURCE_URL = HTTP_BASE_URL + TEST_PATH + "/NonExistingResource"; 
-   
+  public static final String NONEXISTING_RESOURCE_URL = HTTP_BASE_URL + TEST_PATH + "/NonExistingResource";
+
   public static final String EXT_SERVLET_SUFFIX = "testservices.servlets.ExtensionServlet";
   public static final String SEL_SERVLET_SUFFIX = "testservices.servlets.SelectorServlet";
   public static final String WAR_SEL_SERVLET_SUFFIX = "testservices.war.servlets.SelectorServlet";
   public static final String PREFIX_0_SERVLET_SUFFIX = "testservices.servlets.PrefixServletZero";
   public static final String PREFIX_M1_SERVLET_SUFFIX = "testservices.servlets.PrefixServletMinusOne";
   public static final String PUT_SERVLET_SUFFIX = "testservices.servlets.PutMethodServlet";
+  public static final String HTML_DEFAULT_SERVLET_SUFFIX = "testservices.servlets.HtmlDefaultServlet";
   public static final String REQUEST_URI_OPTING_SERVLET_SUFFIX = "testservices.servlets.RequestUriOptingServlet";
   public static final String PATHS_SERVLET_SUFFIX = "testservices.servlets.PathsServlet";
-  
+
   protected TestNode testNodeNORT;
   protected TestNode testNodeRT;
-  
+
   @Override
   protected void setUp() throws Exception {
     super.setUp();
@@ -63,7 +64,7 @@ class ResolutionTestBase extends HttpTes
 
   /** Asserts that the given content is in Properties format and
    *  contains a property named CLASS_PROP that ends with
-   *  expected suffix  
+   *  expected suffix
    */
   protected void assertServlet(String content, String expectedSuffix) throws IOException {
     final Properties props = new Properties();
@@ -80,7 +81,7 @@ class ResolutionTestBase extends HttpTes
         CLASS_PROP + " property value (" + clazz + ") ends with " + expectedSuffix,
         clazz.endsWith(expectedSuffix));
   }
-  
+
   /** Assert that content does not contain TEST_SERVLET_MARKER
    */
   protected void assertNotTestServlet(String content) {

Added: sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java?rev=1001774&view=auto
==============================================================================
--- sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java (added)
+++ sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java Mon Sep 27 15:16:33 2010
@@ -0,0 +1,40 @@
+/*
+ * 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.launchpad.testservices.servlets;
+
+/**
+ * Default servlet for the html extension, see SLING-1069.
+ * <p>
+ * This servlet collides with the Default GET Servlet generating proper HTML not
+ * expected by HtmlDefaultServletTest. For this reason this component is
+ * disabled by default and must be enabled for testing in the
+ * HtmlDefaultServletTest class.
+ *
+ * @scr.component enabled="false"
+ *                name="org.apache.sling.launchpad.testservices.servlets.HtmlDefaultServlet"
+ *                metatype="no" immediate="true" label="%sling.name"
+ *                description="%sling.description"
+ * @scr.service interface="javax.servlet.Servlet"
+ * @scr.property name="sling.servlet.extensions" value="html"
+ * @scr.property name="sling.servlet.resourceTypes"
+ *               value="sling/servlet/default"
+ * @scr.property name="sling.servlet.methods" value="GET"
+ */
+@SuppressWarnings("serial")
+public class HtmlDefaultServlet extends TestServlet {
+}
\ No newline at end of file

Propchange: sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url