http: complete the eval endpoints
This commit is contained in:
parent
1e945605e3
commit
ce446e5e2a
|
@ -27,7 +27,38 @@ func (s *HTTPServer) EvalsRequest(resp http.ResponseWriter, req *http.Request) (
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *HTTPServer) EvalSpecificRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
func (s *HTTPServer) EvalSpecificRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
||||||
evalID := strings.TrimPrefix(req.URL.Path, "/v1/evaluation/")
|
path := strings.TrimPrefix(req.URL.Path, "/v1/evaluation/")
|
||||||
|
switch {
|
||||||
|
case strings.HasSuffix(path, "/allocations"):
|
||||||
|
evalID := strings.TrimSuffix(path, "/allocations")
|
||||||
|
return s.evalAllocations(resp, req, evalID)
|
||||||
|
default:
|
||||||
|
return s.evalQuery(resp, req, path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *HTTPServer) evalAllocations(resp http.ResponseWriter, req *http.Request, evalID string) (interface{}, error) {
|
||||||
|
if req.Method != "GET" {
|
||||||
|
return nil, CodedError(405, ErrInvalidMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
args := structs.EvalSpecificRequest{
|
||||||
|
EvalID: evalID,
|
||||||
|
}
|
||||||
|
if s.parse(resp, req, &args.Region, &args.QueryOptions) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var out structs.EvalAllocationsResponse
|
||||||
|
if err := s.agent.RPC("Eval.Allocations", &args, &out); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
setMeta(resp, &out.QueryMeta)
|
||||||
|
return out.Allocations, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *HTTPServer) evalQuery(resp http.ResponseWriter, req *http.Request, evalID string) (interface{}, error) {
|
||||||
if req.Method != "GET" {
|
if req.Method != "GET" {
|
||||||
return nil, CodedError(405, ErrInvalidMethod)
|
return nil, CodedError(405, ErrInvalidMethod)
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,52 @@ func TestHTTP_EvalList(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHTTP_EvalAllocations(t *testing.T) {
|
||||||
|
httpTest(t, nil, func(s *TestServer) {
|
||||||
|
// Directly manipulate the state
|
||||||
|
state := s.Agent.server.State()
|
||||||
|
alloc1 := mock.Alloc()
|
||||||
|
alloc2 := mock.Alloc()
|
||||||
|
alloc2.EvalID = alloc1.EvalID
|
||||||
|
err := state.UpdateAllocations(1000,
|
||||||
|
[]*structs.Allocation{alloc1, alloc2})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the HTTP request
|
||||||
|
req, err := http.NewRequest("GET",
|
||||||
|
"/v1/evaluation/"+alloc1.EvalID+"/allocations", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
respW := httptest.NewRecorder()
|
||||||
|
|
||||||
|
// Make the request
|
||||||
|
obj, err := s.Server.EvalSpecificRequest(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 ouptput
|
||||||
|
allocs := obj.([]*structs.AllocListStub)
|
||||||
|
if len(allocs) != 2 {
|
||||||
|
t.Fatalf("bad: %#v", allocs)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestHTTP_EvalQuery(t *testing.T) {
|
func TestHTTP_EvalQuery(t *testing.T) {
|
||||||
httpTest(t, nil, func(s *TestServer) {
|
httpTest(t, nil, func(s *TestServer) {
|
||||||
// Directly manipulate the state
|
// Directly manipulate the state
|
||||||
|
|
|
@ -373,7 +373,7 @@ func TestHTTP_JobAllocations(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the response
|
// Check the response
|
||||||
allocs := obj.([]*structs.Allocation)
|
allocs := obj.([]*structs.AllocListStub)
|
||||||
if len(allocs) != 1 && allocs[0].ID != alloc1.ID {
|
if len(allocs) != 1 && allocs[0].ID != alloc1.ID {
|
||||||
t.Fatalf("bad: %v", allocs)
|
t.Fatalf("bad: %v", allocs)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue