diff --git a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/FilenameShortener.java b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/FilenameShortener.java index 93443d5ed..557e399eb 100644 --- a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/FilenameShortener.java +++ b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/FilenameShortener.java @@ -8,8 +8,6 @@ *******************************************************************************/ package org.cryptomator.filesystem.shortening; -import java.io.FileNotFoundException; -import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -19,9 +17,12 @@ import org.apache.commons.codec.binary.BaseNCodec; import org.cryptomator.filesystem.File; import org.cryptomator.filesystem.Folder; import org.cryptomator.io.FileContents; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; class FilenameShortener { + private static final Logger LOG = LoggerFactory.getLogger(FilenameShortener.class); private static final String LONG_NAME_FILE_EXT = ".lng"; private static final ThreadLocal SHA1 = new ThreadLocalSha1(); private static final BaseNCodec BASE32 = new Base32(); @@ -71,7 +72,8 @@ class FilenameShortener { private String loadMapping(String shortName) { final File mappingFile = mappingFile(shortName); if (!mappingFile.exists()) { - throw new UncheckedIOException(new FileNotFoundException("Mapping file not found " + mappingFile)); + LOG.warn("Mapping file not found: " + mappingFile); + return shortName; } else { return FileContents.UTF_8.readContents(mappingFile); } 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 index 76d4c5b6b..faab82718 100644 --- 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 @@ -8,8 +8,6 @@ *******************************************************************************/ package org.cryptomator.filesystem.shortening; -import java.io.UncheckedIOException; - import org.cryptomator.filesystem.FileSystem; import org.cryptomator.filesystem.inmem.InMemoryFileSystem; import org.junit.Assert; @@ -45,12 +43,12 @@ public class FilenameShortenerTest { Assert.assertEquals("short", shortener.inflate("short")); } - @Test(expected = UncheckedIOException.class) + @Test public void testInflateWithoutMappingFile() { FileSystem fs = new InMemoryFileSystem(); FilenameShortener shortener = new FilenameShortener(fs, 10); - shortener.inflate("iJustMadeThisNameUp.lng"); + Assert.assertEquals("iJustMadeThisNameUp.lng", shortener.inflate("iJustMadeThisNameUp.lng")); } } diff --git a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemTest.java b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemTest.java index 6506b2b32..b4dad258c 100644 --- a/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemTest.java +++ b/main/filesystem-nameshortening/src/test/java/org/cryptomator/filesystem/shortening/ShorteningFileSystemTest.java @@ -16,6 +16,7 @@ import static org.junit.Assert.assertThat; import java.io.UncheckedIOException; import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.concurrent.TimeoutException; @@ -102,6 +103,31 @@ public class ShorteningFileSystemTest { Assert.assertTrue(correspondingMetadataFile.exists()); } + @Test + public void testInflate() { + final FileSystem underlyingFs = new InMemoryFileSystem(); + final Folder metadataRoot = underlyingFs.folder(METADATA_DIR_NAME); + final FileSystem fs = new ShorteningFileSystem(underlyingFs, METADATA_DIR_NAME, 10); + final File correspondingMetadataFile = metadataRoot.folder("QM").folder("JL").file("QMJL5GQUETRX2YRV6XDTJQ6NNM7IEUHP.lng"); + final Folder shortenedFolder = underlyingFs.folder("QMJL5GQUETRX2YRV6XDTJQ6NNM7IEUHP.lng"); + shortenedFolder.create(); + correspondingMetadataFile.parent().get().create(); + try (WritableFile w = correspondingMetadataFile.openWritable()) { + w.write(ByteBuffer.wrap("morethantenchars".getBytes(StandardCharsets.UTF_8))); + } + Assert.assertTrue(correspondingMetadataFile.exists()); + Assert.assertTrue(fs.folders().map(Folder::name).anyMatch(n -> n.equals("morethantenchars"))); + } + + @Test + public void testInflateFailedDueToMissingMapping() { + final FileSystem underlyingFs = new InMemoryFileSystem(); + final FileSystem fs = new ShorteningFileSystem(underlyingFs, METADATA_DIR_NAME, 10); + final Folder shortenedFolder = underlyingFs.folder("QMJL5GQUETRX2YRV6XDTJQ6NNM7IEUHP.lng"); + shortenedFolder.create(); + Assert.assertTrue(fs.folders().map(Folder::name).anyMatch(n -> n.equals("QMJL5GQUETRX2YRV6XDTJQ6NNM7IEUHP.lng"))); + } + @Test public void testMoveLongFolders() { final FileSystem underlyingFs = new InMemoryFileSystem(); diff --git a/main/filesystem-nameshortening/src/test/resources/log4j2.xml b/main/filesystem-nameshortening/src/test/resources/log4j2.xml new file mode 100644 index 000000000..9b4889392 --- /dev/null +++ b/main/filesystem-nameshortening/src/test/resources/log4j2.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + +