FeatureFlags: Use interface rather than manager (#80000)
This commit is contained in:
@@ -174,10 +174,14 @@ func (fm *FeatureManager) LookupFlag(name string) (FeatureFlag, bool) {
|
||||
|
||||
// ############# Test Functions #############
|
||||
|
||||
func WithFeatures(spec ...any) FeatureToggles {
|
||||
return WithManager(spec...)
|
||||
}
|
||||
|
||||
// WithFeatures is used to define feature toggles for testing.
|
||||
// The arguments are a list of strings that are optionally followed by a boolean value for example:
|
||||
// WithFeatures([]any{"my_feature", "other_feature"}) or WithFeatures([]any{"my_feature", true})
|
||||
func WithFeatures(spec ...any) *FeatureManager {
|
||||
func WithManager(spec ...any) *FeatureManager {
|
||||
count := len(spec)
|
||||
features := make(map[string]*FeatureFlag, count)
|
||||
enabled := make(map[string]bool, count)
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
func TestFeatureManager(t *testing.T) {
|
||||
t.Run("check testing stubs", func(t *testing.T) {
|
||||
ft := WithFeatures("a", "b", "c")
|
||||
ft := WithManager("a", "b", "c")
|
||||
require.True(t, ft.IsEnabledGlobally("a"))
|
||||
require.True(t, ft.IsEnabledGlobally("b"))
|
||||
require.True(t, ft.IsEnabledGlobally("c"))
|
||||
@@ -18,7 +18,7 @@ func TestFeatureManager(t *testing.T) {
|
||||
require.Equal(t, map[string]bool{"a": true, "b": true, "c": true}, ft.GetEnabled(context.Background()))
|
||||
|
||||
// Explicit values
|
||||
ft = WithFeatures("a", true, "b", false)
|
||||
ft = WithManager("a", true, "b", false)
|
||||
require.True(t, ft.IsEnabledGlobally("a"))
|
||||
require.False(t, ft.IsEnabledGlobally("b"))
|
||||
require.Equal(t, map[string]bool{"a": true}, ft.GetEnabled(context.Background()))
|
||||
|
||||
@@ -18,6 +18,10 @@ type FeatureToggles interface {
|
||||
// Use of global feature flags should be limited and careful as they require
|
||||
// a full server restart for a change to take place.
|
||||
IsEnabledGlobally(flag string) bool
|
||||
|
||||
// Get the enabled flags -- this *may* also include disabled flags (with value false)
|
||||
// but it is guaranteed to have the enabled ones listed
|
||||
GetEnabled(ctx context.Context) map[string]bool
|
||||
}
|
||||
|
||||
// FeatureFlagStage indicates the quality level
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func TestFeatureUsageStats(t *testing.T) {
|
||||
featureManagerWithAllFeatures := WithFeatures(
|
||||
featureManagerWithAllFeatures := WithManager(
|
||||
"database_metrics",
|
||||
"live-config",
|
||||
"UPPER_SNAKE_CASE",
|
||||
|
||||
Reference in New Issue
Block a user