- separated crypto filesystem and nameshortening filesystem for easier invariant testing

- creation of crypto filesystem only via DI in all integration tests (package-private constructor)
- new Maven module "filesystem-crypto-integration-tests" for tests as well as to provide a ready-to-use Dagger Component for integration tests in other modules.
This commit is contained in:
Sebastian Stenzel
2016-02-13 14:33:16 +01:00
parent 0d82e7dcc7
commit f0cb91b22f
30 changed files with 298 additions and 102 deletions
@@ -9,25 +9,31 @@
package org.cryptomator.frontend.webdav;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import org.cryptomator.filesystem.FileSystem;
import org.cryptomator.filesystem.WritableFile;
import org.cryptomator.filesystem.crypto.CryptoEngineTestModule;
import org.cryptomator.filesystem.crypto.CryptoFileSystemDelegate;
import org.cryptomator.filesystem.crypto.CryptoFileSystemTestComponent;
import org.cryptomator.filesystem.crypto.DaggerCryptoFileSystemTestComponent;
import org.cryptomator.filesystem.inmem.InMemoryFileSystem;
import org.cryptomator.frontend.webdav.filters.LoggingHttpFilter;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.mockito.Mockito;
public class InMemoryWebDavServer {
private static final CryptoFileSystemTestComponent CRYPTO_FS_COMP = DaggerCryptoFileSystemTestComponent.builder().cryptoEngineModule(new CryptoEngineTestModule()).build();
private static final WebDavComponent WEVDAV_COMP = DaggerWebDavComponent.create();
public static void main(String[] args) throws Exception {
WebDavServer server = DaggerWebDavComponent.create().server();
WebDavServer server = WEVDAV_COMP.server();
server.setPort(8080);
server.start();
FileSystem fileSystem = setupFilesystem();
FileSystem fileSystem = cryptoFileSystem();
ServletContextHandler servlet = server.addServlet(fileSystem, URI.create("http://localhost:8080/foo"));
servlet.addFilter(LoggingHttpFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
servlet.start();
@@ -37,14 +43,18 @@ public class InMemoryWebDavServer {
server.stop();
}
private static FileSystem setupFilesystem() {
FileSystem fileSystem = new InMemoryFileSystem();
fileSystem.folder("mamals").folder("cats").create();
fileSystem.folder("mamals").folder("dogs").create();
try (WritableFile writable = fileSystem.folder("mamals").folder("cats").file("Garfield.txt").openWritable()) {
writable.write(ByteBuffer.wrap("meow".getBytes()));
}
return fileSystem;
private static FileSystem cryptoFileSystem() {
FileSystem shorteningFileSystem = shorteningFileSystem();
CRYPTO_FS_COMP.cryptoFileSystemFactory().initializeNew(shorteningFileSystem, "asd");
return CRYPTO_FS_COMP.cryptoFileSystemFactory().unlockExisting(shorteningFileSystem, "asd", Mockito.mock(CryptoFileSystemDelegate.class));
}
private static FileSystem shorteningFileSystem() {
return CRYPTO_FS_COMP.shorteningFileSystemFactory().get(inMemoryFileSystem());
}
private static FileSystem inMemoryFileSystem() {
return new InMemoryFileSystem();
}
}
@@ -30,9 +30,10 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
public class NioWebDavServer {
private static final String PATH_TO_SERVE_PROPERTY = "pathToServe";
private static final WebDavComponent WEVDAV_COMP = DaggerWebDavComponent.create();
public static void main(String[] args) throws Exception {
WebDavServer server = DaggerWebDavComponent.create().server();
WebDavServer server = WEVDAV_COMP.server();
server.setPort(8080);
server.start();
@@ -1,3 +1,11 @@
/*******************************************************************************
* Copyright (c) 2016 Sebastian Stenzel and others.
* This file is licensed under the terms of the MIT license.
* See the LICENSE.txt file for more info.
*
* Contributors:
* Sebastian Stenzel - initial API and implementation
*******************************************************************************/
package org.cryptomator.frontend.webdav.jackrabbitservlet;
import java.util.Optional;