From 60d32f218ab7ef6f721b26ddb0ebbcceb71b87c5 Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Sun, 6 Sep 2015 14:31:17 -0700 Subject: [PATCH] http: Adding nodes list --- command/agent/node_endpoint.go | 14 +++++++-- command/agent/node_endpoint_test.go | 49 ++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/command/agent/node_endpoint.go b/command/agent/node_endpoint.go index f21240117..0817b4eec 100644 --- a/command/agent/node_endpoint.go +++ b/command/agent/node_endpoint.go @@ -12,8 +12,18 @@ func (s *HTTPServer) NodesRequest(resp http.ResponseWriter, req *http.Request) ( return nil, CodedError(405, ErrInvalidMethod) } - // TODO NODE LIST - return nil, nil + args := structs.NodeListRequest{} + if s.parse(resp, req, &args.Region, &args.QueryOptions) { + return nil, nil + } + + var out structs.NodeListResponse + if err := s.agent.RPC("Client.List", &args, &out); err != nil { + return nil, err + } + + setMeta(resp, &out.QueryMeta) + return out.Nodes, nil } func (s *HTTPServer) NodeSpecificRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { diff --git a/command/agent/node_endpoint_test.go b/command/agent/node_endpoint_test.go index e5d5007c0..b071260a6 100644 --- a/command/agent/node_endpoint_test.go +++ b/command/agent/node_endpoint_test.go @@ -9,9 +9,56 @@ import ( "github.com/hashicorp/nomad/nomad/structs" ) +func TestHTTP_NodesList(t *testing.T) { + httpTest(t, nil, func(s *TestServer) { + for i := 0; i < 3; i++ { + // Create the node + node := mock.Node() + args := structs.NodeRegisterRequest{ + Node: node, + WriteRequest: structs.WriteRequest{Region: "region1"}, + } + var resp structs.NodeUpdateResponse + if err := s.Agent.RPC("Client.Register", &args, &resp); err != nil { + t.Fatalf("err: %v", err) + } + } + + // Make the HTTP request + req, err := http.NewRequest("GET", "/v1/nodes", nil) + if err != nil { + t.Fatalf("err: %v", err) + } + respW := httptest.NewRecorder() + + // Make the request + obj, err := s.Server.NodesRequest(respW, req) + if err != nil { + t.Fatalf("err: %v", err) + } + + // Check for the index + if respW.HeaderMap.Get("X-Nomad-Index") == "" { + t.Fatalf("missing index") + } + if respW.HeaderMap.Get("X-Nomad-KnownLeader") != "true" { + t.Fatalf("missing known leader") + } + if respW.HeaderMap.Get("X-Nomad-LastContact") == "" { + t.Fatalf("missing last contact") + } + + // Check the job + n := obj.([]*structs.NodeListStub) + if len(n) < 3 { // Maybe 4 including client + t.Fatalf("bad: %#v", n) + } + }) +} + func TestHTTP_NodeForceEval(t *testing.T) { httpTest(t, nil, func(s *TestServer) { - // Create the job + // Create the node node := mock.Node() args := structs.NodeRegisterRequest{ Node: node,