From 45307636e73aeaf49e034e53100cbff6cf2a2c58 Mon Sep 17 00:00:00 2001 From: Nesma Badr Date: Wed, 22 Jan 2025 14:53:05 +0100 Subject: [PATCH] fix: Fix the syncing of ModuleReleaseMeta Beta and Internal values when edited on the SKR Cluster (#2199) * Add E2E test * remove omit empty and replace it with optional * Fix linting * code review comments --- api/v1beta2/modulereleasemeta_types.go | 6 ++-- pkg/testutils/modulereleasemeta.go | 40 ++++++++++++++++++++++-- tests/e2e/modulereleasemeta_sync_test.go | 39 +++++++++++++++++++++++ 3 files changed, 81 insertions(+), 4 deletions(-) diff --git a/api/v1beta2/modulereleasemeta_types.go b/api/v1beta2/modulereleasemeta_types.go index a7828a7317..78917aa05a 100644 --- a/api/v1beta2/modulereleasemeta_types.go +++ b/api/v1beta2/modulereleasemeta_types.go @@ -33,12 +33,14 @@ type ModuleReleaseMetaSpec struct { Channels []ChannelVersionAssignment `json:"channels"` // Beta indicates if the module is in beta state. Beta modules are only available for beta Kymas. + // +optional // +kubebuilder:default:=false - Beta bool `json:"beta,omitempty"` + Beta bool `json:"beta"` // Internal indicates if the module is internal. Internal modules are only available for internal Kymas. + // +optional // +kubebuilder:default:=false - Internal bool `json:"internal,omitempty"` + Internal bool `json:"internal"` } // +kubebuilder:object:root=true diff --git a/pkg/testutils/modulereleasemeta.go b/pkg/testutils/modulereleasemeta.go index be4d837bea..0e2e808291 100644 --- a/pkg/testutils/modulereleasemeta.go +++ b/pkg/testutils/modulereleasemeta.go @@ -12,7 +12,11 @@ import ( "github.com/kyma-project/lifecycle-manager/pkg/util" ) -var ErrNotExpectedChannelVersion = errors.New("channel-version pair not found") +var ( + ErrNotExpectedChannelVersion = errors.New("channel-version pair not found") + ErrBetaValueNotCorrect = errors.New("beta value not correct") + ErrInternalValueNotCorrect = errors.New("internal value not correct") +) func UpdateChannelVersionInModuleReleaseMeta(ctx context.Context, clnt client.Client, moduleName, namespace, channel, version string, @@ -75,7 +79,9 @@ func SetModuleReleaseMetaBeta(ctx context.Context, beta bool, moduleName, namesp return nil } -func SetModuleReleaseMetaInternal(ctx context.Context, internal bool, moduleName, namespace string, clnt client.Client) error { +func SetModuleReleaseMetaInternal(ctx context.Context, internal bool, moduleName, namespace string, + clnt client.Client, +) error { mrm, err := GetModuleReleaseMeta(ctx, moduleName, namespace, clnt) if err != nil { return fmt.Errorf("failed to fetch modulereleasemeta, %w", err) @@ -147,3 +153,33 @@ func UpdateAllModuleReleaseMetaChannelVersions(ctx context.Context, client clien } return nil } + +func ModuleReleaseMetaBetaValueIsCorrect(ctx context.Context, client client.Client, namespace, name string, + expectedValue bool, +) error { + meta := &v1beta2.ModuleReleaseMeta{} + if err := client.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, meta); err != nil { + return err + } + + if meta.IsBeta() != expectedValue { + return ErrBetaValueNotCorrect + } + + return nil +} + +func ModuleReleaseMetaInternalValueIsCorrect(ctx context.Context, client client.Client, namespace, name string, + expectedValue bool, +) error { + meta := &v1beta2.ModuleReleaseMeta{} + if err := client.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, meta); err != nil { + return err + } + + if meta.IsInternal() != expectedValue { + return ErrInternalValueNotCorrect + } + + return nil +} diff --git a/tests/e2e/modulereleasemeta_sync_test.go b/tests/e2e/modulereleasemeta_sync_test.go index b7bb9d3f25..7f3c84862e 100644 --- a/tests/e2e/modulereleasemeta_sync_test.go +++ b/tests/e2e/modulereleasemeta_sync_test.go @@ -59,6 +59,45 @@ var _ = Describe("ModuleReleaseMeta Sync", Ordered, func() { WithContext(ctx). WithArguments(module.Name, RemoteNamespace, v1beta2.DefaultChannel, v1Version, skrClient). Should(Succeed()) + + By("And the ModuleReleaseMeta has the correct beta and internal values on the SKR Cluster") + Eventually(ModuleReleaseMetaBetaValueIsCorrect). + WithContext(ctx). + WithArguments(skrClient, RemoteNamespace, module.Name, false). + Should(Succeed()) + + Eventually(ModuleReleaseMetaInternalValueIsCorrect). + WithContext(ctx). + WithArguments(skrClient, RemoteNamespace, module.Name, false). + Should(Succeed()) + }) + + It("When Beta value is set to true on the SKR Cluster", func() { + Eventually(SetModuleReleaseMetaBeta). + WithContext(ctx). + WithArguments(true, module.Name, RemoteNamespace, skrClient). + Should(Succeed()) + }) + + It("Then Beta value is reverted back to its value from the KCP Cluster", func() { + Eventually(ModuleReleaseMetaBetaValueIsCorrect). + WithContext(ctx). + WithArguments(skrClient, RemoteNamespace, module.Name, false). + Should(Succeed()) + }) + + It("When Internal value is set to true on the SKR Cluster", func() { + Eventually(SetModuleReleaseMetaInternal). + WithContext(ctx). + WithArguments(true, module.Name, RemoteNamespace, skrClient). + Should(Succeed()) + }) + + It("Then Internal value is reverted back to its value from the KCP Cluster", func() { + Eventually(ModuleReleaseMetaInternalValueIsCorrect). + WithContext(ctx). + WithArguments(skrClient, RemoteNamespace, module.Name, false). + Should(Succeed()) }) It("When the ModuleReleaseMeta is set to beta", func() {