You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by yi...@apache.org on 2022/07/04 22:07:25 UTC

[hudi] branch master updated: [HUDI-3730] Add ConfigTool#toMap UT (#6035)

This is an automated email from the ASF dual-hosted git repository.

yihua pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new c091e4cc30 [HUDI-3730] Add ConfigTool#toMap UT (#6035)
c091e4cc30 is described below

commit c091e4cc3029fcad734667068b7177ea6f871a33
Author: voonhous <vo...@gmail.com>
AuthorDate: Tue Jul 5 06:07:19 2022 +0800

    [HUDI-3730] Add ConfigTool#toMap UT (#6035)
    
    Co-authored-by: voonhou.su <vo...@shopee.com>
---
 .../apache/hudi/sync/common/util/ConfigUtils.java  |  4 ++
 .../hudi/sync/common/util/TestConfigUtils.java     | 50 ++++++++++++++++++++++
 2 files changed, 54 insertions(+)

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 9c9979d553..62cd4c1748 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 class ConfigUtils {
     String[] keyvalues = keyValueConfig.split("\n");
     Map<String, String> 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 0000000000..f6e48543ff
--- /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<String, String> 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<String, String> 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