Skip to content

Instantly share code, notes, and snippets.

@sfncook
Created September 10, 2015 20:46
Show Gist options
  • Save sfncook/df940312381d333d9c43 to your computer and use it in GitHub Desktop.
Save sfncook/df940312381d333d9c43 to your computer and use it in GitHub Desktop.
TestAgentAntiEntropy_EnableTagDrift
func TestAgentAntiEntropy_EnableTagDrift(t *testing.T) {
conf := nextConfig()
dir, agent := makeAgent(t, conf)
defer os.RemoveAll(dir)
defer agent.Shutdown()
testutil.WaitForLeader(t, agent.RPC, "dc1")
args := &structs.RegisterRequest{
Datacenter: "dc1",
Node: agent.config.NodeName,
Address: "127.0.0.1",
}
var out struct{}
// Exists local (EnableTagDrift = true)
srv1 := &structs.NodeService{
ID: "svc_id1",
Service: "svc1",
Tags: []string{"tag1"},
Port: 6100,
EnableTagDrift: true,
}
agent.state.AddService(srv1, "")
srv1_mod := new(structs.NodeService)
*srv1_mod = *srv1
srv1_mod.Tags = []string{"tag1_mod"}
args.Service = srv1_mod
if err := agent.RPC("Catalog.Register", args, &out); err != nil {
t.Fatalf("err: %v", err)
}
// Trigger anti-entropy run and wait
agent.StartSync()
time.Sleep(1000 * time.Millisecond)
// Verify that we are in sync
req := structs.NodeSpecificRequest{
Datacenter: "dc1",
Node: agent.config.NodeName,
}
var services structs.IndexedNodeServices
if err := agent.RPC("Catalog.NodeServices", &req, &services); err != nil {
t.Fatalf("err: %v", err)
}
// All the services should match
for id, serv := range services.NodeServices.Services {
switch id {
case "svc_id1":
if serv.ID!=srv1.ID ||
serv.Service!=srv1.Service ||
serv.Port!=srv1.Port ||
!reflect.DeepEqual(serv.Tags, srv1.Tags) ||
serv.Address!=srv1.Address {
t.Fatalf("bad: %v %v", serv, srv1)
}
case "consul":
// ignore
default:
t.Fatalf("unexpected service: %v", id)
}
}
for name, status := range agent.state.serviceStatus {
if !status.inSync {
t.Fatalf("should be in sync: %v %v", name, status)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment