/** * Copyright 2015 Palantir Technologies, 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.palantir.giraffe.file.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileAttributeView; import java.nio.file.attribute.FileTime; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.util.Set; import org.junit.Test; import com.palantir.giraffe.file.test.creator.AttributeTestCreator; import com.palantir.giraffe.file.test.runner.FileSystemTestRule; /** * Tests a file system's implementation of attribute access. * * @author bkeyes */ public class FileSystemReadAttributesTest extends FileSystemBaseTest { public FileSystemReadAttributesTest(FileSystemTestRule fsRule) { super(fsRule); } @Test public void basicViewReadsModificationTime() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_MODIFIED_TIME); BasicFileAttributeView view = getView(path, BasicFileAttributeView.class); assertNotNull("BasicFileAttributeView is not available", view); FileTime time = view.readAttributes().lastModifiedTime(); assertEquals("incorrect modification time", AttributeTestCreator.MODIFIED_TIME, time); } @Test public void basicViewReadsSize() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_SIZE); BasicFileAttributeView view = getView(path, BasicFileAttributeView.class); assertNotNull("BasicFileAttributeView is not available", view); long size = view.readAttributes().size(); assertEquals("incorrect size", AttributeTestCreator.SIZE, size); } @Test public void basicViewReadsEmptySize() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_EMPTY); BasicFileAttributeView view = getView(path, BasicFileAttributeView.class); assertNotNull("BasicFileAttributeView is not available", view); long size = view.readAttributes().size(); assertEquals("incorrect size", 0, size); } @Test public void basicViewAgreesWithStaticRead() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_MODIFIED_TIME); BasicFileAttributeView view = getView(path, BasicFileAttributeView.class); assertNotNull("BasicFileAttributeView is not available", view); FileTime viewTime = view.readAttributes().lastModifiedTime(); FileTime readTime = readAttributes(path, BasicFileAttributes.class).lastModifiedTime(); assertTrue(String.format("view time [%s] != read time [%s]", viewTime, readTime), viewTime.equals(readTime)); } @Test public void posixViewReadsPermissions() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_PERMISSIONS); PosixFileAttributeView view = getView(path, PosixFileAttributeView.class); assertNotNull("PosixFileAttributeView is not available", view); Set<PosixFilePermission> permissions = view.readAttributes().permissions(); assertEquals("incorrect permissions", AttributeTestCreator.PERMISSIONS, permissions); } @Test public void posixViewAgreesWithStaticRead() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_PERMISSIONS); PosixFileAttributeView view = getView(path, PosixFileAttributeView.class); assertNotNull("PosixFileAttributeView is not available", view); Set<PosixFilePermission> viewPerms = view.readAttributes().permissions(); Set<PosixFilePermission> readPerms = readAttributes(path, PosixFileAttributes.class).permissions(); assertTrue(String.format( "view permissions [%s] != read permissions [%s]", viewPerms, readPerms), viewPerms.equals(readPerms)); } @Test public void dynamicReadsModifiedTime() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_MODIFIED_TIME); FileTime time = (FileTime) Files.getAttribute(path, "lastModifiedTime"); assertEquals("incorrect modification time", AttributeTestCreator.MODIFIED_TIME, time); } @Test public void dynamicReadsPermissions() throws IOException { Path path = getTestPath(AttributeTestCreator.F_RO_PERMISSIONS); @SuppressWarnings("unchecked") Set<PosixFilePermission> permissions = (Set<PosixFilePermission>) Files.getAttribute(path, "posix:permissions"); assertEquals("incorrect permissions", AttributeTestCreator.PERMISSIONS, permissions); } private <V extends FileAttributeView> V getView(Path path, Class<V> type) { return getProvider().getFileAttributeView(path, type); } private <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type) throws IOException { return getProvider().readAttributes(path, type); } }