Repository: incubator-gobblin Updated Branches: refs/heads/master 1fe5f952a -> 067043d5b
[GOBBLIN-336] Add a method to save a config to a file Added unit tests. Closes #2216 from HappyRay/add-persist-config- method Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/067043d5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/067043d5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/067043d5 Branch: refs/heads/master Commit: 067043d5bc24539cecb9670f0c0318a94c406c31 Parents: 1fe5f95 Author: Ray Yang <[email protected]> Authored: Mon Dec 18 15:57:44 2017 -0800 Committer: Abhishek Tiwari <[email protected]> Committed: Mon Dec 18 15:57:44 2017 -0800 ---------------------------------------------------------------------- .../org/apache/gobblin/util/ConfigUtils.java | 12 ++++++ .../java/org/apache/gobblin/util/FileUtils.java | 36 ++++++++++++++++ .../apache/gobblin/util/ConfigUtilsTest.java | 23 +++++++++++ .../org/apache/gobblin/util/FileUtilsTest.java | 43 ++++++++++++++++++++ 4 files changed, 114 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/067043d5/gobblin-utility/src/main/java/org/apache/gobblin/util/ConfigUtils.java ---------------------------------------------------------------------- diff --git a/gobblin-utility/src/main/java/org/apache/gobblin/util/ConfigUtils.java b/gobblin-utility/src/main/java/org/apache/gobblin/util/ConfigUtils.java index 4ca747c..e1d70f1 100644 --- a/gobblin-utility/src/main/java/org/apache/gobblin/util/ConfigUtils.java +++ b/gobblin-utility/src/main/java/org/apache/gobblin/util/ConfigUtils.java @@ -19,6 +19,7 @@ package org.apache.gobblin.util; import java.io.IOException; import java.io.StringReader; +import java.nio.file.Path; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -53,6 +54,7 @@ import org.apache.gobblin.password.PasswordManager; * Utility class for dealing with {@link Config} objects. */ public class ConfigUtils { + private final FileUtils fileUtils; /** * List of keys that should be excluded when converting to typesafe config. @@ -66,6 +68,16 @@ public class ConfigUtils { * typesafe config does not allow such properties. */ public static final String STRIP_SUFFIX = ".ROOT_VALUE"; + public ConfigUtils(FileUtils fileUtils) { + this.fileUtils = fileUtils; + } + + public void saveConfigToFile(final Config config, final Path destPath) + throws IOException { + final String configAsHoconString = config.root().render(); + this.fileUtils.saveToFile(configAsHoconString, destPath); + } + /** * Convert a given {@link Config} instance to a {@link Properties} instance. * http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/067043d5/gobblin-utility/src/main/java/org/apache/gobblin/util/FileUtils.java ---------------------------------------------------------------------- diff --git a/gobblin-utility/src/main/java/org/apache/gobblin/util/FileUtils.java b/gobblin-utility/src/main/java/org/apache/gobblin/util/FileUtils.java new file mode 100644 index 0000000..49bf6dd --- /dev/null +++ b/gobblin-utility/src/main/java/org/apache/gobblin/util/FileUtils.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.gobblin.util; + +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; + + +public class FileUtils { + public void saveToFile(final String text, final Path destPath) + throws IOException { + try (PrintWriter out = new PrintWriter( + Files.newBufferedWriter(destPath, StandardCharsets.UTF_8))) { + out.println(text); + out.flush(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/067043d5/gobblin-utility/src/test/java/org/apache/gobblin/util/ConfigUtilsTest.java ---------------------------------------------------------------------- diff --git a/gobblin-utility/src/test/java/org/apache/gobblin/util/ConfigUtilsTest.java b/gobblin-utility/src/test/java/org/apache/gobblin/util/ConfigUtilsTest.java index 4ac527d..d4395f7 100644 --- a/gobblin-utility/src/test/java/org/apache/gobblin/util/ConfigUtilsTest.java +++ b/gobblin-utility/src/test/java/org/apache/gobblin/util/ConfigUtilsTest.java @@ -20,6 +20,8 @@ package org.apache.gobblin.util; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.HashSet; import java.util.Map; @@ -43,10 +45,31 @@ import com.typesafe.config.ConfigValueFactory; import org.apache.gobblin.configuration.ConfigurationKeys; import org.apache.gobblin.configuration.State; +import static org.assertj.core.api.Assertions.assertThat; + public class ConfigUtilsTest { @Test + public void testSaveConfigToFile() + throws IOException { + FileUtils fileUtils = new FileUtils(); + ConfigUtils configUtils = new ConfigUtils(fileUtils); + ImmutableMap<String, String> configMap = ImmutableMap.of("k1", "v1", "k2", "v2"); + Config config = ConfigFactory.parseMap(configMap); + Path destPath = Paths.get("test-config-file.txt"); + + configUtils.saveConfigToFile(config, destPath); + Config restoredConfig = ConfigFactory.parseFile(destPath.toFile()); + + assertThat(restoredConfig.getString("k1")).isEqualTo("v1"); + assertThat(restoredConfig.getString("k2")).isEqualTo("v2"); + + java.nio.file.Files.deleteIfExists(destPath); + } + + + @Test public void testPropertiesToConfig() { Properties properties = new Properties(); http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/067043d5/gobblin-utility/src/test/java/org/apache/gobblin/util/FileUtilsTest.java ---------------------------------------------------------------------- diff --git a/gobblin-utility/src/test/java/org/apache/gobblin/util/FileUtilsTest.java b/gobblin-utility/src/test/java/org/apache/gobblin/util/FileUtilsTest.java new file mode 100644 index 0000000..3956da3 --- /dev/null +++ b/gobblin-utility/src/test/java/org/apache/gobblin/util/FileUtilsTest.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.gobblin.util; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.testng.annotations.Test; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class FileUtilsTest { + + @Test + public void testSaveToFile() + throws IOException { + FileUtils utils = new FileUtils(); + Path destPath = Paths.get("fileUtilTest.txt"); + utils.saveToFile("foo", destPath); + + assertThat(destPath).exists().isReadable().hasContent("foo\n"); + + Files.deleteIfExists(destPath); + } +}
