Skip to content

Commit 74c5d33

Browse files
authored
added more generic loops so that adding newer version is easier (#426)
1 parent fac5b21 commit 74c5d33

10 files changed

+313
-448
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ cluster-templates: ## Generate cluster templates for all flavors
286286
.PHONY: docker-build-e2e
287287
docker-build-e2e: ## Build docker image with the manager with e2e tag.
288288
echo "Git commit hash: ${GIT_COMMIT_HASH}"
289-
KO_DOCKER_REPO=ko.local GOFLAGS="-ldflags=-X=main.gitCommitHash=${GIT_COMMIT_HASH}" ko build -B --platform=${PLATFORMS_E2E} -t ${IMG_TAG} -L .
289+
KO_DOCKER_REPO=ko.local GOFLAGS="-ldflags=-X=main.gitCommitHash=${GIT_COMMIT_HASH}" ko build -B --platform=${PLATFORMS_E2E} -t ${IMG_TAG} .
290290
docker tag ko.local/cluster-api-provider-nutanix:${IMG_TAG} ${IMG_REPO}:e2e
291291

292292
.PHONY: prepare-local-clusterctl

test/e2e/cluster_topology_basic_test.go

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package e2e
2020

2121
import (
2222
"context"
23+
"fmt"
2324

2425
. "github.com/onsi/ginkgo/v2"
2526
. "github.com/onsi/gomega"
@@ -57,7 +58,13 @@ var _ = Describe("When creating a cluster with topology with simple workflow", L
5758
)
5859
})
5960

60-
basicWorkflow := func(targetKubeVer, targetImageName string) {
61+
basicWorkflow := func(targetKube *E2eConfigK8SVersion) {
62+
clusterName = testHelper.generateTestClusterName(specName)
63+
Expect(clusterName).NotTo(BeNil())
64+
65+
targetKubeVer := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionEnvVar)
66+
targetImageName := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionImageEnvVar)
67+
6168
By("Creating a workload cluster with topology")
6269
clusterTopologyConfig := NewClusterTopologyConfig(
6370
WithName(clusterName),
@@ -84,30 +91,13 @@ var _ = Describe("When creating a cluster with topology with simple workflow", L
8491
dumpSpecResourcesAndCleanup(ctx, specName, bootstrapClusterProxy, artifactFolder, namespace, cancelWatches, cluster, e2eConfig.GetIntervals, skipCleanup)
8592
})
8693

87-
It("Create a cluster with topology with version Kube127", Label("Kube127", "cluster-topology-basic"), func() {
88-
clusterName = testHelper.generateTestClusterName(specName)
89-
Expect(clusterName).NotTo(BeNil())
90-
91-
kube127 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_27")
92-
kube127Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_27")
93-
basicWorkflow(kube127, kube127Image)
94-
})
95-
96-
It("Create a cluster with topology with version Kube128", Label("Kube128", "cluster-topology-basic"), func() {
97-
clusterName = testHelper.generateTestClusterName(specName)
98-
Expect(clusterName).NotTo(BeNil())
99-
100-
kube128 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_28")
101-
kube128Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_28")
102-
basicWorkflow(kube128, kube128Image)
103-
})
104-
105-
It("Create a cluster with topology with version Kube129", Label("Kube129", "cluster-topology-basic"), func() {
106-
clusterName = testHelper.generateTestClusterName(specName)
107-
Expect(clusterName).NotTo(BeNil())
108-
109-
kube129 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_29")
110-
kube129Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_29")
111-
basicWorkflow(kube129, kube129Image)
112-
})
94+
// basic tests
95+
for _, targetTestConfig := range SupportedK8STargetConfigs {
96+
labels := []string{"cluster-topology-basic"}
97+
labels = append(labels, targetTestConfig.targetLabels...)
98+
It(fmt.Sprintf("Create a cluster with topology with %s", targetTestConfig.targetLabels[0]),
99+
Label(labels...), func() {
100+
basicWorkflow(targetTestConfig.targetKube)
101+
})
102+
}
113103
})

test/e2e/cluster_topology_conformance_test.go

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package e2e
2020

2121
import (
2222
"context"
23+
"fmt"
2324

2425
. "github.com/onsi/ginkgo/v2"
2526
. "github.com/onsi/gomega"
@@ -62,7 +63,13 @@ var _ = Describe("When creating a cluster with topology and running kubetest/con
6263
)
6364
})
6465

65-
conformanceWorkflow := func(targetKubeVer, targetImageName string) {
66+
conformanceWorkflow := func(targetKube *E2eConfigK8SVersion) {
67+
clusterName = testHelper.generateTestClusterName(specName)
68+
Expect(clusterName).NotTo(BeNil())
69+
70+
targetKubeVer := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionEnvVar)
71+
targetImageName := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionImageEnvVar)
72+
6673
By("Creating a workload cluster with topology")
6774
clusterTopologyConfig := NewClusterTopologyConfig(
6875
WithName(clusterName),
@@ -93,30 +100,13 @@ var _ = Describe("When creating a cluster with topology and running kubetest/con
93100
dumpSpecResourcesAndCleanup(ctx, specName, bootstrapClusterProxy, artifactFolder, namespace, cancelWatches, cluster, e2eConfig.GetIntervals, skipCleanup)
94101
})
95102

96-
It("Create a cluster with topology with version Kube127", Label("Kube127", "cluster-topology-conformance"), func() {
97-
clusterName = testHelper.generateTestClusterName(specName)
98-
Expect(clusterName).NotTo(BeNil())
99-
100-
kube127 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_27")
101-
kube127Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_27")
102-
conformanceWorkflow(kube127, kube127Image)
103-
})
104-
105-
It("Create a cluster with topology with version Kube128", Label("Kube128", "cluster-topology-conformance"), func() {
106-
clusterName = testHelper.generateTestClusterName(specName)
107-
Expect(clusterName).NotTo(BeNil())
108-
109-
kube128 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_28")
110-
kube128Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_28")
111-
conformanceWorkflow(kube128, kube128Image)
112-
})
113-
114-
It("Create a cluster with topology with version Kube129", Label("Kube129", "cluster-topology-conformance"), func() {
115-
clusterName = testHelper.generateTestClusterName(specName)
116-
Expect(clusterName).NotTo(BeNil())
117-
118-
kube129 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_29")
119-
kube129Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_29")
120-
conformanceWorkflow(kube129, kube129Image)
121-
})
103+
// Conformance tests
104+
for _, targetTestConfig := range SupportedK8STargetConfigs {
105+
labels := []string{"cluster-topology-conformance"}
106+
labels = append(labels, targetTestConfig.targetLabels...)
107+
It(fmt.Sprintf("Create a cluster with topology with %s", targetTestConfig.targetLabels[0]),
108+
Label(labels...), func() {
109+
conformanceWorkflow(targetTestConfig.targetKube)
110+
})
111+
}
122112
})
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//go:build e2e
2+
3+
/*
4+
Copyright 2024 Nutanix
5+
6+
Licensed under the Apache License, Version 2.0 (the "License");
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
19+
package e2e
20+
21+
// NOTE:
22+
// 1. To support a new k8s version,
23+
// - add a new function NewE2eConfigK8SVersion<k8sversion> similar to
24+
// NewE2eConfigK8SVersion127 with respective var names
25+
// - add a new row in SupportedK8STargetConfigs and
26+
// 2. To remove a supported version,
27+
// - delete a row from SupportedK8STargetConfigs array.
28+
// - delete respective version's NewE2eConfigK8SVersion<k8sversion> function
29+
// All the tests iterating over this array will will use newer configs
30+
31+
// E2eConfigK8SVersion holds K8s version specific e2e config variables
32+
type E2eConfigK8SVersion struct {
33+
E2eConfigK8sVersionEnvVar string
34+
E2eConfigK8sVersionImageEnvVar string
35+
}
36+
37+
// returns E2eConfigK8SVersion with Kube127 specific e2e config vars
38+
func NewE2eConfigK8SVersion127() *E2eConfigK8SVersion {
39+
return &E2eConfigK8SVersion{
40+
E2eConfigK8sVersionEnvVar: "KUBERNETES_VERSION_v1_27",
41+
E2eConfigK8sVersionImageEnvVar: "NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_27",
42+
}
43+
}
44+
45+
// returns E2eConfigK8SVersion with Kube128 specific e2e config vars
46+
func NewE2eConfigK8SVersion128() *E2eConfigK8SVersion {
47+
return &E2eConfigK8SVersion{
48+
E2eConfigK8sVersionEnvVar: "KUBERNETES_VERSION_v1_28",
49+
E2eConfigK8sVersionImageEnvVar: "NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_28",
50+
}
51+
}
52+
53+
// returns E2eConfigK8SVersion with Kube129 specific e2e config vars
54+
func NewE2eConfigK8SVersion129() *E2eConfigK8SVersion {
55+
return &E2eConfigK8SVersion{
56+
E2eConfigK8sVersionEnvVar: "KUBERNETES_VERSION_v1_29",
57+
E2eConfigK8sVersionImageEnvVar: "NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_29",
58+
}
59+
}
60+
61+
// returns E2eConfigK8SVersion with Kube130 specific e2e config vars
62+
func NewE2eConfigK8SVersion130() *E2eConfigK8SVersion {
63+
return &E2eConfigK8SVersion{
64+
E2eConfigK8sVersionEnvVar: "KUBERNETES_VERSION_v1_30",
65+
E2eConfigK8sVersionImageEnvVar: "NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_30",
66+
}
67+
}
68+
69+
// TestConfig holds required parameters for each supported k8s target config
70+
type TestConfig struct {
71+
targetKube *E2eConfigK8SVersion
72+
targetLabels []string
73+
}
74+
75+
// SupportedK8STargetConfigs holds all the supported k8s versions and respective labels for
76+
// each version speficic test
77+
var SupportedK8STargetConfigs = []TestConfig{
78+
{targetKube: NewE2eConfigK8SVersion127(), targetLabels: []string{"Kube127"}},
79+
{targetKube: NewE2eConfigK8SVersion128(), targetLabels: []string{"Kube128"}},
80+
{targetKube: NewE2eConfigK8SVersion129(), targetLabels: []string{"Kube129"}},
81+
{targetKube: NewE2eConfigK8SVersion130(), targetLabels: []string{"Kube130"}},
82+
}

test/e2e/cluster_topology_mega_scale_test.go

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package e2e
2020

2121
import (
2222
"context"
23+
"fmt"
2324

2425
. "github.com/onsi/ginkgo/v2"
2526
. "github.com/onsi/gomega"
@@ -57,7 +58,15 @@ var _ = Describe("When creating a cluster with topology with mega scale workflow
5758
)
5859
})
5960

60-
megaScaleWorkflow := func(targetKubeVer, targetImageName string, cpNodeCount, workerNodeCount int) {
61+
megaScaleWorkflow := func(targetKube *E2eConfigK8SVersion,
62+
cpNodeCount, workerNodeCount int,
63+
) {
64+
clusterName = testHelper.generateTestClusterName(specName)
65+
Expect(clusterName).NotTo(BeNil())
66+
67+
targetKubeVer := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionEnvVar)
68+
targetImageName := testHelper.getVariableFromE2eConfig(targetKube.E2eConfigK8sVersionImageEnvVar)
69+
6170
By("Creating a workload cluster with topology")
6271
clusterTopologyConfig := NewClusterTopologyConfig(
6372
WithName(clusterName),
@@ -84,30 +93,13 @@ var _ = Describe("When creating a cluster with topology with mega scale workflow
8493
dumpSpecResourcesAndCleanup(ctx, specName, bootstrapClusterProxy, artifactFolder, namespace, cancelWatches, cluster, e2eConfig.GetIntervals, skipCleanup)
8594
})
8695

87-
It("Create a cluster with topology with version Kube127 and 7 CP and 100 workers", Label("Kube127", "cluster-topology-mega-scale"), func() {
88-
clusterName = testHelper.generateTestClusterName(specName)
89-
Expect(clusterName).NotTo(BeNil())
90-
91-
kube127 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_27")
92-
kube127Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_27")
93-
megaScaleWorkflow(kube127, kube127Image, 7, 100)
94-
})
95-
96-
It("Create a cluster with topology with version Kube128 and 7 CP and 100 workers", Label("Kube128", "cluster-topology-mega-scale"), func() {
97-
clusterName = testHelper.generateTestClusterName(specName)
98-
Expect(clusterName).NotTo(BeNil())
99-
100-
kube128 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_28")
101-
kube128Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_28")
102-
megaScaleWorkflow(kube128, kube128Image, 7, 100)
103-
})
104-
105-
It("Create a cluster with topology with version Kube129 and 7 CP and 100 workers", Label("Kube129", "cluster-topology-mega-scale"), func() {
106-
clusterName = testHelper.generateTestClusterName(specName)
107-
Expect(clusterName).NotTo(BeNil())
108-
109-
kube129 := testHelper.getVariableFromE2eConfig("KUBERNETES_VERSION_v1_29")
110-
kube129Image := testHelper.getVariableFromE2eConfig("NUTANIX_MACHINE_TEMPLATE_IMAGE_NAME_v1_29")
111-
megaScaleWorkflow(kube129, kube129Image, 7, 100)
112-
})
96+
// mega scale out tests
97+
for _, targetTestConfig := range SupportedK8STargetConfigs {
98+
labels := []string{"cluster-topology-mega-scale"}
99+
labels = append(labels, targetTestConfig.targetLabels...)
100+
It(fmt.Sprintf("Create a cluster with topology, 7 CP and 100 workers with %s", targetTestConfig.targetLabels[0]),
101+
Label(labels...), func() {
102+
megaScaleWorkflow(targetTestConfig.targetKube, 7, 100)
103+
})
104+
}
113105
})

0 commit comments

Comments
 (0)