From c9ddf89159e9bd4e5084ab35e380db81373cf1d8 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Fri, 12 Jan 2018 15:05:11 -0800 Subject: [PATCH] Test http --- command/agent/stats_endpoint_test.go | 68 +++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/command/agent/stats_endpoint_test.go b/command/agent/stats_endpoint_test.go index 9661878c2..1db05cd31 100644 --- a/command/agent/stats_endpoint_test.go +++ b/command/agent/stats_endpoint_test.go @@ -1,28 +1,82 @@ package agent import ( + "fmt" "net/http" "net/http/httptest" "testing" + "github.com/docker/distribution/uuid" "github.com/hashicorp/nomad/acl" + "github.com/hashicorp/nomad/nomad" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/testutil" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestClientStatsRequest(t *testing.T) { t.Parallel() + require := require.New(t) httpTest(t, nil, func(s *TestAgent) { - req, err := http.NewRequest("GET", "/v1/client/stats/?since=foo", nil) - if err != nil { - t.Fatalf("err: %v", err) + + // Local node, local resp + { + req, err := http.NewRequest("GET", "/v1/client/stats/?since=foo", nil) + if err != nil { + t.Fatalf("err: %v", err) + } + + respW := httptest.NewRecorder() + _, err = s.Server.ClientStatsRequest(respW, req) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } } - respW := httptest.NewRecorder() - _, err = s.Server.ClientStatsRequest(respW, req) - if err != nil { - t.Fatalf("unexpected err: %v", err) + // Local node, server resp + { + srv := s.server + s.server = nil + + req, err := http.NewRequest("GET", fmt.Sprintf("/v1/client/stats?node_id=%s", uuid.Generate()), nil) + require.Nil(err) + + respW := httptest.NewRecorder() + _, err = s.Server.ClientStatsRequest(respW, req) + require.NotNil(err) + require.Contains(err.Error(), "Unknown node") + + s.server = srv + } + + // no client, server resp + { + c := s.client + s.client = nil + + testutil.WaitForResult(func() (bool, error) { + n, err := s.server.State().NodeByID(nil, c.NodeID()) + if err != nil { + return false, err + } + return n != nil, nil + }, func(err error) { + t.Fatalf("should have client: %v", err) + }) + + req, err := http.NewRequest("GET", fmt.Sprintf("/v1/client/stats?node_id=%s", c.NodeID()), nil) + require.Nil(err) + + respW := httptest.NewRecorder() + _, err = s.Server.ClientStatsRequest(respW, req) + require.NotNil(err) + + // The dev agent uses in-mem RPC so just assert the no route error + require.Contains(err.Error(), nomad.ErrNoNodeConn.Error()) + + s.client = c } }) }