From 585a4f96d78643bd656752efd6998b34287cfe09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Elek?= Date: Mon, 10 Sep 2018 13:16:28 +0200 Subject: [PATCH] HDDS-417. Ambiguous error message when using genconf tool. Contributed by Dinesh Chitlangia. --- ...stGenerateOzoneRequiredConfigurations.java | 27 ++++++++++++++++--- .../GenerateOzoneRequiredConfigurations.java | 12 ++++----- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java index 75c15a40589..8c75ebb1cb7 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/genconf/TestGenerateOzoneRequiredConfigurations.java @@ -95,8 +95,8 @@ public class TestGenerateOzoneRequiredConfigurations { try (PrintStream ps = new PrintStream(outContent)) { System.setOut(ps); GenerateOzoneRequiredConfigurations.main(args); - Assert.assertThat(outContent.toString(), - CoreMatchers.containsString("ozone-site.xml has been generated at")); + Assert.assertThat(outContent.toString(), CoreMatchers.containsString( + "ozone-site.xml has been generated at")); System.setOut(oldStream); } } @@ -123,8 +123,29 @@ public class TestGenerateOzoneRequiredConfigurations { tempPath.setWritable(true); } + /** + * Test to avoid generating ozone-site.xml when invalid permission. + * @throws Exception + */ + @Test + public void generateConfigurationsFailureForInvalidPath() throws Exception { + File tempPath = getRandomTempDir(); + tempPath.setReadOnly(); + String[] args = new String[]{"-output", + tempPath.getAbsolutePath() + "/ozone-site.xml"}; + GenerateOzoneRequiredConfigurations.main(args); + + Assert.assertEquals("Path is invalid", false, + GenerateOzoneRequiredConfigurations.isValidPath(args[1])); + + Assert.assertEquals("Config file not generated", 1, + GenerateOzoneRequiredConfigurations.generateConfigurations(args[1])); + tempPath.setWritable(true); + } + private File getRandomTempDir() throws IOException { - File tempDir = new File(outputBaseDir, RandomStringUtils.randomAlphanumeric(5)); + File tempDir = new File(outputBaseDir, + RandomStringUtils.randomAlphanumeric(5)); FileUtils.forceMkdir(tempDir); return tempDir; } diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java index 6296c9dc57f..688b7358496 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java @@ -25,6 +25,7 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; import java.net.URL; +import java.nio.file.Files; import java.nio.file.InvalidPathException; import java.nio.file.Paths; import java.util.ArrayList; @@ -94,18 +95,17 @@ public final class GenerateOzoneRequiredConfigurations { } /** - * Check if the path is valid. + * Check if the path is valid directory. * * @param path - * @return true, if path is valid, else return false + * @return true, if path is valid directory, else return false */ public static boolean isValidPath(String path) { try { - Paths.get(path); + return Files.isDirectory(Paths.get(path)); } catch (InvalidPathException | NullPointerException ex) { return false; } - return true; } /** @@ -129,12 +129,12 @@ public final class GenerateOzoneRequiredConfigurations { public static int generateConfigurations(String path) throws JAXBException { if (!isValidPath(path)) { - System.out.println("Invalid path or insufficient permission"); + System.out.println("Invalid directory path."); return FAILURE; } if (!canWrite(path)) { - System.out.println("Invalid path or insufficient permission"); + System.out.println("Insufficient permission."); return FAILURE; }