diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 5ffc0851fa5..6dd77d42b58 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -81,6 +81,9 @@ Release 2.3.0 - UNRELEASED HADOOP-9929. Insufficient permissions for a path reported as File Not Found. (Contributed by Colin Patrick McCabe) + HADOOP-9791. Add a test case covering long paths for new FileUtil access + check methods (ivanmi) + Release 2.2.0 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java index 4d71e15c4b3..2e7c62c9339 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java @@ -254,6 +254,45 @@ public class TestNativeIO { File testFile = new File(TEST_DIR, "testfileaccess"); assertTrue(testFile.createNewFile()); + // Validate ACCESS_READ + FileUtil.setReadable(testFile, false); + assertFalse(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_READ)); + + FileUtil.setReadable(testFile, true); + assertTrue(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_READ)); + + // Validate ACCESS_WRITE + FileUtil.setWritable(testFile, false); + assertFalse(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_WRITE)); + + FileUtil.setWritable(testFile, true); + assertTrue(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_WRITE)); + + // Validate ACCESS_EXECUTE + FileUtil.setExecutable(testFile, false); + assertFalse(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_EXECUTE)); + + FileUtil.setExecutable(testFile, true); + assertTrue(NativeIO.Windows.access(testFile.getAbsolutePath(), + NativeIO.Windows.AccessRight.ACCESS_EXECUTE)); + + // Validate that access checks work as expected for long paths + + // Assemble a path longer then 260 chars (MAX_PATH) + String testFileRelativePath = ""; + for (int i = 0; i < 15; ++i) { + testFileRelativePath += "testfileaccessfolder\\"; + } + testFileRelativePath += "testfileaccess"; + testFile = new File(TEST_DIR, testFileRelativePath); + assertTrue(testFile.getParentFile().mkdirs()); + assertTrue(testFile.createNewFile()); + // Validate ACCESS_READ FileUtil.setReadable(testFile, false); assertFalse(NativeIO.Windows.access(testFile.getAbsolutePath(),