package xapi.file.impl; import static xapi.test.Assert.assertFalse; import static xapi.test.Assert.assertTrue; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.Set; import org.junit.Test; import xapi.file.api.FileService; import xapi.inject.X_Inject; public class FileServiceTest { static { FileServiceTest.class.getClassLoader().setPackageAssertionStatus("xapi.file", true); } final FileService service = X_Inject.singleton(FileService.class); @Test public void testChmodValidation() throws Throwable { File f = File.createTempFile("testFile", ""); service.chmod(0x111, f); assertChmod(0x111, f); service.chmod(0x777, f); assertChmod(0x777, f); service.chmod(0x222, f); assertChmod(0x222, f); service.chmod(0x555, f); assertChmod(0x555, f); service.chmod(0x555, f); assertChmod(0x555, f); } private void assertChmod(int chmod, File f) throws Throwable { Set<PosixFilePermission> permissions; try { permissions = Files.getPosixFilePermissions(Paths.get(f.getCanonicalPath())); } catch (UnsupportedOperationException e) { return;// running on windows... ew. } if ((chmod & 0x100) == 0) { assertFalse(permissions.contains(PosixFilePermission.OWNER_EXECUTE)); } else { assertTrue(permissions.contains(PosixFilePermission.OWNER_EXECUTE)); } if ((chmod & 0x200) == 0) { assertFalse(permissions.contains(PosixFilePermission.OWNER_WRITE)); } else { assertTrue(permissions.contains(PosixFilePermission.OWNER_WRITE)); } if ((chmod & 0x400) == 0) { assertFalse(permissions.contains(PosixFilePermission.OWNER_READ)); } else { assertTrue(permissions.contains(PosixFilePermission.OWNER_READ)); } if ((chmod & 0x10) == 0) { assertFalse(permissions.contains(PosixFilePermission.GROUP_EXECUTE)); } else { assertTrue(permissions.contains(PosixFilePermission.GROUP_EXECUTE)); } if ((chmod & 0x20) == 0) { assertFalse(permissions.contains(PosixFilePermission.GROUP_WRITE)); } else { assertTrue(permissions.contains(PosixFilePermission.GROUP_WRITE)); } if ((chmod & 0x40) == 0) { assertFalse(permissions.contains(PosixFilePermission.GROUP_READ)); } else { assertTrue(permissions.contains(PosixFilePermission.GROUP_READ)); } if ((chmod & 0x1) == 0) { assertFalse(permissions.contains(PosixFilePermission.OTHERS_EXECUTE)); } else { assertTrue(permissions.contains(PosixFilePermission.OTHERS_EXECUTE)); } if ((chmod & 0x2) == 0) { assertFalse(permissions.contains(PosixFilePermission.OTHERS_WRITE)); } else { assertTrue(permissions.contains(PosixFilePermission.OTHERS_WRITE)); } if ((chmod & 0x4) == 0) { assertFalse(permissions.contains(PosixFilePermission.OTHERS_READ)); } else { assertTrue(permissions.contains(PosixFilePermission.OTHERS_READ)); } } }