diff --git a/internal/config/dns/dns_path.go b/internal/config/dns/dns_path.go index c648aed2d..9e9a72087 100644 --- a/internal/config/dns/dns_path.go +++ b/internal/config/dns/dns_path.go @@ -49,16 +49,9 @@ func dnsJoin(labels ...string) string { // msgUnPath converts a etcd path to domainName. func msgUnPath(s string) string { - l := strings.Split(s, etcdPathSeparator) - if l[len(l)-1] == "" { - l = l[:len(l)-1] + ks := strings.Split(strings.Trim(s, etcdPathSeparator), etcdPathSeparator) + for i, j := 0, len(ks)-1; i < j; i, j = i+1, j-1 { + ks[i], ks[j] = ks[j], ks[i] } - if len(l) < 2 { - return s - } - // start with 1, to strip /skydns - for i, j := 1, len(l)-1; i < j; i, j = i+1, j-1 { - l[i], l[j] = l[j], l[i] - } - return dnsJoin(l[1 : len(l)-1]...) + return strings.Join(ks, ".") } diff --git a/internal/config/dns/etcd_dns_test.go b/internal/config/dns/etcd_dns_test.go index 28335bedf..4be271bf7 100644 --- a/internal/config/dns/etcd_dns_test.go +++ b/internal/config/dns/etcd_dns_test.go @@ -48,12 +48,27 @@ func TestPath(t *testing.T) { func TestUnPath(t *testing.T) { result1 := msgUnPath("/skydns/local/cluster/staging/service/") - if result1 != "service.staging.cluster.local." { + if result1 != "service.staging.cluster.local.skydns" { t.Errorf("Failure to get domain from etcd key (with a trailing '/'), expect: 'service.staging.cluster.local.', actually get: '%s'", result1) } result2 := msgUnPath("/skydns/local/cluster/staging/service") - if result2 != "service.staging.cluster.local." { + if result2 != "service.staging.cluster.local.skydns" { t.Errorf("Failure to get domain from etcd key (without trailing '/'), expect: 'service.staging.cluster.local.' actually get: '%s'", result2) } + + result3 := msgUnPath("/singleleveldomain/") + if result3 != "singleleveldomain" { + t.Errorf("Failure to get domain from etcd key (with leading and trailing '/'), expect: 'singleleveldomain.' actually get: '%s'", result3) + } + + result4 := msgUnPath("/singleleveldomain") + if result4 != "singleleveldomain" { + t.Errorf("Failure to get domain from etcd key (without trailing '/'), expect: 'singleleveldomain.' actually get: '%s'", result4) + } + + result5 := msgUnPath("singleleveldomain") + if result5 != "singleleveldomain" { + t.Errorf("Failure to get domain from etcd key (without leading and trailing '/'), expect: 'singleleveldomain.' actually get: '%s'", result5) + } }