105 lines
3.4 KiB
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)
|
|
}
|