From bb34f5c17dd06b368f141514b2f8a0ffd9ac8371 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 28 Jan 2016 19:05:34 +0100 Subject: [PATCH] nameshortening tests --- .../blacklisting/SamePathPredicate.java | 26 ++++++++++ .../ShorteningFileSystemFactory.java | 7 +-- .../BlacklistingFileSystemTest.java | 22 ++++++--- .../blacklisting/SamePathPredicateTest.java | 36 ++++++++++++++ .../shortening/FilenameShortenerTest.java | 48 +++++++++++++++++++ 5 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/blacklisting/SamePathPredicate.java create mode 100644 main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/SamePathPredicateTest.java create mode 100644 main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/FilenameShortenerTest.java diff --git a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/blacklisting/SamePathPredicate.java b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/blacklisting/SamePathPredicate.java new file mode 100644 index 000000000..61746a619 --- /dev/null +++ b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/blacklisting/SamePathPredicate.java @@ -0,0 +1,26 @@ +package org.cryptomator.filesystem.blacklisting; + +import java.util.Objects; +import java.util.function.Predicate; + +import org.cryptomator.filesystem.Node; + +public class SamePathPredicate implements Predicate { + + private final Node node; + + private SamePathPredicate(Node node) { + Objects.requireNonNull(node); + this.node = node; + } + + @Override + public boolean test(Node other) { + return node.parent().equals(other.parent()) && node.name().equals(other.name()); + } + + public static SamePathPredicate forNode(Node node) { + return new SamePathPredicate(node); + } + +} diff --git a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemFactory.java b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemFactory.java index 5701bd244..921d46ab0 100644 --- a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemFactory.java +++ b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemFactory.java @@ -1,14 +1,12 @@ package org.cryptomator.filesystem.shortening; -import java.util.function.Predicate; - import javax.inject.Inject; import javax.inject.Singleton; import org.cryptomator.filesystem.FileSystem; import org.cryptomator.filesystem.Folder; -import org.cryptomator.filesystem.Node; import org.cryptomator.filesystem.blacklisting.BlacklistingFileSystemFactory; +import org.cryptomator.filesystem.blacklisting.SamePathPredicate; @Singleton public class ShorteningFileSystemFactory { @@ -25,8 +23,7 @@ public class ShorteningFileSystemFactory { public FileSystem get(Folder root) { final Folder metadataFolder = root.folder(METADATA_FOLDER_NAME); - final Predicate isMetadataFolder = (Node node) -> metadataFolder.equals(node); - final FileSystem metadataHidingFs = blacklistingFileSystemFactory.get(root, isMetadataFolder); + final FileSystem metadataHidingFs = blacklistingFileSystemFactory.get(root, SamePathPredicate.forNode(metadataFolder)); return new ShorteningFileSystem(metadataHidingFs, metadataFolder, SHORTENING_THRESHOLD); } } diff --git a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/BlacklistingFileSystemTest.java b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/BlacklistingFileSystemTest.java index ee9c47e78..cdcb6d628 100644 --- a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/BlacklistingFileSystemTest.java +++ b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/BlacklistingFileSystemTest.java @@ -18,12 +18,19 @@ import org.junit.Test; public class BlacklistingFileSystemTest { @Test(expected = UncheckedIOException.class) - public void testPreventCreationOfMetadataFolder() { + public void testPreventCreationOfBlacklistedFolder() { final FileSystem underlyingFs = new InMemoryFileSystem(); - final Folder metadataRoot = underlyingFs.folder("m"); - final Predicate metadataHidden = (Node n) -> n.equals(metadataRoot); - final FileSystem fs = new BlacklistingFileSystem(underlyingFs, metadataHidden); - fs.folder("m"); + final Node blacklisted = underlyingFs.folder("qwe"); + final FileSystem fs = new BlacklistingFileSystem(underlyingFs, SamePathPredicate.forNode(blacklisted)); + fs.folder("qwe"); + } + + @Test(expected = UncheckedIOException.class) + public void testPreventCreationOBlacklistedFile() { + final FileSystem underlyingFs = new InMemoryFileSystem(); + final Node blacklisted = underlyingFs.folder("qwe"); + final FileSystem fs = new BlacklistingFileSystem(underlyingFs, SamePathPredicate.forNode(blacklisted)); + fs.file("qwe"); } @Test @@ -33,8 +40,8 @@ public class BlacklistingFileSystemTest { final File hiddenFile = underlyingFs.file("qwe"); final Folder visibleFolder = underlyingFs.folder("sdf"); final File visibleFile = underlyingFs.file("wer"); - final Predicate metadataHidden = (Node n) -> n.equals(hiddenFolder) || n.equals(hiddenFile); - final FileSystem fs = new BlacklistingFileSystem(underlyingFs, metadataHidden); + final Predicate hiddenPredicate = SamePathPredicate.forNode(hiddenFolder).or(SamePathPredicate.forNode(hiddenFile)); + final FileSystem fs = new BlacklistingFileSystem(underlyingFs, hiddenPredicate); hiddenFolder.create(); try (WritableByteChannel writable = hiddenFile.openWritable()) { writable.write(ByteBuffer.allocate(0)); @@ -46,6 +53,7 @@ public class BlacklistingFileSystemTest { Assert.assertArrayEquals(new String[] {"sdf"}, fs.folders().map(Node::name).collect(Collectors.toList()).toArray()); Assert.assertArrayEquals(new String[] {"wer"}, fs.files().map(Node::name).collect(Collectors.toList()).toArray()); + Assert.assertArrayEquals(new String[] {"sdf", "wer"}, fs.children().map(Node::name).sorted().collect(Collectors.toList()).toArray()); } } diff --git a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/SamePathPredicateTest.java b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/SamePathPredicateTest.java new file mode 100644 index 000000000..d83dbe5d6 --- /dev/null +++ b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/blacklisting/SamePathPredicateTest.java @@ -0,0 +1,36 @@ +package org.cryptomator.filesystem.blacklisting; + +import org.cryptomator.filesystem.File; +import org.cryptomator.filesystem.FileSystem; +import org.cryptomator.filesystem.Folder; +import org.cryptomator.filesystem.inmem.InMemoryFileSystem; +import org.junit.Assert; +import org.junit.Test; + +public class SamePathPredicateTest { + + @Test + public void testFileAndFolderWithSameNameWithSameParentConsideredSame() { + FileSystem fs = new InMemoryFileSystem(); + File file1 = fs.file("foo"); + Folder folder1 = fs.folder("foo"); + Assert.assertTrue(SamePathPredicate.forNode(file1).test(folder1)); + } + + @Test + public void testFilesWithDifferentParentConsideredDifferent() { + FileSystem fs = new InMemoryFileSystem(); + File file1 = fs.file("foo"); + File file2 = fs.folder("bar").file("foo"); + Assert.assertFalse(SamePathPredicate.forNode(file1).test(file2)); + } + + @Test + public void testFilesWithDifferentNamesConsideredDifferent() { + FileSystem fs = new InMemoryFileSystem(); + File file1 = fs.file("foo"); + File file2 = fs.file("bar"); + Assert.assertFalse(SamePathPredicate.forNode(file1).test(file2)); + } + +} diff --git a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/FilenameShortenerTest.java b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/FilenameShortenerTest.java new file mode 100644 index 000000000..ee941f26d --- /dev/null +++ b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/FilenameShortenerTest.java @@ -0,0 +1,48 @@ +package org.cryptomator.filesystem.shortening; + +import java.io.UncheckedIOException; + +import org.cryptomator.filesystem.FileSystem; +import org.cryptomator.filesystem.inmem.InMemoryFileSystem; +import org.junit.Assert; +import org.junit.Test; + +public class FilenameShortenerTest { + + @Test + public void testNoDeflationOfShortFiles() { + FileSystem fs = new InMemoryFileSystem(); + FilenameShortener shortener = new FilenameShortener(fs, 10); + Assert.assertEquals("short", shortener.deflate("short")); + } + + @Test + public void testDeflateAndInflate() { + FileSystem fs = new InMemoryFileSystem(); + FilenameShortener shortener = new FilenameShortener(fs, 10); + + String longName = "suchALongName"; + String shortenedName = shortener.deflate(longName); + shortener.saveMapping(longName, shortenedName); + Assert.assertNotEquals(longName, shortenedName); + + Assert.assertEquals(longName, shortener.inflate(shortenedName)); + } + + @Test + public void testNoInflationOfShortFiles() { + FileSystem fs = new InMemoryFileSystem(); + FilenameShortener shortener = new FilenameShortener(fs, 10); + + Assert.assertEquals("short", shortener.inflate("short")); + } + + @Test(expected = UncheckedIOException.class) + public void testInflateWithoutMappingFile() { + FileSystem fs = new InMemoryFileSystem(); + FilenameShortener shortener = new FilenameShortener(fs, 10); + + shortener.inflate("iJustMadeThisNameUp.lng"); + } + +}