Files
grafana/pkg/services/featuremgmt/static_provider_test.go
T
dependabot[bot] 05dff2f7cb deps(go): bump github.com/open-feature/go-sdk from 1.14.1 to 1.16.0 (#112489)
* deps(go): bump github.com/open-feature/go-sdk from 1.14.1 to 1.16.0

Bumps [github.com/open-feature/go-sdk](https://github.com/open-feature/go-sdk) from 1.14.1 to 1.16.0.
- [Release notes](https://github.com/open-feature/go-sdk/releases)
- [Changelog](https://github.com/open-feature/go-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-feature/go-sdk/compare/v1.14.1...v1.16.0)

---
updated-dependencies:
- dependency-name: github.com/open-feature/go-sdk
  dependency-version: 1.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* make update-workspace

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>

* fix(lint): SA1019: openfeature.GetApiInstance is deprecated, using NewDefaultClient

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2025-10-20 19:56:00 +00:00

96 lines
2.9 KiB
Go

package featuremgmt
import (
"context"
"testing"
"github.com/grafana/grafana/pkg/setting"
"github.com/open-feature/go-sdk/openfeature"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_StaticProvider(t *testing.T) {
ctx := context.Background()
evalCtx := openfeature.NewEvaluationContext("grafana", nil)
stFeat := standardFeatureFlags[0]
stFeatName := stFeat.Name
stFeatValue := stFeat.Expression == "true"
t.Run("empty config loads standard flags", func(t *testing.T) {
setup(t, []byte(``))
// Check for one of the standard flags
feat, err := openfeature.NewDefaultClient().BooleanValueDetails(ctx, stFeatName, !stFeatValue, evalCtx)
assert.NoError(t, err)
assert.True(t, stFeatValue == feat.Value)
})
t.Run("featureOne does not exist in standard flags but should be loaded", func(t *testing.T) {
conf := []byte(`
[feature_toggles]
featureOne = true
`)
setup(t, conf)
feat, err := openfeature.NewDefaultClient().BooleanValueDetails(ctx, "featureOne", false, evalCtx)
assert.NoError(t, err)
assert.True(t, feat.Value)
})
t.Run("missing feature should return default evaluation value and an error", func(t *testing.T) {
setup(t, []byte(``))
missingFeature, err := openfeature.NewDefaultClient().BooleanValueDetails(ctx, "missingFeature", true, evalCtx)
assert.Error(t, err)
assert.True(t, missingFeature.Value)
assert.Equal(t, openfeature.ErrorCode("FLAG_NOT_FOUND"), missingFeature.ErrorCode)
})
}
func setup(t *testing.T, conf []byte) {
t.Helper()
cfg, err := setting.NewCfgFromBytes(conf)
require.NoError(t, err)
err = InitOpenFeatureWithCfg(cfg)
require.NoError(t, err)
}
func Test_CompareStaticProviderWithFeatureManager(t *testing.T) {
conf := []byte(`
[feature_toggles]
ABCD = true
`)
cfg, err := setting.NewCfgFromBytes(conf)
require.NoError(t, err)
// InitOpenFeatureWithCfg needed to initialize OpenFeature with the static provider configuration,
// so that StaticFlagEvaluator can use an open feature client.
// In real scenarios, this would be done during server startup.
err = InitOpenFeatureWithCfg(cfg)
require.NoError(t, err)
// Use StaticFlagEvaluator instead of OpenFeatureService for static evaluation
staticEvaluator, err := CreateStaticEvaluator(cfg)
require.NoError(t, err)
ctx := openfeature.WithTransactionContext(context.Background(), openfeature.NewEvaluationContext("grafana", nil))
allFlags, err := staticEvaluator.EvalAllFlags(ctx)
require.NoError(t, err)
openFeatureEnabledFlags := map[string]bool{}
for _, flag := range allFlags.Flags {
if v, ok := flag.Value.(bool); ok && v {
openFeatureEnabledFlags[flag.Key] = true
}
}
mgr, err := ProvideManagerService(cfg)
require.NoError(t, err)
// compare enabled feature flags match between StaticFlagEvaluator and Feature Manager
enabledFeatureManager := mgr.GetEnabled(ctx)
assert.Equal(t, openFeatureEnabledFlags, enabledFeatureManager)
}