You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by go...@apache.org on 2021/11/09 02:35:26 UTC

[incubator-inlong] branch master updated: [INLONG-1769][TubeMQ]Fix bug in util function `SplitToMap` in Go SDK (#1770)

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

gosonzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 46188e8  [INLONG-1769][TubeMQ]Fix bug in util function `SplitToMap` in Go SDK (#1770)
46188e8 is described below

commit 46188e8dfd05396113946b87af26b2118ad03113
Author: Zijie Lu <ws...@gmail.com>
AuthorDate: Tue Nov 9 10:35:10 2021 +0800

    [INLONG-1769][TubeMQ]Fix bug in util function `SplitToMap` in Go SDK (#1770)
    
    Signed-off-by: Zijie Lu <ws...@gmail.com>
---
 .../tubemq-client-go/util/util.go                  | 37 ++++++-------------
 .../tubemq-client-go/util/util_test.go             | 41 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 26 deletions(-)

diff --git a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util.go b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util.go
index 8dd78fa..36c907d 100644
--- a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util.go
+++ b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util.go
@@ -94,39 +94,24 @@ func ParseConfirmContext(confirmContext string) (string, int64, error) {
 }
 
 // SplitToMap split the given string by the two step strings to map.
+// Source format $msgType$=metadata_journal_log,$msgTime$=202111081911,tdbusip=10.56.15.232
 func SplitToMap(source string, step1 string, step2 string) map[string]string {
-	pos1 := 0
-	pos2 := strings.Index(source, step1)
-	pos3 := 0
 	m := make(map[string]string)
-	for pos2 != -1 {
-		itemStr := strings.TrimSpace(source[pos1 : pos2-pos1])
-		if len(itemStr) == 0 {
-			continue
-		}
-		pos1 = pos2 + len(step1)
-		pos2 = strings.Index(source[pos1:], step1)
-		pos3 = strings.Index(itemStr, step2)
-		if pos3 == -1 {
+	if len(source) == 0 {
+		return m
+	}
+
+	str := strings.Split(source, step1)
+	for _, ss := range str {
+		s := strings.Split(ss, step2)
+		if len(s) == 1 {
 			continue
 		}
-		key := strings.TrimSpace(itemStr[:pos3])
-		val := strings.TrimSpace(itemStr[pos3+len(step2):])
+		key := strings.TrimSpace(s[0])
 		if len(key) == 0 {
 			continue
 		}
-		m[key] = val
-	}
-	if pos1 != len(source) {
-		itemStr := strings.TrimSpace(source[pos1:])
-		pos3 = strings.Index(itemStr, step2)
-		if pos3 != -1 {
-			key := strings.TrimSpace(itemStr[:pos3])
-			val := strings.TrimSpace(itemStr[pos3+len(step2):])
-			if len(key) > 0 {
-				m[key] = val
-			}
-		}
+		m[key] = strings.TrimSpace(s[1])
 	}
 	return m
 }
diff --git a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util_test.go b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util_test.go
new file mode 100644
index 0000000..071ea27
--- /dev/null
+++ b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/util/util_test.go
@@ -0,0 +1,41 @@
+// 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 util
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestSplitToMap(t *testing.T) {
+	source := "$msgType$=metadata_journal_log,$msgTime$=202111081911,tdbusip=10.56.15.232"
+	m := SplitToMap(source, ",", "=")
+	properties := make(map[string]string)
+	properties["$msgType$"] = "metadata_journal_log"
+	properties["$msgTime$"] = "202111081911"
+	properties["tdbusip"] = "10.56.15.232"
+	assert.Equal(t, properties, m)
+
+	source = "key=val&key1&key2="
+	m = SplitToMap(source, "&", "=")
+	properties = make(map[string]string)
+	properties["key"] = "val"
+	properties["key2"] = ""
+	assert.Equal(t, properties, m)
+}