1package apitests
2
3import (
4	"testing"
5
6	"fmt"
7
8	"github.com/hashicorp/consul/sdk/testutil/retry"
9	"github.com/hashicorp/nomad/api"
10	"github.com/hashicorp/nomad/testutil"
11	"github.com/stretchr/testify/require"
12)
13
14func TestAPI_OperatorAutopilotGetSetConfiguration(t *testing.T) {
15	t.Parallel()
16	require := require.New(t)
17	c, s := makeClient(t, nil, nil)
18	defer s.Stop()
19
20	operator := c.Operator()
21	var config *api.AutopilotConfiguration
22	retry.Run(t, func(r *retry.R) {
23		var err error
24		config, _, err = operator.AutopilotGetConfiguration(nil)
25		r.Check(err)
26	})
27	require.True(config.CleanupDeadServers)
28
29	// Change a config setting
30	newConf := &api.AutopilotConfiguration{CleanupDeadServers: false}
31	_, err := operator.AutopilotSetConfiguration(newConf, nil)
32	require.Nil(err)
33
34	config, _, err = operator.AutopilotGetConfiguration(nil)
35	require.Nil(err)
36	require.False(config.CleanupDeadServers)
37}
38
39func TestAPI_OperatorAutopilotCASConfiguration(t *testing.T) {
40	t.Parallel()
41	require := require.New(t)
42	c, s := makeClient(t, nil, nil)
43	defer s.Stop()
44
45	operator := c.Operator()
46	var config *api.AutopilotConfiguration
47	retry.Run(t, func(r *retry.R) {
48		var err error
49		config, _, err = operator.AutopilotGetConfiguration(nil)
50		r.Check(err)
51	})
52	require.True(config.CleanupDeadServers)
53
54	// Pass an invalid ModifyIndex
55	{
56		newConf := &api.AutopilotConfiguration{
57			CleanupDeadServers: false,
58			ModifyIndex:        config.ModifyIndex - 1,
59		}
60		resp, _, err := operator.AutopilotCASConfiguration(newConf, nil)
61		require.Nil(err)
62		require.False(resp)
63	}
64
65	// Pass a valid ModifyIndex
66	{
67		newConf := &api.AutopilotConfiguration{
68			CleanupDeadServers: false,
69			ModifyIndex:        config.ModifyIndex,
70		}
71		resp, _, err := operator.AutopilotCASConfiguration(newConf, nil)
72		require.Nil(err)
73		require.True(resp)
74	}
75}
76
77func TestAPI_OperatorAutopilotServerHealth(t *testing.T) {
78	t.Parallel()
79	c, s := makeClient(t, nil, func(c *testutil.TestServerConfig) {
80		c.Server.RaftProtocol = 3
81	})
82	defer s.Stop()
83
84	operator := c.Operator()
85	testutil.WaitForResult(func() (bool, error) {
86		out, _, err := operator.AutopilotServerHealth(nil)
87		if err != nil {
88			return false, err
89		}
90
91		if len(out.Servers) != 1 ||
92			!out.Servers[0].Healthy ||
93			out.Servers[0].Name != fmt.Sprintf("%s.global", s.Config.NodeName) {
94			return false, fmt.Errorf("%v", out)
95		}
96
97		return true, nil
98	}, func(err error) {
99		t.Fatalf("err: %v", err)
100	})
101}
102