mirror of https://github.com/hashicorp/consul
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
5.1 KiB
225 lines
5.1 KiB
package metadata_test |
|
|
|
import ( |
|
"net" |
|
"testing" |
|
|
|
"github.com/hashicorp/serf/serf" |
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/hashicorp/consul/agent/metadata" |
|
) |
|
|
|
func TestServer_Key_params(t *testing.T) { |
|
ipv4a := net.ParseIP("127.0.0.1") |
|
ipv4b := net.ParseIP("1.2.3.4") |
|
|
|
tests := []struct { |
|
name string |
|
sd1 *metadata.Server |
|
sd2 *metadata.Server |
|
equal bool |
|
}{ |
|
{ |
|
name: "Addr inequality", |
|
sd1: &metadata.Server{ |
|
Name: "s1", |
|
Datacenter: "dc1", |
|
Port: 8300, |
|
Addr: &net.IPAddr{IP: ipv4a}, |
|
}, |
|
sd2: &metadata.Server{ |
|
Name: "s1", |
|
Datacenter: "dc1", |
|
Port: 8300, |
|
Addr: &net.IPAddr{IP: ipv4b}, |
|
}, |
|
equal: true, |
|
}, |
|
} |
|
|
|
for _, test := range tests { |
|
if test.sd1.Key().Equal(test.sd2.Key()) != test.equal { |
|
t.Errorf("Expected a %v result from test %s", test.equal, test.name) |
|
} |
|
|
|
// Test Key to make sure it actually works as a key |
|
m := make(map[metadata.Key]bool) |
|
m[*test.sd1.Key()] = true |
|
if _, found := m[*test.sd2.Key()]; found != test.equal { |
|
t.Errorf("Expected a %v result from map test %s", test.equal, test.name) |
|
} |
|
} |
|
} |
|
|
|
func TestIsConsulServer(t *testing.T) { |
|
m := serf.Member{ |
|
Name: "foo", |
|
Addr: net.IP([]byte{127, 0, 0, 1}), |
|
Tags: map[string]string{ |
|
"role": "consul", |
|
"id": "asdf", |
|
"dc": "east-aws", |
|
"port": "10000", |
|
"build": "0.8.0", |
|
"wan_join_port": "1234", |
|
"vsn": "1", |
|
"expect": "3", |
|
"raft_vsn": "3", |
|
"use_tls": "1", |
|
"read_replica": "1", |
|
}, |
|
Status: serf.StatusLeft, |
|
} |
|
ok, parts := metadata.IsConsulServer(m) |
|
if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 { |
|
t.Fatalf("bad: %v %v", ok, parts) |
|
} |
|
if parts.Name != "foo" { |
|
t.Fatalf("bad: %v", parts) |
|
} |
|
if parts.ID != "asdf" { |
|
t.Fatalf("bad: %v", parts.ID) |
|
} |
|
if parts.Bootstrap { |
|
t.Fatalf("unexpected bootstrap") |
|
} |
|
if parts.Expect != 3 { |
|
t.Fatalf("bad: %v", parts.Expect) |
|
} |
|
if parts.Port != 10000 { |
|
t.Fatalf("bad: %v", parts.Port) |
|
} |
|
if parts.WanJoinPort != 1234 { |
|
t.Fatalf("bad: %v", parts.WanJoinPort) |
|
} |
|
if parts.RaftVersion != 3 { |
|
t.Fatalf("bad: %v", parts.RaftVersion) |
|
} |
|
if parts.Status != serf.StatusLeft { |
|
t.Fatalf("bad: %v", parts.Status) |
|
} |
|
if !parts.UseTLS { |
|
t.Fatalf("bad: %v", parts.UseTLS) |
|
} |
|
if !parts.ReadReplica { |
|
t.Fatalf("unexpected voter") |
|
} |
|
m.Tags["bootstrap"] = "1" |
|
m.Tags["disabled"] = "1" |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok { |
|
t.Fatalf("expected a valid consul server") |
|
} |
|
if !parts.Bootstrap { |
|
t.Fatalf("expected bootstrap") |
|
} |
|
if parts.Addr.String() != "127.0.0.1:10000" { |
|
t.Fatalf("bad addr: %v", parts.Addr) |
|
} |
|
if parts.Version != 1 { |
|
t.Fatalf("bad: %v", parts) |
|
} |
|
m.Tags["expect"] = "3" |
|
delete(m.Tags, "bootstrap") |
|
delete(m.Tags, "disabled") |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok || parts.Expect != 3 { |
|
t.Fatalf("bad: %v", parts.Expect) |
|
} |
|
if parts.Bootstrap { |
|
t.Fatalf("unexpected bootstrap") |
|
} |
|
|
|
delete(m.Tags, "read_replica") |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok || parts.ReadReplica { |
|
t.Fatalf("unexpected read replica") |
|
} |
|
|
|
m.Tags["nonvoter"] = "1" |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok || !parts.ReadReplica { |
|
t.Fatalf("expected read replica") |
|
} |
|
|
|
delete(m.Tags, "role") |
|
ok, _ = metadata.IsConsulServer(m) |
|
require.False(t, ok, "expected to not be a consul server") |
|
} |
|
|
|
func TestIsConsulServer_Optional(t *testing.T) { |
|
m := serf.Member{ |
|
Name: "foo", |
|
Addr: net.IP([]byte{127, 0, 0, 1}), |
|
Tags: map[string]string{ |
|
"role": "consul", |
|
"id": "asdf", |
|
"dc": "east-aws", |
|
"port": "10000", |
|
"vsn": "1", |
|
"build": "0.8.0", |
|
// wan_join_port, raft_vsn, and expect are optional and |
|
// should default to zero. |
|
}, |
|
} |
|
ok, parts := metadata.IsConsulServer(m) |
|
if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 { |
|
t.Fatalf("bad: %v %v", ok, parts) |
|
} |
|
if parts.Name != "foo" { |
|
t.Fatalf("bad: %v", parts) |
|
} |
|
if parts.ID != "asdf" { |
|
t.Fatalf("bad: %v", parts.ID) |
|
} |
|
if parts.Bootstrap { |
|
t.Fatalf("unexpected bootstrap") |
|
} |
|
if parts.Expect != 0 { |
|
t.Fatalf("bad: %v", parts.Expect) |
|
} |
|
if parts.Port != 10000 { |
|
t.Fatalf("bad: %v", parts.Port) |
|
} |
|
if parts.WanJoinPort != 0 { |
|
t.Fatalf("bad: %v", parts.WanJoinPort) |
|
} |
|
if parts.RaftVersion != 0 { |
|
t.Fatalf("bad: %v", parts.RaftVersion) |
|
} |
|
|
|
m.Tags["bootstrap"] = "1" |
|
m.Tags["disabled"] = "1" |
|
m.Tags["ft_ns"] = "1" |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok { |
|
t.Fatalf("expected a valid consul server") |
|
} |
|
if !parts.Bootstrap { |
|
t.Fatalf("expected bootstrap") |
|
} |
|
if parts.Addr.String() != "127.0.0.1:10000" { |
|
t.Fatalf("bad addr: %v", parts.Addr) |
|
} |
|
if parts.Version != 1 { |
|
t.Fatalf("bad: %v", parts) |
|
} |
|
expectedFlags := map[string]int{"ns": 1} |
|
require.Equal(t, expectedFlags, parts.FeatureFlags) |
|
|
|
m.Tags["expect"] = "3" |
|
delete(m.Tags, "bootstrap") |
|
delete(m.Tags, "disabled") |
|
ok, parts = metadata.IsConsulServer(m) |
|
if !ok || parts.Expect != 3 { |
|
t.Fatalf("bad: %v", parts.Expect) |
|
} |
|
if parts.Bootstrap { |
|
t.Fatalf("unexpected bootstrap") |
|
} |
|
|
|
delete(m.Tags, "role") |
|
ok, _ = metadata.IsConsulServer(m) |
|
require.False(t, ok, "expected to not be a consul server") |
|
}
|
|
|