agent Profile req nil check s.agent.Server()

clean up logic and tests
This commit is contained in:
Drew Bailey 2020-02-03 10:27:29 -05:00
parent c4f45f9bde
commit d830998572
No known key found for this signature in database
GPG key ID: FBA61B9FB7CCE1A7
2 changed files with 51 additions and 38 deletions

View file

@ -218,14 +218,12 @@ func (s *HTTPServer) AgentMonitor(resp http.ResponseWriter, req *http.Request) (
} else { } else {
handlerErr = CodedError(400, "No local Node and node_id not provided") handlerErr = CodedError(400, "No local Node and node_id not provided")
} }
} else {
// No node id monitor current server/client // No node id monitor current server/client
if srv := s.agent.Server(); srv != nil { } else if srv := s.agent.Server(); srv != nil {
handler, handlerErr = srv.StreamingRpcHandler("Agent.Monitor") handler, handlerErr = srv.StreamingRpcHandler("Agent.Monitor")
} else { } else {
handler, handlerErr = s.agent.Client().StreamingRpcHandler("Agent.Monitor") handler, handlerErr = s.agent.Client().StreamingRpcHandler("Agent.Monitor")
} }
}
if handlerErr != nil { if handlerErr != nil {
return nil, CodedError(500, handlerErr.Error()) return nil, CodedError(500, handlerErr.Error())
@ -395,9 +393,11 @@ func (s *HTTPServer) agentPprof(reqType pprof.ReqType, resp http.ResponseWriter,
} else if localServer { } else if localServer {
rpcErr = s.agent.Server().RPC("Agent.Profile", &args, &reply) rpcErr = s.agent.Server().RPC("Agent.Profile", &args, &reply)
} }
// No node id, profile current server/client
} else if srv := s.agent.Server(); srv != nil {
rpcErr = srv.RPC("Agent.Profile", &args, &reply)
} else { } else {
// No node id target server rpcErr = s.agent.Client().RPC("Agent.Profile", &args, &reply)
rpcErr = s.agent.Server().RPC("Agent.Profile", &args, &reply)
} }
if rpcErr != nil { if rpcErr != nil {

View file

@ -20,6 +20,7 @@ import (
"github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/mock"
"github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/nomad/structs"
"github.com/hashicorp/nomad/testutil" "github.com/hashicorp/nomad/testutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -255,35 +256,34 @@ func TestHTTP_AgentMembers_ACL(t *testing.T) {
func TestHTTP_AgentMonitor(t *testing.T) { func TestHTTP_AgentMonitor(t *testing.T) {
t.Parallel() t.Parallel()
t.Run("invalid log_json parameter", func(t *testing.T) {
httpTest(t, nil, func(s *TestAgent) { httpTest(t, nil, func(s *TestAgent) {
// invalid log_json
{
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_json=no", nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_json=no", nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
// Make the request // Make the request
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
if err.(HTTPCodedError).Code() != 400 { httpErr := err.(HTTPCodedError).Code()
t.Fatalf("expected 400 response, got: %v", resp.Code) require.Equal(t, 400, httpErr)
} })
} })
// unknown log_level t.Run("unknown log_level", func(t *testing.T) {
{ httpTest(t, nil, func(s *TestAgent) {
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=unknown", nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=unknown", nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
// Make the request // Make the request
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
if err.(HTTPCodedError).Code() != 400 { httpErr := err.(HTTPCodedError).Code()
t.Fatalf("expected 400 response, got: %v", resp.Code) require.Equal(t, 400, httpErr)
} })
} })
// check for a specific log t.Run("check for specific log level", func(t *testing.T) {
{ httpTest(t, nil, func(s *TestAgent) {
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
@ -291,7 +291,7 @@ func TestHTTP_AgentMonitor(t *testing.T) {
go func() { go func() {
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
require.NoError(t, err) assert.NoError(t, err)
}() }()
// send the same log until monitor sink is set up // send the same log until monitor sink is set up
@ -313,10 +313,11 @@ func TestHTTP_AgentMonitor(t *testing.T) {
}, func(err error) { }, func(err error) {
require.Fail(t, err.Error()) require.Fail(t, err.Error())
}) })
} })
})
// plain param set to true t.Run("plain output", func(t *testing.T) {
{ httpTest(t, nil, func(s *TestAgent) {
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=debug&plain=true", nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=debug&plain=true", nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
@ -324,7 +325,7 @@ func TestHTTP_AgentMonitor(t *testing.T) {
go func() { go func() {
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
require.NoError(t, err) assert.NoError(t, err)
}() }()
// send the same log until monitor sink is set up // send the same log until monitor sink is set up
@ -346,10 +347,11 @@ func TestHTTP_AgentMonitor(t *testing.T) {
}, func(err error) { }, func(err error) {
require.Fail(t, err.Error()) require.Fail(t, err.Error())
}) })
} })
})
// stream logs for a given node t.Run("logs for a specific node", func(t *testing.T) {
{ httpTest(t, nil, func(s *TestAgent) {
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn&node_id="+s.client.NodeID(), nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn&node_id="+s.client.NodeID(), nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
@ -357,7 +359,7 @@ func TestHTTP_AgentMonitor(t *testing.T) {
go func() { go func() {
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
require.NoError(t, err) assert.NoError(t, err)
}() }()
// send the same log until monitor sink is set up // send the same log until monitor sink is set up
@ -385,10 +387,11 @@ func TestHTTP_AgentMonitor(t *testing.T) {
}, func(err error) { }, func(err error) {
require.Fail(t, err.Error()) require.Fail(t, err.Error())
}) })
} })
})
// stream logs for a local client t.Run("logs for a local client with no server running on agent", func(t *testing.T) {
{ httpTest(t, nil, func(s *TestAgent) {
req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil) req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil)
require.Nil(t, err) require.Nil(t, err)
resp := newClosableRecorder() resp := newClosableRecorder()
@ -398,7 +401,7 @@ func TestHTTP_AgentMonitor(t *testing.T) {
// set server to nil to monitor as client // set server to nil to monitor as client
s.Agent.server = nil s.Agent.server = nil
_, err = s.Server.AgentMonitor(resp, req) _, err = s.Server.AgentMonitor(resp, req)
require.NoError(t, err) assert.NoError(t, err)
}() }()
// send the same log until monitor sink is set up // send the same log until monitor sink is set up
@ -425,7 +428,7 @@ func TestHTTP_AgentMonitor(t *testing.T) {
}, func(err error) { }, func(err error) {
require.Fail(t, err.Error()) require.Fail(t, err.Error())
}) })
} })
}) })
} }
@ -521,11 +524,17 @@ func TestAgent_PprofRequest(t *testing.T) {
addNodeID bool addNodeID bool
addServerID bool addServerID bool
expectedErr string expectedErr string
clientOnly bool
}{ }{
{ {
desc: "cmdline local request", desc: "cmdline local server request",
url: "/v1/agent/pprof/cmdline", url: "/v1/agent/pprof/cmdline",
}, },
{
desc: "cmdline local node request",
url: "/v1/agent/pprof/cmdline",
clientOnly: true,
},
{ {
desc: "cmdline node request", desc: "cmdline node request",
url: "/v1/agent/pprof/cmdline", url: "/v1/agent/pprof/cmdline",
@ -577,6 +586,10 @@ func TestAgent_PprofRequest(t *testing.T) {
url = url + "?server_id=" + s.server.LocalMember().Name url = url + "?server_id=" + s.server.LocalMember().Name
} }
if tc.clientOnly {
s.Agent.server = nil
}
req, err := http.NewRequest("GET", url, nil) req, err := http.NewRequest("GET", url, nil)
require.Nil(t, err) require.Nil(t, err)
respW := httptest.NewRecorder() respW := httptest.NewRecorder()