You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by xk...@apache.org on 2018/06/08 17:45:03 UTC
[19/29] hadoop git commit: HADOOP-15513. Add additional test cases to
cover some corner cases for FileUtil#symlink. Contributed by Giovanni Matteo
Fumarola.
HADOOP-15513. Add additional test cases to cover some corner cases for FileUtil#symlink. Contributed by Giovanni Matteo Fumarola.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/db81f85e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/db81f85e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/db81f85e
Branch: refs/heads/HDFS-12943
Commit: db81f85e844b53595f40e5699776a336faad2f84
Parents: d901be6
Author: Inigo Goiri <in...@apache.org>
Authored: Wed Jun 6 11:44:17 2018 -0700
Committer: Inigo Goiri <in...@apache.org>
Committed: Wed Jun 6 11:44:17 2018 -0700
----------------------------------------------------------------------
.../java/org/apache/hadoop/fs/FileUtil.java | 7 +
.../java/org/apache/hadoop/fs/TestFileUtil.java | 154 +++++++++++++++++++
2 files changed, 161 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/db81f85e/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
index 5ef78f2..ed10f1c 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileUtil.java
@@ -1033,6 +1033,13 @@ public class FileUtil {
* @return 0 on success
*/
public static int symLink(String target, String linkname) throws IOException{
+
+ if (target == null || linkname == null) {
+ LOG.warn("Can not create a symLink with a target = " + target
+ + " and link =" + linkname);
+ return 1;
+ }
+
// Run the input paths through Java's File so that they are converted to the
// native OS form
File targetFile = new File(
http://git-wip-us.apache.org/repos/asf/hadoop/blob/db81f85e/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileUtil.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileUtil.java
index 7218a1b..01fa563 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileUtil.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileUtil.java
@@ -968,6 +968,160 @@ public class TestFileUtil {
Assert.assertFalse(link.exists());
}
+ /**
+ * This test validates the correctness of
+ * {@link FileUtil#symLink(String, String)} in case of null pointer inputs.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testSymlinkWithNullInput() throws IOException {
+ Assert.assertFalse(del.exists());
+ del.mkdirs();
+
+ File file = new File(del, FILE);
+ File link = new File(del, "_link");
+
+ // Create the same symbolic link
+ // The operation should fail and returns 1
+ int result = FileUtil.symLink(null, null);
+ Assert.assertEquals(1, result);
+
+ // Create the same symbolic link
+ // The operation should fail and returns 1
+ result = FileUtil.symLink(file.getAbsolutePath(), null);
+ Assert.assertEquals(1, result);
+
+ // Create the same symbolic link
+ // The operation should fail and returns 1
+ result = FileUtil.symLink(null, link.getAbsolutePath());
+ Assert.assertEquals(1, result);
+
+ file.delete();
+ link.delete();
+ }
+
+ /**
+ * This test validates the correctness of
+ * {@link FileUtil#symLink(String, String)} in case the file already exists.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testSymlinkFileAlreadyExists() throws IOException {
+ Assert.assertFalse(del.exists());
+ del.mkdirs();
+
+ File file = new File(del, FILE);
+ File link = new File(del, "_link");
+
+ // Create a symbolic link
+ // The operation should succeed
+ int result1 =
+ FileUtil.symLink(file.getAbsolutePath(), link.getAbsolutePath());
+
+ Assert.assertEquals(0, result1);
+
+ // Create the same symbolic link
+ // The operation should fail and returns 1
+ result1 = FileUtil.symLink(file.getAbsolutePath(), link.getAbsolutePath());
+
+ Assert.assertEquals(1, result1);
+
+ file.delete();
+ link.delete();
+ }
+
+ /**
+ * This test validates the correctness of
+ * {@link FileUtil#symLink(String, String)} in case the file and the link are
+ * the same file.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testSymlinkSameFile() throws IOException {
+ Assert.assertFalse(del.exists());
+ del.mkdirs();
+
+ File file = new File(del, FILE);
+
+ // Create a symbolic link
+ // The operation should succeed
+ int result =
+ FileUtil.symLink(file.getAbsolutePath(), file.getAbsolutePath());
+
+ Assert.assertEquals(0, result);
+
+ file.delete();
+ }
+
+ /**
+ * This test validates the correctness of
+ * {@link FileUtil#symLink(String, String)} in case we want to use a link for
+ * 2 different files.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testSymlink2DifferentFile() throws IOException {
+ Assert.assertFalse(del.exists());
+ del.mkdirs();
+ File file = new File(del, FILE);
+ File fileSecond = new File(del, FILE + "_1");
+ File link = new File(del, "_link");
+
+ // Create a symbolic link
+ // The operation should succeed
+ int result =
+ FileUtil.symLink(file.getAbsolutePath(), link.getAbsolutePath());
+
+ Assert.assertEquals(0, result);
+
+ // The operation should fail and returns 1
+ result =
+ FileUtil.symLink(fileSecond.getAbsolutePath(), link.getAbsolutePath());
+
+ Assert.assertEquals(1, result);
+
+ file.delete();
+ fileSecond.delete();
+ link.delete();
+ }
+
+ /**
+ * This test validates the correctness of
+ * {@link FileUtil#symLink(String, String)} in case we want to use a 2
+ * different links for the same file.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testSymlink2DifferentLinks() throws IOException {
+ Assert.assertFalse(del.exists());
+ del.mkdirs();
+ File file = new File(del, FILE);
+ File link = new File(del, "_link");
+ File linkSecond = new File(del, "_link_1");
+
+ // Create a symbolic link
+ // The operation should succeed
+ int result =
+ FileUtil.symLink(file.getAbsolutePath(), link.getAbsolutePath());
+
+ Assert.assertEquals(0, result);
+
+ // The operation should succeed
+ result =
+ FileUtil.symLink(file.getAbsolutePath(), linkSecond.getAbsolutePath());
+
+ Assert.assertEquals(0, result);
+
+ file.delete();
+ link.delete();
+ linkSecond.delete();
+ }
+
private void doUntarAndVerify(File tarFile, File untarDir)
throws IOException {
if (untarDir.exists() && !FileUtil.fullyDelete(untarDir)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org