added some basic integration tests for the WebDavServer

This commit is contained in:
Sebastian Stenzel
2016-01-25 16:48:11 +01:00
parent 9052e7995f
commit e4d626eef5
5 changed files with 120 additions and 4 deletions

View File

@@ -8,6 +8,6 @@ import dagger.Component;
@Component
public interface WebDavComponent {
WebDavServer getServer();
WebDavServer server();
}

View File

@@ -36,7 +36,7 @@ public class WebDavServer {
private final WebDavServletContextFactory servletContextFactory;
@Inject
public WebDavServer(WebDavServletContextFactory servletContextFactory) {
WebDavServer(WebDavServletContextFactory servletContextFactory) {
final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(MAX_PENDING_REQUESTS);
final ThreadPool tp = new QueuedThreadPool(MAX_THREADS, MIN_THREADS, THREAD_IDLE_SECONDS, queue);
this.server = new Server(tp);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();
}
}