open-nomad/internal/testing/apitests/operator_test.go

105 lines
3.4 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package apitests
import (
"testing"
"github.com/hashicorp/nomad/api"
"github.com/hashicorp/nomad/ci"
"github.com/shoenig/test/must"
"github.com/shoenig/test/wait"
)
func TestAPI_OperatorSchedulerGetSetConfiguration(t *testing.T) {
ci.Parallel(t)
c, s := makeClient(t, nil, nil)
defer s.Stop()
operator := c.Operator()
var config *api.SchedulerConfigurationResponse
var err error
f := func() error {
config, _, err = operator.SchedulerGetConfiguration(nil)
return err
}
must.Wait(t, wait.InitialSuccess(wait.ErrorFunc(f)))
must.True(t, config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
must.False(t, config.SchedulerConfig.PreemptionConfig.BatchSchedulerEnabled)
must.False(t, config.SchedulerConfig.PreemptionConfig.ServiceSchedulerEnabled)
// Change a config setting
newConf := &api.SchedulerConfiguration{
PreemptionConfig: api.PreemptionConfig{
SystemSchedulerEnabled: false,
BatchSchedulerEnabled: true,
ServiceSchedulerEnabled: true,
},
}
resp, wm, err := operator.SchedulerSetConfiguration(newConf, nil)
must.NoError(t, err)
must.Positive(t, wm.LastIndex)
must.True(t, resp.Updated) // non CAS requests should update on success
config, _, err = operator.SchedulerGetConfiguration(nil)
must.NoError(t, err)
must.False(t, config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
must.True(t, config.SchedulerConfig.PreemptionConfig.BatchSchedulerEnabled)
must.True(t, config.SchedulerConfig.PreemptionConfig.ServiceSchedulerEnabled)
}
func TestAPI_OperatorSchedulerCASConfiguration(t *testing.T) {
ci.Parallel(t)
c, s := makeClient(t, nil, nil)
defer s.Stop()
operator := c.Operator()
var config *api.SchedulerConfigurationResponse
var err error
f := func() error {
config, _, err = operator.SchedulerGetConfiguration(nil)
return err
}
must.Wait(t, wait.InitialSuccess(wait.ErrorFunc(f)))
must.True(t, config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
must.False(t, config.SchedulerConfig.PreemptionConfig.BatchSchedulerEnabled)
must.False(t, config.SchedulerConfig.PreemptionConfig.ServiceSchedulerEnabled)
// Pass an invalid ModifyIndex
{
newConf := &api.SchedulerConfiguration{
PreemptionConfig: api.PreemptionConfig{SystemSchedulerEnabled: false, BatchSchedulerEnabled: true},
ModifyIndex: config.SchedulerConfig.ModifyIndex - 1,
}
var resp *api.SchedulerSetConfigurationResponse
var wm *api.WriteMeta
resp, wm, err = operator.SchedulerCASConfiguration(newConf, nil)
must.NoError(t, err)
must.Positive(t, wm.LastIndex)
must.False(t, resp.Updated)
}
// Pass a valid ModifyIndex
{
newConf := &api.SchedulerConfiguration{
PreemptionConfig: api.PreemptionConfig{SystemSchedulerEnabled: false, BatchSchedulerEnabled: true},
ModifyIndex: config.SchedulerConfig.ModifyIndex,
}
var resp *api.SchedulerSetConfigurationResponse
var wm *api.WriteMeta
resp, wm, err = operator.SchedulerCASConfiguration(newConf, nil)
must.NoError(t, err)
must.Positive(t, wm.LastIndex)
must.True(t, resp.Updated)
}
config, _, err = operator.SchedulerGetConfiguration(nil)
must.NoError(t, err)
must.False(t, config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
must.True(t, config.SchedulerConfig.PreemptionConfig.BatchSchedulerEnabled)
must.False(t, config.SchedulerConfig.PreemptionConfig.ServiceSchedulerEnabled)
}