Add tests around coordinate update endpoint

This commit is contained in:
Kyle Havlovitz 2017-10-26 20:12:54 -07:00
parent 2392545adc
commit a1d14019dd
No known key found for this signature in database
GPG Key ID: 8A5E6B173056AD6C
2 changed files with 95 additions and 6 deletions

View File

@ -249,3 +249,49 @@ func TestCoordinate_Node(t *testing.T) {
t.Fatalf("bad: %v", coordinates) t.Fatalf("bad: %v", coordinates)
} }
} }
func TestCoordinate_Update(t *testing.T) {
t.Parallel()
a := NewTestAgent(t.Name(), "")
defer a.Shutdown()
// Register the node.
reg := structs.RegisterRequest{
Datacenter: "dc1",
Node: "foo",
Address: "127.0.0.1",
}
var reply struct{}
if err := a.RPC("Catalog.Register", &reg, &reply); err != nil {
t.Fatalf("err: %s", err)
}
// Update the coordinates and wait for it to complete.
coord := coordinate.NewCoordinate(coordinate.DefaultConfig())
coord.Height = -5.0
body := structs.CoordinateUpdateRequest{
Datacenter: "dc1",
Node: "foo",
Coord: coord,
}
req, _ := http.NewRequest("PUT", "/v1/coordinate/update", jsonReader(body))
resp := httptest.NewRecorder()
_, err := a.srv.CoordinateUpdate(resp, req)
if err != nil {
t.Fatalf("err: %v", err)
}
time.Sleep(300 * time.Millisecond)
// Query back and check the coordinates are present.
args := structs.NodeSpecificRequest{Node: "foo", Datacenter: "dc1"}
var coords structs.IndexedCoordinates
if err := a.RPC("Coordinate.Node", &args, &coords); err != nil {
t.Fatalf("err: %s", err)
}
coordinates := coords.Coordinates
if len(coordinates) != 1 ||
coordinates[0].Node != "foo" {
t.Fatalf("bad: %v", coordinates)
}
}

View File

@ -3,7 +3,11 @@ package api
import ( import (
"testing" "testing"
"time"
"github.com/hashicorp/consul/testutil/retry" "github.com/hashicorp/consul/testutil/retry"
"github.com/hashicorp/serf/coordinate"
"github.com/pascaldekloe/goe/verify"
) )
func TestAPI_CoordinateDatacenters(t *testing.T) { func TestAPI_CoordinateDatacenters(t *testing.T) {
@ -11,9 +15,9 @@ func TestAPI_CoordinateDatacenters(t *testing.T) {
c, s := makeClient(t) c, s := makeClient(t)
defer s.Stop() defer s.Stop()
coordinate := c.Coordinate() coord := c.Coordinate()
retry.Run(t, func(r *retry.R) { retry.Run(t, func(r *retry.R) {
datacenters, err := coordinate.Datacenters() datacenters, err := coord.Datacenters()
if err != nil { if err != nil {
r.Fatal(err) r.Fatal(err)
} }
@ -29,9 +33,9 @@ func TestAPI_CoordinateNodes(t *testing.T) {
c, s := makeClient(t) c, s := makeClient(t)
defer s.Stop() defer s.Stop()
coordinate := c.Coordinate() coord := c.Coordinate()
retry.Run(t, func(r *retry.R) { retry.Run(t, func(r *retry.R) {
_, _, err := coordinate.Nodes(nil) _, _, err := coord.Nodes(nil)
if err != nil { if err != nil {
r.Fatal(err) r.Fatal(err)
} }
@ -48,9 +52,9 @@ func TestAPI_CoordinateNode(t *testing.T) {
c, s := makeClient(t) c, s := makeClient(t)
defer s.Stop() defer s.Stop()
coordinate := c.Coordinate() coord := c.Coordinate()
retry.Run(t, func(r *retry.R) { retry.Run(t, func(r *retry.R) {
_, _, err := coordinate.Node(s.Config.NodeName, nil) _, _, err := coord.Node(s.Config.NodeName, nil)
if err != nil { if err != nil {
r.Fatal(err) r.Fatal(err)
} }
@ -61,3 +65,42 @@ func TestAPI_CoordinateNode(t *testing.T) {
// get an error. // get an error.
}) })
} }
func TestAPI_CoordinateUpdate(t *testing.T) {
t.Parallel()
c, s := makeClient(t)
defer s.Stop()
node := "foo"
_, err := c.Catalog().Register(&CatalogRegistration{
Node: node,
Address: "1.1.1.1",
}, nil)
if err != nil {
t.Fatal(err)
}
coord := c.Coordinate()
newCoord := coordinate.NewCoordinate(coordinate.DefaultConfig())
newCoord.Height = 0.5
entry := &CoordinateEntry{
Node: node,
Coord: newCoord,
}
_, err = coord.Update(entry, nil)
if err != nil {
t.Fatal(err)
}
retryer := &retry.Timer{Timeout: 10 * time.Second, Wait: 1 * time.Second}
retry.RunWith(retryer, t, func(r *retry.R) {
coords, _, err := coord.Node(node, nil)
if err != nil {
r.Fatal(err)
}
if len(coords) != 1 {
r.Fatalf("bad: %v", coords)
}
verify.Values(r, "", coords[0], entry)
})
}