From 3720956a6afc2014fbe2b942300d0723486f7d79 Mon Sep 17 00:00:00 2001 From: Ivan Mitic Date: Thu, 19 Sep 2013 06:54:29 +0000 Subject: [PATCH] HADOOP-9791. Add a test case covering long paths for new FileUtil access check methods. Contributed by Ivan Mitic. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1524631 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-common/CHANGES.txt | 3 ++ .../hadoop/io/nativeio/TestNativeIO.java | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 02c4fc0939f..2148381bbef 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -369,6 +369,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(),