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);
}
}