|
@@ -23,19 +23,26 @@ import (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func TestSRVGetCluster(t *testing.T) {
|
|
func TestSRVGetCluster(t *testing.T) {
|
|
|
- defer func() { lookupSRV = net.LookupSRV }()
|
|
|
|
|
|
|
+ defer func() {
|
|
|
|
|
+ lookupSRV = net.LookupSRV
|
|
|
|
|
+ resolveTCPAddr = net.ResolveTCPAddr
|
|
|
|
|
+ }()
|
|
|
|
|
|
|
|
name := "dnsClusterTest"
|
|
name := "dnsClusterTest"
|
|
|
tests := []struct {
|
|
tests := []struct {
|
|
|
withSSL []*net.SRV
|
|
withSSL []*net.SRV
|
|
|
withoutSSL []*net.SRV
|
|
withoutSSL []*net.SRV
|
|
|
urls []string
|
|
urls []string
|
|
|
- expected string
|
|
|
|
|
|
|
+ dns map[string]string
|
|
|
|
|
+
|
|
|
|
|
+ expected string
|
|
|
}{
|
|
}{
|
|
|
{
|
|
{
|
|
|
[]*net.SRV{},
|
|
[]*net.SRV{},
|
|
|
[]*net.SRV{},
|
|
[]*net.SRV{},
|
|
|
nil,
|
|
nil,
|
|
|
|
|
+ nil,
|
|
|
|
|
+
|
|
|
"",
|
|
"",
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
@@ -46,6 +53,8 @@ func TestSRVGetCluster(t *testing.T) {
|
|
|
},
|
|
},
|
|
|
[]*net.SRV{},
|
|
[]*net.SRV{},
|
|
|
nil,
|
|
nil,
|
|
|
|
|
+ nil,
|
|
|
|
|
+
|
|
|
"0=https://10.0.0.1:2480,1=https://10.0.0.2:2480,2=https://10.0.0.3:2480",
|
|
"0=https://10.0.0.1:2480,1=https://10.0.0.2:2480,2=https://10.0.0.3:2480",
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
@@ -58,6 +67,7 @@ func TestSRVGetCluster(t *testing.T) {
|
|
|
&net.SRV{Target: "10.0.0.1", Port: 2380},
|
|
&net.SRV{Target: "10.0.0.1", Port: 2380},
|
|
|
},
|
|
},
|
|
|
nil,
|
|
nil,
|
|
|
|
|
+ nil,
|
|
|
"0=https://10.0.0.1:2480,1=https://10.0.0.2:2480,2=https://10.0.0.3:2480,3=http://10.0.0.1:2380",
|
|
"0=https://10.0.0.1:2480,1=https://10.0.0.2:2480,2=https://10.0.0.3:2480,3=http://10.0.0.1:2380",
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
@@ -70,8 +80,22 @@ func TestSRVGetCluster(t *testing.T) {
|
|
|
&net.SRV{Target: "10.0.0.1", Port: 2380},
|
|
&net.SRV{Target: "10.0.0.1", Port: 2380},
|
|
|
},
|
|
},
|
|
|
[]string{"https://10.0.0.1:2480"},
|
|
[]string{"https://10.0.0.1:2480"},
|
|
|
|
|
+ nil,
|
|
|
"dnsClusterTest=https://10.0.0.1:2480,0=https://10.0.0.2:2480,1=https://10.0.0.3:2480,2=http://10.0.0.1:2380",
|
|
"dnsClusterTest=https://10.0.0.1:2480,0=https://10.0.0.2:2480,1=https://10.0.0.3:2480,2=http://10.0.0.1:2380",
|
|
|
},
|
|
},
|
|
|
|
|
+ // matching local member with resolved addr and return unresolved hostnames
|
|
|
|
|
+ {
|
|
|
|
|
+ []*net.SRV{
|
|
|
|
|
+ &net.SRV{Target: "1.example.com.", Port: 2480},
|
|
|
|
|
+ &net.SRV{Target: "2.example.com.", Port: 2480},
|
|
|
|
|
+ &net.SRV{Target: "3.example.com.", Port: 2480},
|
|
|
|
|
+ },
|
|
|
|
|
+ nil,
|
|
|
|
|
+ []string{"https://10.0.0.1:2480"},
|
|
|
|
|
+ map[string]string{"1.example.com:2480": "10.0.0.1:2480", "2.example.com:2480": "10.0.0.2:2480", "3.example.com:2480": "10.0.0.3:2480"},
|
|
|
|
|
+
|
|
|
|
|
+ "dnsClusterTest=https://1.example.com:2480,0=https://2.example.com:2480,1=https://3.example.com:2480",
|
|
|
|
|
+ },
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
@@ -84,6 +108,12 @@ func TestSRVGetCluster(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
return "", nil, errors.New("Unkown service in mock")
|
|
return "", nil, errors.New("Unkown service in mock")
|
|
|
}
|
|
}
|
|
|
|
|
+ resolveTCPAddr = func(network, addr string) (*net.TCPAddr, error) {
|
|
|
|
|
+ if tt.dns == nil || tt.dns[addr] == "" {
|
|
|
|
|
+ return net.ResolveTCPAddr(network, addr)
|
|
|
|
|
+ }
|
|
|
|
|
+ return net.ResolveTCPAddr(network, tt.dns[addr])
|
|
|
|
|
+ }
|
|
|
urls := testutil.MustNewURLs(t, tt.urls)
|
|
urls := testutil.MustNewURLs(t, tt.urls)
|
|
|
str, token, err := SRVGetCluster(name, "example.com", "token", urls)
|
|
str, token, err := SRVGetCluster(name, "example.com", "token", urls)
|
|
|
if err != nil {
|
|
if err != nil {
|