diff --git a/internal/webhook/featureflag_webhook.go b/internal/webhook/featureflag_webhook.go index 55d4d4ff4..be922dc55 100644 --- a/internal/webhook/featureflag_webhook.go +++ b/internal/webhook/featureflag_webhook.go @@ -33,13 +33,14 @@ import ( "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) -type FeatureFlagCustomValidator struct { -} +type FeatureFlagCustomValidator struct{} // log is for logging in this package. -var featureFlagLog = logf.Log.WithName("featureflag-resource validator") -var compiledSchema *gojsonschema.Schema -var schemaInitOnce sync.Once +var ( + featureFlagLog = logf.Log.WithName("featureflag-resource validator") + compiledSchema *gojsonschema.Schema + schemaInitOnce sync.Once +) func (v *FeatureFlagCustomValidator) SetupWebhookWithManager(mgr ctrl.Manager) error { return ctrl.NewWebhookManagedBy(mgr). @@ -71,10 +72,10 @@ func (v *FeatureFlagCustomValidator) ValidateCreate(ctx context.Context, obj run // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type func (v *FeatureFlagCustomValidator) ValidateUpdate(ctx context.Context, oldObj runtime.Object, newObj runtime.Object) (warnings admission.Warnings, err error) { - featureFlag, ok := oldObj.(*v1beta1.FeatureFlag) + featureFlag, ok := newObj.(*v1beta1.FeatureFlag) if !ok { - return nil, fmt.Errorf("expected a FeatureFlag object but got %T", oldObj) + return nil, fmt.Errorf("expected a FeatureFlag object but got %T", newObj) } featureFlagLog.Info("validate update", "name", featureFlag.Name) @@ -135,7 +136,6 @@ func initSchemas() (*gojsonschema.Schema, error) { if err == nil { compiledSchema, err = schemaLoader.Compile(gojsonschema.NewStringLoader(schema.FlagSchema)) } - }) return compiledSchema, err diff --git a/test/e2e/chainsaw/validate-featureflag/chainsaw-test.yaml b/test/e2e/chainsaw/validate-featureflag-create/chainsaw-test.yaml similarity index 95% rename from test/e2e/chainsaw/validate-featureflag/chainsaw-test.yaml rename to test/e2e/chainsaw/validate-featureflag-create/chainsaw-test.yaml index 897950b14..3933a1f96 100644 --- a/test/e2e/chainsaw/validate-featureflag/chainsaw-test.yaml +++ b/test/e2e/chainsaw/validate-featureflag-create/chainsaw-test.yaml @@ -2,7 +2,7 @@ apiVersion: chainsaw.kyverno.io/v1alpha1 kind: Test metadata: - name: validate-featureflag + name: validate-featureflag-create spec: steps: - name: step-00 diff --git a/test/e2e/chainsaw/validate-featureflag/featureflag_bad.yaml b/test/e2e/chainsaw/validate-featureflag-create/featureflag_bad.yaml similarity index 100% rename from test/e2e/chainsaw/validate-featureflag/featureflag_bad.yaml rename to test/e2e/chainsaw/validate-featureflag-create/featureflag_bad.yaml diff --git a/test/e2e/chainsaw/validate-featureflag/featureflag_good.yaml b/test/e2e/chainsaw/validate-featureflag-create/featureflag_good.yaml similarity index 100% rename from test/e2e/chainsaw/validate-featureflag/featureflag_good.yaml rename to test/e2e/chainsaw/validate-featureflag-create/featureflag_good.yaml diff --git a/test/e2e/chainsaw/validate-featureflag/featureflag_good_empty.yaml b/test/e2e/chainsaw/validate-featureflag-create/featureflag_good_empty.yaml similarity index 100% rename from test/e2e/chainsaw/validate-featureflag/featureflag_good_empty.yaml rename to test/e2e/chainsaw/validate-featureflag-create/featureflag_good_empty.yaml diff --git a/test/e2e/chainsaw/validate-featureflag-update/chainsaw-test.yaml b/test/e2e/chainsaw/validate-featureflag-update/chainsaw-test.yaml new file mode 100644 index 000000000..d2c388672 --- /dev/null +++ b/test/e2e/chainsaw/validate-featureflag-update/chainsaw-test.yaml @@ -0,0 +1,17 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: validate-featureflag-update +spec: + steps: + - name: step-00 + try: + - apply: + file: featureflag_good_empty.yaml + - update: + file: featureflag_good.yaml + - error: + file: featureflag_bad.yaml + - update: + file: featureflag_good_empty.yaml diff --git a/test/e2e/chainsaw/validate-featureflag-update/featureflag_bad.yaml b/test/e2e/chainsaw/validate-featureflag-update/featureflag_bad.yaml new file mode 100644 index 000000000..8756074a5 --- /dev/null +++ b/test/e2e/chainsaw/validate-featureflag-update/featureflag_bad.yaml @@ -0,0 +1,22 @@ +apiVersion: core.openfeature.dev/v1beta1 +kind: FeatureFlag +metadata: + name: featureflag-sample +spec: + flagSpec: + flags: + fibAlgo: + variants: + recursive: recursive + memo: memo + loop: loop + binet: binet + defaultVariant: recursive + state: ENABLED + targeting: + fractional: + - "invalid" + - ["clubs", 25] + - ["diamonds", 25] + - ["hearts", 25] + - ["spades", 25] diff --git a/test/e2e/chainsaw/validate-featureflag-update/featureflag_good.yaml b/test/e2e/chainsaw/validate-featureflag-update/featureflag_good.yaml new file mode 100644 index 000000000..d023c89dc --- /dev/null +++ b/test/e2e/chainsaw/validate-featureflag-update/featureflag_good.yaml @@ -0,0 +1,20 @@ +apiVersion: core.openfeature.dev/v1beta1 +kind: FeatureFlag +metadata: + name: featureflag-sample +spec: + flagSpec: + flags: + fibAlgo: + variants: + recursive: recursive + memo: memo + loop: loop + binet: binet + defaultVariant: recursive + state: ENABLED + targeting: + if: + - "$ref": emailWithFaas + - binet + - null diff --git a/test/e2e/chainsaw/validate-featureflag-update/featureflag_good_empty.yaml b/test/e2e/chainsaw/validate-featureflag-update/featureflag_good_empty.yaml new file mode 100644 index 000000000..669e2a25a --- /dev/null +++ b/test/e2e/chainsaw/validate-featureflag-update/featureflag_good_empty.yaml @@ -0,0 +1,15 @@ +apiVersion: core.openfeature.dev/v1beta1 +kind: FeatureFlag +metadata: + name: featureflag-sample +spec: + flagSpec: + flags: + fibAlgo: + variants: + recursive: recursive + memo: memo + loop: loop + binet: binet + defaultVariant: recursive + state: ENABLED