From 6f1076a646789021d9fe94c881c1e95396308804 Mon Sep 17 00:00:00 2001 From: Peri M Date: Thu, 6 Jun 2024 11:47:28 +0200 Subject: [PATCH] ibu cnf: add 'rollback after a failed upgrade' test --- .../upgrade-talm/internal/tsparams/const.go | 7 + .../rollback-after-failed-upgrade-test.go | 129 ++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 tests/lca/imagebasedupgrade/cnf/upgrade-talm/tests/rollback-after-failed-upgrade-test.go diff --git a/tests/lca/imagebasedupgrade/cnf/upgrade-talm/internal/tsparams/const.go b/tests/lca/imagebasedupgrade/cnf/upgrade-talm/internal/tsparams/const.go index ab645f31d..57e223df7 100644 --- a/tests/lca/imagebasedupgrade/cnf/upgrade-talm/internal/tsparams/const.go +++ b/tests/lca/imagebasedupgrade/cnf/upgrade-talm/internal/tsparams/const.go @@ -9,6 +9,8 @@ const ( LabelPrepAbortFlow = "ibu-prep-abort" // LabelUpgradeAbortFlow represents upgrade-abort label that can be used for test cases selection. LabelUpgradeAbortFlow = "ibu-upgrade-abort" + // LabelRollbackFlow represents rollback label that can be used for test cases selection. + LabelRollbackFlow = "ibu-rollback" // IbuCguNamespace is the namespace where IBU CGUs created on target hub. IbuCguNamespace = "default" @@ -35,4 +37,9 @@ const ( // IbuPolicyNamespace is the namespace where IBU policies created on target hub. IbuPolicyNamespace = "ztp-group" + + // RollbackCguName is the name of rollback cgu. + RollbackCguName = "cgu-ibu-rollback" + // RollbackPolicyName is the name of managed policy for ibu rollback stage validation. + RollbackPolicyName = "group-ibu-rollback-stage-policy" ) diff --git a/tests/lca/imagebasedupgrade/cnf/upgrade-talm/tests/rollback-after-failed-upgrade-test.go b/tests/lca/imagebasedupgrade/cnf/upgrade-talm/tests/rollback-after-failed-upgrade-test.go new file mode 100644 index 000000000..623ebbd09 --- /dev/null +++ b/tests/lca/imagebasedupgrade/cnf/upgrade-talm/tests/rollback-after-failed-upgrade-test.go @@ -0,0 +1,129 @@ +package upgrade_test + +import ( + "time" + + "k8s.io/utils/ptr" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/openshift-kni/eco-goinfra/pkg/cgu" + "github.com/openshift-kni/eco-goinfra/pkg/ocm" + "github.com/openshift-kni/eco-goinfra/pkg/reportxml" + "github.com/openshift-kni/eco-gotests/tests/lca/imagebasedupgrade/cnf/internal/cnfclusterinfo" + "github.com/openshift-kni/eco-gotests/tests/lca/imagebasedupgrade/cnf/internal/cnfhelper" + "github.com/openshift-kni/eco-gotests/tests/lca/imagebasedupgrade/cnf/internal/cnfinittools" + "github.com/openshift-kni/eco-gotests/tests/lca/imagebasedupgrade/cnf/upgrade-talm/internal/tsparams" + + policiesv1 "open-cluster-management.io/governance-policy-propagator/api/v1" +) + +var _ = Describe( + "Validating rollback stage after a failed upgrade", + Label(tsparams.LabelRollbackFlow), func() { + + BeforeEach(func() { + By("Fetching target sno cluster name", func() { + err := cnfclusterinfo.PreUpgradeClusterInfo.SaveClusterInfo() + Expect(err).ToNot(HaveOccurred(), "Failed to extract target sno cluster name") + + tsparams.TargetSnoClusterName = cnfclusterinfo.PreUpgradeClusterInfo.Name + }) + }) + + AfterEach(func() { + // Deleting CGUs created for validating the test case. + By("Deleting pre-prep cgu created on target hub cluster", func() { + err := cnfhelper.DeleteIbuTestCguOnTargetHub(cnfinittools.TargetHubAPIClient, tsparams.PrePrepCguName, + tsparams.IbuCguNamespace) + Expect(err).ToNot(HaveOccurred(), "Failed to delete pre-prep cgu on target hub cluster") + }) + + By("Deleting prep cgu created on target hub cluster", func() { + err := cnfhelper.DeleteIbuTestCguOnTargetHub(cnfinittools.TargetHubAPIClient, tsparams.PrepCguName, + tsparams.IbuCguNamespace) + Expect(err).ToNot(HaveOccurred(), "Failed to delete prep cgu on target hub cluster") + }) + + By("Deleting upgrade cgu created on target hub cluster", func() { + err := cnfhelper.DeleteIbuTestCguOnTargetHub(cnfinittools.TargetHubAPIClient, tsparams.UpgradeCguName, + tsparams.IbuCguNamespace) + Expect(err).ToNot(HaveOccurred(), "Failed to delete upgrade cgu on target hub cluster") + }) + + By("Deleting rollback cgu created on target hub cluster", func() { + err := cnfhelper.DeleteIbuTestCguOnTargetHub(cnfinittools.TargetHubAPIClient, tsparams.RollbackCguName, + tsparams.IbuCguNamespace) + Expect(err).ToNot(HaveOccurred(), "Failed to delete rollback cgu on target hub cluster") + }) + }) + + It("Rollback after failed upgrade", reportxml.ID("69054"), func() { + By("Creating, enabling ibu pre-prep CGU and waiting for CGU status to report completed", func() { + prePrepCguBuilder := cgu.NewCguBuilder(cnfinittools.TargetHubAPIClient, + tsparams.PrePrepCguName, tsparams.IbuCguNamespace, 1). + WithCluster(tsparams.TargetSnoClusterName). + WithManagedPolicy(tsparams.PrePrepPolicyName). + WithCanary(tsparams.TargetSnoClusterName) + prePrepCguBuilder.Definition.Spec.Enable = ptr.To(true) + + prePrepCguBuilder, err := prePrepCguBuilder.Create() + Expect(err).ToNot(HaveOccurred(), "Failed to create pre-prep CGU.") + + _, err = prePrepCguBuilder.WaitUntilComplete(10 * time.Minute) + Expect(err).ToNot(HaveOccurred(), "Pre-prep CGU did not complete in time.") + }) + + By("Creating, enabling ibu prep CGU and waiting for CGU status to report completed", func() { + prepCguBuilder := cgu.NewCguBuilder(cnfinittools.TargetHubAPIClient, + tsparams.PrepCguName, tsparams.IbuCguNamespace, 1). + WithCluster(tsparams.TargetSnoClusterName). + WithManagedPolicy(tsparams.PrepPolicyName). + WithCanary(tsparams.TargetSnoClusterName) + prepCguBuilder.Definition.Spec.Enable = ptr.To(true) + + prepCguBuilder, err := prepCguBuilder.Create() + Expect(err).ToNot(HaveOccurred(), "Failed to create prep CGU.") + + _, err = prepCguBuilder.WaitUntilComplete(25 * time.Minute) + Expect(err).ToNot(HaveOccurred(), "Prep CGU did not complete in time.") + }) + + By("Creating, and enabling ibu upgrade CGU", func() { + upgradeCguBuilder := cgu.NewCguBuilder(cnfinittools.TargetHubAPIClient, + tsparams.UpgradeCguName, tsparams.IbuCguNamespace, 1). + WithCluster(tsparams.TargetSnoClusterName). + WithManagedPolicy(tsparams.UpgradePolicyName). + WithCanary(tsparams.TargetSnoClusterName) + upgradeCguBuilder.Definition.Spec.Enable = ptr.To(true) + + _, err := upgradeCguBuilder.Create() + Expect(err).ToNot(HaveOccurred(), "Failed to create upgrade CGU.") + }) + + By("Performing rollback after a failed upgrade", func() { + upgradeStagePolicyStatusCheck, err := ocm.PullPolicy(cnfinittools.TargetHubAPIClient, + tsparams.UpgradePolicyName, + tsparams.IbuPolicyNamespace) + Expect(err).ToNot(HaveOccurred(), "Failed to pull upgrade stage policy") + + err = upgradeStagePolicyStatusCheck.WaitUntilComplianceState(policiesv1.Compliant, 40*time.Minute) + Expect(err).To(HaveOccurred(), "Upgrade-stage-policy failed to report Compliant") + + By("Creating, enabling rollback CGU and waiting for CGU status to report completed", func() { + rollbackCguBuilder := cgu.NewCguBuilder(cnfinittools.TargetHubAPIClient, + tsparams.RollbackCguName, tsparams.IbuCguNamespace, 1). + WithCluster(tsparams.TargetSnoClusterName). + WithManagedPolicy(tsparams.RollbackPolicyName). + WithCanary(tsparams.TargetSnoClusterName) + rollbackCguBuilder.Definition.Spec.Enable = ptr.To(true) + + rollbackCguBuilder, err = rollbackCguBuilder.Create() + Expect(err).ToNot(HaveOccurred(), "Failed to create rollback CGU.") + + _, err = rollbackCguBuilder.WaitUntilComplete(40 * time.Minute) + Expect(err).ToNot(HaveOccurred(), "Rollback CGU did not complete in time.") + }) + }) + }) + })