719077a26d
state store: call-out to generic update of job recommendations from job update method recommendations API work, and http endpoint errors for OSS support for scaling polices in task block of job spec add query filters for ScalingPolicy list endpoint command: nomad scaling policy list: added -job and -type
137 lines
3.6 KiB
Go
137 lines
3.6 KiB
Go
package agent
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/hashicorp/nomad/nomad/mock"
|
|
"github.com/hashicorp/nomad/nomad/structs"
|
|
)
|
|
|
|
func TestHTTP_ScalingPoliciesList(t *testing.T) {
|
|
require := require.New(t)
|
|
t.Parallel()
|
|
httpTest(t, nil, func(s *TestAgent) {
|
|
for i := 0; i < 3; i++ {
|
|
// Create the job
|
|
job, _ := mock.JobWithScalingPolicy()
|
|
|
|
args := structs.JobRegisterRequest{
|
|
Job: job,
|
|
WriteRequest: structs.WriteRequest{
|
|
Region: "global",
|
|
Namespace: structs.DefaultNamespace,
|
|
},
|
|
}
|
|
var resp structs.JobRegisterResponse
|
|
require.NoError(s.Agent.RPC("Job.Register", &args, &resp))
|
|
}
|
|
|
|
// Make the HTTP request
|
|
req, err := http.NewRequest("GET", "/v1/scaling/policies", nil)
|
|
require.NoError(err)
|
|
|
|
respW := httptest.NewRecorder()
|
|
|
|
// Make the request
|
|
obj, err := s.Server.ScalingPoliciesRequest(respW, req)
|
|
require.NoError(err)
|
|
|
|
// Check for the index
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-Index"), "missing index")
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-KnownLeader"), "missing known leader")
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-LastContact"), "missing last contact")
|
|
|
|
// Check the list
|
|
l := obj.([]*structs.ScalingPolicyListStub)
|
|
require.Len(l, 3)
|
|
})
|
|
}
|
|
|
|
func TestHTTP_ScalingPoliciesList_Filter(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
httpTest(t, nil, func(s *TestAgent) {
|
|
var job *structs.Job
|
|
for i := 0; i < 3; i++ {
|
|
// Create the job
|
|
job, _ = mock.JobWithScalingPolicy()
|
|
|
|
args := structs.JobRegisterRequest{
|
|
Job: job,
|
|
WriteRequest: structs.WriteRequest{
|
|
Region: "global",
|
|
Namespace: structs.DefaultNamespace,
|
|
},
|
|
}
|
|
var resp structs.JobRegisterResponse
|
|
require.NoError(s.Agent.RPC("Job.Register", &args, &resp))
|
|
}
|
|
|
|
// Make the HTTP request
|
|
req, err := http.NewRequest("GET", "/v1/scaling/policies?job="+job.ID, nil)
|
|
require.NoError(err)
|
|
respW := httptest.NewRecorder()
|
|
|
|
// Make the request
|
|
obj, err := s.Server.ScalingPoliciesRequest(respW, req)
|
|
require.NoError(err)
|
|
|
|
// Check the list
|
|
l := obj.([]*structs.ScalingPolicyListStub)
|
|
require.Len(l, 1)
|
|
|
|
// Request again, with policy type filter
|
|
req, err = http.NewRequest("GET", "/v1/scaling/policies?type=cluster", nil)
|
|
require.NoError(err)
|
|
respW = httptest.NewRecorder()
|
|
|
|
// Make the request
|
|
obj, err = s.Server.ScalingPoliciesRequest(respW, req)
|
|
require.NoError(err)
|
|
|
|
// Check the list
|
|
l = obj.([]*structs.ScalingPolicyListStub)
|
|
require.Len(l, 0)
|
|
})
|
|
}
|
|
|
|
func TestHTTP_ScalingPolicyGet(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
httpTest(t, nil, func(s *TestAgent) {
|
|
// Create the job
|
|
job, p := mock.JobWithScalingPolicy()
|
|
args := structs.JobRegisterRequest{
|
|
Job: job,
|
|
WriteRequest: structs.WriteRequest{
|
|
Region: "global",
|
|
Namespace: structs.DefaultNamespace,
|
|
},
|
|
}
|
|
var resp structs.JobRegisterResponse
|
|
err := s.Agent.RPC("Job.Register", &args, &resp)
|
|
require.NoError(err)
|
|
|
|
// Make the HTTP request
|
|
req, err := http.NewRequest("GET", "/v1/scaling/policy/"+p.ID, nil)
|
|
require.NoError(err)
|
|
respW := httptest.NewRecorder()
|
|
|
|
// Make the request
|
|
obj, err := s.Server.ScalingPolicySpecificRequest(respW, req)
|
|
require.NoError(err)
|
|
|
|
// Check for the index
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-Index"), "missing index")
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-KnownLeader"), "missing known leader")
|
|
require.NotEmpty(respW.Header().Get("X-Nomad-LastContact"), "missing last contact")
|
|
|
|
// Check the policy
|
|
require.Equal(p.ID, obj.(*structs.ScalingPolicy).ID)
|
|
})
|
|
}
|