github.imxd.top/hashicorp/consul@v1.4.5/agent/metadata/server_test.go (about) 1 package metadata_test 2 3 import ( 4 "net" 5 "testing" 6 7 "github.com/hashicorp/consul/agent/metadata" 8 "github.com/hashicorp/serf/serf" 9 ) 10 11 func TestServer_Key_params(t *testing.T) { 12 ipv4a := net.ParseIP("127.0.0.1") 13 ipv4b := net.ParseIP("1.2.3.4") 14 15 tests := []struct { 16 name string 17 sd1 *metadata.Server 18 sd2 *metadata.Server 19 equal bool 20 }{ 21 { 22 name: "Addr inequality", 23 sd1: &metadata.Server{ 24 Name: "s1", 25 Datacenter: "dc1", 26 Port: 8300, 27 Addr: &net.IPAddr{IP: ipv4a}, 28 }, 29 sd2: &metadata.Server{ 30 Name: "s1", 31 Datacenter: "dc1", 32 Port: 8300, 33 Addr: &net.IPAddr{IP: ipv4b}, 34 }, 35 equal: true, 36 }, 37 } 38 39 for _, test := range tests { 40 if test.sd1.Key().Equal(test.sd2.Key()) != test.equal { 41 t.Errorf("Expected a %v result from test %s", test.equal, test.name) 42 } 43 44 // Test Key to make sure it actually works as a key 45 m := make(map[metadata.Key]bool) 46 m[*test.sd1.Key()] = true 47 if _, found := m[*test.sd2.Key()]; found != test.equal { 48 t.Errorf("Expected a %v result from map test %s", test.equal, test.name) 49 } 50 } 51 } 52 53 func TestIsConsulServer(t *testing.T) { 54 m := serf.Member{ 55 Name: "foo", 56 Addr: net.IP([]byte{127, 0, 0, 1}), 57 Tags: map[string]string{ 58 "role": "consul", 59 "id": "asdf", 60 "dc": "east-aws", 61 "port": "10000", 62 "build": "0.8.0", 63 "wan_join_port": "1234", 64 "vsn": "1", 65 "expect": "3", 66 "raft_vsn": "3", 67 "use_tls": "1", 68 "nonvoter": "1", 69 }, 70 Status: serf.StatusLeft, 71 } 72 ok, parts := metadata.IsConsulServer(m) 73 if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 { 74 t.Fatalf("bad: %v %v", ok, parts) 75 } 76 if parts.Name != "foo" { 77 t.Fatalf("bad: %v", parts) 78 } 79 if parts.ID != "asdf" { 80 t.Fatalf("bad: %v", parts.ID) 81 } 82 if parts.Bootstrap { 83 t.Fatalf("unexpected bootstrap") 84 } 85 if parts.Expect != 3 { 86 t.Fatalf("bad: %v", parts.Expect) 87 } 88 if parts.Port != 10000 { 89 t.Fatalf("bad: %v", parts.Port) 90 } 91 if parts.WanJoinPort != 1234 { 92 t.Fatalf("bad: %v", parts.WanJoinPort) 93 } 94 if parts.RaftVersion != 3 { 95 t.Fatalf("bad: %v", parts.RaftVersion) 96 } 97 if parts.Status != serf.StatusLeft { 98 t.Fatalf("bad: %v", parts.Status) 99 } 100 if !parts.UseTLS { 101 t.Fatalf("bad: %v", parts.UseTLS) 102 } 103 if !parts.NonVoter { 104 t.Fatalf("unexpected voter") 105 } 106 m.Tags["bootstrap"] = "1" 107 m.Tags["disabled"] = "1" 108 ok, parts = metadata.IsConsulServer(m) 109 if !ok { 110 t.Fatalf("expected a valid consul server") 111 } 112 if !parts.Bootstrap { 113 t.Fatalf("expected bootstrap") 114 } 115 if parts.Addr.String() != "127.0.0.1:10000" { 116 t.Fatalf("bad addr: %v", parts.Addr) 117 } 118 if parts.Version != 1 { 119 t.Fatalf("bad: %v", parts) 120 } 121 m.Tags["expect"] = "3" 122 delete(m.Tags, "bootstrap") 123 delete(m.Tags, "disabled") 124 ok, parts = metadata.IsConsulServer(m) 125 if !ok || parts.Expect != 3 { 126 t.Fatalf("bad: %v", parts.Expect) 127 } 128 if parts.Bootstrap { 129 t.Fatalf("unexpected bootstrap") 130 } 131 132 delete(m.Tags, "nonvoter") 133 ok, parts = metadata.IsConsulServer(m) 134 if !ok || parts.NonVoter { 135 t.Fatalf("unexpected nonvoter") 136 } 137 138 delete(m.Tags, "role") 139 ok, parts = metadata.IsConsulServer(m) 140 if ok { 141 t.Fatalf("unexpected ok server") 142 } 143 } 144 145 func TestIsConsulServer_Optional(t *testing.T) { 146 m := serf.Member{ 147 Name: "foo", 148 Addr: net.IP([]byte{127, 0, 0, 1}), 149 Tags: map[string]string{ 150 "role": "consul", 151 "id": "asdf", 152 "dc": "east-aws", 153 "port": "10000", 154 "vsn": "1", 155 "build": "0.8.0", 156 // wan_join_port, raft_vsn, and expect are optional and 157 // should default to zero. 158 }, 159 } 160 ok, parts := metadata.IsConsulServer(m) 161 if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 { 162 t.Fatalf("bad: %v %v", ok, parts) 163 } 164 if parts.Name != "foo" { 165 t.Fatalf("bad: %v", parts) 166 } 167 if parts.ID != "asdf" { 168 t.Fatalf("bad: %v", parts.ID) 169 } 170 if parts.Bootstrap { 171 t.Fatalf("unexpected bootstrap") 172 } 173 if parts.Expect != 0 { 174 t.Fatalf("bad: %v", parts.Expect) 175 } 176 if parts.Port != 10000 { 177 t.Fatalf("bad: %v", parts.Port) 178 } 179 if parts.WanJoinPort != 0 { 180 t.Fatalf("bad: %v", parts.WanJoinPort) 181 } 182 if parts.RaftVersion != 0 { 183 t.Fatalf("bad: %v", parts.RaftVersion) 184 } 185 m.Tags["bootstrap"] = "1" 186 m.Tags["disabled"] = "1" 187 ok, parts = metadata.IsConsulServer(m) 188 if !ok { 189 t.Fatalf("expected a valid consul server") 190 } 191 if !parts.Bootstrap { 192 t.Fatalf("expected bootstrap") 193 } 194 if parts.Addr.String() != "127.0.0.1:10000" { 195 t.Fatalf("bad addr: %v", parts.Addr) 196 } 197 if parts.Version != 1 { 198 t.Fatalf("bad: %v", parts) 199 } 200 m.Tags["expect"] = "3" 201 delete(m.Tags, "bootstrap") 202 delete(m.Tags, "disabled") 203 ok, parts = metadata.IsConsulServer(m) 204 if !ok || parts.Expect != 3 { 205 t.Fatalf("bad: %v", parts.Expect) 206 } 207 if parts.Bootstrap { 208 t.Fatalf("unexpected bootstrap") 209 } 210 211 delete(m.Tags, "role") 212 ok, parts = metadata.IsConsulServer(m) 213 if ok { 214 t.Fatalf("unexpected ok server") 215 } 216 }