From 394539bb349ed862cd3dc8fa95726ea9edf1e103 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 1 Dec 2021 10:01:30 +0100 Subject: [PATCH] test/e2e: deprecate KCPUpgradeSpec, make ClusterUpgradeConformanceSpec more flexible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- test/e2e/cluster_upgrade.go | 38 +++++++++++++----- test/e2e/cluster_upgrade_test.go | 55 ++++++++++++++++++++++++++ test/e2e/kcp_upgrade.go | 4 ++ test/e2e/kcp_upgrade_test.go | 67 -------------------------------- 4 files changed, 88 insertions(+), 76 deletions(-) delete mode 100644 test/e2e/kcp_upgrade_test.go diff --git a/test/e2e/cluster_upgrade.go b/test/e2e/cluster_upgrade.go index 34d0586a094d..70ba0194295c 100644 --- a/test/e2e/cluster_upgrade.go +++ b/test/e2e/cluster_upgrade.go @@ -41,6 +41,15 @@ type ClusterUpgradeConformanceSpecInput struct { SkipCleanup bool SkipConformanceTests bool + // ControlPlaneMachineCount is used in `config cluster` to configure the count of the control plane machines used in the test. + // Default is 1. + ControlPlaneMachineCount *int64 + // WorkerMachineCount is used in `config cluster` to configure the count of the worker machines used in the test. + // NOTE: If the WORKER_MACHINE_COUNT var is used multiple times in the cluster template, the absolute count of + // worker machines is a multiple of WorkerMachineCount. + // Default is 2. + WorkerMachineCount *int64 + // Flavor to use when creating the cluster for testing, "upgrades" is used if not specified. Flavor *string } @@ -57,9 +66,13 @@ func ClusterUpgradeConformanceSpec(ctx context.Context, inputGetter func() Clust specName = "k8s-upgrade-and-conformance" ) var ( - input ClusterUpgradeConformanceSpecInput - namespace *corev1.Namespace - cancelWatches context.CancelFunc + input ClusterUpgradeConformanceSpecInput + namespace *corev1.Namespace + cancelWatches context.CancelFunc + + controlPlaneMachineCount int64 + workerMachineCount int64 + clusterResources *clusterctl.ApplyClusterTemplateAndWaitResult kubetestConfigFilePath string ) @@ -81,6 +94,18 @@ func ClusterUpgradeConformanceSpec(ctx context.Context, inputGetter func() Clust kubetestConfigFilePath = input.E2EConfig.GetVariable(kubetestConfigurationVariable) Expect(kubetestConfigFilePath).To(BeAnExistingFile(), "%s should be a valid kubetest config file") + if input.ControlPlaneMachineCount == nil { + controlPlaneMachineCount = 1 + } else { + controlPlaneMachineCount = *input.ControlPlaneMachineCount + } + + if input.WorkerMachineCount == nil { + workerMachineCount = 2 + } else { + workerMachineCount = *input.WorkerMachineCount + } + // Setup a Namespace where to host objects for this spec and create a watcher for the Namespace events. namespace, cancelWatches = setupSpecNamespace(ctx, specName, input.BootstrapClusterProxy, input.ArtifactFolder) clusterResources = new(clusterctl.ApplyClusterTemplateAndWaitResult) @@ -89,11 +114,6 @@ func ClusterUpgradeConformanceSpec(ctx context.Context, inputGetter func() Clust It("Should create and upgrade a workload cluster and run kubetest", func() { By("Creating a workload cluster") - var controlPlaneMachineCount int64 = 1 - // clusterTemplateWorkerMachineCount is used for ConfigCluster, as it is used for MachineDeployments and - // MachinePools - var clusterTemplateWorkerMachineCount int64 = 2 - clusterctl.ApplyClusterTemplateAndWait(ctx, clusterctl.ApplyClusterTemplateAndWaitInput{ ClusterProxy: input.BootstrapClusterProxy, ConfigCluster: clusterctl.ConfigClusterInput{ @@ -106,7 +126,7 @@ func ClusterUpgradeConformanceSpec(ctx context.Context, inputGetter func() Clust ClusterName: fmt.Sprintf("%s-%s", specName, util.RandomString(6)), KubernetesVersion: input.E2EConfig.GetVariable(KubernetesVersionUpgradeFrom), ControlPlaneMachineCount: pointer.Int64Ptr(controlPlaneMachineCount), - WorkerMachineCount: pointer.Int64Ptr(clusterTemplateWorkerMachineCount), + WorkerMachineCount: pointer.Int64Ptr(workerMachineCount), }, WaitForClusterIntervals: input.E2EConfig.GetIntervals(specName, "wait-cluster"), WaitForControlPlaneIntervals: input.E2EConfig.GetIntervals(specName, "wait-control-plane"), diff --git a/test/e2e/cluster_upgrade_test.go b/test/e2e/cluster_upgrade_test.go index 94531ca15d60..85697e110125 100644 --- a/test/e2e/cluster_upgrade_test.go +++ b/test/e2e/cluster_upgrade_test.go @@ -22,6 +22,7 @@ package e2e import ( . "github.com/onsi/ginkgo" "k8s.io/utils/pointer" + "sigs.k8s.io/cluster-api/test/framework/clusterctl" ) var _ = Describe("When upgrading a workload cluster and testing K8S conformance [Conformance] [K8s-Upgrade]", func() { @@ -51,3 +52,57 @@ var _ = Describe("When upgrading a workload cluster using ClusterClass", func() } }) }) + +var _ = Describe("When testing KCP upgrade in a single control plane cluster", func() { + ClusterUpgradeConformanceSpec(ctx, func() ClusterUpgradeConformanceSpecInput { + return ClusterUpgradeConformanceSpecInput{ + E2EConfig: e2eConfig, + ClusterctlConfigPath: clusterctlConfigPath, + BootstrapClusterProxy: bootstrapClusterProxy, + ArtifactFolder: artifactFolder, + SkipCleanup: skipCleanup, + // This test is run in CI in parallel with other tests. To keep the test duration reasonable + // the conformance tests are skipped. + SkipConformanceTests: true, + ControlPlaneMachineCount: pointer.Int64(1), + WorkerMachineCount: pointer.Int64(1), + Flavor: pointer.String(clusterctl.DefaultFlavor), + } + }) +}) + +var _ = Describe("When testing KCP upgrade in a HA cluster", func() { + ClusterUpgradeConformanceSpec(ctx, func() ClusterUpgradeConformanceSpecInput { + return ClusterUpgradeConformanceSpecInput{ + E2EConfig: e2eConfig, + ClusterctlConfigPath: clusterctlConfigPath, + BootstrapClusterProxy: bootstrapClusterProxy, + ArtifactFolder: artifactFolder, + SkipCleanup: skipCleanup, + // This test is run in CI in parallel with other tests. To keep the test duration reasonable + // the conformance tests are skipped. + SkipConformanceTests: true, + ControlPlaneMachineCount: pointer.Int64(3), + WorkerMachineCount: pointer.Int64(1), + Flavor: pointer.String(clusterctl.DefaultFlavor), + } + }) +}) + +var _ = Describe("When testing KCP upgrade in a HA cluster using scale in rollout", func() { + ClusterUpgradeConformanceSpec(ctx, func() ClusterUpgradeConformanceSpecInput { + return ClusterUpgradeConformanceSpecInput{ + E2EConfig: e2eConfig, + ClusterctlConfigPath: clusterctlConfigPath, + BootstrapClusterProxy: bootstrapClusterProxy, + ArtifactFolder: artifactFolder, + SkipCleanup: skipCleanup, + // This test is run in CI in parallel with other tests. To keep the test duration reasonable + // the conformance tests are skipped. + SkipConformanceTests: true, + ControlPlaneMachineCount: pointer.Int64(3), + WorkerMachineCount: pointer.Int64(1), + Flavor: pointer.String("kcp-scale-in"), + } + }) +}) diff --git a/test/e2e/kcp_upgrade.go b/test/e2e/kcp_upgrade.go index 68aa5d3e1863..f55493d11f23 100644 --- a/test/e2e/kcp_upgrade.go +++ b/test/e2e/kcp_upgrade.go @@ -32,6 +32,8 @@ import ( ) // KCPUpgradeSpecInput is the input for KCPUpgradeSpec. +// Deprecated: This struct has been deprecated and will be removed in a future release. +// Please use ClusterUpgradeConformanceSpec and ClusterUpgradeConformanceSpecInput instead. type KCPUpgradeSpecInput struct { E2EConfig *clusterctl.E2EConfig ClusterctlConfigPath string @@ -43,6 +45,8 @@ type KCPUpgradeSpecInput struct { } // KCPUpgradeSpec implements a test that verifies KCP to properly upgrade a control plane. +// Deprecated: This func has been deprecated and will be removed in a future release. +// Please use ClusterUpgradeConformanceSpec instead. func KCPUpgradeSpec(ctx context.Context, inputGetter func() KCPUpgradeSpecInput) { var ( specName = "kcp-upgrade" diff --git a/test/e2e/kcp_upgrade_test.go b/test/e2e/kcp_upgrade_test.go deleted file mode 100644 index dd455e9939ca..000000000000 --- a/test/e2e/kcp_upgrade_test.go +++ /dev/null @@ -1,67 +0,0 @@ -//go:build e2e -// +build e2e - -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package e2e - -import ( - . "github.com/onsi/ginkgo" - "sigs.k8s.io/cluster-api/test/framework/clusterctl" -) - -var _ = Describe("When testing KCP upgrade in a single control plane cluster", func() { - KCPUpgradeSpec(ctx, func() KCPUpgradeSpecInput { - return KCPUpgradeSpecInput{ - E2EConfig: e2eConfig, - ClusterctlConfigPath: clusterctlConfigPath, - BootstrapClusterProxy: bootstrapClusterProxy, - ArtifactFolder: artifactFolder, - SkipCleanup: skipCleanup, - ControlPlaneMachineCount: 1, - Flavor: clusterctl.DefaultFlavor, - } - }) -}) - -var _ = Describe("When testing KCP upgrade in a HA cluster", func() { - KCPUpgradeSpec(ctx, func() KCPUpgradeSpecInput { - return KCPUpgradeSpecInput{ - E2EConfig: e2eConfig, - ClusterctlConfigPath: clusterctlConfigPath, - BootstrapClusterProxy: bootstrapClusterProxy, - ArtifactFolder: artifactFolder, - SkipCleanup: skipCleanup, - ControlPlaneMachineCount: 3, - Flavor: clusterctl.DefaultFlavor, - } - }) -}) - -var _ = Describe("When testing KCP upgrade in a HA cluster using scale in rollout", func() { - KCPUpgradeSpec(ctx, func() KCPUpgradeSpecInput { - return KCPUpgradeSpecInput{ - E2EConfig: e2eConfig, - ClusterctlConfigPath: clusterctlConfigPath, - BootstrapClusterProxy: bootstrapClusterProxy, - ArtifactFolder: artifactFolder, - SkipCleanup: skipCleanup, - ControlPlaneMachineCount: 3, - Flavor: "kcp-scale-in", - } - }) -})