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