You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2018/11/08 21:35:42 UTC

[sling-org-apache-sling-servlets-get] branch feature/SLING-7936 created (now b19a9fa)

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

rombert pushed a change to branch feature/SLING-7936
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-get.git.


      at b19a9fa  SLING-7936 - Execute module integration tests in the launchpad-testing module

This branch includes the following new commits:

     new b19a9fa  SLING-7936 - Execute module integration tests in the launchpad-testing module

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sling-org-apache-sling-servlets-get] 01/01: SLING-7936 - Execute module integration tests in the launchpad-testing module

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch feature/SLING-7936
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-get.git

commit b19a9fac4bcfe659ac8c2e91c48e426215eca9cd
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Thu Nov 8 22:04:44 2018 +0100

    SLING-7936 - Execute module integration tests in the launchpad-testing module
    
    Transplant HeadServletTest from the launchpad.tests module. Some initial notes:
    
    - the slingstart-maven-plugin configuration is overly verbose and easy to get
      wrong
    - we deploy the test.services bundle since we rely on some initial content from
      it, but each project should provide its own test content
---
 pom.xml                                            |  65 +++++++++++
 .../sling/servlets/get/impl/HeadServletIT.java     | 120 +++++++++++++++++++++
 src/test/provisioning/model.txt                    |  31 ++++++
 3 files changed, 216 insertions(+)

diff --git a/pom.xml b/pom.xml
index bae405c..dee4e96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,6 +76,65 @@
                     </excludePackageNames>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>slingstart-maven-plugin</artifactId>
+                <version>1.8.2</version>
+                <extensions>true</extensions>
+                <executions>
+                    <execution>
+                        <id>prepare-launchpad-package</id>
+                        <goals>
+                            <goal>prepare-package</goal>
+                        </goals>
+                        <phase>pre-integration-test</phase>
+                    </execution>
+                    <execution>
+                        <id>build-launchpad-package</id>
+                        <goals>
+                            <goal>package</goal>
+                        </goals>
+                        <phase>pre-integration-test</phase>
+                        <configuration>
+                            <attachArtifact>false</attachArtifact>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>start-container</id>
+                        <goals>
+                            <goal>start</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>stop-container</id>
+                        <goals>
+                            <goal>stop</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <!-- this configuration only applies to 'prepare-package' and 'package' -->
+                    <disableExtendingMavenClasspath>true</disableExtendingMavenClasspath>
+                    <usePomDependencies>true</usePomDependencies>
+                    <servers>
+                        <server>
+                            <port>8080</port>
+                        </server>
+                    </servers>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <version>2.21.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
     <dependencies>
@@ -163,5 +222,11 @@
                 	<type>bundle</type>
                 	<scope>test</scope>
                 </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.testing</artifactId>
+            <version>2.1.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/test/java/org/apache/sling/servlets/get/impl/HeadServletIT.java b/src/test/java/org/apache/sling/servlets/get/impl/HeadServletIT.java
new file mode 100644
index 0000000..91767d5
--- /dev/null
+++ b/src/test/java/org/apache/sling/servlets/get/impl/HeadServletIT.java
@@ -0,0 +1,120 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.UUID;
+import java.util.regex.Pattern;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.HeadMethod;
+import org.apache.sling.commons.testing.integration.HttpTest;
+import org.apache.sling.commons.testing.integration.HttpTestBase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Test HEAD requests */
+public class HeadServletIT {
+
+    private final HttpTest H = new HttpTest();
+    
+    /** Test content provided by the test-services bundle */
+    public static final String HTML_URL = HttpTestBase.HTTP_BASE_URL + "/sling-test/some.html";
+    
+    /** Test content provided by the test-services bundle */
+    public static final String PNG_URL = HttpTestBase.HTTP_BASE_URL + "/sling-test/sling-logo.png";
+    
+    public static final String NONEXISTENT_URL = HttpTestBase.HTTP_BASE_URL + "/notfound-" + UUID.randomUUID().toString();  
+    
+    private void assertResponseHeader(HttpMethod m, String name, String expectedRegex) {
+        final Header h = m.getResponseHeader(name);
+        assertNotNull("Expecting header " + name, h);
+        final String value = h.getValue();
+        assertTrue("Expected regexp " + expectedRegex + " for header " + name + ", header value is " + value,
+                Pattern.matches(expectedRegex, value));
+    }
+    
+    private void assertCommonHeaders(HttpMethod m, String expectedContentType) {
+        assertResponseHeader(m, "Content-Length", "[0-9][0-9][0-9]+");
+        assertResponseHeader(m, "Content-Type", expectedContentType);
+        assertResponseHeader(m, "Last-Modified", ".*[a-zA-Z0-9]+.*");
+    }
+    
+    @Before
+    public void setup() throws Exception {
+        H.setUp();
+    }
+    
+    @After
+    public void cleanup() throws Exception {
+        H.tearDown();
+    }
+    
+    @Test
+    public void htmlGet() throws IOException {
+        final String content = H.getContent(HTML_URL, HttpTest.CONTENT_TYPE_HTML);
+        HttpTest.assertContains(content, "This is some HTML for testing Sling.");
+    }
+    
+    @Test
+    public void htmlHead() throws IOException {
+        final HeadMethod head = new HeadMethod(HTML_URL);
+        final int status = H.getHttpClient().executeMethod(head);
+        assertEquals(200, status);
+        assertNull("Expecting null body", head.getResponseBody());
+        assertCommonHeaders(head, "text/html");
+    }
+    
+    @Test
+    public void pngGet() throws IOException {
+        final GetMethod get = new GetMethod(PNG_URL);
+        final int status = H.getHttpClient().executeMethod(get);
+        assertEquals(200, status);
+        assertNotNull(get.getResponseBody());
+        assertTrue("Expecting non-empty body", get.getResponseBody().length > 500);
+        assertCommonHeaders(get, "image/png");
+    }
+    
+    @Test
+    public void pngHead() throws IOException {
+        final HeadMethod head = new HeadMethod(PNG_URL);
+        final int status = H.getHttpClient().executeMethod(head);
+        assertEquals(200, status);
+        assertNull("Expecting null body", head.getResponseBody());
+        assertCommonHeaders(head, "image/png");
+    }
+    
+    @Test
+    public void nonexistentGet() throws IOException {
+        final GetMethod get = new GetMethod(NONEXISTENT_URL);
+        assertEquals(404, H.getHttpClient().executeMethod(get));
+    }
+    
+    @Test
+    public void nonexistentHead() throws IOException {
+        final HeadMethod head = new HeadMethod(NONEXISTENT_URL);
+        assertEquals(404, H.getHttpClient().executeMethod(head));
+    }
+}
diff --git a/src/test/provisioning/model.txt b/src/test/provisioning/model.txt
new file mode 100644
index 0000000..445b577
--- /dev/null
+++ b/src/test/provisioning/model.txt
@@ -0,0 +1,31 @@
+#
+#  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.
+#
+
+# must be the same feature name as the feature defined in slingstart to allow merging
+[feature name=sling]
+# Dependencies
+[artifacts]
+  org.apache.sling/org.apache.sling.starter/12-SNAPSHOT/slingstart
+  org.apache.sling/org.apache.sling.launchpad.test-services/12-SNAPSHOT
+  org.apache.sling/org.apache.sling.launchpad.test-bundles/12-SNAPSHOT/slingfeature
+  org.apache.sling/org.apache.sling.servlets.get
+
+[configurations]
+  org.apache.sling.jcr.base.internal.LoginAdminWhitelist [mode=merge]
+    whitelist.bundles.regexp="org.apache.sling.(launchpad|junit).*"