From dd34801fd71ac4f1e6c0b0f39f78ddf738f5601d Mon Sep 17 00:00:00 2001 From: odubajDT <93584209+odubajDT@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:10:25 +0100 Subject: [PATCH] chore: remove unneeded conversion webhooks + introduce unit tests for conversion functions (#385) Signed-off-by: odubajDT Signed-off-by: odubajDT <93584209+odubajDT@users.noreply.github.com> Co-authored-by: Michael Beemer Co-authored-by: Skye Gill --- .github/workflows/pr-checks.yml | 43 ++- Makefile | 16 +- .../featureflagconfiguration_conversion.go | 8 - .../featureflagconfiguration_webhook.go | 9 + .../flagsourceconfiguration_conversion.go | 10 - .../flagsourceconfiguration_webhook.go | 11 + apis/core/v1alpha2/common/common.go | 6 + .../featureflagconfiguration_conversion.go | 26 +- ...eatureflagconfiguration_conversion_test.go | 318 ++++++++++++++++++ .../flagsourceconfiguration_conversion.go | 28 +- ...flagsourceconfiguration_conversion_test.go | 203 +++++++++++ apis/core/v1alpha3/common/common.go | 5 + .../flagsourceconfiguration_conversion.go | 32 +- ...flagsourceconfiguration_conversion_test.go | 255 ++++++++++++++ codecov.yml | 35 ++ controllers/controllers_test.go | 18 +- controllers/suite_test.go | 13 +- go.mod | 21 +- go.sum | 107 ++---- main.go | 12 - .../featureflagconfiguration_webhook_test.go | 28 +- webhooks/pod_webhook_test.go | 2 +- webhooks/suite_test.go | 22 +- 23 files changed, 1010 insertions(+), 218 deletions(-) create mode 100644 apis/core/v1alpha1/featureflagconfiguration_webhook.go create mode 100644 apis/core/v1alpha1/flagsourceconfiguration_webhook.go create mode 100644 apis/core/v1alpha2/common/common.go create mode 100644 apis/core/v1alpha2/featureflagconfiguration_conversion_test.go create mode 100644 apis/core/v1alpha2/flagsourceconfiguration_conversion_test.go create mode 100644 apis/core/v1alpha3/common/common.go create mode 100644 apis/core/v1alpha3/flagsourceconfiguration_conversion_test.go create mode 100644 codecov.yml diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 5233c9192..54b63a683 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -48,18 +48,22 @@ jobs: exit 1 test: + name: Component Tests runs-on: ubuntu-latest steps: - name: Install Go uses: actions/setup-go@v3 with: go-version: ${{ env.DEFAULT_GO_VERSION }} + - name: Checkout repository uses: actions/checkout@v3 + - name: Setup Environment run: | echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + - name: Module cache uses: actions/cache@v3 env: @@ -67,10 +71,47 @@ jobs: with: path: ~/go/pkg/mod key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/go.sum') }} + - name: Run tests - run: make test + run: make component-test + - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 + with: + flags: component-tests + + unit-test: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v3 + with: + go-version: ${{ env.DEFAULT_GO_VERSION }} + + - name: Setup Environment + run: | + echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + + - name: Module cache + uses: actions/cache@v3 + env: + cache-name: go-mod-cache + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/go.sum') }} + + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Unit Test + run: make unit-test + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + flags: unit-tests docker-local: permissions: diff --git a/Makefile b/Makefile index 4767fb1be..2795dc8a9 100644 --- a/Makefile +++ b/Makefile @@ -65,9 +65,19 @@ fmt: ## Run go fmt against code. vet: ## Run go vet against code. go vet ./... -.PHONY: test -test: manifests generate fmt vet envtest ## Run tests. - KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out +.PHONY: component-test +component-test: manifests generate fmt vet envtest ## Run tests. + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./controllers/... -coverprofile cover-controllers.out + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./webhooks/... -coverprofile cover-webhooks.out + sed -i '/mode: set/d' "cover-controllers.out" + sed -i '/mode: set/d' "cover-webhooks.out" + echo "mode: set" > cover.out + cat cover-controllers.out cover-webhooks.out >> cover.out + rm cover-controllers.out cover-webhooks.out + +.PHONY: unit-test +unit-test: manifests fmt vet generate envtest ## Run tests. + go test ./... -v -short -coverprofile cover.out ## Requires the operator to be deployed .PHONY: e2e-test diff --git a/apis/core/v1alpha1/featureflagconfiguration_conversion.go b/apis/core/v1alpha1/featureflagconfiguration_conversion.go index 342072e50..1d9e0624a 100644 --- a/apis/core/v1alpha1/featureflagconfiguration_conversion.go +++ b/apis/core/v1alpha1/featureflagconfiguration_conversion.go @@ -16,13 +16,5 @@ limitations under the License. package v1alpha1 -import ctrl "sigs.k8s.io/controller-runtime" - // Hub marks this type as a conversion hub. func (ffc *FeatureFlagConfiguration) Hub() {} - -func (r *FeatureFlagConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(r). - Complete() -} diff --git a/apis/core/v1alpha1/featureflagconfiguration_webhook.go b/apis/core/v1alpha1/featureflagconfiguration_webhook.go new file mode 100644 index 000000000..46e2897c2 --- /dev/null +++ b/apis/core/v1alpha1/featureflagconfiguration_webhook.go @@ -0,0 +1,9 @@ +package v1alpha1 + +import ctrl "sigs.k8s.io/controller-runtime" + +func (r *FeatureFlagConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} diff --git a/apis/core/v1alpha1/flagsourceconfiguration_conversion.go b/apis/core/v1alpha1/flagsourceconfiguration_conversion.go index 5c97e1e54..883c45ab3 100644 --- a/apis/core/v1alpha1/flagsourceconfiguration_conversion.go +++ b/apis/core/v1alpha1/flagsourceconfiguration_conversion.go @@ -16,15 +16,5 @@ limitations under the License. package v1alpha1 -import ( - ctrl "sigs.k8s.io/controller-runtime" -) - // Hub marks this type as a conversion hub. func (ffc *FlagSourceConfiguration) Hub() {} - -func (r *FlagSourceConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(r). - Complete() -} diff --git a/apis/core/v1alpha1/flagsourceconfiguration_webhook.go b/apis/core/v1alpha1/flagsourceconfiguration_webhook.go new file mode 100644 index 000000000..e75324e87 --- /dev/null +++ b/apis/core/v1alpha1/flagsourceconfiguration_webhook.go @@ -0,0 +1,11 @@ +package v1alpha1 + +import ( + ctrl "sigs.k8s.io/controller-runtime" +) + +func (r *FlagSourceConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} diff --git a/apis/core/v1alpha2/common/common.go b/apis/core/v1alpha2/common/common.go new file mode 100644 index 000000000..87bbc63c9 --- /dev/null +++ b/apis/core/v1alpha2/common/common.go @@ -0,0 +1,6 @@ +package common + +import "errors" + +var ErrCannotCastFlagSourceConfiguration = errors.New("cannot cast FlagSourceConfiguration to v1alpha2") +var ErrCannotCastFeatureFlagConfiguration = errors.New("cannot cast FeatureFlagConfiguration to v1alpha2") diff --git a/apis/core/v1alpha2/featureflagconfiguration_conversion.go b/apis/core/v1alpha2/featureflagconfiguration_conversion.go index aebd98408..a82dabfee 100644 --- a/apis/core/v1alpha2/featureflagconfiguration_conversion.go +++ b/apis/core/v1alpha2/featureflagconfiguration_conversion.go @@ -21,20 +21,21 @@ import ( "fmt" "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" - ctrl "sigs.k8s.io/controller-runtime" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha2/common" "sigs.k8s.io/controller-runtime/pkg/conversion" ) -func (ffc *FeatureFlagConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(ffc). - Complete() -} - func (src *FeatureFlagConfiguration) ConvertTo(dstRaw conversion.Hub) error { - dst := dstRaw.(*v1alpha1.FeatureFlagConfiguration) + dst, ok := dstRaw.(*v1alpha1.FeatureFlagConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", dstRaw, common.ErrCannotCastFeatureFlagConfiguration) + } + // Copy equal stuff to new object + // DO NOT COPY TypeMeta dst.ObjectMeta = src.ObjectMeta + if src.Spec.ServiceProvider != nil { dst.Spec.ServiceProvider = &v1alpha1.FeatureFlagServiceProvider{ Name: src.Spec.ServiceProvider.Name, @@ -67,9 +68,16 @@ func (src *FeatureFlagConfiguration) ConvertTo(dstRaw conversion.Hub) error { } func (dst *FeatureFlagConfiguration) ConvertFrom(srcRaw conversion.Hub) error { - src := srcRaw.(*v1alpha1.FeatureFlagConfiguration) + src, ok := srcRaw.(*v1alpha1.FeatureFlagConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", srcRaw, common.ErrCannotCastFeatureFlagConfiguration) + } + // Copy equal stuff to new object + // DO NOT COPY TypeMeta dst.ObjectMeta = src.ObjectMeta + if src.Spec.ServiceProvider != nil { dst.Spec.ServiceProvider = &FeatureFlagServiceProvider{ Name: src.Spec.ServiceProvider.Name, diff --git a/apis/core/v1alpha2/featureflagconfiguration_conversion_test.go b/apis/core/v1alpha2/featureflagconfiguration_conversion_test.go new file mode 100644 index 000000000..d88ee32ab --- /dev/null +++ b/apis/core/v1alpha2/featureflagconfiguration_conversion_test.go @@ -0,0 +1,318 @@ +package v1alpha2 + +import ( + "testing" + + "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha2/common" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v2 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v2" +) + +func TestFeatureFlagConfiguration_ConvertFrom(t *testing.T) { + tests := []struct { + name string + srcObj *v1alpha1.FeatureFlagConfiguration + wantErr bool + wantObj *FeatureFlagConfiguration + }{ + { + name: "Test that conversion from v1alpha1 to v1alpha2 works", + srcObj: &v1alpha1.FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FeatureFlagConfiguration", + APIVersion: "core.openfeature.dev/v1alpha1", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "FeatureFlagconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FeatureFlagConfigurationSpec{ + ServiceProvider: &v1alpha1.FeatureFlagServiceProvider{ + Name: "name1", + Credentials: &corev1.ObjectReference{ + Kind: "Pod", + Namespace: "default", + Name: "pod1", + }, + }, + SyncProvider: &v1alpha1.FeatureFlagSyncProvider{ + Name: "syncprovider1", + HttpSyncConfiguration: &v1alpha1.HttpSyncConfiguration{ + Target: "target1", + BearerToken: "token", + }, + }, + FlagDSpec: &v1alpha1.FlagDSpec{ + MetricsPort: 22, + Envs: []corev1.EnvVar{ + { + Name: "var1", + Value: "val1", + }, + { + Name: "var2", + Value: "val2", + }, + }, + }, + FeatureFlagSpec: `{"flags":{"flag1":{"state":"ok","variants":"variant1","defaultVariant":"default"}}}`, + }, + }, + wantErr: false, + wantObj: &FeatureFlagConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "FeatureFlagconfig1", + Namespace: "default", + }, + Spec: FeatureFlagConfigurationSpec{ + ServiceProvider: &FeatureFlagServiceProvider{ + Name: "name1", + Credentials: &corev1.ObjectReference{ + Kind: "Pod", + Namespace: "default", + Name: "pod1", + }, + }, + SyncProvider: &FeatureFlagSyncProvider{ + Name: "syncprovider1", + HttpSyncConfiguration: &HttpSyncConfiguration{ + Target: "target1", + BearerToken: "token", + }, + }, + FlagDSpec: &FlagDSpec{ + Envs: []corev1.EnvVar{ + { + Name: "var1", + Value: "val1", + }, + { + Name: "var2", + Value: "val2", + }, + }, + }, + FeatureFlagSpec: FeatureFlagSpec{ + Flags: map[string]FlagSpec{ + "flag1": { + State: "ok", + DefaultVariant: "default", + Variants: []byte(`"variant1"`), + }, + }, + }, + }, + }, + }, + { + name: "unable to unmarshal featureflagspec json", + srcObj: &v1alpha1.FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FeatureFlagConfiguration", + APIVersion: "core.openfeature.dev/v1alpha1", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "FeatureFlagconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FeatureFlagConfigurationSpec{ + ServiceProvider: &v1alpha1.FeatureFlagServiceProvider{ + Name: "name1", + Credentials: &corev1.ObjectReference{ + Kind: "Pod", + Namespace: "default", + Name: "pod1", + }, + }, + SyncProvider: &v1alpha1.FeatureFlagSyncProvider{ + Name: "syncprovider1", + HttpSyncConfiguration: &v1alpha1.HttpSyncConfiguration{ + Target: "target1", + BearerToken: "token", + }, + }, + FlagDSpec: &v1alpha1.FlagDSpec{ + MetricsPort: 22, + Envs: []corev1.EnvVar{ + { + Name: "var1", + Value: "val1", + }, + { + Name: "var2", + Value: "val2", + }, + }, + }, + FeatureFlagSpec: `invalid`, + }, + }, + wantErr: true, + wantObj: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := &FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FeatureFlagConfigurationSpec{}, + Status: FeatureFlagConfigurationStatus{}, + } + if err := dst.ConvertFrom(tt.srcObj); (err != nil) != tt.wantErr { + t.Errorf("ConvertFrom() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, dst, "Object was not converted correctly") + } + }) + } +} + +func TestFeatureFlagConfiguration_ConvertTo(t *testing.T) { + tests := []struct { + name string + src *FeatureFlagConfiguration + wantErr bool + wantObj *v1alpha1.FeatureFlagConfiguration + }{ + { + name: "Test that conversion from v1alpha2 to v1alpha1 works", + src: &FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FeatureFlagConfiguration", + APIVersion: "core.openfeature.dev/v1alpha2", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "FeatureFlagconfig1", + Namespace: "default", + }, + Spec: FeatureFlagConfigurationSpec{ + ServiceProvider: &FeatureFlagServiceProvider{ + Name: "name1", + Credentials: &corev1.ObjectReference{ + Kind: "Pod", + Namespace: "default", + Name: "pod1", + }, + }, + SyncProvider: &FeatureFlagSyncProvider{ + Name: "syncprovider1", + HttpSyncConfiguration: &HttpSyncConfiguration{ + Target: "target1", + BearerToken: "token", + }, + }, + FlagDSpec: &FlagDSpec{ + Envs: []corev1.EnvVar{ + { + Name: "var1", + Value: "val1", + }, + { + Name: "var2", + Value: "val2", + }, + }, + }, + FeatureFlagSpec: FeatureFlagSpec{ + Flags: map[string]FlagSpec{ + "flag1": { + State: "ok", + DefaultVariant: "default", + Variants: []byte(`"variant1"`), + }, + }, + }, + }, + }, + wantErr: false, + wantObj: &v1alpha1.FeatureFlagConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "FeatureFlagconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FeatureFlagConfigurationSpec{ + ServiceProvider: &v1alpha1.FeatureFlagServiceProvider{ + Name: "name1", + Credentials: &corev1.ObjectReference{ + Kind: "Pod", + Namespace: "default", + Name: "pod1", + }, + }, + SyncProvider: &v1alpha1.FeatureFlagSyncProvider{ + Name: "syncprovider1", + HttpSyncConfiguration: &v1alpha1.HttpSyncConfiguration{ + Target: "target1", + BearerToken: "token", + }, + }, + FlagDSpec: &v1alpha1.FlagDSpec{ + Envs: []corev1.EnvVar{ + { + Name: "var1", + Value: "val1", + }, + { + Name: "var2", + Value: "val2", + }, + }, + }, + FeatureFlagSpec: `{"flags":{"flag1":{"state":"ok","variants":"variant1","defaultVariant":"default"}}}`, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := v1alpha1.FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: v1alpha1.FeatureFlagConfigurationSpec{}, + Status: v1alpha1.FeatureFlagConfigurationStatus{}, + } + if err := tt.src.ConvertTo(&dst); (err != nil) != tt.wantErr { + t.Errorf("ConvertTo() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, &dst, "Object was not converted correctly") + } + }) + } +} + +func TestFeatureFlagConfiguration_ConvertFrom_Errorcase(t *testing.T) { + // A random different object is used here to simulate a different API version + testObj := v2.ExternalJob{} + + dst := &FeatureFlagConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FeatureFlagConfigurationSpec{}, + Status: FeatureFlagConfigurationStatus{}, + } + + if err := dst.ConvertFrom(&testObj); err == nil { + t.Errorf("ConvertFrom() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFeatureFlagConfiguration) + } +} + +func TestFeatureFlagConfiguration_ConvertTo_Errorcase(t *testing.T) { + testObj := FeatureFlagConfiguration{} + + // A random different object is used here to simulate a different API version + dst := v2.ExternalJob{} + + if err := testObj.ConvertTo(&dst); err == nil { + t.Errorf("ConvertTo() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFeatureFlagConfiguration) + } +} diff --git a/apis/core/v1alpha2/flagsourceconfiguration_conversion.go b/apis/core/v1alpha2/flagsourceconfiguration_conversion.go index f9d6d8380..d53894320 100644 --- a/apis/core/v1alpha2/flagsourceconfiguration_conversion.go +++ b/apis/core/v1alpha2/flagsourceconfiguration_conversion.go @@ -17,21 +17,24 @@ limitations under the License. package v1alpha2 import ( + "fmt" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" - ctrl "sigs.k8s.io/controller-runtime" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha2/common" "sigs.k8s.io/controller-runtime/pkg/conversion" ) -func (ffc *FlagSourceConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(ffc). - Complete() -} - func (src *FlagSourceConfiguration) ConvertTo(dstRaw conversion.Hub) error { - dst := dstRaw.(*v1alpha1.FlagSourceConfiguration) + dst, ok := dstRaw.(*v1alpha1.FlagSourceConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", dstRaw, common.ErrCannotCastFlagSourceConfiguration) + } + // Copy equal stuff to new object + // DO NOT COPY TypeMeta dst.ObjectMeta = src.ObjectMeta + dst.Spec = v1alpha1.FlagSourceConfigurationSpec{ MetricsPort: src.Spec.MetricsPort, Port: src.Spec.Port, @@ -48,9 +51,16 @@ func (src *FlagSourceConfiguration) ConvertTo(dstRaw conversion.Hub) error { } func (dst *FlagSourceConfiguration) ConvertFrom(srcRaw conversion.Hub) error { - src := srcRaw.(*v1alpha1.FlagSourceConfiguration) + src, ok := srcRaw.(*v1alpha1.FlagSourceConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", srcRaw, common.ErrCannotCastFlagSourceConfiguration) + } + // Copy equal stuff to new object + // DO NOT COPY TypeMeta dst.ObjectMeta = src.ObjectMeta + dst.Spec = FlagSourceConfigurationSpec{ MetricsPort: src.Spec.MetricsPort, Port: src.Spec.Port, diff --git a/apis/core/v1alpha2/flagsourceconfiguration_conversion_test.go b/apis/core/v1alpha2/flagsourceconfiguration_conversion_test.go new file mode 100644 index 000000000..cc822d9fc --- /dev/null +++ b/apis/core/v1alpha2/flagsourceconfiguration_conversion_test.go @@ -0,0 +1,203 @@ +package v1alpha2 + +import ( + "testing" + + "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha2/common" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v2 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v2" +) + +func TestFlagSourceConfiguration_ConvertFrom(t *testing.T) { + tt := true + tests := []struct { + name string + srcObj *v1alpha1.FlagSourceConfiguration + wantErr bool + wantObj *FlagSourceConfiguration + }{ + { + name: "Test that conversion from v1alpha1 to v1alpha2 works", + srcObj: &v1alpha1.FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FlagSourceConfiguration", + APIVersion: "core.openfeature.dev/v1alpha1", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []v1alpha1.Source{ + { + Source: "source", + Provider: "provider", + HttpSyncBearerToken: "token", + LogFormat: "log2", + }, + }, + EnvVars: []corev1.EnvVar{ + { + Name: "env1", + Value: "val1", + }, + { + Name: "env2", + Value: "val2", + }, + }, + DefaultSyncProvider: v1alpha1.SyncProviderType("provider"), + LogFormat: "log", + EnvVarPrefix: "pre", + RolloutOnChange: &tt, + SyncProviderArgs: []string{"provider", "arg"}, + }, + }, + wantErr: false, + wantObj: &FlagSourceConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + SyncProviderArgs: []string{"provider", "arg"}, + LogFormat: "log", + DefaultSyncProvider: "provider", + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FlagSourceConfigurationSpec{}, + Status: FlagSourceConfigurationStatus{}, + } + if err := dst.ConvertFrom(tt.srcObj); (err != nil) != tt.wantErr { + t.Errorf("ConvertFrom() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, dst, "Object was not converted correctly") + } + }) + } +} + +func TestFlagSourceConfiguration_ConvertTo(t *testing.T) { + tests := []struct { + name string + src *FlagSourceConfiguration + wantErr bool + wantObj *v1alpha1.FlagSourceConfiguration + }{ + { + name: "Test that conversion from v1alpha2 to v1alpha1 works", + src: &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FlagSourceConfiguration", + APIVersion: "core.openfeature.dev/v1alpha2", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + DefaultSyncProvider: "provider", + LogFormat: "log", + SyncProviderArgs: []string{"provider", "arg"}, + }, + }, + wantErr: false, + wantObj: &v1alpha1.FlagSourceConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []v1alpha1.Source{}, + DefaultSyncProvider: v1alpha1.SyncProviderType("provider"), + LogFormat: "log", + EnvVarPrefix: "", + RolloutOnChange: nil, + SyncProviderArgs: []string{"provider", "arg"}, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := v1alpha1.FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: v1alpha1.FlagSourceConfigurationSpec{}, + Status: v1alpha1.FlagSourceConfigurationStatus{}, + } + if err := tt.src.ConvertTo(&dst); (err != nil) != tt.wantErr { + t.Errorf("ConvertTo() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, &dst, "Object was not converted correctly") + } + }) + } +} + +func TestFlagSourceConfiguration_ConvertFrom_Errorcase(t *testing.T) { + // A random different object is used here to simulate a different API version + testObj := v2.ExternalJob{} + + dst := &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FlagSourceConfigurationSpec{}, + Status: FlagSourceConfigurationStatus{}, + } + + if err := dst.ConvertFrom(&testObj); err == nil { + t.Errorf("ConvertFrom() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFlagSourceConfiguration) + } +} + +func TestFlagSourceConfiguration_ConvertTo_Errorcase(t *testing.T) { + testObj := FlagSourceConfiguration{} + + // A random different object is used here to simulate a different API version + dst := v2.ExternalJob{} + + if err := testObj.ConvertTo(&dst); err == nil { + t.Errorf("ConvertTo() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFlagSourceConfiguration) + } +} diff --git a/apis/core/v1alpha3/common/common.go b/apis/core/v1alpha3/common/common.go new file mode 100644 index 000000000..f78640a8a --- /dev/null +++ b/apis/core/v1alpha3/common/common.go @@ -0,0 +1,5 @@ +package common + +import "errors" + +var ErrCannotCastFlagSourceConfiguration = errors.New("cannot cast FlagSourceConfiguration to v1alpha3") diff --git a/apis/core/v1alpha3/flagsourceconfiguration_conversion.go b/apis/core/v1alpha3/flagsourceconfiguration_conversion.go index 9532e8bcd..b435f0800 100644 --- a/apis/core/v1alpha3/flagsourceconfiguration_conversion.go +++ b/apis/core/v1alpha3/flagsourceconfiguration_conversion.go @@ -17,19 +17,23 @@ limitations under the License. package v1alpha3 import ( + "fmt" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" - ctrl "sigs.k8s.io/controller-runtime" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha3/common" "sigs.k8s.io/controller-runtime/pkg/conversion" ) -func (ffc *FlagSourceConfiguration) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(ffc). - Complete() -} - func (src *FlagSourceConfiguration) ConvertTo(dstRaw conversion.Hub) error { - dst := dstRaw.(*v1alpha1.FlagSourceConfiguration) + dst, ok := dstRaw.(*v1alpha1.FlagSourceConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", dstRaw, common.ErrCannotCastFlagSourceConfiguration) + } + + // Copy equal stuff to new object + // DO NOT COPY TypeMeta + dst.ObjectMeta = src.ObjectMeta sources := []v1alpha1.Source{} for _, sp := range src.Spec.Sources { @@ -40,7 +44,6 @@ func (src *FlagSourceConfiguration) ConvertTo(dstRaw conversion.Hub) error { }) } - dst.ObjectMeta = src.ObjectMeta dst.Spec = v1alpha1.FlagSourceConfigurationSpec{ MetricsPort: src.Spec.MetricsPort, Port: src.Spec.Port, @@ -59,7 +62,15 @@ func (src *FlagSourceConfiguration) ConvertTo(dstRaw conversion.Hub) error { } func (dst *FlagSourceConfiguration) ConvertFrom(srcRaw conversion.Hub) error { - src := srcRaw.(*v1alpha1.FlagSourceConfiguration) + src, ok := srcRaw.(*v1alpha1.FlagSourceConfiguration) + + if !ok { + return fmt.Errorf("type %T %w", srcRaw, common.ErrCannotCastFlagSourceConfiguration) + } + + // Copy equal stuff to new object + // DO NOT COPY TypeMeta + dst.ObjectMeta = src.ObjectMeta sources := []Source{} for _, sp := range src.Spec.Sources { @@ -70,7 +81,6 @@ func (dst *FlagSourceConfiguration) ConvertFrom(srcRaw conversion.Hub) error { }) } - dst.ObjectMeta = src.ObjectMeta dst.Spec = FlagSourceConfigurationSpec{ MetricsPort: src.Spec.MetricsPort, Port: src.Spec.Port, diff --git a/apis/core/v1alpha3/flagsourceconfiguration_conversion_test.go b/apis/core/v1alpha3/flagsourceconfiguration_conversion_test.go new file mode 100644 index 000000000..91a8f9d3b --- /dev/null +++ b/apis/core/v1alpha3/flagsourceconfiguration_conversion_test.go @@ -0,0 +1,255 @@ +package v1alpha3 + +import ( + "testing" + + "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" + "github.com/open-feature/open-feature-operator/apis/core/v1alpha3/common" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v2 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v2" +) + +func TestFlagSourceConfiguration_ConvertFrom(t *testing.T) { + tt := true + tests := []struct { + name string + srcObj *v1alpha1.FlagSourceConfiguration + wantErr bool + wantObj *FlagSourceConfiguration + }{ + { + name: "Test that conversion from v1alpha1 to v1alpha3 works", + srcObj: &v1alpha1.FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FlagSourceConfiguration", + APIVersion: "core.openfeature.dev/v1alpha1", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []v1alpha1.Source{ + { + Source: "source", + Provider: "provider", + HttpSyncBearerToken: "token", + LogFormat: "log2", + }, + }, + EnvVars: []corev1.EnvVar{ + { + Name: "env1", + Value: "val1", + }, + { + Name: "env2", + Value: "val2", + }, + }, + DefaultSyncProvider: v1alpha1.SyncProviderType("provider"), + LogFormat: "log", + EnvVarPrefix: "pre", + RolloutOnChange: &tt, + }, + }, + wantErr: false, + wantObj: &FlagSourceConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []Source{ + { + Source: "source", + Provider: "provider", + HttpSyncBearerToken: "token", + }, + }, + EnvVars: []corev1.EnvVar{ + { + Name: "env1", + Value: "val1", + }, + { + Name: "env2", + Value: "val2", + }, + }, + DefaultSyncProvider: "provider", + LogFormat: "log", + EnvVarPrefix: "pre", + RolloutOnChange: &tt, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FlagSourceConfigurationSpec{}, + Status: FlagSourceConfigurationStatus{}, + } + if err := dst.ConvertFrom(tt.srcObj); (err != nil) != tt.wantErr { + t.Errorf("ConvertFrom() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, dst, "Object was not converted correctly") + } + }) + } +} + +func TestFlagSourceConfiguration_ConvertTo(t *testing.T) { + tt := true + tests := []struct { + name string + src *FlagSourceConfiguration + wantErr bool + wantObj *v1alpha1.FlagSourceConfiguration + }{ + { + name: "Test that conversion from v1alpha3 to v1alpha1 works", + src: &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{ + Kind: "FlagSourceConfiguration", + APIVersion: "core.openfeature.dev/v1alpha3", + }, + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []Source{ + { + Source: "source", + Provider: "provider", + HttpSyncBearerToken: "token", + }, + }, + EnvVars: []corev1.EnvVar{ + { + Name: "env1", + Value: "val1", + }, + { + Name: "env2", + Value: "val2", + }, + }, + DefaultSyncProvider: "provider", + LogFormat: "log", + EnvVarPrefix: "pre", + RolloutOnChange: &tt, + }, + }, + wantErr: false, + wantObj: &v1alpha1.FlagSourceConfiguration{ + ObjectMeta: v1.ObjectMeta{ + Name: "flagsourceconfig1", + Namespace: "default", + }, + Spec: v1alpha1.FlagSourceConfigurationSpec{ + MetricsPort: 20, + Port: 21, + SocketPath: "path", + Evaluator: "eval", + Image: "img", + Tag: "tag", + Sources: []v1alpha1.Source{ + { + Source: "source", + Provider: "provider", + HttpSyncBearerToken: "token", + LogFormat: "", + }, + }, + EnvVars: []corev1.EnvVar{ + { + Name: "env1", + Value: "val1", + }, + { + Name: "env2", + Value: "val2", + }, + }, + DefaultSyncProvider: v1alpha1.SyncProviderType("provider"), + LogFormat: "log", + EnvVarPrefix: "pre", + RolloutOnChange: &tt, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := v1alpha1.FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: v1alpha1.FlagSourceConfigurationSpec{}, + Status: v1alpha1.FlagSourceConfigurationStatus{}, + } + if err := tt.src.ConvertTo(&dst); (err != nil) != tt.wantErr { + t.Errorf("ConvertTo() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantObj != nil { + require.Equal(t, tt.wantObj, &dst, "Object was not converted correctly") + } + }) + } +} + +func TestFlagSourceConfiguration_ConvertFrom_Errorcase(t *testing.T) { + // A random different object is used here to simulate a different API version + testObj := v2.ExternalJob{} + + dst := &FlagSourceConfiguration{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{}, + Spec: FlagSourceConfigurationSpec{}, + Status: FlagSourceConfigurationStatus{}, + } + + if err := dst.ConvertFrom(&testObj); err == nil { + t.Errorf("ConvertFrom() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFlagSourceConfiguration) + } +} + +func TestFlagSourceConfiguration_ConvertTo_Errorcase(t *testing.T) { + testObj := FlagSourceConfiguration{} + + // A random different object is used here to simulate a different API version + dst := v2.ExternalJob{} + + if err := testObj.ConvertTo(&dst); err == nil { + t.Errorf("ConvertTo() error = %v", err) + } else { + require.ErrorIs(t, err, common.ErrCannotCastFlagSourceConfiguration) + } +} diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..2cdcd9b59 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,35 @@ +coverage: + status: + project: + default: + # basic + target: auto + threshold: 2% # allow cov to drop by 2% (just in case) + patch: + default: + threshold: 1% # allow patch + +ignore: + - "**/*.yaml" # ignore all yaml files (Kubernetes manifests, etc...) + - "**/*.yml" # same as above + - "**/*.md" # ignore all markdown files, those are not relevant for building/testing + - "**/Dockerfile" # ignore Dockerfiles, those are build with GH Actions + - "**/*.sh" # ignore shell scripts + - "**/test_utils.go" # test utils don't need to be covered + - "**/zz_generated.deepcopy.go" # auto-generated deepcopy files for CRD structs + +comment: + layout: "diff, files, flags" + +github_checks: + annotations: false + +flags: + unit-tests: + paths: + - ./ + carryforward: true + tests: + paths: + - ./ + carryforward: true diff --git a/controllers/controllers_test.go b/controllers/controllers_test.go index 862b66cb9..aeea656ed 100644 --- a/controllers/controllers_test.go +++ b/controllers/controllers_test.go @@ -3,7 +3,7 @@ package controllers import ( "fmt" - . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" appsv1 "k8s.io/api/apps/v1" @@ -90,15 +90,11 @@ var _ = Describe("flagsourceconfiguration controller tests", func() { Expect(err).ShouldNot(HaveOccurred()) // fetch deployment and test if it has been updated - maxRetries := 5 - notRestartedError := fmt.Errorf("deployment has not been restarted after %d seconds", maxRetries) - for i := 0; i < maxRetries; i++ { - err = k8sClient.Get(testCtx, client.ObjectKey{Name: deploymentName, Namespace: testNamespace}, deployment) - Expect(err).ShouldNot(HaveOccurred()) - if deployment.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] != restartAt { - notRestartedError = nil - } - } - Expect(notRestartedError).ShouldNot(HaveOccurred()) + Eventually(func(g Gomega) { + err := k8sClient.Get(testCtx, client.ObjectKey{Name: deploymentName, Namespace: testNamespace}, deployment) + g.Expect(err).To(BeNil()) + g.Expect(deployment).To(Not(BeNil())) + g.Expect(deployment.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"]).NotTo(BeEquivalentTo(restartAt)) + }, "30s").Should(Succeed()) }) }) diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 6bbba1755..6c697a69e 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -26,7 +26,7 @@ import ( corev1alpha2 "github.com/open-feature/open-feature-operator/apis/core/v1alpha2" corev1alpha3 "github.com/open-feature/open-feature-operator/apis/core/v1alpha3" - . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" appsV1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/runtime" @@ -34,7 +34,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" - "sigs.k8s.io/controller-runtime/pkg/envtest/printer" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" //+kubebuilder:scaffold:imports @@ -50,11 +49,13 @@ var ( ) func TestAPIs(t *testing.T) { + if testing.Short() { + t.Skip() + } + RegisterFailHandler(Fail) - RunSpecsWithDefaultAndCustomReporters(t, - "Controller Suite", - []Reporter{printer.NewlineReporter{}}) + RunSpecs(t, "Controller Suite") } var _ = BeforeSuite(func() { @@ -121,7 +122,7 @@ var _ = BeforeSuite(func() { }() setup() -}, 60) +}) var _ = AfterSuite(func() { By("tearing down the test environment") diff --git a/go.mod b/go.mod index c7028f47e..9706c9094 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.19 require ( github.com/go-logr/logr v1.2.3 - github.com/onsi/ginkgo v1.16.5 - github.com/onsi/ginkgo/v2 v2.1.6 - github.com/onsi/gomega v1.20.1 + github.com/onsi/ginkgo/v2 v2.8.1 + github.com/onsi/gomega v1.27.1 github.com/open-feature/schemas v0.2.8 + github.com/stretchr/testify v1.8.0 github.com/xeipuuv/gojsonschema v1.2.0 go.uber.org/zap v1.24.0 k8s.io/api v0.25.4 @@ -41,7 +41,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.1.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/imdario/mergo v0.3.12 // indirect @@ -52,8 +52,8 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nxadm/tail v1.4.8 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.37.0 // indirect @@ -64,17 +64,16 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.8.0 // indirect golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect - golang.org/x/net v0.5.0 // indirect + golang.org/x/net v0.7.0 // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.4.0 // indirect - golang.org/x/term v0.4.0 // indirect - golang.org/x/text v0.6.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.25.1 // indirect @@ -86,3 +85,5 @@ require ( sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) + +replace golang.org/x/net => golang.org/x/net v0.7.0 diff --git a/go.sum b/go.sum index bfa985a4c..903b3e0b9 100644 --- a/go.sum +++ b/go.sum @@ -121,8 +121,6 @@ github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMi github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -153,7 +151,6 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -211,8 +208,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -245,7 +242,6 @@ github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= @@ -294,19 +290,12 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= -github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= -github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/ginkgo/v2 v2.8.1 h1:xFTEVwOFa1D/Ty24Ws1npBWkDYEV9BqZrsDxVrVkrrU= +github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= +github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754= +github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= github.com/open-feature/schemas v0.2.8 h1:oA75hJXpOd9SFgmNI2IAxWZkwzQPUDm7Jyyh3q489wM= github.com/open-feature/schemas v0.2.8/go.mod h1:vj+rfTsOLlh5PtGGkAbitnJmFPYuTHXTjOy13kzNgKQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -352,13 +341,16 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -370,6 +362,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -390,11 +383,9 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= @@ -434,52 +425,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -510,9 +458,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -523,10 +471,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -546,19 +491,14 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -571,17 +511,16 @@ golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -591,8 +530,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -644,7 +583,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -653,6 +591,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -815,11 +754,9 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 993bde887..f4d7f7d5d 100644 --- a/main.go +++ b/main.go @@ -220,10 +220,6 @@ func main() { setupLog.Error(err, "unable to create webhook", "webhook", "FeatureFlagConfiguration") os.Exit(1) } - if err := (&corev1alpha2.FeatureFlagConfiguration{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", "webhook", "FeatureFlagConfiguration") - os.Exit(1) - } if err = (&controllers.FlagSourceConfigurationReconciler{ Client: mgr.GetClient(), @@ -237,14 +233,6 @@ func main() { setupLog.Error(err, "unable to create webhook", "webhook", "FlagSourceConfiguration") os.Exit(1) } - if err := (&corev1alpha2.FlagSourceConfiguration{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", "webhook", "FlagSourceConfiguration") - os.Exit(1) - } - if err := (&corev1alpha3.FlagSourceConfiguration{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", "webhook", "FlagSourceConfiguration") - os.Exit(1) - } //+kubebuilder:scaffold:builder hookServer := mgr.GetWebhookServer() diff --git a/webhooks/featureflagconfiguration_webhook_test.go b/webhooks/featureflagconfiguration_webhook_test.go index cb91d946e..72233fc7c 100644 --- a/webhooks/featureflagconfiguration_webhook_test.go +++ b/webhooks/featureflagconfiguration_webhook_test.go @@ -1,10 +1,9 @@ package webhooks import ( - . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" corev1alpha1 "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" - corev1alpha2 "github.com/open-feature/open-feature-operator/apis/core/v1alpha2" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -55,31 +54,6 @@ var _ = Describe("featureflagconfiguration validation webhook", func() { featureflagconfigurationCleanup() }) - It("should convert corev1alpha2.featureflagconfiguration to corev1alpha1", func() { - ffConfig := &corev1alpha2.FeatureFlagConfiguration{} - ffConfig.Namespace = featureFlagConfigurationNamespace - ffConfig.Name = featureFlagConfigurationName - ffConfig.Spec.FeatureFlagSpec = corev1alpha2.FeatureFlagSpec{Flags: map[string]corev1alpha2.FlagSpec{ - "new-welcome-message": { - State: "ENABLED", - Variants: []byte(`{"on":true,"off":false}`), - DefaultVariant: "on", - }, - }} - - err := k8sClient.Create(testCtx, ffConfig) - Expect(err).ShouldNot(HaveOccurred()) - - ffConfigAlpha1 := &corev1alpha1.FeatureFlagConfiguration{} - err = k8sClient.Get(testCtx, client.ObjectKey{ - Name: featureFlagConfigurationName, - Namespace: featureFlagConfigurationNamespace, - }, ffConfigAlpha1) - Expect(err).ShouldNot(HaveOccurred()) - - featureflagconfigurationCleanup() - }) - It("should fail when featureflagspec contains invalid json", func() { ffConfig := &corev1alpha1.FeatureFlagConfiguration{} ffConfig.Namespace = featureFlagConfigurationNamespace diff --git a/webhooks/pod_webhook_test.go b/webhooks/pod_webhook_test.go index 28d080ea7..9a612f6e6 100644 --- a/webhooks/pod_webhook_test.go +++ b/webhooks/pod_webhook_test.go @@ -7,7 +7,7 @@ import ( "reflect" "time" - . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" v1alpha1 "github.com/open-feature/open-feature-operator/apis/core/v1alpha1" corev1 "k8s.io/api/core/v1" diff --git a/webhooks/suite_test.go b/webhooks/suite_test.go index 88086c327..2e254d816 100644 --- a/webhooks/suite_test.go +++ b/webhooks/suite_test.go @@ -13,7 +13,7 @@ import ( corev1alpha2 "github.com/open-feature/open-feature-operator/apis/core/v1alpha2" corev1alpha3 "github.com/open-feature/open-feature-operator/apis/core/v1alpha3" - . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" admissionv1 "k8s.io/api/admissionregistration/v1" @@ -26,7 +26,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" - "sigs.k8s.io/controller-runtime/pkg/envtest/printer" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -51,12 +50,14 @@ const ( func strPtr(s string) *string { return &s } func TestAPIs(t *testing.T) { + if testing.Short() { + t.Skip() + } + RegisterFailHandler(Fail) SetDefaultEventuallyTimeout(time.Second * 15) - RunSpecsWithDefaultAndCustomReporters(t, - "Controller Suite", - []Reporter{printer.NewlineReporter{}}) + RunSpecs(t, "Controller Suite") } var _ = BeforeSuite(func() { @@ -188,15 +189,6 @@ var _ = BeforeSuite(func() { err = (&corev1alpha1.FlagSourceConfiguration{}).SetupWebhookWithManager(mgr) Expect(err).ToNot(HaveOccurred()) - err = (&corev1alpha2.FeatureFlagConfiguration{}).SetupWebhookWithManager(mgr) - Expect(err).ToNot(HaveOccurred()) - - err = (&corev1alpha2.FlagSourceConfiguration{}).SetupWebhookWithManager(mgr) - Expect(err).ToNot(HaveOccurred()) - - err = (&corev1alpha3.FlagSourceConfiguration{}).SetupWebhookWithManager(mgr) - Expect(err).ToNot(HaveOccurred()) - err = mgr.GetFieldIndexer().IndexField( context.Background(), &corev1.Pod{}, @@ -255,7 +247,7 @@ var _ = BeforeSuite(func() { setupMutatePodResources() setupValidateFeatureFlagConfigurationResources() -}, 60) +}) var _ = AfterSuite(func() { By("tearing down the test environment")