fix: fix endpoints parsing in Go Client (#444)
diff --git a/golang/pkg/utils/utils.go b/golang/pkg/utils/utils.go
index 76be793..db145e4 100644
--- a/golang/pkg/utils/utils.go
+++ b/golang/pkg/utils/utils.go
@@ -72,31 +72,34 @@
func ParseTarget(target string) (*v2.Endpoints, error) {
ret := &v2.Endpoints{
Scheme: v2.AddressScheme_DOMAIN_NAME,
- Addresses: []*v2.Address{
- {
- Host: "",
- Port: 80,
- },
- },
}
- path := target
- u, err := url.Parse(target)
- if err != nil {
- path = target
- ret.Scheme = v2.AddressScheme_IPv4
- } else {
- if u.Host != "" {
- path = u.Host
+ addressRawList := strings.Split(target, ";")
+ for _, path := range addressRawList {
+ if len(path) == 0 {
+ continue
}
- }
- paths := strings.Split(path, ":")
- if len(paths) > 1 {
- if port, err2 := strconv.ParseInt(paths[1], 10, 32); err2 == nil {
- ret.Addresses[0].Port = int32(port)
+ address := &v2.Address{
+ Host: "",
+ Port: 80,
}
- ret.Addresses[0].Host = paths[0]
- } else {
- return nil, fmt.Errorf("parse target failed, target=%s", target)
+ if u, err := url.Parse(path); err != nil {
+ address.Host = path
+ ret.Scheme = v2.AddressScheme_IPv4
+ } else {
+ if u.Host != "" {
+ address.Host = u.Host
+ }
+ }
+ paths := strings.Split(path, ":")
+ if len(paths) > 1 {
+ if port, err2 := strconv.ParseInt(paths[1], 10, 32); err2 == nil {
+ address.Port = int32(port)
+ }
+ address.Host = paths[0]
+ } else {
+ return nil, fmt.Errorf("parse target failed, target=%s", target)
+ }
+ ret.Addresses = append(ret.Addresses, address)
}
return ret, nil
}
diff --git a/golang/pkg/utils/utils_test.go b/golang/pkg/utils/utils_test.go
index c26f8c4..bf43349 100644
--- a/golang/pkg/utils/utils_test.go
+++ b/golang/pkg/utils/utils_test.go
@@ -73,6 +73,26 @@
if err != nil {
t.Error(err)
}
+
+ endpointsExpect := &v2.Endpoints{
+ Scheme: v2.AddressScheme_IPv4,
+ Addresses: []*v2.Address{
+ {
+ Host: "127.0.0.1",
+ Port: 80,
+ },
+ {
+ Host: "127.0.0.1",
+ Port: 81,
+ },
+ },
+ }
+ endpoints, err := ParseTarget("127.0.0.1:80;127.0.0.1:81;")
+ if err != nil {
+ t.Error(err)
+ } else if !CompareEndpoints(endpointsExpect, endpoints) {
+ t.Errorf("Expected endpoints: %v, but got: %v", endpointsExpect, endpoints)
+ }
}
func TestMatchMessageType(t *testing.T) {