Files
grafana/pkg/services/featuremgmt/openfeature_test.go
T
Tania c9ab1142e1 Add OpenFeature providers (#101071)
* Add OpenFeature provider

* Simplify static provider

* Linting

* Apply review feedback

* Codeowner for deps

* Update pkg/services/featuremgmt/openfeature.go

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>

* Apply review comments part2

* Remove from sample.ini for now

* fixup! Apply review comments part2

* Add example of context config

* Resolve conflict

* Run update workspaces

---------

Co-authored-by: Dave Henderson <dave.henderson@grafana.com>
2025-03-06 15:09:26 +01:00

114 lines
2.5 KiB
Go

package featuremgmt
import (
"testing"
"github.com/grafana/grafana/pkg/setting"
gofeatureflag "github.com/open-feature/go-sdk-contrib/providers/go-feature-flag/pkg"
"github.com/open-feature/go-sdk/openfeature/memprovider"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestProvideOpenFeatureManager(t *testing.T) {
testCases := []struct {
name string
cfg string
expectedProvider string
}{
{
name: "static provider",
expectedProvider: staticProviderType,
},
{
name: "goff provider",
cfg: `
[feature_toggles.openfeature]
provider = goff
url = http://localhost:1031
targetingKey = grafana
`,
expectedProvider: goffProviderType,
},
{
name: "invalid provider",
cfg: `
[feature_toggles.openfeature]
provider = some_provider
`,
expectedProvider: staticProviderType,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
cfg := setting.NewCfg()
if tc.cfg != "" {
err := cfg.Raw.Append([]byte(tc.cfg))
require.NoError(t, err)
}
p, err := ProvideOpenFeatureService(cfg)
require.NoError(t, err)
if tc.expectedProvider == goffProviderType {
_, ok := p.provider.(*gofeatureflag.Provider)
assert.True(t, ok, "expected provider to be of type goff.Provider")
} else {
_, ok := p.provider.(memprovider.InMemoryProvider)
assert.True(t, ok, "expected provider to be of type memprovider.InMemoryProvider")
}
})
}
}
func Test_CtxAttrs(t *testing.T) {
testCases := []struct {
name string
conf string
expected map[string]any
}{
{
name: "empty config - only default attributes should be present",
expected: map[string]any{
"grafana_version": "",
},
},
{
name: "config with some attributes",
conf: `
[feature_toggles.openfeature.context]
foo = bar
baz = qux
quux = corge`,
expected: map[string]any{
"foo": "bar",
"baz": "qux",
"quux": "corge",
"grafana_version": "",
},
},
{
name: "config with an attribute that overrides a default one",
conf: `
[feature_toggles.openfeature.context]
grafana_version = 10.0.0
foo = bar`,
expected: map[string]any{
"grafana_version": "10.0.0",
"foo": "bar",
},
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
cfg, err := setting.NewCfgFromBytes([]byte(tc.conf))
require.NoError(t, err)
assert.Equal(t, tc.expected, ctxAttrs(cfg))
})
}
}