diff --git a/core/pkg/sync/kubernetes/kubernetes_sync.go b/core/pkg/sync/kubernetes/kubernetes_sync.go index 512d6fb6d..730771854 100644 --- a/core/pkg/sync/kubernetes/kubernetes_sync.go +++ b/core/pkg/sync/kubernetes/kubernetes_sync.go @@ -192,11 +192,7 @@ func (k *Sync) fetch(ctx context.Context) (string, error) { } k.logger.Debug(fmt.Sprintf("resource %s served from the informer cache", k.URI)) - b, err := json.Marshal(configuration.Spec.FlagSpec) - if err != nil { - return "", fmt.Errorf("failed to marshall FlagSpec: %s", err.Error()) - } - return string(b), nil + return marshallFeatureFlagSpec(configuration) } // fallback to API access - this is an informer cache miss. Could happen at the startup where cache is not filled @@ -210,11 +206,7 @@ func (k *Sync) fetch(ctx context.Context) (string, error) { } k.logger.Debug(fmt.Sprintf("resource %s served from API server", k.URI)) - b, err := json.Marshal(ff.Spec.FlagSpec) - if err != nil { - return "", fmt.Errorf("failed to marshall FlagSpec: %s", err.Error()) - } - return string(b), nil + return marshallFeatureFlagSpec(&ff) } func (k *Sync) notify(ctx context.Context, c chan<- INotify) { @@ -358,3 +350,11 @@ func k8sClusterConfig() (*rest.Config, error) { return clusterConfig, nil } + +func marshallFeatureFlagSpec(ff *v1beta1.FeatureFlag) (string, error) { + b, err := json.Marshal(ff.Spec.FlagSpec) + if err != nil { + return "", fmt.Errorf("failed to marshall FlagSpec: %s", err.Error()) + } + return string(b), nil +} diff --git a/core/pkg/sync/kubernetes/kubernetes_sync_test.go b/core/pkg/sync/kubernetes/kubernetes_sync_test.go index 9eb47815e..b81f44074 100644 --- a/core/pkg/sync/kubernetes/kubernetes_sync_test.go +++ b/core/pkg/sync/kubernetes/kubernetes_sync_test.go @@ -13,6 +13,7 @@ import ( "github.com/open-feature/flagd/core/pkg/logger" "github.com/open-feature/flagd/core/pkg/sync" "github.com/open-feature/open-feature-operator/apis/core/v1beta1" + "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -912,3 +913,20 @@ type MockInformer struct { func (m MockInformer) GetStore() cache.Store { return &m.fakeStore } + +func TestMeasure(t *testing.T) { + res, err := marshallFeatureFlagSpec(&v1beta1.FeatureFlag{ + Spec: v1beta1.FeatureFlagSpec{ + FlagSpec: v1beta1.FlagSpec{ + Flags: map[string]v1beta1.Flag{ + "flag": { + DefaultVariant: "kubernetes", + }, + }, + }, + }, + }) + + require.Nil(t, err) + require.Equal(t, "{\"flags\":{\"flag\":{\"state\":\"\",\"variants\":null,\"defaultVariant\":\"kubernetes\"}}}", res) +}