aboutsummaryrefslogtreecommitdiff
path: root/jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java')
-rw-r--r--jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java366
1 files changed, 366 insertions, 0 deletions
diff --git a/jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java b/jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java
new file mode 100644
index 0000000..0404f57
--- /dev/null
+++ b/jimfs/src/test/java/com/google/common/jimfs/ConfigurationTest.java
@@ -0,0 +1,366 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.common.jimfs;
+
+import static com.google.common.jimfs.PathNormalization.CASE_FOLD_ASCII;
+import static com.google.common.jimfs.PathNormalization.CASE_FOLD_UNICODE;
+import static com.google.common.jimfs.PathNormalization.NFC;
+import static com.google.common.jimfs.PathNormalization.NFD;
+import static com.google.common.jimfs.PathSubject.paths;
+import static com.google.common.jimfs.WatchServiceConfiguration.polling;
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assert_;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.junit.Assert.fail;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import java.io.IOException;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.FileSystem;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.WatchService;
+import java.nio.file.attribute.PosixFilePermissions;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Tests for {@link Configuration}, {@link Configuration.Builder} and file systems created from
+ * them.
+ *
+ * @author Colin Decker
+ */
+@RunWith(JUnit4.class)
+public class ConfigurationTest {
+
+ private static PathSubject assertThatPath(Path path) {
+ return assert_().about(paths()).that(path);
+ }
+
+ @Test
+ public void testDefaultUnixConfiguration() {
+ Configuration config = Configuration.unix();
+
+ assertThat(config.pathType).isEqualTo(PathType.unix());
+ assertThat(config.roots).containsExactly("/");
+ assertThat(config.workingDirectory).isEqualTo("/work");
+ assertThat(config.nameCanonicalNormalization).isEmpty();
+ assertThat(config.nameDisplayNormalization).isEmpty();
+ assertThat(config.pathEqualityUsesCanonicalForm).isFalse();
+ assertThat(config.blockSize).isEqualTo(8192);
+ assertThat(config.maxSize).isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(config.maxCacheSize).isEqualTo(-1);
+ assertThat(config.attributeViews).containsExactly("basic");
+ assertThat(config.attributeProviders).isEmpty();
+ assertThat(config.defaultAttributeValues).isEmpty();
+ }
+
+ @Test
+ public void testFileSystemForDefaultUnixConfiguration() throws IOException {
+ FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
+
+ assertThat(fs.getRootDirectories())
+ .containsExactlyElementsIn(ImmutableList.of(fs.getPath("/")))
+ .inOrder();
+ assertThatPath(fs.getPath("").toRealPath()).isEqualTo(fs.getPath("/work"));
+ assertThat(Iterables.getOnlyElement(fs.getFileStores()).getTotalSpace())
+ .isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(fs.supportedFileAttributeViews()).containsExactly("basic");
+
+ Files.createFile(fs.getPath("/foo"));
+ Files.createFile(fs.getPath("/FOO"));
+ }
+
+ @Test
+ public void testDefaultOsXConfiguration() {
+ Configuration config = Configuration.osX();
+
+ assertThat(config.pathType).isEqualTo(PathType.unix());
+ assertThat(config.roots).containsExactly("/");
+ assertThat(config.workingDirectory).isEqualTo("/work");
+ assertThat(config.nameCanonicalNormalization).containsExactly(NFD, CASE_FOLD_ASCII);
+ assertThat(config.nameDisplayNormalization).containsExactly(NFC);
+ assertThat(config.pathEqualityUsesCanonicalForm).isFalse();
+ assertThat(config.blockSize).isEqualTo(8192);
+ assertThat(config.maxSize).isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(config.maxCacheSize).isEqualTo(-1);
+ assertThat(config.attributeViews).containsExactly("basic");
+ assertThat(config.attributeProviders).isEmpty();
+ assertThat(config.defaultAttributeValues).isEmpty();
+ }
+
+ @Test
+ public void testFileSystemForDefaultOsXConfiguration() throws IOException {
+ FileSystem fs = Jimfs.newFileSystem(Configuration.osX());
+
+ assertThat(fs.getRootDirectories())
+ .containsExactlyElementsIn(ImmutableList.of(fs.getPath("/")))
+ .inOrder();
+ assertThatPath(fs.getPath("").toRealPath()).isEqualTo(fs.getPath("/work"));
+ assertThat(Iterables.getOnlyElement(fs.getFileStores()).getTotalSpace())
+ .isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(fs.supportedFileAttributeViews()).containsExactly("basic");
+
+ Files.createFile(fs.getPath("/foo"));
+
+ try {
+ Files.createFile(fs.getPath("/FOO"));
+ fail();
+ } catch (FileAlreadyExistsException expected) {
+ }
+ }
+
+ @Test
+ public void testDefaultWindowsConfiguration() {
+ Configuration config = Configuration.windows();
+
+ assertThat(config.pathType).isEqualTo(PathType.windows());
+ assertThat(config.roots).containsExactly("C:\\");
+ assertThat(config.workingDirectory).isEqualTo("C:\\work");
+ assertThat(config.nameCanonicalNormalization).containsExactly(CASE_FOLD_ASCII);
+ assertThat(config.nameDisplayNormalization).isEmpty();
+ assertThat(config.pathEqualityUsesCanonicalForm).isTrue();
+ assertThat(config.blockSize).isEqualTo(8192);
+ assertThat(config.maxSize).isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(config.maxCacheSize).isEqualTo(-1);
+ assertThat(config.attributeViews).containsExactly("basic");
+ assertThat(config.attributeProviders).isEmpty();
+ assertThat(config.defaultAttributeValues).isEmpty();
+ }
+
+ @Test
+ public void testFileSystemForDefaultWindowsConfiguration() throws IOException {
+ FileSystem fs = Jimfs.newFileSystem(Configuration.windows());
+
+ assertThat(fs.getRootDirectories())
+ .containsExactlyElementsIn(ImmutableList.of(fs.getPath("C:\\")))
+ .inOrder();
+ assertThatPath(fs.getPath("").toRealPath()).isEqualTo(fs.getPath("C:\\work"));
+ assertThat(Iterables.getOnlyElement(fs.getFileStores()).getTotalSpace())
+ .isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(fs.supportedFileAttributeViews()).containsExactly("basic");
+
+ Files.createFile(fs.getPath("C:\\foo"));
+
+ try {
+ Files.createFile(fs.getPath("C:\\FOO"));
+ fail();
+ } catch (FileAlreadyExistsException expected) {
+ }
+ }
+
+ @Test
+ public void testBuilder() {
+ AttributeProvider unixProvider = StandardAttributeProviders.get("unix");
+
+ Configuration config =
+ Configuration.builder(PathType.unix())
+ .setRoots("/")
+ .setWorkingDirectory("/hello/world")
+ .setNameCanonicalNormalization(NFD, CASE_FOLD_UNICODE)
+ .setNameDisplayNormalization(NFC)
+ .setPathEqualityUsesCanonicalForm(true)
+ .setBlockSize(10)
+ .setMaxSize(100)
+ .setMaxCacheSize(50)
+ .setAttributeViews("basic", "posix")
+ .addAttributeProvider(unixProvider)
+ .setDefaultAttributeValue(
+ "posix:permissions", PosixFilePermissions.fromString("---------"))
+ .build();
+
+ assertThat(config.pathType).isEqualTo(PathType.unix());
+ assertThat(config.roots).containsExactly("/");
+ assertThat(config.workingDirectory).isEqualTo("/hello/world");
+ assertThat(config.nameCanonicalNormalization).containsExactly(NFD, CASE_FOLD_UNICODE);
+ assertThat(config.nameDisplayNormalization).containsExactly(NFC);
+ assertThat(config.pathEqualityUsesCanonicalForm).isTrue();
+ assertThat(config.blockSize).isEqualTo(10);
+ assertThat(config.maxSize).isEqualTo(100);
+ assertThat(config.maxCacheSize).isEqualTo(50);
+ assertThat(config.attributeViews).containsExactly("basic", "posix");
+ assertThat(config.attributeProviders).containsExactly(unixProvider);
+ assertThat(config.defaultAttributeValues)
+ .containsEntry("posix:permissions", PosixFilePermissions.fromString("---------"));
+ }
+
+ @Test
+ public void testFileSystemForCustomConfiguration() throws IOException {
+ Configuration config =
+ Configuration.builder(PathType.unix())
+ .setRoots("/")
+ .setWorkingDirectory("/hello/world")
+ .setNameCanonicalNormalization(NFD, CASE_FOLD_UNICODE)
+ .setNameDisplayNormalization(NFC)
+ .setPathEqualityUsesCanonicalForm(true)
+ .setBlockSize(10)
+ .setMaxSize(100)
+ .setMaxCacheSize(50)
+ .setAttributeViews("unix")
+ .setDefaultAttributeValue(
+ "posix:permissions", PosixFilePermissions.fromString("---------"))
+ .build();
+
+ FileSystem fs = Jimfs.newFileSystem(config);
+
+ assertThat(fs.getRootDirectories())
+ .containsExactlyElementsIn(ImmutableList.of(fs.getPath("/")))
+ .inOrder();
+ assertThatPath(fs.getPath("").toRealPath()).isEqualTo(fs.getPath("/hello/world"));
+ assertThat(Iterables.getOnlyElement(fs.getFileStores()).getTotalSpace()).isEqualTo(100);
+ assertThat(fs.supportedFileAttributeViews()).containsExactly("basic", "owner", "posix", "unix");
+
+ Files.createFile(fs.getPath("/foo"));
+ assertThat(Files.getAttribute(fs.getPath("/foo"), "posix:permissions"))
+ .isEqualTo(PosixFilePermissions.fromString("---------"));
+
+ try {
+ Files.createFile(fs.getPath("/FOO"));
+ fail();
+ } catch (FileAlreadyExistsException expected) {
+ }
+ }
+
+ @Test
+ public void testToBuilder() {
+ Configuration config =
+ Configuration.unix().toBuilder()
+ .setWorkingDirectory("/hello/world")
+ .setAttributeViews("basic", "posix")
+ .build();
+
+ assertThat(config.pathType).isEqualTo(PathType.unix());
+ assertThat(config.roots).containsExactly("/");
+ assertThat(config.workingDirectory).isEqualTo("/hello/world");
+ assertThat(config.nameCanonicalNormalization).isEmpty();
+ assertThat(config.nameDisplayNormalization).isEmpty();
+ assertThat(config.pathEqualityUsesCanonicalForm).isFalse();
+ assertThat(config.blockSize).isEqualTo(8192);
+ assertThat(config.maxSize).isEqualTo(4L * 1024 * 1024 * 1024);
+ assertThat(config.maxCacheSize).isEqualTo(-1);
+ assertThat(config.attributeViews).containsExactly("basic", "posix");
+ assertThat(config.attributeProviders).isEmpty();
+ assertThat(config.defaultAttributeValues).isEmpty();
+ }
+
+ @Test
+ public void testSettingRootsUnsupportedByPathType() {
+ assertIllegalRoots(PathType.unix(), "\\");
+ assertIllegalRoots(PathType.unix(), "/", "\\");
+ assertIllegalRoots(PathType.windows(), "/");
+ assertIllegalRoots(PathType.windows(), "C:"); // must have a \ (or a /)
+ }
+
+ private static void assertIllegalRoots(PathType type, String first, String... more) {
+ try {
+ Configuration.builder(type).setRoots(first, more); // wrong root
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @Test
+ public void testSettingWorkingDirectoryWithRelativePath() {
+ try {
+ Configuration.unix().toBuilder().setWorkingDirectory("foo/bar");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+
+ try {
+ Configuration.windows().toBuilder().setWorkingDirectory("foo\\bar");
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @Test
+ public void testSettingNormalizationWhenNormalizationAlreadySet() {
+ assertIllegalNormalizations(NFC, NFC);
+ assertIllegalNormalizations(NFC, NFD);
+ assertIllegalNormalizations(CASE_FOLD_ASCII, CASE_FOLD_ASCII);
+ assertIllegalNormalizations(CASE_FOLD_ASCII, CASE_FOLD_UNICODE);
+ }
+
+ private static void assertIllegalNormalizations(
+ PathNormalization first, PathNormalization... more) {
+ try {
+ Configuration.builder(PathType.unix()).setNameCanonicalNormalization(first, more);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+
+ try {
+ Configuration.builder(PathType.unix()).setNameDisplayNormalization(first, more);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @Test
+ public void testSetDefaultAttributeValue_illegalAttributeFormat() {
+ try {
+ Configuration.unix().toBuilder().setDefaultAttributeValue("foo", 1);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @Test // how's that for a name?
+ public void testCreateFileSystemFromConfigurationWithWorkingDirectoryNotUnderConfiguredRoot() {
+ try {
+ Jimfs.newFileSystem(
+ Configuration.windows().toBuilder()
+ .setRoots("C:\\", "D:\\")
+ .setWorkingDirectory("E:\\foo")
+ .build());
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
+
+ @Test
+ public void testFileSystemWithDefaultWatchService() throws IOException {
+ FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
+
+ WatchService watchService = fs.newWatchService();
+ assertThat(watchService).isInstanceOf(PollingWatchService.class);
+
+ PollingWatchService pollingWatchService = (PollingWatchService) watchService;
+ assertThat(pollingWatchService.interval).isEqualTo(5);
+ assertThat(pollingWatchService.timeUnit).isEqualTo(SECONDS);
+ }
+
+ @Test
+ public void testFileSystemWithCustomWatchServicePollingInterval() throws IOException {
+ FileSystem fs =
+ Jimfs.newFileSystem(
+ Configuration.unix().toBuilder()
+ .setWatchServiceConfiguration(polling(10, MILLISECONDS))
+ .build());
+
+ WatchService watchService = fs.newWatchService();
+ assertThat(watchService).isInstanceOf(PollingWatchService.class);
+
+ PollingWatchService pollingWatchService = (PollingWatchService) watchService;
+ assertThat(pollingWatchService.interval).isEqualTo(10);
+ assertThat(pollingWatchService.timeUnit).isEqualTo(MILLISECONDS);
+ }
+}