Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 6699F200CD1 for ; Wed, 12 Jul 2017 04:47:06 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 6568A1679E7; Wed, 12 Jul 2017 02:47:06 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 5D6E71679CE for ; Wed, 12 Jul 2017 04:47:05 +0200 (CEST) Received: (qmail 27868 invoked by uid 500); 12 Jul 2017 02:47:04 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 27858 invoked by uid 99); 12 Jul 2017 02:47:04 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Jul 2017 02:47:04 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 5DC88E96AB; Wed, 12 Jul 2017 02:47:03 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aajisaka@apache.org To: common-commits@hadoop.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: hadoop git commit: HADOOP-14629. Improve exception checking in FileContext related JUnit tests. Contributed by Andras Bokor. Date: Wed, 12 Jul 2017 02:47:03 +0000 (UTC) archived-at: Wed, 12 Jul 2017 02:47:06 -0000 Repository: hadoop Updated Branches: refs/heads/branch-2.8 83eacccc1 -> d1fb4948d HADOOP-14629. Improve exception checking in FileContext related JUnit tests. Contributed by Andras Bokor. (cherry picked from commit 9144fd9e9b5d84d71158451428341746a6567152) (cherry picked from commit 2653cf4466ab99960ea65a937ea01fc4d4ca2f00) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d1fb4948 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d1fb4948 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d1fb4948 Branch: refs/heads/branch-2.8 Commit: d1fb4948d216a9529422768eee24dcd144f201a9 Parents: 83eaccc Author: Akira Ajisaka Authored: Wed Jul 12 11:35:50 2017 +0900 Committer: Akira Ajisaka Committed: Wed Jul 12 11:44:15 2017 +0900 ---------------------------------------------------------------------- .../fs/FileContextMainOperationsBaseTest.java | 65 ++++++++++---------- .../fs/TestHDFSFileContextMainOperations.java | 46 +++++++------- 2 files changed, 56 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/d1fb4948/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FileContextMainOperationsBaseTest.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FileContextMainOperationsBaseTest.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FileContextMainOperationsBaseTest.java index 78a09f6..f24a2f5 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FileContextMainOperationsBaseTest.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/FileContextMainOperationsBaseTest.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.util.EnumSet; import java.util.NoSuchElementException; -import org.apache.commons.lang.RandomStringUtils; import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.fs.Options.CreateOpts; import org.apache.hadoop.fs.Options.Rename; @@ -880,14 +879,14 @@ public abstract class FileContextMainOperationsBaseTest { Path src = getTestRootPath(fc, "test/hadoop/nonExistent"); Path dst = getTestRootPath(fc, "test/new/newpath"); try { - rename(src, dst, false, false, false, Rename.NONE); + rename(src, dst, false, false, Rename.NONE); Assert.fail("Should throw FileNotFoundException"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); } try { - rename(src, dst, false, false, false, Rename.OVERWRITE); + rename(src, dst, false, false, Rename.OVERWRITE); Assert.fail("Should throw FileNotFoundException"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); @@ -903,14 +902,14 @@ public abstract class FileContextMainOperationsBaseTest { Path dst = getTestRootPath(fc, "test/nonExistent/newfile"); try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, false, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); } try { - rename(src, dst, false, true, false, Rename.OVERWRITE); + rename(src, dst, true, false, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); @@ -927,13 +926,13 @@ public abstract class FileContextMainOperationsBaseTest { createFile(dst.getParent()); try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, false, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { } try { - rename(src, dst, false, true, false, Rename.OVERWRITE); + rename(src, dst, true, false, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { } @@ -947,7 +946,7 @@ public abstract class FileContextMainOperationsBaseTest { createFile(src); Path dst = getTestRootPath(fc, "test/new/newfile"); fc.mkdir(dst.getParent(), FileContext.DEFAULT_PERM, true); - rename(src, dst, true, false, true, Rename.OVERWRITE); + rename(src, dst, false, true, Rename.OVERWRITE); } @Test @@ -956,14 +955,14 @@ public abstract class FileContextMainOperationsBaseTest { Path src = getTestRootPath(fc, "test/hadoop/file"); createFile(src); try { - rename(src, src, false, true, false, Rename.NONE); + rename(src, src, true, true, Rename.NONE); Assert.fail("Renamed file to itself"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); } // Also fails with overwrite try { - rename(src, src, false, true, false, Rename.OVERWRITE); + rename(src, src, true, true, Rename.OVERWRITE); Assert.fail("Renamed file to itself"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); @@ -981,14 +980,14 @@ public abstract class FileContextMainOperationsBaseTest { // Fails without overwrite option try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, true, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); } // Succeeds with overwrite option - rename(src, dst, true, false, true, Rename.OVERWRITE); + rename(src, dst, false, true, Rename.OVERWRITE); } @Test @@ -1002,14 +1001,14 @@ public abstract class FileContextMainOperationsBaseTest { // Fails without overwrite option try { - rename(src, dst, false, false, true, Rename.NONE); + rename(src, dst, true, true, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { } // File cannot be renamed as directory try { - rename(src, dst, false, false, true, Rename.OVERWRITE); + rename(src, dst, true, true, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { } @@ -1021,14 +1020,14 @@ public abstract class FileContextMainOperationsBaseTest { Path src = getTestRootPath(fc, "test/hadoop/dir"); fc.mkdir(src, FileContext.DEFAULT_PERM, true); try { - rename(src, src, false, true, false, Rename.NONE); + rename(src, src, true, true, Rename.NONE); Assert.fail("Renamed directory to itself"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); } // Also fails with overwrite try { - rename(src, src, false, true, false, Rename.OVERWRITE); + rename(src, src, true, true, Rename.OVERWRITE); Assert.fail("Renamed directory to itself"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); @@ -1044,14 +1043,14 @@ public abstract class FileContextMainOperationsBaseTest { Path dst = getTestRootPath(fc, "test/nonExistent/newdir"); try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, false, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); } try { - rename(src, dst, false, true, false, Rename.OVERWRITE); + rename(src, dst, true, false, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { Assert.assertTrue(unwrapException(e) instanceof FileNotFoundException); @@ -1076,7 +1075,7 @@ public abstract class FileContextMainOperationsBaseTest { Path dst = getTestRootPath(fc, "test/new/newdir"); fc.mkdir(dst.getParent(), FileContext.DEFAULT_PERM, true); - rename(src, dst, true, false, true, options); + rename(src, dst, false, true, options); Assert.assertFalse("Nested file1 exists", exists(fc, getTestRootPath(fc, "test/hadoop/dir/file1"))); Assert.assertFalse("Nested file2 exists", @@ -1101,14 +1100,14 @@ public abstract class FileContextMainOperationsBaseTest { // Fails without overwrite option try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, true, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { // Expected (cannot over-write non-empty destination) Assert.assertTrue(unwrapException(e) instanceof FileAlreadyExistsException); } // Succeeds with the overwrite option - rename(src, dst, true, false, true, Rename.OVERWRITE); + rename(src, dst, false, true, Rename.OVERWRITE); } @Test @@ -1125,7 +1124,7 @@ public abstract class FileContextMainOperationsBaseTest { createFile(getTestRootPath(fc, "test/new/newdir/file1")); // Fails without overwrite option try { - rename(src, dst, false, true, false, Rename.NONE); + rename(src, dst, true, true, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { // Expected (cannot over-write non-empty destination) @@ -1133,7 +1132,7 @@ public abstract class FileContextMainOperationsBaseTest { } // Fails even with the overwrite option try { - rename(src, dst, false, true, false, Rename.OVERWRITE); + rename(src, dst, true, true, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException ex) { // Expected (cannot over-write non-empty destination) @@ -1150,13 +1149,13 @@ public abstract class FileContextMainOperationsBaseTest { createFile(dst); // Fails without overwrite option try { - rename(src, dst, false, true, true, Rename.NONE); + rename(src, dst, true, true, Rename.NONE); Assert.fail("Expected exception was not thrown"); } catch (IOException e) { } // Directory cannot be renamed as existing file try { - rename(src, dst, false, true, true, Rename.OVERWRITE); + rename(src, dst, true, true, Rename.OVERWRITE); Assert.fail("Expected exception was not thrown"); } catch (IOException ex) { } @@ -1218,14 +1217,14 @@ public abstract class FileContextMainOperationsBaseTest { out.close(); } - private void rename(Path src, Path dst, boolean renameShouldSucceed, - boolean srcExists, boolean dstExists, Rename... options) - throws IOException { - fc.rename(src, dst, options); - if (!renameShouldSucceed) - Assert.fail("rename should have thrown exception"); - Assert.assertEquals("Source exists", srcExists, exists(fc, src)); - Assert.assertEquals("Destination exists", dstExists, exists(fc, dst)); + protected void rename(Path src, Path dst, boolean srcExists, + boolean dstExists, Rename... options) throws IOException { + try { + fc.rename(src, dst, options); + } finally { + Assert.assertEquals("Source exists", srcExists, exists(fc, src)); + Assert.assertEquals("Destination exists", dstExists, exists(fc, dst)); + } } private boolean containsPath(Path path, FileStatus[] filteredPaths) http://git-wip-us.apache.org/repos/asf/hadoop/blob/d1fb4948/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestHDFSFileContextMainOperations.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestHDFSFileContextMainOperations.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestHDFSFileContextMainOperations.java index 94fb0fb..8c37351 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestHDFSFileContextMainOperations.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestHDFSFileContextMainOperations.java @@ -33,6 +33,7 @@ import org.apache.hadoop.hdfs.DistributedFileSystem; import org.apache.hadoop.hdfs.HdfsConfiguration; import org.apache.hadoop.hdfs.MiniDFSCluster; import org.apache.hadoop.hdfs.protocol.HdfsConstants; +import org.apache.hadoop.hdfs.protocol.NSQuotaExceededException; import org.apache.hadoop.ipc.RemoteException; import org.apache.hadoop.security.UserGroupInformation; import org.junit.After; @@ -199,9 +200,9 @@ public class TestHDFSFileContextMainOperations extends * accommodates rename */ // rename uses dstdir quota=1 - rename(src1, dst1, false, true, false, Rename.NONE); + rename(src1, dst1, false, true, Rename.NONE); // rename reuses dstdir quota=1 - rename(src2, dst1, true, true, false, Rename.OVERWRITE); + rename(src2, dst1, false, true, Rename.OVERWRITE); /* * Test2: src does not exceed quota and dst has *no* quota to accommodate @@ -209,7 +210,10 @@ public class TestHDFSFileContextMainOperations extends */ // dstDir quota = 1 and dst1 already uses it createFile(src2); - rename(src2, dst2, false, false, true, Rename.NONE); + try { + rename(src2, dst2, true, false, Rename.NONE); + fail("NSQuotaExceededException excepted"); + } catch (NSQuotaExceededException e) {} /* * Test3: src exceeds quota and dst has *no* quota to accommodate rename @@ -217,7 +221,11 @@ public class TestHDFSFileContextMainOperations extends */ // src1 has no quota to accommodate new rename node fs.setQuota(src1.getParent(), 1, HdfsConstants.QUOTA_DONT_SET); - rename(dst1, src1, false, false, true, Rename.NONE); + + try { + rename(dst1, src1, true, false, Rename.NONE); + fail("NSQuotaExceededException excepted"); + } catch (NSQuotaExceededException e) {} /* * Test4: src exceeds quota and dst has *no* quota to accommodate rename @@ -228,16 +236,23 @@ public class TestHDFSFileContextMainOperations extends fs.setQuota(src1.getParent(), 100, HdfsConstants.QUOTA_DONT_SET); createFile(src1); fs.setQuota(src1.getParent(), 1, HdfsConstants.QUOTA_DONT_SET); - rename(dst1, src1, true, true, false, Rename.OVERWRITE); + rename(dst1, src1, false, true, Rename.OVERWRITE); } - @Test + @Test(expected = RemoteException.class) public void testRenameRoot() throws Exception { Path src = getTestRootPath(fc, "test/testRenameRoot/srcdir/src1"); Path dst = new Path("/"); createFile(src); - rename(src, dst, true, false, true, Rename.OVERWRITE); - rename(dst, src, true, false, true, Rename.OVERWRITE); + rename(dst, src, true, true, Rename.OVERWRITE); + } + + @Test(expected = RemoteException.class) + public void testRenameToRoot() throws Exception { + Path src = getTestRootPath(fc, "test/testRenameRoot/srcdir/src1"); + Path dst = new Path("/"); + createFile(src); + rename(src, dst, true, true, Rename.OVERWRITE); } /** @@ -286,7 +301,7 @@ public class TestHDFSFileContextMainOperations extends fs.setQuota(dst1.getParent(), 2, HdfsConstants.QUOTA_DONT_SET); // Free up quota for a subsequent rename fs.delete(dst1, true); - rename(src1, dst1, true, true, false, Rename.OVERWRITE); + rename(src1, dst1, false, true, Rename.OVERWRITE); // Restart the cluster and ensure the above operations can be // loaded from the edits log @@ -325,19 +340,6 @@ public class TestHDFSFileContextMainOperations extends Assert.assertEquals(renameSucceeds, exists(fc, dst)); } - private void rename(Path src, Path dst, boolean dstExists, - boolean renameSucceeds, boolean exception, Options.Rename... options) - throws Exception { - try { - fc.rename(src, dst, options); - Assert.assertTrue(renameSucceeds); - } catch (Exception ex) { - Assert.assertTrue(exception); - } - Assert.assertEquals(renameSucceeds, !exists(fc, src)); - Assert.assertEquals((dstExists||renameSucceeds), exists(fc, dst)); - } - @Override protected boolean listCorruptedBlocksSupported() { return true; --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org For additional commands, e-mail: common-commits-help@hadoop.apache.org