From c0b6c7ad3e6450883077545a1d581f32105df52a Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 26 Jan 2017 00:13:03 -0500 Subject: [PATCH] Check to see if TaggedAddresses have been populated This ensures the node's anti-entropy checks have finished before telling the client Consul is ready. --- testutil/server.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/testutil/server.go b/testutil/server.go index cd5fa128e3..eaa0a53d70 100644 --- a/testutil/server.go +++ b/testutil/server.go @@ -292,6 +292,7 @@ func (s *TestServer) waitForAPI() { // waitForLeader waits for the Consul server's HTTP API to become // available, and then waits for a known leader and an index of // 1 or more to be observed to confirm leader election is done. +// It then waits to ensure the anti-entropy checks have completed. func (s *TestServer) waitForLeader() { WaitForResult(func() (bool, error) { // Query the API and check the status code @@ -312,6 +313,25 @@ func (s *TestServer) waitForLeader() { if resp.Header.Get("X-Consul-Index") == "0" { return false, fmt.Errorf("Consul index is 0") } + + var parsed []map[string]interface{} + dec := json.NewDecoder(resp.Body) + if err := dec.Decode(&parsed); err != nil { + return false, err + } + + if len(parsed) < 1 { + return false, fmt.Errorf("No nodes") + } + + taggedAddresses, ok := parsed[0]["TaggedAddresses"].(map[string]interface{}) + if !ok { + return false, fmt.Errorf("Missing tagged addresses") + } + if _, ok := taggedAddresses["lan"]; !ok { + return false, fmt.Errorf("No lan tagged addresses") + } + return true, nil }, func(err error) { defer s.Stop()