2017-02-10 01:58:20 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
"testing"
|
2018-09-28 04:27:38 +00:00
|
|
|
|
|
|
|
"github.com/hashicorp/consul/testutil/retry"
|
|
|
|
"github.com/stretchr/testify/require"
|
2017-02-10 01:58:20 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestOperator_RaftGetConfiguration(t *testing.T) {
|
2017-07-21 23:33:04 +00:00
|
|
|
t.Parallel()
|
2017-02-10 01:58:20 +00:00
|
|
|
c, s := makeClient(t, nil, nil)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
operator := c.Operator()
|
|
|
|
out, err := operator.RaftGetConfiguration(nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
if len(out.Servers) != 1 ||
|
|
|
|
!out.Servers[0].Leader ||
|
|
|
|
!out.Servers[0].Voter {
|
|
|
|
t.Fatalf("bad: %v", out)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOperator_RaftRemovePeerByAddress(t *testing.T) {
|
2017-07-21 23:33:04 +00:00
|
|
|
t.Parallel()
|
2017-02-10 01:58:20 +00:00
|
|
|
c, s := makeClient(t, nil, nil)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
// If we get this error, it proves we sent the address all the way
|
|
|
|
// through.
|
|
|
|
operator := c.Operator()
|
|
|
|
err := operator.RaftRemovePeerByAddress("nope", nil)
|
|
|
|
if err == nil || !strings.Contains(err.Error(),
|
|
|
|
"address \"nope\" was not found in the Raft configuration") {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
}
|
2018-01-16 21:35:32 +00:00
|
|
|
|
|
|
|
func TestOperator_RaftRemovePeerByID(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
c, s := makeClient(t, nil, nil)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
// If we get this error, it proves we sent the address all the way
|
|
|
|
// through.
|
|
|
|
operator := c.Operator()
|
|
|
|
err := operator.RaftRemovePeerByID("nope", nil)
|
|
|
|
if err == nil || !strings.Contains(err.Error(),
|
|
|
|
"id \"nope\" was not found in the Raft configuration") {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
}
|
2018-09-28 04:27:38 +00:00
|
|
|
|
|
|
|
func TestAPI_OperatorSchedulerGetSetConfiguration(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
require := require.New(t)
|
|
|
|
c, s := makeClient(t, nil, nil)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
operator := c.Operator()
|
2018-10-29 18:10:43 +00:00
|
|
|
var config *SchedulerConfigurationResponse
|
2018-09-28 04:27:38 +00:00
|
|
|
retry.Run(t, func(r *retry.R) {
|
|
|
|
var err error
|
|
|
|
config, _, err = operator.SchedulerGetConfiguration(nil)
|
|
|
|
r.Check(err)
|
|
|
|
})
|
2018-10-29 18:10:43 +00:00
|
|
|
require.True(config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
|
2018-09-28 04:27:38 +00:00
|
|
|
|
|
|
|
// Change a config setting
|
2018-10-01 14:26:52 +00:00
|
|
|
newConf := &SchedulerConfiguration{PreemptionConfig: PreemptionConfig{SystemSchedulerEnabled: false}}
|
2018-11-10 16:31:10 +00:00
|
|
|
resp, wm, err := operator.SchedulerSetConfiguration(newConf, nil)
|
2018-09-28 04:27:38 +00:00
|
|
|
require.Nil(err)
|
2018-11-10 16:31:10 +00:00
|
|
|
require.NotZero(wm.LastIndex)
|
|
|
|
require.False(resp.Updated)
|
2018-09-28 04:27:38 +00:00
|
|
|
|
|
|
|
config, _, err = operator.SchedulerGetConfiguration(nil)
|
|
|
|
require.Nil(err)
|
2018-10-29 18:10:43 +00:00
|
|
|
require.False(config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
|
2018-09-28 04:27:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestAPI_OperatorSchedulerCASConfiguration(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
require := require.New(t)
|
|
|
|
c, s := makeClient(t, nil, nil)
|
|
|
|
defer s.Stop()
|
|
|
|
|
|
|
|
operator := c.Operator()
|
2018-10-29 18:10:43 +00:00
|
|
|
var config *SchedulerConfigurationResponse
|
2018-09-28 04:27:38 +00:00
|
|
|
retry.Run(t, func(r *retry.R) {
|
|
|
|
var err error
|
|
|
|
config, _, err = operator.SchedulerGetConfiguration(nil)
|
|
|
|
r.Check(err)
|
|
|
|
})
|
2018-10-29 18:10:43 +00:00
|
|
|
require.True(config.SchedulerConfig.PreemptionConfig.SystemSchedulerEnabled)
|
2018-09-28 04:27:38 +00:00
|
|
|
|
|
|
|
// Pass an invalid ModifyIndex
|
|
|
|
{
|
|
|
|
newConf := &SchedulerConfiguration{
|
2018-10-01 14:26:52 +00:00
|
|
|
PreemptionConfig: PreemptionConfig{SystemSchedulerEnabled: false},
|
2018-11-10 16:31:10 +00:00
|
|
|
ModifyIndex: config.SchedulerConfig.ModifyIndex - 1,
|
2018-09-28 04:27:38 +00:00
|
|
|
}
|
2018-11-10 16:31:10 +00:00
|
|
|
resp, wm, err := operator.SchedulerCASConfiguration(newConf, nil)
|
2018-09-28 04:27:38 +00:00
|
|
|
require.Nil(err)
|
2018-11-10 16:31:10 +00:00
|
|
|
require.NotZero(wm.LastIndex)
|
|
|
|
require.False(resp.Updated)
|
2018-09-28 04:27:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Pass a valid ModifyIndex
|
|
|
|
{
|
|
|
|
newConf := &SchedulerConfiguration{
|
2018-10-01 14:26:52 +00:00
|
|
|
PreemptionConfig: PreemptionConfig{SystemSchedulerEnabled: false},
|
2018-11-10 16:31:10 +00:00
|
|
|
ModifyIndex: config.SchedulerConfig.ModifyIndex,
|
2018-09-28 04:27:38 +00:00
|
|
|
}
|
2018-11-10 16:31:10 +00:00
|
|
|
resp, wm, err := operator.SchedulerCASConfiguration(newConf, nil)
|
2018-09-28 04:27:38 +00:00
|
|
|
require.Nil(err)
|
2018-11-10 16:31:10 +00:00
|
|
|
require.NotZero(wm.LastIndex)
|
|
|
|
require.True(resp.Updated)
|
2018-09-28 04:27:38 +00:00
|
|
|
}
|
|
|
|
}
|