64baf36b60
This will emit warnings about the configs not doing anything but still allow them to be parsed. This also added the warnings for enterprise fields that we already had in OSS but didn’t change their enforcement behavior. For example, attempting to use a network segment will cause a hard error in OSS.
160 lines
3.7 KiB
Go
160 lines
3.7 KiB
Go
// +build !consulent
|
|
|
|
package config
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/go-multierror"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuilder_validateEnterpriseConfigKeys(t *testing.T) {
|
|
// ensure that all the enterprise configurations
|
|
type testCase struct {
|
|
config Config
|
|
keys []string
|
|
badKeys []string
|
|
check func(t *testing.T, c *Config)
|
|
}
|
|
|
|
boolVal := true
|
|
stringVal := "string"
|
|
|
|
cases := map[string]testCase{
|
|
"non_voting_server": {
|
|
config: Config{
|
|
NonVotingServer: &boolVal,
|
|
},
|
|
keys: []string{"non_voting_server"},
|
|
badKeys: []string{"non_voting_server"},
|
|
},
|
|
"segment": {
|
|
config: Config{
|
|
SegmentName: &stringVal,
|
|
},
|
|
keys: []string{"segment"},
|
|
badKeys: []string{"segment"},
|
|
},
|
|
"segments": {
|
|
config: Config{
|
|
Segments: []Segment{
|
|
{Name: &stringVal},
|
|
},
|
|
},
|
|
keys: []string{"segments"},
|
|
badKeys: []string{"segments"},
|
|
},
|
|
"autopilot.redundancy_zone_tag": {
|
|
config: Config{
|
|
Autopilot: Autopilot{
|
|
RedundancyZoneTag: &stringVal,
|
|
},
|
|
},
|
|
keys: []string{"autopilot.redundancy_zone_tag"},
|
|
badKeys: []string{"autopilot.redundancy_zone_tag"},
|
|
},
|
|
"autopilot.upgrade_version_tag": {
|
|
config: Config{
|
|
Autopilot: Autopilot{
|
|
UpgradeVersionTag: &stringVal,
|
|
},
|
|
},
|
|
keys: []string{"autopilot.upgrade_version_tag"},
|
|
badKeys: []string{"autopilot.upgrade_version_tag"},
|
|
},
|
|
"autopilot.disable_upgrade_migration": {
|
|
config: Config{
|
|
Autopilot: Autopilot{
|
|
DisableUpgradeMigration: &boolVal,
|
|
},
|
|
},
|
|
keys: []string{"autopilot.disable_upgrade_migration"},
|
|
badKeys: []string{"autopilot.disable_upgrade_migration"},
|
|
},
|
|
"dns_config.prefer_namespace": {
|
|
config: Config{
|
|
DNS: DNS{
|
|
PreferNamespace: &boolVal,
|
|
},
|
|
},
|
|
keys: []string{"dns_config.prefer_namespace"},
|
|
badKeys: []string{"dns_config.prefer_namespace"},
|
|
check: func(t *testing.T, c *Config) {
|
|
require.Nil(t, c.DNS.PreferNamespace)
|
|
},
|
|
},
|
|
"acl.msp_disable_bootstrap": {
|
|
config: Config{
|
|
ACL: ACL{
|
|
MSPDisableBootstrap: &boolVal,
|
|
},
|
|
},
|
|
keys: []string{"acl.msp_disable_bootstrap"},
|
|
badKeys: []string{"acl.msp_disable_bootstrap"},
|
|
check: func(t *testing.T, c *Config) {
|
|
require.Nil(t, c.ACL.MSPDisableBootstrap)
|
|
},
|
|
},
|
|
"acl.tokens.managed_service_provider": {
|
|
config: Config{
|
|
ACL: ACL{
|
|
Tokens: Tokens{
|
|
ManagedServiceProvider: []ServiceProviderToken{
|
|
{
|
|
AccessorID: &stringVal,
|
|
SecretID: &stringVal,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
keys: []string{"acl.tokens.managed_service_provider"},
|
|
badKeys: []string{"acl.tokens.managed_service_provider"},
|
|
check: func(t *testing.T, c *Config) {
|
|
require.Empty(t, c.ACL.Tokens.ManagedServiceProvider)
|
|
require.Nil(t, c.ACL.Tokens.ManagedServiceProvider)
|
|
},
|
|
},
|
|
"multi": {
|
|
config: Config{
|
|
NonVotingServer: &boolVal,
|
|
SegmentName: &stringVal,
|
|
},
|
|
keys: []string{"non_voting_server", "segment", "acl.tokens.agent_master"},
|
|
badKeys: []string{"non_voting_server", "segment"},
|
|
},
|
|
}
|
|
|
|
for name, tcase := range cases {
|
|
t.Run(name, func(t *testing.T) {
|
|
b := &Builder{}
|
|
|
|
err := b.validateEnterpriseConfigKeys(&tcase.config, tcase.keys)
|
|
if len(tcase.badKeys) > 0 {
|
|
require.Error(t, err)
|
|
|
|
multiErr, ok := err.(*multierror.Error)
|
|
require.True(t, ok)
|
|
|
|
var badKeys []string
|
|
for _, e := range multiErr.Errors {
|
|
if keyErr, ok := e.(enterpriseConfigKeyError); ok {
|
|
badKeys = append(badKeys, keyErr.key)
|
|
require.Contains(t, b.Warnings, keyErr.Error())
|
|
}
|
|
}
|
|
|
|
require.ElementsMatch(t, tcase.badKeys, badKeys)
|
|
|
|
if tcase.check != nil {
|
|
tcase.check(t, &tcase.config)
|
|
}
|
|
|
|
} else {
|
|
require.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|