From ac00a37d0a09ce27378ad5d84d95d8257d01d621 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Mon, 13 Oct 2025 13:07:08 +0200 Subject: [PATCH 1/9] Add test that only one instance of Serverless is allowed --- tests/operator/main.go | 17 +++++++++++ tests/operator/serverless/create.go | 12 ++++++-- tests/operator/serverless/delete.go | 7 ++++- tests/operator/serverless/verify.go | 44 ++++++++++++++++++++++++----- tests/operator/utils/types.go | 1 + 5 files changed, 70 insertions(+), 11 deletions(-) diff --git a/tests/operator/main.go b/tests/operator/main.go index 68cbf5fdc..06a5004ae 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -81,6 +81,7 @@ func main() { Logger: log, ServerlessName: "default-test", + SecondServerlessName: "default-test-two", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessConfigName: "serverless-config", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ @@ -122,6 +123,22 @@ func runScenario(testutil *utils.TestUtils) error { return err } + // create second Serverless + testutil.Logger.Infof("Creating second serverless '%s'", testutil.SecondServerlessName) + if err := serverless.CreateSecond(testutil); err != nil { + return err + } + + // verify second Serverless won't create + testutil.Logger.Infof("Verifying second serverless '%s' won't create", testutil.SecondServerlessName) + if err := utils.WithRetry(testutil, serverless.VerifyStuck); err != nil { + return err + } + testutil.Logger.Infof("Deleting second serverless '%s'", testutil.SecondServerlessName) + if err := serverless.DeleteSecond(testutil); err != nil { + return err + } + // update serverless with other spec testutil.Logger.Infof("Updating serverless '%s'", testutil.ServerlessName) if err := serverless.Update(testutil); err != nil { diff --git a/tests/operator/serverless/create.go b/tests/operator/serverless/create.go index 48805c179..e9681ef38 100644 --- a/tests/operator/serverless/create.go +++ b/tests/operator/serverless/create.go @@ -7,12 +7,18 @@ import ( ) func Create(utils *utils.TestUtils) error { - serverlessObj := fixServerless(utils) + serverlessObj := fixServerless(utils, utils.ServerlessName) return utils.Client.Create(utils.Ctx, serverlessObj) } -func fixServerless(testUtils *utils.TestUtils) *v1alpha1.Serverless { +func CreateSecond(utils *utils.TestUtils) error { + serverlessObj := fixServerless(utils, utils.SecondServerlessName) + + return utils.Client.Create(utils.Ctx, serverlessObj) +} + +func fixServerless(testUtils *utils.TestUtils, name string) *v1alpha1.Serverless { annotations := map[string]string{} if testUtils.LegacyMode { annotations["serverless.kyma-project.io/buildless-mode"] = "disabled" @@ -20,7 +26,7 @@ func fixServerless(testUtils *utils.TestUtils) *v1alpha1.Serverless { return &v1alpha1.Serverless{ ObjectMeta: v1.ObjectMeta{ - Name: testUtils.ServerlessName, + Name: name, Namespace: testUtils.Namespace, Annotations: annotations, }, diff --git a/tests/operator/serverless/delete.go b/tests/operator/serverless/delete.go index d4cc1c6a7..03e6155f5 100644 --- a/tests/operator/serverless/delete.go +++ b/tests/operator/serverless/delete.go @@ -3,7 +3,12 @@ package serverless import "github.com/kyma-project/serverless/tests/operator/utils" func Delete(utils *utils.TestUtils) error { - serverless := fixServerless(utils) + serverless := fixServerless(utils, utils.ServerlessName) + + return utils.Client.Delete(utils.Ctx, serverless) +} +func DeleteSecond(utils *utils.TestUtils) error { + serverless := fixServerless(utils, utils.SecondServerlessName) return utils.Client.Delete(utils.Ctx, serverless) } diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index 751035544..aa0479f4a 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -24,13 +24,8 @@ func VerifyDeletion(utils *utils.TestUtils) error { } func Verify(utils *utils.TestUtils) error { - var serverless v1alpha1.Serverless - objectKey := client.ObjectKey{ - Name: utils.ServerlessName, - Namespace: utils.Namespace, - } - - if err := utils.Client.Get(utils.Ctx, objectKey, &serverless); err != nil { + serverless, err := getServerless(utils, utils.ServerlessName) + if err != nil { return err } @@ -49,6 +44,33 @@ func Verify(utils *utils.TestUtils) error { return configmap.VerifyServerlessConfigmap(utils, &serverless) } +func VerifyStuck(utils *utils.TestUtils) error { + serverless, err := getServerless(utils, utils.ServerlessName) + if err != nil { + return err + } + + if err := verifyStateStuck(utils, &serverless); err != nil { + return err + } + + return nil +} + +func getServerless(utils *utils.TestUtils, name string) (v1alpha1.Serverless, error) { + var serverless v1alpha1.Serverless + objectKey := client.ObjectKey{ + Name: name, + Namespace: utils.Namespace, + } + + if err := utils.Client.Get(utils.Ctx, objectKey, &serverless); err != nil { + return v1alpha1.Serverless{}, err + } + + return serverless, nil +} + // check if all data from the spec is reflected in the status func verifyStatus(serverless *v1alpha1.Serverless, legacy bool) error { status := serverless.Status @@ -145,3 +167,11 @@ func verifyState(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error return nil } + +func verifyStateStuck(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error { + if serverless.Status.State != v1alpha1.StateWarning { + return fmt.Errorf("serverless '%s' in '%s' state", utils.SecondServerlessName, serverless.Status.State) + } + + return nil +} diff --git a/tests/operator/utils/types.go b/tests/operator/utils/types.go index c12b42846..aec53c1d7 100644 --- a/tests/operator/utils/types.go +++ b/tests/operator/utils/types.go @@ -15,6 +15,7 @@ type TestUtils struct { Namespace string ServerlessName string + SecondServerlessName string ServerlessCtrlDeployName string ServerlessConfigName string ServerlessRegistryName string From 502dc52d3b36b3d05b7126c838c2af09d9ae6203 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Mon, 13 Oct 2025 16:11:55 +0200 Subject: [PATCH 2/9] Add test that Serverless CR won't be deleted due to existing function --- tests/operator/function/create.go | 36 +++++++++++++++++++++++++ tests/operator/function/delete.go | 1 + tests/operator/main.go | 19 +++++++++++++ tests/operator/serverless/verify.go | 41 ++++++++++++++++++++++++----- tests/operator/utils/types.go | 1 + 5 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 tests/operator/function/create.go create mode 100644 tests/operator/function/delete.go diff --git a/tests/operator/function/create.go b/tests/operator/function/create.go new file mode 100644 index 000000000..a8b81f048 --- /dev/null +++ b/tests/operator/function/create.go @@ -0,0 +1,36 @@ +package function + +import ( + "fmt" + "github.com/kyma-project/serverless/tests/operator/utils" + + serverlessv1alpha2 "github.com/kyma-project/serverless/components/serverless/pkg/apis/serverless/v1alpha2" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func Create(utils *utils.TestUtils) error { + function := &serverlessv1alpha2.Function{ + ObjectMeta: metav1.ObjectMeta{ + Name: utils.FunctionName, + Namespace: utils.Namespace, + }, + Spec: serverlessv1alpha2.FunctionSpec{ + Runtime: serverlessv1alpha2.NodeJs20, + Source: serverlessv1alpha2.Source{ + Inline: &serverlessv1alpha2.InlineSource{ + Source: `module.exports = { + main: function(event, context) { + return "Hello World"; + } + }`, + }, + }, + }, + } + + if err := utils.Client.Create(utils.Ctx, function); err != nil { + return fmt.Errorf("failed to create function: %w", err) + } + + return nil +} diff --git a/tests/operator/function/delete.go b/tests/operator/function/delete.go new file mode 100644 index 000000000..37a2bd709 --- /dev/null +++ b/tests/operator/function/delete.go @@ -0,0 +1 @@ +package function diff --git a/tests/operator/main.go b/tests/operator/main.go index 06a5004ae..3015e08b4 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "github.com/kyma-project/serverless/tests/operator/function" "os" "time" @@ -44,6 +45,8 @@ func main() { Logger: log, ServerlessName: "legacy-test", + SecondServerlessName: "default-test-two", + FunctionName: "function-name", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessRegistryName: "serverless-docker-registry", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ @@ -82,6 +85,7 @@ func main() { ServerlessName: "default-test", SecondServerlessName: "default-test-two", + FunctionName: "function-name", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessConfigName: "serverless-config", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ @@ -139,6 +143,12 @@ func runScenario(testutil *utils.TestUtils) error { return err } + // create function + testutil.Logger.Infof("Creating function in namespace '%s'", testutil.Namespace) + if err := function.Create(testutil); err != nil { + return err + } + // update serverless with other spec testutil.Logger.Infof("Updating serverless '%s'", testutil.ServerlessName) if err := serverless.Update(testutil); err != nil { @@ -151,6 +161,15 @@ func runScenario(testutil *utils.TestUtils) error { return err } + // verify Severless won't delete with function depending on it + testutil.Logger.Infof("Verifying serverless '%s' deletion is stuck", testutil.ServerlessName) + if err := serverless.Delete(testutil); err != nil { + return err + } + if err := utils.WithRetry(testutil, serverless.VerifyDeletionStuck); err != nil { + return err + } + // delete Serverless testutil.Logger.Infof("Deleting serverless '%s'", testutil.ServerlessName) if err := serverless.Delete(testutil); err != nil { diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index aa0479f4a..2c1c0cd43 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -2,6 +2,7 @@ package serverless import ( "fmt" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/kyma-project/serverless/components/operator/api/v1alpha1" "github.com/kyma-project/serverless/tests/operator/serverless/configmap" @@ -50,13 +51,22 @@ func VerifyStuck(utils *utils.TestUtils) error { return err } - if err := verifyStateStuck(utils, &serverless); err != nil { + if err := verifyStateStuck(&serverless); err != nil { return err } return nil } +func VerifyDeletionStuck(utils *utils.TestUtils) error { + serverless, err := getServerless(utils, utils.SecondServerlessName) + if err != nil { + return err + } + + return verifyDeletionStuck(&serverless) +} + func getServerless(utils *utils.TestUtils, name string) (v1alpha1.Serverless, error) { var serverless v1alpha1.Serverless objectKey := client.ObjectKey{ @@ -164,14 +174,33 @@ func verifyState(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error if serverless.Status.State != v1alpha1.StateReady { return fmt.Errorf("serverless '%s' in '%s' state", utils.ServerlessName, serverless.Status.State) } - return nil } -func verifyStateStuck(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error { - if serverless.Status.State != v1alpha1.StateWarning { - return fmt.Errorf("serverless '%s' in '%s' state", utils.SecondServerlessName, serverless.Status.State) +func verifyStateStuck(serverless *v1alpha1.Serverless) error { + for _, condition := range serverless.Status.Conditions { + if condition.Type == string(v1alpha1.ConditionTypeConfigured) { + if condition.Reason == string(v1alpha1.ConditionReasonServerlessDuplicated) && + condition.Status == metav1.ConditionFalse && + condition.Message == fmt.Sprintf("only one instance of Serverless is allowed (current served instance:\n kyma-system/default) - this Serverless CR is redundant - remove it to fix the\n problem") { + return nil + } + return fmt.Errorf("ConditionConfigured is not in expected state: %v", condition) + } } + return fmt.Errorf("ConditionConfigured not found") +} - return nil +func verifyDeletionStuck(serverless *v1alpha1.Serverless) error { + for _, condition := range serverless.Status.Conditions { + if condition.Type == string(v1alpha1.ConditionTypeDeleted) { + if condition.Reason == string(v1alpha1.ConditionReasonDeletionErr) && + condition.Status == metav1.ConditionFalse && + condition.Message == "found 1 items with VersionKind serverless.kyma-project.io/v1alpha2" { + return nil + } + return fmt.Errorf("ConditionDeleted is not in expected state: %v", condition) + } + } + return fmt.Errorf("ConditionDeleted not found") } diff --git a/tests/operator/utils/types.go b/tests/operator/utils/types.go index aec53c1d7..10fb04fb4 100644 --- a/tests/operator/utils/types.go +++ b/tests/operator/utils/types.go @@ -16,6 +16,7 @@ type TestUtils struct { Namespace string ServerlessName string SecondServerlessName string + FunctionName string ServerlessCtrlDeployName string ServerlessConfigName string ServerlessRegistryName string From c1b522516c029d4df6cb71e3caf7263e0459ea48 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Tue, 14 Oct 2025 15:12:05 +0200 Subject: [PATCH 3/9] Add deleting func --- tests/operator/function/create.go | 17 ++++++++++------- tests/operator/function/delete.go | 7 +++++++ tests/operator/main.go | 4 ++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/tests/operator/function/create.go b/tests/operator/function/create.go index a8b81f048..8a30278e0 100644 --- a/tests/operator/function/create.go +++ b/tests/operator/function/create.go @@ -9,7 +9,16 @@ import ( ) func Create(utils *utils.TestUtils) error { - function := &serverlessv1alpha2.Function{ + function := getFunction(utils) + if err := utils.Client.Create(utils.Ctx, function); err != nil { + return fmt.Errorf("failed to create function: %w", err) + } + + return nil +} + +func getFunction(utils *utils.TestUtils) *serverlessv1alpha2.Function { + return &serverlessv1alpha2.Function{ ObjectMeta: metav1.ObjectMeta{ Name: utils.FunctionName, Namespace: utils.Namespace, @@ -27,10 +36,4 @@ func Create(utils *utils.TestUtils) error { }, }, } - - if err := utils.Client.Create(utils.Ctx, function); err != nil { - return fmt.Errorf("failed to create function: %w", err) - } - - return nil } diff --git a/tests/operator/function/delete.go b/tests/operator/function/delete.go index 37a2bd709..f09e19b30 100644 --- a/tests/operator/function/delete.go +++ b/tests/operator/function/delete.go @@ -1 +1,8 @@ package function + +import "github.com/kyma-project/serverless/tests/operator/utils" + +func Delete(utils *utils.TestUtils) error { + function := getFunction(utils) + return utils.Client.Delete(utils.Ctx, function) +} diff --git a/tests/operator/main.go b/tests/operator/main.go index 3015e08b4..dcde9db68 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -169,6 +169,10 @@ func runScenario(testutil *utils.TestUtils) error { if err := utils.WithRetry(testutil, serverless.VerifyDeletionStuck); err != nil { return err } + testutil.Logger.Infof("Deleting function '%s'", testutil.FunctionName) + if err := function.Delete(testutil); err != nil { + return err + } // delete Serverless testutil.Logger.Infof("Deleting serverless '%s'", testutil.ServerlessName) From 91f8e6441d62f6766525cb5c75b1b4595a59c162 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Tue, 14 Oct 2025 15:18:04 +0200 Subject: [PATCH 4/9] Fix tests --- tests/operator/serverless/verify.go | 10 +++++----- tests/operator/utils/client.go | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index 2c1c0cd43..7b26a4b7d 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -46,12 +46,12 @@ func Verify(utils *utils.TestUtils) error { } func VerifyStuck(utils *utils.TestUtils) error { - serverless, err := getServerless(utils, utils.ServerlessName) + serverless, err := getServerless(utils, utils.SecondServerlessName) if err != nil { return err } - if err := verifyStateStuck(&serverless); err != nil { + if err := verifyStateStuck(utils, &serverless); err != nil { return err } @@ -59,7 +59,7 @@ func VerifyStuck(utils *utils.TestUtils) error { } func VerifyDeletionStuck(utils *utils.TestUtils) error { - serverless, err := getServerless(utils, utils.SecondServerlessName) + serverless, err := getServerless(utils, utils.ServerlessName) if err != nil { return err } @@ -177,12 +177,12 @@ func verifyState(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error return nil } -func verifyStateStuck(serverless *v1alpha1.Serverless) error { +func verifyStateStuck(utils *utils.TestUtils, serverless *v1alpha1.Serverless) error { for _, condition := range serverless.Status.Conditions { if condition.Type == string(v1alpha1.ConditionTypeConfigured) { if condition.Reason == string(v1alpha1.ConditionReasonServerlessDuplicated) && condition.Status == metav1.ConditionFalse && - condition.Message == fmt.Sprintf("only one instance of Serverless is allowed (current served instance:\n kyma-system/default) - this Serverless CR is redundant - remove it to fix the\n problem") { + condition.Message == fmt.Sprintf("only one instance of Serverless is allowed (current served instance: %s/%s) - this Serverless CR is redundant - remove it to fix the problem", utils.Namespace, utils.ServerlessName) { return nil } return fmt.Errorf("ConditionConfigured is not in expected state: %v", condition) diff --git a/tests/operator/utils/client.go b/tests/operator/utils/client.go index 5406df785..126349bda 100644 --- a/tests/operator/utils/client.go +++ b/tests/operator/utils/client.go @@ -7,6 +7,7 @@ import ( "path/filepath" serverlessv1alpha1 "github.com/kyma-project/serverless/components/operator/api/v1alpha1" + serverlessv1alpha2 "github.com/kyma-project/serverless/components/serverless/pkg/apis/serverless/v1alpha2" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -25,6 +26,11 @@ func GetKuberentesClient() (client.Client, error) { return nil, err } + err = serverlessv1alpha2.AddToScheme(scheme.Scheme) + if err != nil { + return nil, err + } + return client.New(config, client.Options{Scheme: scheme.Scheme}) } From 5d5fad346396fa0074f6cbdadf1e809313ea5d21 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Wed, 15 Oct 2025 20:04:08 +0200 Subject: [PATCH 5/9] Add verify of serverless config map --- tests/operator/main.go | 8 ++++++++ tests/operator/serverless/verify.go | 11 +++++++++++ tests/operator/utils/types.go | 1 + 3 files changed, 20 insertions(+) diff --git a/tests/operator/main.go b/tests/operator/main.go index dcde9db68..fe582ecc4 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -47,6 +47,7 @@ func main() { ServerlessName: "legacy-test", SecondServerlessName: "default-test-two", FunctionName: "function-name", + ServerlessConfigMapName: "serverless-config", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessRegistryName: "serverless-docker-registry", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ @@ -86,6 +87,7 @@ func main() { ServerlessName: "default-test", SecondServerlessName: "default-test-two", FunctionName: "function-name", + ServerlessConfigMapName: "serverless-config", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessConfigName: "serverless-config", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ @@ -127,6 +129,12 @@ func runScenario(testutil *utils.TestUtils) error { return err } + // verify Serverless config map + testutil.Logger.Infof("Verifying serverless '%s' config map '%s'", testutil.ServerlessName, testutil.ServerlessConfigMapName) + if err := utils.WithRetry(testutil, serverless.VerifyConfig); err != nil { + return err + } + // create second Serverless testutil.Logger.Infof("Creating second serverless '%s'", testutil.SecondServerlessName) if err := serverless.CreateSecond(testutil); err != nil { diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index 7b26a4b7d..e84a40d5b 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -2,6 +2,7 @@ package serverless import ( "fmt" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/kyma-project/serverless/components/operator/api/v1alpha1" @@ -45,6 +46,16 @@ func Verify(utils *utils.TestUtils) error { return configmap.VerifyServerlessConfigmap(utils, &serverless) } +func VerifyConfig(utils *utils.TestUtils) error { + configMap := &corev1.ConfigMap{} + objectKey := client.ObjectKey{ + Name: "serverless-config", + Namespace: utils.Namespace, + } + err := utils.Client.Get(utils.Ctx, objectKey, configMap) + return err +} + func VerifyStuck(utils *utils.TestUtils) error { serverless, err := getServerless(utils, utils.SecondServerlessName) if err != nil { diff --git a/tests/operator/utils/types.go b/tests/operator/utils/types.go index 10fb04fb4..b76508b3e 100644 --- a/tests/operator/utils/types.go +++ b/tests/operator/utils/types.go @@ -20,6 +20,7 @@ type TestUtils struct { ServerlessCtrlDeployName string ServerlessConfigName string ServerlessRegistryName string + ServerlessConfigMapName string ServerlessUpdateSpec v1alpha1.ServerlessSpec LegacyMode bool } From 1e46230122ad28760b2c5ca1769fd52bfcc6e971 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Wed, 15 Oct 2025 20:39:38 +0200 Subject: [PATCH 6/9] Adjust configMap name for legacy --- tests/operator/main.go | 2 +- tests/operator/serverless/verify.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/operator/main.go b/tests/operator/main.go index fe582ecc4..bec99fd49 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -47,7 +47,7 @@ func main() { ServerlessName: "legacy-test", SecondServerlessName: "default-test-two", FunctionName: "function-name", - ServerlessConfigMapName: "serverless-config", + ServerlessConfigMapName: "serverless-configuration", ServerlessCtrlDeployName: "serverless-ctrl-mngr", ServerlessRegistryName: "serverless-docker-registry", ServerlessUpdateSpec: v1alpha1.ServerlessSpec{ diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index e84a40d5b..c17814ac2 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -49,7 +49,7 @@ func Verify(utils *utils.TestUtils) error { func VerifyConfig(utils *utils.TestUtils) error { configMap := &corev1.ConfigMap{} objectKey := client.ObjectKey{ - Name: "serverless-config", + Name: utils.ServerlessConfigMapName, Namespace: utils.Namespace, } err := utils.Client.Get(utils.Ctx, objectKey, configMap) From 28ee194aed2ea2024cf75ab7244dce8c06975daf Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Thu, 16 Oct 2025 14:24:15 +0200 Subject: [PATCH 7/9] Add verify if second CR becomes served --- tests/operator/main.go | 26 +++++++++++++++------ tests/operator/serverless/update.go | 2 +- tests/operator/serverless/verify.go | 35 ++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/tests/operator/main.go b/tests/operator/main.go index bec99fd49..bfd051127 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -146,8 +146,20 @@ func runScenario(testutil *utils.TestUtils) error { if err := utils.WithRetry(testutil, serverless.VerifyStuck); err != nil { return err } - testutil.Logger.Infof("Deleting second serverless '%s'", testutil.SecondServerlessName) - if err := serverless.DeleteSecond(testutil); err != nil { + + // delete served Serverless + testutil.Logger.Infof("Deleting served serverless '%s'", testutil.ServerlessName) + if err := serverless.Delete(testutil); err != nil { + return err + } + testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.ServerlessName) + if err := utils.WithRetry(testutil, serverless.VerifyDeletion); err != nil { + return err + } + + // verify second Serverless becomes served + testutil.Logger.Infof("Verifying second serverless '%s' becomes served", testutil.SecondServerlessName) + if err := utils.WithRetry(testutil, serverless.VerifySecond); err != nil { return err } @@ -158,14 +170,14 @@ func runScenario(testutil *utils.TestUtils) error { } // update serverless with other spec - testutil.Logger.Infof("Updating serverless '%s'", testutil.ServerlessName) + testutil.Logger.Infof("Updating serverless '%s'", testutil.SecondServerlessName) if err := serverless.Update(testutil); err != nil { return err } // verify Serverless - testutil.Logger.Infof("Verifying serverless '%s'", testutil.ServerlessName) - if err := utils.WithRetry(testutil, serverless.Verify); err != nil { + testutil.Logger.Infof("Verifying serverless '%s'", testutil.SecondServerlessName) + if err := utils.WithRetry(testutil, serverless.VerifySecond); err != nil { return err } @@ -184,13 +196,13 @@ func runScenario(testutil *utils.TestUtils) error { // delete Serverless testutil.Logger.Infof("Deleting serverless '%s'", testutil.ServerlessName) - if err := serverless.Delete(testutil); err != nil { + if err := serverless.DeleteSecond(testutil); err != nil { return err } // verify Serverless deletion testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.ServerlessName) - if err := utils.WithRetry(testutil, serverless.VerifyDeletion); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyDeletionSecond); err != nil { return err } diff --git a/tests/operator/serverless/update.go b/tests/operator/serverless/update.go index a502e51e8..c76d6898a 100644 --- a/tests/operator/serverless/update.go +++ b/tests/operator/serverless/update.go @@ -9,7 +9,7 @@ import ( func Update(testutils *utils.TestUtils) error { var serverless v1alpha1.Serverless objectKey := client.ObjectKey{ - Name: testutils.ServerlessName, + Name: testutils.SecondServerlessName, Namespace: testutils.Namespace, } diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index c17814ac2..7d45f3e6c 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -25,6 +25,18 @@ func VerifyDeletion(utils *utils.TestUtils) error { return nil } +func VerifyDeletionSecond(utils *utils.TestUtils) error { + err := Verify(utils) + if err == nil { + return fmt.Errorf("serverless '%s' still exists", utils.SecondServerlessName) + } + if !errors.IsNotFound(err) { + return err + } + + return nil +} + func Verify(utils *utils.TestUtils) error { serverless, err := getServerless(utils, utils.ServerlessName) if err != nil { @@ -46,6 +58,27 @@ func Verify(utils *utils.TestUtils) error { return configmap.VerifyServerlessConfigmap(utils, &serverless) } +func VerifySecond(utils *utils.TestUtils) error { + serverless, err := getServerless(utils, utils.SecondServerlessName) + if err != nil { + return err + } + + if err := verifyState(utils, &serverless); err != nil { + return err + } + + if err := verifyStatus(&serverless, utils.LegacyMode); err != nil { + return err + } + + if utils.LegacyMode { + return deployment.VerifyCtrlMngrEnvs(utils, &serverless) + } + + return configmap.VerifyServerlessConfigmap(utils, &serverless) +} + func VerifyConfig(utils *utils.TestUtils) error { configMap := &corev1.ConfigMap{} objectKey := client.ObjectKey{ @@ -70,7 +103,7 @@ func VerifyStuck(utils *utils.TestUtils) error { } func VerifyDeletionStuck(utils *utils.TestUtils) error { - serverless, err := getServerless(utils, utils.ServerlessName) + serverless, err := getServerless(utils, utils.SecondServerlessName) if err != nil { return err } From 071b97b65c4af05a9fcbc0316caadba08a54bb11 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Thu, 16 Oct 2025 14:27:52 +0200 Subject: [PATCH 8/9] Rename funcs to Old and New instead of Second --- tests/operator/main.go | 16 ++++++++-------- tests/operator/serverless/delete.go | 4 ++-- tests/operator/serverless/verify.go | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/operator/main.go b/tests/operator/main.go index bfd051127..520de9b40 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -125,7 +125,7 @@ func runScenario(testutil *utils.TestUtils) error { // verify Serverless testutil.Logger.Infof("Verifying serverless '%s'", testutil.ServerlessName) - if err := utils.WithRetry(testutil, serverless.Verify); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyOld); err != nil { return err } @@ -149,17 +149,17 @@ func runScenario(testutil *utils.TestUtils) error { // delete served Serverless testutil.Logger.Infof("Deleting served serverless '%s'", testutil.ServerlessName) - if err := serverless.Delete(testutil); err != nil { + if err := serverless.DeleteOld(testutil); err != nil { return err } testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.ServerlessName) - if err := utils.WithRetry(testutil, serverless.VerifyDeletion); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyDeletionOld); err != nil { return err } // verify second Serverless becomes served testutil.Logger.Infof("Verifying second serverless '%s' becomes served", testutil.SecondServerlessName) - if err := utils.WithRetry(testutil, serverless.VerifySecond); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyNew); err != nil { return err } @@ -177,13 +177,13 @@ func runScenario(testutil *utils.TestUtils) error { // verify Serverless testutil.Logger.Infof("Verifying serverless '%s'", testutil.SecondServerlessName) - if err := utils.WithRetry(testutil, serverless.VerifySecond); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyNew); err != nil { return err } // verify Severless won't delete with function depending on it testutil.Logger.Infof("Verifying serverless '%s' deletion is stuck", testutil.ServerlessName) - if err := serverless.Delete(testutil); err != nil { + if err := serverless.DeleteOld(testutil); err != nil { return err } if err := utils.WithRetry(testutil, serverless.VerifyDeletionStuck); err != nil { @@ -196,13 +196,13 @@ func runScenario(testutil *utils.TestUtils) error { // delete Serverless testutil.Logger.Infof("Deleting serverless '%s'", testutil.ServerlessName) - if err := serverless.DeleteSecond(testutil); err != nil { + if err := serverless.DeleteNew(testutil); err != nil { return err } // verify Serverless deletion testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.ServerlessName) - if err := utils.WithRetry(testutil, serverless.VerifyDeletionSecond); err != nil { + if err := utils.WithRetry(testutil, serverless.VerifyDeletionNew); err != nil { return err } diff --git a/tests/operator/serverless/delete.go b/tests/operator/serverless/delete.go index 03e6155f5..47e2ff525 100644 --- a/tests/operator/serverless/delete.go +++ b/tests/operator/serverless/delete.go @@ -2,12 +2,12 @@ package serverless import "github.com/kyma-project/serverless/tests/operator/utils" -func Delete(utils *utils.TestUtils) error { +func DeleteOld(utils *utils.TestUtils) error { serverless := fixServerless(utils, utils.ServerlessName) return utils.Client.Delete(utils.Ctx, serverless) } -func DeleteSecond(utils *utils.TestUtils) error { +func DeleteNew(utils *utils.TestUtils) error { serverless := fixServerless(utils, utils.SecondServerlessName) return utils.Client.Delete(utils.Ctx, serverless) diff --git a/tests/operator/serverless/verify.go b/tests/operator/serverless/verify.go index 7d45f3e6c..9b8e926ff 100644 --- a/tests/operator/serverless/verify.go +++ b/tests/operator/serverless/verify.go @@ -13,8 +13,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) -func VerifyDeletion(utils *utils.TestUtils) error { - err := Verify(utils) +func VerifyDeletionOld(utils *utils.TestUtils) error { + err := VerifyOld(utils) if err == nil { return fmt.Errorf("serverless '%s' still exists", utils.ServerlessName) } @@ -25,8 +25,8 @@ func VerifyDeletion(utils *utils.TestUtils) error { return nil } -func VerifyDeletionSecond(utils *utils.TestUtils) error { - err := Verify(utils) +func VerifyDeletionNew(utils *utils.TestUtils) error { + err := VerifyOld(utils) if err == nil { return fmt.Errorf("serverless '%s' still exists", utils.SecondServerlessName) } @@ -37,7 +37,7 @@ func VerifyDeletionSecond(utils *utils.TestUtils) error { return nil } -func Verify(utils *utils.TestUtils) error { +func VerifyOld(utils *utils.TestUtils) error { serverless, err := getServerless(utils, utils.ServerlessName) if err != nil { return err @@ -58,7 +58,7 @@ func Verify(utils *utils.TestUtils) error { return configmap.VerifyServerlessConfigmap(utils, &serverless) } -func VerifySecond(utils *utils.TestUtils) error { +func VerifyNew(utils *utils.TestUtils) error { serverless, err := getServerless(utils, utils.SecondServerlessName) if err != nil { return err From f170518d1ffe71e2d65fb8cd2f78c5b497de8f88 Mon Sep 17 00:00:00 2001 From: MichalKalke Date: Thu, 16 Oct 2025 15:10:06 +0200 Subject: [PATCH 9/9] Fix typos --- tests/operator/main.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/operator/main.go b/tests/operator/main.go index 520de9b40..4ff9b1c50 100644 --- a/tests/operator/main.go +++ b/tests/operator/main.go @@ -182,8 +182,8 @@ func runScenario(testutil *utils.TestUtils) error { } // verify Severless won't delete with function depending on it - testutil.Logger.Infof("Verifying serverless '%s' deletion is stuck", testutil.ServerlessName) - if err := serverless.DeleteOld(testutil); err != nil { + testutil.Logger.Infof("Verifying serverless '%s' deletion is stuck", testutil.SecondServerlessName) + if err := serverless.DeleteNew(testutil); err != nil { return err } if err := utils.WithRetry(testutil, serverless.VerifyDeletionStuck); err != nil { @@ -195,13 +195,13 @@ func runScenario(testutil *utils.TestUtils) error { } // delete Serverless - testutil.Logger.Infof("Deleting serverless '%s'", testutil.ServerlessName) + testutil.Logger.Infof("Deleting serverless '%s'", testutil.SecondServerlessName) if err := serverless.DeleteNew(testutil); err != nil { return err } // verify Serverless deletion - testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.ServerlessName) + testutil.Logger.Infof("Verifying serverless '%s' deletion", testutil.SecondServerlessName) if err := utils.WithRetry(testutil, serverless.VerifyDeletionNew); err != nil { return err }