From bc164a2c4fdfd2f8da35c8f5282c177b939fc262 Mon Sep 17 00:00:00 2001 From: grambbledook Date: Thu, 11 Dec 2025 09:58:49 +0100 Subject: [PATCH] add ff parsing tests to check if types are handled correctly --- pkg/setting/setting_feature_toggles.go | 9 +++++---- pkg/setting/setting_feature_toggles_test.go | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pkg/setting/setting_feature_toggles.go b/pkg/setting/setting_feature_toggles.go index 9290f0d6127..72d6a15c8f1 100644 --- a/pkg/setting/setting_feature_toggles.go +++ b/pkg/setting/setting_feature_toggles.go @@ -81,11 +81,8 @@ func ReadFeatureTogglesFromInitFile(featureTogglesSection *ini.Section) (map[str } func ParseFlag(name, value string) (FeatureToggle, error) { - var structure any + var structure map[string]any - if boolean, err := strconv.ParseBool(value); err == nil { - return FeatureToggle{Type: Boolean, Name: name, Value: boolean}, nil - } if integer, err := strconv.Atoi(value); err == nil { return FeatureToggle{Type: Integer, Name: name, Value: integer}, nil } @@ -95,5 +92,9 @@ func ParseFlag(name, value string) (FeatureToggle, error) { if err := json.Unmarshal([]byte(value), &structure); err == nil { return FeatureToggle{Type: Structure, Name: name, Value: structure}, nil } + if boolean, err := strconv.ParseBool(value); err == nil { + return FeatureToggle{Type: Boolean, Name: name, Value: boolean}, nil + } + return FeatureToggle{Type: String, Name: name, Value: value}, nil } diff --git a/pkg/setting/setting_feature_toggles_test.go b/pkg/setting/setting_feature_toggles_test.go index 81e77dc4ea7..ceb34272e3b 100644 --- a/pkg/setting/setting_feature_toggles_test.go +++ b/pkg/setting/setting_feature_toggles_test.go @@ -49,7 +49,7 @@ func TestFeatureToggles(t *testing.T) { }, }, { - name: "invalid boolean value should return syntax error", + name: "conflict in type declaration is be detected", conf: map[string]string{ "enable": "feature1,feature2", "feature2": "invalid", @@ -57,6 +57,22 @@ func TestFeatureToggles(t *testing.T) { expectedToggles: map[string]FeatureToggle{}, err: errors.New("type mismatch during flag declaration 'feature2': boolean, string"), }, + { + name: "type of the feature flag is handled correctly", + conf: map[string]string{ + "feature1": "1", "feature2": "1.0", + "feature3": `{"foo":"bar"}`, "feature4": "bar", + "feature5": "t", "feature6": "T", + }, + expectedToggles: map[string]FeatureToggle{ + "feature1": {Name: "feature1", Type: Integer, Value: 1}, + "feature2": {Name: "feature2", Type: Float, Value: 1.0}, + "feature3": {Name: "feature3", Type: Structure, Value: map[string]any{"foo": "bar"}}, + "feature4": {Name: "feature4", Type: String, Value: "bar"}, + "feature5": {Name: "feature5", Type: Boolean, Value: true}, + "feature6": {Name: "feature6", Type: Boolean, Value: true}, + }, + }, } for _, tc := range testCases {