Test fixes (#2434)

* Test fixes in health_endpoint_test.go, agent_endpoint_test.go and rtt_test.go
* Don't reuse the same agent config in TestAgent_ReconnectConfigSettings
This commit is contained in:
Kyle Havlovitz 2016-10-25 13:46:54 -07:00 committed by GitHub
parent dace771f06
commit 61311cff80
4 changed files with 96 additions and 70 deletions

View File

@ -189,9 +189,15 @@ func TestHTTPAgentJoin(t *testing.T) {
t.Fatalf("Err: %v", obj) t.Fatalf("Err: %v", obj)
} }
if len(a2.LANMembers()) != 2 { if len(srv.agent.LANMembers()) != 2 {
t.Fatalf("should have 2 members") t.Fatalf("should have 2 members")
} }
testutil.WaitForResult(func() (bool, error) {
return len(a2.LANMembers()) == 2, nil
}, func(err error) {
t.Fatalf("should have 2 members")
})
} }
func TestHTTPAgentJoin_WAN(t *testing.T) { func TestHTTPAgentJoin_WAN(t *testing.T) {
@ -218,6 +224,10 @@ func TestHTTPAgentJoin_WAN(t *testing.T) {
t.Fatalf("Err: %v", obj) t.Fatalf("Err: %v", obj)
} }
if len(srv.agent.WANMembers()) != 2 {
t.Fatalf("should have 2 members")
}
testutil.WaitForResult(func() (bool, error) { testutil.WaitForResult(func() (bool, error) {
return len(a2.WANMembers()) == 2, nil return len(a2.WANMembers()) == 2, nil
}, func(err error) { }, func(err error) {

View File

@ -248,6 +248,7 @@ func TestAgent_ReconnectConfigSettings(t *testing.T) {
} }
}() }()
c = nextConfig()
c.ReconnectTimeoutLan = 24 * time.Hour c.ReconnectTimeoutLan = 24 * time.Hour
c.ReconnectTimeoutWan = 36 * time.Hour c.ReconnectTimeoutWan = 36 * time.Hour
func() { func() {

View File

@ -7,7 +7,6 @@ import (
"os" "os"
"reflect" "reflect"
"testing" "testing"
"time"
"github.com/hashicorp/consul/consul/structs" "github.com/hashicorp/consul/consul/structs"
"github.com/hashicorp/consul/testutil" "github.com/hashicorp/consul/testutil"
@ -126,25 +125,29 @@ func TestHealthChecksInState_DistanceSort(t *testing.T) {
if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil { if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil {
t.Fatalf("err: %v", err) t.Fatalf("err: %v", err)
} }
time.Sleep(300 * time.Millisecond)
// Query again and now foo should have moved to the front of the line. // Retry until foo moves to the front of the line.
testutil.WaitForResult(func() (bool, error) {
resp = httptest.NewRecorder() resp = httptest.NewRecorder()
obj, err = srv.HealthChecksInState(resp, req) obj, err = srv.HealthChecksInState(resp, req)
if err != nil { if err != nil {
t.Fatalf("err: %v", err) return false, fmt.Errorf("err: %v", err)
} }
assertIndex(t, resp) assertIndex(t, resp)
nodes = obj.(structs.HealthChecks) nodes = obj.(structs.HealthChecks)
if len(nodes) != 2 { if len(nodes) != 2 {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
if nodes[0].Node != "foo" { if nodes[0].Node != "foo" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
if nodes[1].Node != "bar" { if nodes[1].Node != "bar" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
return true, nil
}, func(err error) {
t.Fatalf("failed to get sorted service nodes: %v", err)
})
} }
func TestHealthNodeChecks(t *testing.T) { func TestHealthNodeChecks(t *testing.T) {
@ -320,25 +323,29 @@ func TestHealthServiceChecks_DistanceSort(t *testing.T) {
if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil { if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil {
t.Fatalf("err: %v", err) t.Fatalf("err: %v", err)
} }
time.Sleep(300 * time.Millisecond)
// Query again and now foo should have moved to the front of the line. // Retry until foo has moved to the front of the line.
testutil.WaitForResult(func() (bool, error) {
resp = httptest.NewRecorder() resp = httptest.NewRecorder()
obj, err = srv.HealthServiceChecks(resp, req) obj, err = srv.HealthServiceChecks(resp, req)
if err != nil { if err != nil {
t.Fatalf("err: %v", err) return false, fmt.Errorf("err: %v", err)
} }
assertIndex(t, resp) assertIndex(t, resp)
nodes = obj.(structs.HealthChecks) nodes = obj.(structs.HealthChecks)
if len(nodes) != 2 { if len(nodes) != 2 {
t.Fatalf("bad: %v", obj) return false, fmt.Errorf("bad: %v", obj)
} }
if nodes[0].Node != "foo" { if nodes[0].Node != "foo" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
if nodes[1].Node != "bar" { if nodes[1].Node != "bar" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
return true, nil
}, func(err error) {
t.Fatalf("failed to get sorted service checks: %v", err)
})
} }
func TestHealthServiceNodes(t *testing.T) { func TestHealthServiceNodes(t *testing.T) {
@ -487,25 +494,29 @@ func TestHealthServiceNodes_DistanceSort(t *testing.T) {
if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil { if err := srv.agent.RPC("Coordinate.Update", &arg, &out); err != nil {
t.Fatalf("err: %v", err) t.Fatalf("err: %v", err)
} }
time.Sleep(300 * time.Millisecond)
// Query again and now foo should have moved to the front of the line. // Retry until foo has moved to the front of the line.
testutil.WaitForResult(func() (bool, error) {
resp = httptest.NewRecorder() resp = httptest.NewRecorder()
obj, err = srv.HealthServiceNodes(resp, req) obj, err = srv.HealthServiceNodes(resp, req)
if err != nil { if err != nil {
t.Fatalf("err: %v", err) return false, fmt.Errorf("err: %v", err)
} }
assertIndex(t, resp) assertIndex(t, resp)
nodes = obj.(structs.CheckServiceNodes) nodes = obj.(structs.CheckServiceNodes)
if len(nodes) != 2 { if len(nodes) != 2 {
t.Fatalf("bad: %v", obj) return false, fmt.Errorf("bad: %v", obj)
} }
if nodes[0].Node.Node != "foo" { if nodes[0].Node.Node != "foo" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
if nodes[1].Node.Node != "bar" { if nodes[1].Node.Node != "bar" {
t.Fatalf("bad: %v", nodes) return false, fmt.Errorf("bad: %v", nodes)
} }
return true, nil
}, func(err error) {
t.Fatalf("failed to get sorted service nodes: %v", err)
})
} }
func TestHealthServiceNodes_PassingFilter(t *testing.T) { func TestHealthServiceNodes_PassingFilter(t *testing.T) {

View File

@ -8,6 +8,7 @@ import (
"github.com/hashicorp/consul/command/agent" "github.com/hashicorp/consul/command/agent"
"github.com/hashicorp/consul/consul/structs" "github.com/hashicorp/consul/consul/structs"
"github.com/hashicorp/consul/testutil"
"github.com/hashicorp/serf/coordinate" "github.com/hashicorp/serf/coordinate"
"github.com/mitchellh/cli" "github.com/mitchellh/cli"
) )
@ -88,11 +89,7 @@ func TestRTTCommand_Run_LAN(t *testing.T) {
} }
} }
// Wait for the updates to get flushed to the data store. // Ask for the RTT of two known nodes
time.Sleep(2 * updatePeriod)
// Try two known nodes.
{
ui := new(cli.MockUi) ui := new(cli.MockUi)
c := &RTTCommand{Ui: ui} c := &RTTCommand{Ui: ui}
args := []string{ args := []string{
@ -100,18 +97,25 @@ func TestRTTCommand_Run_LAN(t *testing.T) {
a.config.NodeName, a.config.NodeName,
"dogs", "dogs",
} }
// Wait for the updates to get flushed to the data store.
testutil.WaitForResult(func() (bool, error) {
code := c.Run(args) code := c.Run(args)
if code != 0 { if code != 0 {
t.Fatalf("bad: %d: %#v", code, ui.ErrorWriter.String()) return false, fmt.Errorf("bad: %d: %#v", code, ui.ErrorWriter.String())
} }
// Make sure the proper RTT was reported in the output. // Make sure the proper RTT was reported in the output.
expected := fmt.Sprintf("rtt: %s", dist_str) expected := fmt.Sprintf("rtt: %s", dist_str)
if !strings.Contains(ui.OutputWriter.String(), expected) { if !strings.Contains(ui.OutputWriter.String(), expected) {
t.Fatalf("bad: %#v", ui.OutputWriter.String()) return false, fmt.Errorf("bad: %#v", ui.OutputWriter.String())
}
} }
return true, nil
}, func(err error) {
t.Fatalf("failed to get proper RTT output: %v", err)
})
// Default to the agent's node. // Default to the agent's node.
{ {
ui := new(cli.MockUi) ui := new(cli.MockUi)