grafana/pkg/setting/setting_feature_toggles_test.go

81 lines
1.7 KiB
Go

package setting
import (
"strconv"
"testing"
"github.com/stretchr/testify/require"
"gopkg.in/ini.v1"
)
func TestFeatureToggles(t *testing.T) {
testCases := []struct {
name string
conf map[string]string
err error
expectedToggles map[string]bool
}{
{
name: "can parse feature toggles passed in the `enable` array",
conf: map[string]string{
"enable": "feature1,feature2",
},
expectedToggles: map[string]bool{
"feature1": true,
"feature2": true,
},
},
{
name: "can parse feature toggles listed under [feature_toggles]",
conf: map[string]string{
"enable": "feature1,feature2",
"feature3": "true",
},
expectedToggles: map[string]bool{
"feature1": true,
"feature2": true,
"feature3": true,
},
},
{
name: "toggles under [feature_toggles] overrides those in the array",
conf: map[string]string{
"enable": "feature1,feature2",
"feature2": "false",
},
expectedToggles: map[string]bool{
"feature1": true,
"feature2": false,
},
},
{
name: "invalid boolean value should return syntax error",
conf: map[string]string{
"enable": "feature1,feature2",
"feature2": "invalid",
},
expectedToggles: map[string]bool{},
err: strconv.ErrSyntax,
},
}
for _, tc := range testCases {
f := ini.Empty()
toggles, _ := f.NewSection("feature_toggles")
for k, v := range tc.conf {
_, err := toggles.NewKey(k, v)
require.ErrorIs(t, err, nil)
}
featureToggles, err := ReadFeatureTogglesFromInitFile(toggles)
require.ErrorIs(t, err, tc.err)
if err == nil {
for k, v := range featureToggles {
require.Equal(t, tc.expectedToggles[k], v, tc.name)
}
}
}
}