Add NioFileDelegateTest
Code Review: https://codereview.appspot.com/58930043/
diff --git a/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java b/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java
new file mode 100644
index 0000000..ae5eaa7
--- /dev/null
+++ b/test/com/google/enterprise/adaptor/fs/NioFileDelegateTest.java
@@ -0,0 +1,230 @@
+// Copyright 2014 Google Inc. All Rights Reserved.
+//
+// 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.enterprise.adaptor.fs;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
+import com.google.common.io.CharStreams;
+
+import static org.junit.Assert.*;
+
+import org.junit.*;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.AclFileAttributeView;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.FileTime;
+import java.util.Set;
+import java.util.concurrent.BlockingQueue;
+
+/** Tests for {@link NioFileDelegate} */
+public class NioFileDelegateTest {
+ private FileDelegate delegate = new TestNioFileDelegate();
+
+ @Rule
+ public TemporaryFolder temp = new TemporaryFolder();
+
+ private Path newTempDir(String name) throws IOException {
+ return temp.newFolder(name).toPath();
+ }
+
+ private Path newTempFile(String name) throws IOException {
+ return temp.newFile(name).toPath();
+ }
+
+ private Path newTempFile(Path parent, String name) throws IOException {
+ Preconditions.checkArgument(parent.startsWith(temp.getRoot().toPath()));
+ return Files.createFile(parent.resolve(name));
+ }
+
+
+ @Test
+ public void testGetPath() throws Exception {
+ testGetPath("foo");
+ testGetPath("/foo/bar/baz");
+ testGetPath("\\\\host\\share\\file.txt");
+ testGetPath(temp.getRoot().getAbsolutePath());
+ }
+
+ private void testGetPath(String pathname) throws Exception {
+ assertTrue(Paths.get(pathname).equals(delegate.getPath(pathname)));
+ }
+
+ @Test
+ public void testIsDirectory() throws Exception {
+ Path dir = newTempDir("testDir");
+ Path file = newTempFile("test");
+ assertTrue(delegate.isDirectory(dir));
+ assertFalse(delegate.isDirectory(file));
+ assertFalse(delegate.isDirectory(dir.resolve("notExist")));
+ }
+
+ @Test
+ public void testIsRegularFile() throws Exception {
+ Path dir = newTempDir("testDir");
+ Path file = newTempFile("test");
+ assertTrue(delegate.isRegularFile(file));
+ assertFalse(delegate.isRegularFile(dir));
+ assertFalse(delegate.isRegularFile(dir.resolve("notExist")));
+ }
+
+ @Test
+ public void testIsHidden() throws Exception {
+ Path hiddenFile = newTempFile(".hiddenFile");
+ if (System.getProperty("os.name").startsWith("Windows")) {
+ Files.setAttribute(hiddenFile, "dos:hidden", Boolean.TRUE);
+ }
+ try {
+ assertTrue(delegate.isHidden(hiddenFile));
+ assertFalse(delegate.isHidden(newTempFile("bar")));
+ } finally {
+ // Windows won't let me delete the hidden file in tearDown().
+ if (System.getProperty("os.name").startsWith("Windows")) {
+ Files.setAttribute(hiddenFile, "dos:hidden", Boolean.FALSE);
+ }
+ }
+ }
+
+ @Test
+ public void testReadBasicAttributesDirectory() throws Exception {
+ Path dir = newTempDir("testDir");
+ BasicFileAttributes attrs = delegate.readBasicAttributes(dir);
+ assertTrue(attrs.isDirectory());
+ assertFalse(attrs.isRegularFile());
+ assertFalse(attrs.isSymbolicLink());
+ assertFalse(attrs.isOther());
+ }
+
+ @Test
+ public void testReadBasicAttributesFile() throws Exception {
+ byte[] content = "Hello World".getBytes(Charsets.UTF_8);
+ Path file = newTempFile("test");
+ Files.write(file, content);
+ BasicFileAttributes attrs = delegate.readBasicAttributes(file);
+ assertTrue(attrs.isRegularFile());
+ assertFalse(attrs.isDirectory());
+ assertFalse(attrs.isSymbolicLink());
+ assertFalse(attrs.isOther());
+ assertEquals(content.length, attrs.size());
+ }
+
+ @Test
+ public void testProbeContentType() throws Exception {
+ TestHelper.assumeOsIsNotMac();
+ String content = "<html><title>Foo</title><body>Bar</body></html>";
+ Path file = newTempFile("Foo.html");
+ Files.write(file, content.getBytes(Charsets.UTF_8));
+ assertEquals("text/html", delegate.probeContentType(file));
+ }
+
+ @Test
+ public void testNewInputStream() throws Exception {
+ String content = "<html><title>Foo</title><body>Bar</body></html>";
+ Path file = newTempFile("Foo.html");
+ Files.write(file, content.getBytes(Charsets.UTF_8));
+ assertEquals(content, CharStreams.toString(new InputStreamReader(
+ delegate.newInputStream(file), Charsets.UTF_8)));
+ }
+
+ @Test
+ public void testNewDirectoryStream() throws Exception {
+ Path dir = newTempDir("testDir");
+ Path file1 = newTempFile(dir, "test1");
+ Path file2 = newTempFile(dir, "test2");
+ Path file3 = newTempFile(dir, "test3");
+ Set<Path> expected = Sets.newHashSet(file1, file2, file3);
+ DirectoryStream<Path> ds = delegate.newDirectoryStream(dir);
+ assertNotNull(ds);
+ Set<Path> actual = Sets.newHashSet(ds);
+ ds.close();
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testNewDocId() throws Exception {
+ Path root = temp.getRoot().toPath();
+ Path dir = newTempDir("testDir");
+ Path file = newTempFile(dir, "test");
+
+ String id = delegate.newDocId(root).getUniqueId();
+ assertTrue(id.contains(root.toString()));
+ assertTrue(id.endsWith("/"));
+
+ id = delegate.newDocId(dir).getUniqueId();
+ assertTrue(id.contains(root.toString()));
+ assertTrue(id.contains(dir.toString()));
+ assertTrue(id.endsWith("/"));
+
+ id = delegate.newDocId(file).getUniqueId();
+ assertTrue(id.contains(root.toString()));
+ assertTrue(id.contains(dir.toString()));
+ assertTrue(id.contains(file.toString()));
+ assertFalse(id.endsWith("/"));
+ }
+
+ @Test
+ public void testSetLastAccessTime() throws Exception {
+ Path file = newTempFile("test");
+ BasicFileAttributes attrs = delegate.readBasicAttributes(file);
+ FileTime originalTime = attrs.lastAccessTime();
+ FileTime newTime = FileTime.fromMillis(originalTime.toMillis() + 10000);
+ delegate.setLastAccessTime(file, newTime);
+ attrs = delegate.readBasicAttributes(file);
+ assertEquals(newTime, attrs.lastAccessTime());
+ }
+
+ private static class TestNioFileDelegate extends NioFileDelegate {
+ @Override
+ public void destroy() {}
+
+ @Override
+ public void startMonitorPath(Path watchPath, BlockingQueue<Path> queue) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void stopMonitorPath() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public AclFileAttributeViews getAclViews(Path doc) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public AclFileAttributeView getShareAclView(Path doc) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public AclFileAttributeView getDfsShareAclView(Path doc) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Path getDfsUncActiveStorageUnc(Path doc) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+ }
+}