You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2020/07/08 12:13:59 UTC

svn commit: r1879647 - in /jackrabbit/trunk/jackrabbit-jcr-server/src/test: java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java resources/keystore

Author: reschke
Date: Wed Jul  8 12:13:59 2020
New Revision: 1879647

URL: http://svn.apache.org/viewvc?rev=1879647&view=rev
Log:
JCR-4574: add tests for https (with self-signed cert)

Added:
    jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java   (with props)
    jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/keystore   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java

Added: jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java?rev=1879647&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java (added)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java Wed Jul  8 12:13:59 2020
@@ -0,0 +1,42 @@
+/*
+ * 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.jackrabbit.webdav.server;
+
+import java.io.IOException;
+import java.text.ParseException;
+
+import javax.net.ssl.SSLHandshakeException;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+
+public class HttpsSelfSignedTest extends WebDAVTestBase {
+
+    // check that by default, the client will fail connecting to HTTPS due to
+    // self-signed certificate
+    public void testPutCheckLastModified() throws IOException, ParseException {
+        try {
+            String testUri = this.httpsUri.toString();
+            HttpPut put = new HttpPut(testUri);
+            put.setEntity(new StringEntity("foobar"));
+            HttpResponse response = this.client.execute(put, this.context);
+            fail("should failt with SSLHandshakeException, but got: " + response);
+        } catch (SSLHandshakeException expected) {
+        }
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/HttpsSelfSignedTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java?rev=1879647&r1=1879646&r2=1879647&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/WebDAVTestBase.java Wed Jul  8 12:13:59 2020
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.webdav.server;
 
+import static org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet.INIT_PARAM_RESOURCE_CONFIG;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -23,7 +25,10 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
 
-import junit.framework.TestResult;
+import javax.jcr.Repository;
+import javax.servlet.ServletException;
+
+import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHost;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
@@ -37,26 +42,23 @@ import org.apache.http.impl.client.Basic
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-
 import org.apache.jackrabbit.core.RepositoryContext;
-import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
-
 import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.RepositoryStubException;
 import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet;
-
+import org.eclipse.jetty.http.HttpVersion;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
 
-import org.apache.jackrabbit.test.RepositoryStubException;
-
-import javax.jcr.Repository;
-import javax.servlet.ServletException;
-
-import static org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet.INIT_PARAM_RESOURCE_CONFIG;
+import junit.framework.TestResult;
 
 /**
  * Base class for WebDAV tests.
@@ -65,16 +67,21 @@ public class WebDAVTestBase extends Abst
 
     private static final String WEBDAV_SERVLET_PATH_MAPPING = "/*";
 
-    private static ServerConnector connector;
+    private static ServerConnector httpConnector;
+    private static ServerConnector httpsConnector;
     private static Server server;
     private static RepositoryContext repoContext;
 
     public URI uri;
+    public URI httpsUri;
     public String root;
 
     public HttpClient client;
     public HttpClientContext context;
 
+    private static final String KEYSTORE = "keystore";
+    private static final String KEYSTOREPW = "geheimer";
+
     protected void setUp() throws Exception {
         super.setUp();
 
@@ -88,6 +95,11 @@ public class WebDAVTestBase extends Abst
             createDefaultConfiguration(config);
         }
 
+        File keystore = new File(home, KEYSTORE);
+        if (!keystore.exists()) {
+            createKeystore(keystore);
+        }
+
         if (repoContext == null) {
             repoContext = RepositoryContext.create(RepositoryConfig.create(config.toURI(), home.getPath()));
         }
@@ -109,12 +121,28 @@ public class WebDAVTestBase extends Abst
             server.setHandler(schandler);
         }
 
-        if (connector == null) {
-            connector = new ServerConnector(server);
-            connector.setHost("localhost");
-            connector.setPort(0);
-            server.addConnector(connector);
+        if (httpConnector == null) {
+            httpConnector = new ServerConnector(server);
+            httpConnector.setHost("localhost");
+            httpConnector.setPort(0);
+            server.addConnector(httpConnector);
+        }
+
+        if (httpsConnector == null) {
+            SslContextFactory sslContextFactory = new SslContextFactory();
+            sslContextFactory.setKeyStorePath(keystore.getPath());
+            sslContextFactory.setKeyStorePassword(KEYSTOREPW);
+            sslContextFactory.setKeyManagerPassword(KEYSTOREPW);
+            sslContextFactory.setTrustStorePath(keystore.getPath());
+            sslContextFactory.setTrustStorePassword(KEYSTOREPW);
+            SslConnectionFactory cfac = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
+            httpsConnector = new ServerConnector(server, cfac, new HttpConnectionFactory(new HttpConfiguration()));
+            httpsConnector.setHost("localhost");
+            httpsConnector.setPort(0);
+            server.addConnector(httpsConnector);
+        }
 
+        if (!server.isStarted()) {
             try {
                 server.start();
             } catch (Exception e) {
@@ -122,7 +150,8 @@ public class WebDAVTestBase extends Abst
             }
         }
 
-        this.uri = new URI("http", null, "localhost", connector.getLocalPort(), "/default/", null, null);
+        this.uri = new URI("http", null, "localhost", httpConnector.getLocalPort(), "/default/", null, null);
+        this.httpsUri = new URI("https", null, "localhost", httpsConnector.getLocalPort(), "/default/", null, null);
         this.root = this.uri.toASCIIString();
 
         PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
@@ -165,29 +194,21 @@ public class WebDAVTestBase extends Abst
      * @param config path of the configuration file
      * @throws ServletException if the configuration file could not be copied
      */
-    private void createDefaultConfiguration(File config)
-            throws ServletException {
-        try {
-            OutputStream output = new FileOutputStream(config);
-            try {
-                InputStream input =
-                        RepositoryImpl.class.getResourceAsStream("repository.xml");
-                try {
-                    byte[] buffer = new byte[8192];
-                    int n = input.read(buffer);
-                    while (n != -1) {
-                        output.write(buffer, 0, n);
-                        n = input.read(buffer);
-                    }
-                } finally {
-                    input.close();
-                }
-            } finally {
-                output.close();
-            }
+    private void createDefaultConfiguration(File config) throws ServletException {
+        try (OutputStream output = new FileOutputStream(config);
+                InputStream input = WebDAVTestBase.class.getResourceAsStream("/repository.xml")) {
+            IOUtils.copy(input, output);
+        } catch (IOException e) {
+            throw new ServletException("Failed to copy default configuration: " + config, e);
+        }
+    }
+
+    private void createKeystore(File keystore) throws ServletException {
+        try (OutputStream output = new FileOutputStream(keystore);
+                InputStream input = WebDAVTestBase.class.getResourceAsStream("/" + KEYSTORE)) {
+            IOUtils.copy(input, output);
         } catch (IOException e) {
-            throw new ServletException(
-                    "Failed to copy default configuration: " + config, e);
+            throw new ServletException("Failed to copy keystore: " + keystore, e);
         }
     }
 

Added: jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/keystore
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/keystore?rev=1879647&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/keystore
------------------------------------------------------------------------------
    svn:executable = *

Propchange: jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/keystore
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream