From e4d626eef53dda242f5a44e1b358b0c753b0fed3 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 25 Jan 2016 16:48:11 +0100 Subject: [PATCH] added some basic integration tests for the WebDavServer --- .../webdav/server/WebDavComponent.java | 2 +- .../webdav/server/WebDavServer.java | 2 +- .../webdav/server/InMemoryWebDavServer.java | 2 +- .../webdav/server/NioWebDavServer.java | 2 +- .../webdav/server/WebDavServerTest.java | 116 ++++++++++++++++++ 5 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/WebDavServerTest.java diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavComponent.java b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavComponent.java index 3be099a07..5923f4652 100644 --- a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavComponent.java +++ b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavComponent.java @@ -8,6 +8,6 @@ import dagger.Component; @Component public interface WebDavComponent { - WebDavServer getServer(); + WebDavServer server(); } \ No newline at end of file diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavServer.java b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavServer.java index b995f6ba6..a909ccb54 100644 --- a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavServer.java +++ b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/server/WebDavServer.java @@ -36,7 +36,7 @@ public class WebDavServer { private final WebDavServletContextFactory servletContextFactory; @Inject - public WebDavServer(WebDavServletContextFactory servletContextFactory) { + WebDavServer(WebDavServletContextFactory servletContextFactory) { final BlockingQueue queue = new LinkedBlockingQueue<>(MAX_PENDING_REQUESTS); final ThreadPool tp = new QueuedThreadPool(MAX_THREADS, MIN_THREADS, THREAD_IDLE_SECONDS, queue); this.server = new Server(tp); diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/InMemoryWebDavServer.java b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/InMemoryWebDavServer.java index 6bbe43d1f..4f0cf64ff 100644 --- a/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/InMemoryWebDavServer.java +++ b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/InMemoryWebDavServer.java @@ -22,7 +22,7 @@ import org.eclipse.jetty.servlet.ServletContextHandler; public class InMemoryWebDavServer { public static void main(String[] args) throws Exception { - WebDavServer server = DaggerWebDavComponent.create().getServer(); + WebDavServer server = DaggerWebDavComponent.create().server(); server.setPort(8080); server.start(); diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/NioWebDavServer.java b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/NioWebDavServer.java index 0f0227938..0ae5c837e 100644 --- a/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/NioWebDavServer.java +++ b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/NioWebDavServer.java @@ -31,7 +31,7 @@ public class NioWebDavServer { private static final String PATH_TO_SERVE_PROPERTY = "pathToServe"; public static void main(String[] args) throws Exception { - WebDavServer server = DaggerWebDavComponent.create().getServer(); + WebDavServer server = DaggerWebDavComponent.create().server(); server.setPort(8080); server.start(); diff --git a/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/WebDavServerTest.java b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/WebDavServerTest.java new file mode 100644 index 000000000..dd8385016 --- /dev/null +++ b/main/frontend-webdav/src/test/java/org/cryptomator/webdav/server/WebDavServerTest.java @@ -0,0 +1,116 @@ +package org.cryptomator.webdav.server; + +import static org.hamcrest.collection.IsArrayContaining.hasItemInArray; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.ByteBuffer; + +import org.apache.commons.httpclient.Header; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; +import org.apache.commons.httpclient.methods.EntityEnclosingMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PutMethod; +import org.apache.commons.io.IOUtils; +import org.apache.jackrabbit.webdav.client.methods.MkColMethod; +import org.cryptomator.filesystem.FileSystem; +import org.cryptomator.filesystem.ReadableFile; +import org.cryptomator.filesystem.WritableFile; +import org.cryptomator.filesystem.inmem.InMemoryFileSystem; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +public class WebDavServerTest { + + private static final WebDavServer SERVER = DaggerWebDavComponent.create().server(); + private String servletRoot; + private FileSystem fs; + private ServletContextHandler servlet; + + @BeforeClass + public static void startServer() throws URISyntaxException { + SERVER.start(); + } + + @AfterClass + public static void stopServer() { + SERVER.stop(); + } + + @Before + public void startServlet() throws Exception { + fs = new InMemoryFileSystem(); + servlet = SERVER.addServlet(fs, "/test"); + servlet.start(); + servletRoot = "http://localhost:" + SERVER.getPort() + "/test"; + } + + @After + public void stopServlet() throws Exception { + servlet.stop(); + } + + @Test + public void testGet() throws HttpException, IOException { + final HttpClient client = new HttpClient(); + + // write test content: + final byte[] testContent = "hello world".getBytes(); + try (WritableFile w = fs.file("foo.txt").openWritable()) { + w.write(ByteBuffer.wrap(testContent)); + } + + // check get response body: + final HttpMethod getMethod = new GetMethod(servletRoot + "/foo.txt"); + final int statusCode = client.executeMethod(getMethod); + Assert.assertEquals(200, statusCode); + Assert.assertThat(getMethod.getResponseHeaders(), hasItemInArray(new Header("Accept-Ranges", "bytes"))); + Assert.assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(testContent), getMethod.getResponseBodyAsStream())); + getMethod.releaseConnection(); + } + + @Test + public void testMkcol() throws HttpException, IOException { + final HttpClient client = new HttpClient(); + + // create directory: + final HttpMethod mkcolMethod = new MkColMethod(servletRoot + "/foo"); + final int statusCode = client.executeMethod(mkcolMethod); + Assert.assertEquals(201, statusCode); + Assert.assertTrue(fs.folder("foo").exists()); + + mkcolMethod.releaseConnection(); + } + + @Test + public void testPut() throws HttpException, IOException { + final HttpClient client = new HttpClient(); + + // create file: + final byte[] testContent = "hello world".getBytes(); + final EntityEnclosingMethod putMethod = new PutMethod(servletRoot + "/foo.txt"); + putMethod.setRequestEntity(new ByteArrayRequestEntity(testContent)); + final int putResponse = client.executeMethod(putMethod); + Assert.assertEquals(201, putResponse); + Assert.assertTrue(fs.file("foo.txt").exists()); + + // check file contents: + ByteBuffer buf = ByteBuffer.allocate(testContent.length); + try (ReadableFile r = fs.file("foo.txt").openReadable()) { + r.read(buf); + } + Assert.assertArrayEquals(testContent, buf.array()); + + putMethod.releaseConnection(); + } + +}