From c091e4cc3029fcad734667068b7177ea6f871a33 Mon Sep 17 00:00:00 2001 From: voonhous Date: Tue, 5 Jul 2022 06:07:19 +0800 Subject: [PATCH] [HUDI-3730] Add ConfigTool#toMap UT (#6035) Co-authored-by: voonhou.su --- .../hudi/sync/common/util/ConfigUtils.java | 4 ++ .../sync/common/util/TestConfigUtils.java | 50 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/util/TestConfigUtils.java diff --git a/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/util/ConfigUtils.java b/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/util/ConfigUtils.java index 9c9979d5539b..62cd4c1748fc 100644 --- a/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/util/ConfigUtils.java +++ b/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/util/ConfigUtils.java @@ -47,6 +47,10 @@ public static Map toMap(String keyValueConfig) { String[] keyvalues = keyValueConfig.split("\n"); Map tableProperties = new HashMap<>(); for (String keyValue : keyvalues) { + // Handle multiple new lines and lines that contain only spaces after splitting + if (keyValue.trim().isEmpty()) { + continue; + } String[] keyValueArray = keyValue.split("="); if (keyValueArray.length == 1 || keyValueArray.length == 2) { String key = keyValueArray[0].trim(); diff --git a/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/util/TestConfigUtils.java b/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/util/TestConfigUtils.java new file mode 100644 index 000000000000..f6e48543ff0d --- /dev/null +++ b/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/util/TestConfigUtils.java @@ -0,0 +1,50 @@ +package org.apache.hudi.sync.common.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +public class TestConfigUtils { + + @Test + public void testToMapSucceeds() { + Map expectedMap = new HashMap<>(); + expectedMap.put("k.1.1.2", "v1"); + expectedMap.put("k.2.1.2", "v2"); + expectedMap.put("k.3.1.2", "v3"); + + // Test base case + String srcKv = "k.1.1.2=v1\nk.2.1.2=v2\nk.3.1.2=v3"; + Map outMap = ConfigUtils.toMap(srcKv); + assertEquals(expectedMap, outMap); + + // Test ends with new line + srcKv = "k.1.1.2=v1\nk.2.1.2=v2\nk.3.1.2=v3\n"; + outMap = ConfigUtils.toMap(srcKv); + assertEquals(expectedMap, outMap); + + // Test delimited by multiple new lines + srcKv = "k.1.1.2=v1\nk.2.1.2=v2\n\nk.3.1.2=v3"; + outMap = ConfigUtils.toMap(srcKv); + assertEquals(expectedMap, outMap); + + // Test delimited by multiple new lines with spaces in between + srcKv = "k.1.1.2=v1\n \nk.2.1.2=v2\n\nk.3.1.2=v3"; + outMap = ConfigUtils.toMap(srcKv); + assertEquals(expectedMap, outMap); + + // Test with random spaces if trim works properly + srcKv = " k.1.1.2 = v1\n k.2.1.2 = v2 \nk.3.1.2 = v3"; + outMap = ConfigUtils.toMap(srcKv); + assertEquals(expectedMap, outMap); + } + + @Test + public void testToMapThrowError() { + String srcKv = "k.1.1.2=v1=v1.1\nk.2.1.2=v2\nk.3.1.2=v3"; + assertThrows(IllegalArgumentException.class, () -> ConfigUtils.toMap(srcKv)); + } +} \ No newline at end of file