package com.beijunyi.parallelgit.filesystem.io; import java.io.IOException; import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.util.Collection; import javax.annotation.Nonnull; import com.beijunyi.parallelgit.filesystem.AbstractGitFileSystemTest; import org.junit.Before; import org.junit.Test; import static java.nio.file.Files.readAttributes; import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; import static org.eclipse.jgit.lib.FileMode.EXECUTABLE_FILE; import static org.junit.Assert.*; public class PosixFileAttributesTest extends AbstractGitFileSystemTest { @Before public void setUp() throws IOException { initRepository(); } @Test public void getPermissionOfFile_shouldReturnNotNull() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); assertNotNull(attributes.permissions()); } @Test public void getPermissionOfFile_shouldContainOwnerRead() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); Collection permissions = (Collection) attributes.permissions(); assertTrue(permissions.contains(PosixFilePermission.OWNER_READ)); } @Test public void getPermissionOfFile_shouldContainOwnerWrite() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); Collection permissions = (Collection) attributes.permissions(); assertTrue(permissions.contains(PosixFilePermission.OWNER_WRITE)); } @Test public void getPermissionOfFile_shouldNotContainOwnerExecute() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); Collection permissions = (Collection) attributes.permissions(); assertFalse(permissions.contains(OWNER_EXECUTE)); } @Test public void getPermissionOfExecutableFile_shouldContainOwnerExecute() throws IOException { writeToCache("/file.txt", someBytes(), EXECUTABLE_FILE); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); Collection permissions = (Collection) attributes.permissions(); assertTrue(permissions.contains(OWNER_EXECUTE)); } @Test public void getOwnerOfFile_shouldReturnNull() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); assertNull(attributes.owner()); } @Test public void getGroupOfFile_shouldReturnNull() throws IOException { writeToCache("/file.txt"); commitToMaster(); initGitFileSystem(); PosixFileAttributes attributes = readPosixAttributes("/file.txt"); assertNull(attributes.group()); } @Nonnull private PosixFileAttributes readPosixAttributes(String path) throws IOException { return readAttributes(gfs.getPath(path), PosixFileAttributes.class); } }