consul: test baked-in distance sort

This commit is contained in:
Ryan Uber 2016-06-21 12:54:18 -07:00
parent 4c1afb1bc6
commit 03fea4b091
1 changed files with 33 additions and 2 deletions

View File

@ -1607,7 +1607,7 @@ func TestPreparedQuery_Execute(t *testing.T) {
t.Fatalf("unique shuffle ratio too low: %d/100", len(uniques))
}
// Set the query to prefer a colocated service
// Set the query to prefer a colocated service using the magic _agent token
query.Op = structs.PreparedQueryUpdate
query.Query.Service.Near = "_agent"
if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil {
@ -1658,7 +1658,38 @@ func TestPreparedQuery_Execute(t *testing.T) {
}
}
// Remove local preference.
// Bake a non-local node name into Near parameter of the query. This
// node was seeded with a coordinate above so distance sort works.
query.Query.Service.Near = "node3"
if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil {
t.Fatalf("err: %v", err)
}
// Try the distance sort again to ensure the nearest node is returned
{
req := structs.PreparedQueryExecuteRequest{
Origin: "node1",
Datacenter: "dc1",
QueryIDOrName: query.Query.ID,
QueryOptions: structs.QueryOptions{Token: execToken},
}
var reply structs.PreparedQueryExecuteResponse
for i := 0; i < 10; i++ {
if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil {
t.Fatalf("err: %v", err)
}
if n := len(reply.Nodes); n != 10 {
t.Fatalf("expect 10 nodes, got: %d", n)
}
if node := reply.Nodes[0].Node.Node; node != "node3" {
t.Fatalf("expect node3, got: %q", node)
}
}
}
// Un-bake the Near parameter.
query.Query.Service.Near = ""
if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil {
t.Fatalf("err:% v", err)