Skip to content

Commit 63f6fd7

Browse files
authored
Merge pull request #4328 from wyike/gc_e2e
E2E tests for AlternativeGCStrategy
2 parents 06357a7 + 7a072df commit 63f6fd7

File tree

3 files changed

+354
-1
lines changed

3 files changed

+354
-1
lines changed

test/e2e/shared/workload.go

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828
. "github.com/onsi/gomega"
2929
appsv1 "k8s.io/api/apps/v1"
3030
corev1 "k8s.io/api/core/v1"
31+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32+
"k8s.io/client-go/kubernetes"
3133
"sigs.k8s.io/controller-runtime/pkg/client"
3234

3335
"sigs.k8s.io/cluster-api/test/framework"
@@ -40,6 +42,22 @@ type WaitForDeploymentsAvailableInput struct {
4042
Namespace string
4143
}
4244

45+
// GetDeploymentInput is the input for GetDeployment.
46+
type GetDeploymentInput struct {
47+
Getter framework.Getter
48+
Name string
49+
Namespace string
50+
}
51+
52+
// ReconfigureDeploymentInput is the input for ReconfigureDeployment.
53+
type ReconfigureDeploymentInput struct {
54+
Getter framework.Getter
55+
ClientSet *kubernetes.Clientset
56+
Name string
57+
Namespace string
58+
WaitInterval []interface{}
59+
}
60+
4361
// WaitForDeploymentsAvailable will wait for the specified intervel for a Deployment to have status.Available = True.
4462
// NOTE: this is based on a version from the Cluster API test framework.
4563
func WaitForDeploymentsAvailable(ctx context.Context, input WaitForDeploymentsAvailableInput, intervals ...interface{}) {
@@ -74,3 +92,98 @@ func DescribeFailedDeployment(input WaitForDeploymentsAvailableInput, deployment
7492
}
7593
return b.String()
7694
}
95+
96+
// GetDeployment gets the deployment object.
97+
func GetDeployment(ctx context.Context, input GetDeploymentInput) (*appsv1.Deployment, error) {
98+
deployment := &appsv1.Deployment{}
99+
key := client.ObjectKey{
100+
Namespace: input.Namespace,
101+
Name: input.Name,
102+
}
103+
getErr := input.Getter.Get(ctx, key, deployment)
104+
if getErr != nil {
105+
return nil, getErr
106+
}
107+
return deployment, nil
108+
}
109+
110+
// ReconfigureDeployment updates the deployment object.
111+
func ReconfigureDeployment(ctx context.Context, input ReconfigureDeploymentInput, updateBy func(dep *appsv1.Deployment) (*appsv1.Deployment, error), validateBy func(dep *appsv1.Deployment) error) {
112+
By(fmt.Sprintf("Get %s deployment object", input.Name))
113+
deployment, getErr := GetDeployment(ctx, GetDeploymentInput{
114+
Getter: input.Getter,
115+
Name: input.Name,
116+
Namespace: input.Namespace,
117+
})
118+
Expect(getErr).To(BeNil())
119+
120+
By(fmt.Sprintf("Update %s deployment object spec", input.Name))
121+
_, specErr := updateBy(deployment)
122+
Expect(specErr).To(BeNil())
123+
124+
By(fmt.Sprintf("Update %s deployment object", input.Name))
125+
_, updateErr := input.ClientSet.AppsV1().Deployments(input.Namespace).Update(ctx, deployment, metav1.UpdateOptions{})
126+
Expect(updateErr).To(BeNil())
127+
128+
By(fmt.Sprintf("Wait for %s deployment to be available after reconfiguring", input.Name))
129+
WaitForDeploymentsAvailable(ctx, WaitForDeploymentsAvailableInput{
130+
Getter: input.Getter,
131+
Name: input.Name,
132+
Namespace: input.Namespace,
133+
}, input.WaitInterval...)
134+
135+
if validateBy != nil {
136+
By(fmt.Sprintf("Validate %s deployment updated as expected", input.Name))
137+
updatedDeployment, err := GetDeployment(ctx, GetDeploymentInput{
138+
Getter: input.Getter,
139+
Name: input.Name,
140+
Namespace: input.Namespace,
141+
})
142+
Expect(err).To(BeNil())
143+
144+
vaErr := validateBy(updatedDeployment)
145+
Expect(vaErr).To(BeNil())
146+
}
147+
}
148+
149+
// EnableAlternativeGCStrategy enables AlternativeGCStrategy in CAPA controller manager args field.
150+
func EnableAlternativeGCStrategy(dep *appsv1.Deployment) (*appsv1.Deployment, error) {
151+
for i, arg := range dep.Spec.Template.Spec.Containers[0].Args {
152+
if strings.Contains(arg, "feature-gates") && strings.Contains(arg, "AlternativeGCStrategy") {
153+
dep.Spec.Template.Spec.Containers[0].Args[i] = strings.Replace(arg, "AlternativeGCStrategy=false", "AlternativeGCStrategy=true", 1)
154+
return dep, nil
155+
}
156+
}
157+
return nil, fmt.Errorf("fail to find AlternativeGCStrategy to enable")
158+
}
159+
160+
// DisableAlternativeGCStrategy disables AlternativeGCStrategy in CAPA controller manager args field.
161+
func DisableAlternativeGCStrategy(dep *appsv1.Deployment) (*appsv1.Deployment, error) {
162+
for i, arg := range dep.Spec.Template.Spec.Containers[0].Args {
163+
if strings.Contains(arg, "feature-gates") && strings.Contains(arg, "AlternativeGCStrategy") {
164+
dep.Spec.Template.Spec.Containers[0].Args[i] = strings.Replace(arg, "AlternativeGCStrategy=true", "AlternativeGCStrategy=false", 1)
165+
return dep, nil
166+
}
167+
}
168+
return nil, fmt.Errorf("fail to find AlternativeGCStrategy to disable")
169+
}
170+
171+
// ValidateAlternativeGCStrategyEnabled validates AlternativeGCStrategy in CAPA controller manager args field is set to true.
172+
func ValidateAlternativeGCStrategyEnabled(dep *appsv1.Deployment) error {
173+
for _, arg := range dep.Spec.Template.Spec.Containers[0].Args {
174+
if strings.Contains(arg, "feature-gates") && strings.Contains(arg, "AlternativeGCStrategy=true") {
175+
return nil
176+
}
177+
}
178+
return fmt.Errorf("fail to validate AlternativeGCStrategy set to true")
179+
}
180+
181+
// ValidateAlternativeGCStrategyDisabled validates AlternativeGCStrategy in CAPA controller manager args field is set to false.
182+
func ValidateAlternativeGCStrategyDisabled(dep *appsv1.Deployment) error {
183+
for _, arg := range dep.Spec.Template.Spec.Containers[0].Args {
184+
if strings.Contains(arg, "feature-gates") && strings.Contains(arg, "AlternativeGCStrategy=false") {
185+
return nil
186+
}
187+
}
188+
return fmt.Errorf("fail to validate AlternativeGCStrategy set to false")
189+
}

test/e2e/suites/gc_managed/gc_managed_test.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,135 @@ var _ = ginkgo.Describe("[managed] [gc] EKS Cluster external resource GC tests",
159159
Expect(err).NotTo(HaveOccurred())
160160
Expect(arns).To(BeEmpty(), "there are %d service load balancers (elb) still", len(arns))
161161
})
162+
163+
ginkgo.It("[managed] [gc] should cleanup a cluster that has ELB/NLB load balancers using AlternativeGCStrategy", func() {
164+
ginkgo.By("should have a valid test configuration")
165+
Expect(e2eCtx.Environment.BootstrapClusterProxy).ToNot(BeNil(), "Invalid argument. BootstrapClusterProxy can't be nil")
166+
Expect(e2eCtx.E2EConfig).ToNot(BeNil(), "Invalid argument. e2eConfig can't be nil when calling %s spec", specName)
167+
Expect(e2eCtx.E2EConfig.Variables).To(HaveKey(shared.KubernetesVersion))
168+
169+
ctx = context.TODO()
170+
shared.ReconfigureDeployment(ctx, shared.ReconfigureDeploymentInput{
171+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
172+
ClientSet: e2eCtx.Environment.BootstrapClusterProxy.GetClientSet(),
173+
Name: "capa-controller-manager",
174+
Namespace: "capa-system",
175+
WaitInterval: e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready"),
176+
}, shared.EnableAlternativeGCStrategy, shared.ValidateAlternativeGCStrategyEnabled)
177+
178+
specName += "-alterstrategy"
179+
namespace = shared.SetupSpecNamespace(ctx, specName, e2eCtx)
180+
clusterName = fmt.Sprintf("%s-%s", specName, util.RandomString(6))
181+
182+
ginkgo.By("default iam role should exist")
183+
ms.VerifyRoleExistsAndOwned(ekscontrolplanev1.DefaultEKSControlPlaneRole, clusterName, false, e2eCtx.BootstrapUserAWSSession)
184+
185+
ginkgo.By("should create an EKS control plane")
186+
ms.ManagedClusterSpec(ctx, func() ms.ManagedClusterSpecInput {
187+
return ms.ManagedClusterSpecInput{
188+
E2EConfig: e2eCtx.E2EConfig,
189+
ConfigClusterFn: defaultConfigCluster,
190+
BootstrapClusterProxy: e2eCtx.Environment.BootstrapClusterProxy,
191+
AWSSession: e2eCtx.BootstrapUserAWSSession,
192+
Namespace: namespace,
193+
ClusterName: clusterName,
194+
Flavour: ms.EKSManagedPoolFlavor,
195+
ControlPlaneMachineCount: 1, // NOTE: this cannot be zero as clusterctl returns an error
196+
WorkerMachineCount: 1,
197+
}
198+
})
199+
200+
ginkgo.By(fmt.Sprintf("getting cluster with name %s", clusterName))
201+
cluster := framework.GetClusterByName(ctx, framework.GetClusterByNameInput{
202+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
203+
Namespace: namespace.Name,
204+
Name: clusterName,
205+
})
206+
Expect(cluster).NotTo(BeNil(), "couldn't find cluster")
207+
208+
ginkgo.By("getting AWSManagedControlPlane")
209+
cp := ms.GetControlPlaneByName(ctx, ms.GetControlPlaneByNameInput{
210+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
211+
Namespace: cluster.Spec.InfrastructureRef.Namespace,
212+
Name: cluster.Spec.ControlPlaneRef.Name,
213+
})
214+
215+
ginkgo.By("Waiting for the machine pool to be running")
216+
mp := framework.DiscoveryAndWaitForMachinePools(ctx, framework.DiscoveryAndWaitForMachinePoolsInput{
217+
Lister: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
218+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
219+
Cluster: cluster,
220+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-worker-nodes")...)
221+
Expect(len(mp)).To(Equal(1))
222+
223+
workloadClusterProxy := e2eCtx.Environment.BootstrapClusterProxy.GetWorkloadCluster(ctx, cluster.Namespace, cluster.Name)
224+
workloadYamlPath := e2eCtx.E2EConfig.GetVariable(shared.GcWorkloadPath)
225+
ginkgo.By(fmt.Sprintf("Installing sample workload with load balancer services: %s", workloadYamlPath))
226+
workloadYaml, err := os.ReadFile(workloadYamlPath) //nolint:gosec
227+
Expect(err).ShouldNot(HaveOccurred())
228+
Expect(workloadClusterProxy.Apply(ctx, workloadYaml)).ShouldNot(HaveOccurred())
229+
230+
ginkgo.By("Waiting for the Deployment to be available")
231+
shared.WaitForDeploymentsAvailable(ctx, shared.WaitForDeploymentsAvailableInput{
232+
Getter: workloadClusterProxy.GetClient(),
233+
Name: "podinfo",
234+
Namespace: "default",
235+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready")...)
236+
237+
ginkgo.By("Checking we have the load balancers in AWS")
238+
shared.WaitForLoadBalancerToExistForService(shared.WaitForLoadBalancerToExistForServiceInput{
239+
AWSSession: e2eCtx.BootstrapUserAWSSession,
240+
ServiceName: "podinfo-nlb",
241+
ServiceNamespace: "default",
242+
ClusterName: cp.Spec.EKSClusterName,
243+
Type: infrav1.LoadBalancerTypeNLB,
244+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-loadbalancer-ready")...)
245+
shared.WaitForLoadBalancerToExistForService(shared.WaitForLoadBalancerToExistForServiceInput{
246+
AWSSession: e2eCtx.BootstrapUserAWSSession,
247+
ServiceName: "podinfo-elb",
248+
ServiceNamespace: "default",
249+
ClusterName: cp.Spec.EKSClusterName,
250+
Type: infrav1.LoadBalancerTypeELB,
251+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-loadbalancer-ready")...)
252+
253+
ginkgo.By(fmt.Sprintf("Deleting workload/tenant cluster %s", clusterName))
254+
framework.DeleteCluster(ctx, framework.DeleteClusterInput{
255+
Deleter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
256+
Cluster: cluster,
257+
})
258+
framework.WaitForClusterDeleted(ctx, framework.WaitForClusterDeletedInput{
259+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
260+
Cluster: cluster,
261+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-delete-cluster")...)
262+
263+
ginkgo.By("Getting counts of service load balancers")
264+
arns, err := shared.GetLoadBalancerARNs(shared.GetLoadBalancerARNsInput{
265+
AWSSession: e2eCtx.BootstrapUserAWSSession,
266+
ServiceName: "podinfo-nlb",
267+
ServiceNamespace: "default",
268+
ClusterName: cp.Spec.EKSClusterName,
269+
Type: infrav1.LoadBalancerTypeNLB,
270+
})
271+
Expect(err).NotTo(HaveOccurred())
272+
Expect(arns).To(BeEmpty(), "there are %d service load balancers (nlb) still", len(arns))
273+
arns, err = shared.GetLoadBalancerARNs(shared.GetLoadBalancerARNsInput{
274+
AWSSession: e2eCtx.BootstrapUserAWSSession,
275+
ServiceName: "podinfo-elb",
276+
ServiceNamespace: "default",
277+
ClusterName: cp.Spec.EKSClusterName,
278+
Type: infrav1.LoadBalancerTypeELB,
279+
})
280+
Expect(err).NotTo(HaveOccurred())
281+
Expect(arns).To(BeEmpty(), "there are %d service load balancers (elb) still", len(arns))
282+
283+
shared.ReconfigureDeployment(ctx, shared.ReconfigureDeploymentInput{
284+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
285+
ClientSet: e2eCtx.Environment.BootstrapClusterProxy.GetClientSet(),
286+
Name: "capa-controller-manager",
287+
Namespace: "capa-system",
288+
WaitInterval: e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready"),
289+
}, shared.DisableAlternativeGCStrategy, shared.ValidateAlternativeGCStrategyDisabled)
290+
})
162291
})
163292

164293
// TODO (richardcase): remove this when we merge these tests with the main eks e2e tests.

test/e2e/suites/gc_unmanaged/gc_unmanaged_test.go

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ var _ = ginkgo.Context("[unmanaged] [gc]", func() {
6767
clusterName := fmt.Sprintf("%s-%s", specName, util.RandomString(6))
6868

6969
configCluster := defaultConfigCluster(clusterName, namespace.Name)
70-
configCluster.KubernetesVersion = e2eCtx.E2EConfig.GetVariable(shared.PreCSIKubernetesVer)
7170
configCluster.WorkerMachineCount = pointer.Int64(1)
7271
createCluster(ctx, configCluster, result)
7372

@@ -139,6 +138,118 @@ var _ = ginkgo.Context("[unmanaged] [gc]", func() {
139138
Expect(err).NotTo(HaveOccurred())
140139
Expect(arns).To(BeEmpty(), "there are %d service load balancers (elb) still", len(arns))
141140
})
141+
142+
ginkgo.It("[unmanaged] [gc] should cleanup a cluster that has ELB/NLB load balancers using AlternativeGCStrategy", func() {
143+
ginkgo.By("should have a valid test configuration")
144+
specName := "unmanaged-gc-alterstrategy-cluster"
145+
146+
ctx = context.TODO()
147+
result = &clusterctl.ApplyClusterTemplateAndWaitResult{}
148+
149+
Expect(e2eCtx.Environment.BootstrapClusterProxy).ToNot(BeNil(), "Invalid argument. BootstrapClusterProxy can't be nil")
150+
Expect(e2eCtx.E2EConfig).ToNot(BeNil(), "Invalid argument. e2eConfig can't be nil when calling %s spec", specName)
151+
Expect(e2eCtx.E2EConfig.Variables).To(HaveKey(shared.KubernetesVersion))
152+
153+
shared.ReconfigureDeployment(ctx, shared.ReconfigureDeploymentInput{
154+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
155+
ClientSet: e2eCtx.Environment.BootstrapClusterProxy.GetClientSet(),
156+
Name: "capa-controller-manager",
157+
Namespace: "capa-system",
158+
WaitInterval: e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready"),
159+
}, shared.EnableAlternativeGCStrategy, shared.ValidateAlternativeGCStrategyEnabled)
160+
161+
requiredResources = &shared.TestResource{EC2Normal: 2 * e2eCtx.Settings.InstanceVCPU, IGW: 1, NGW: 1, VPC: 1, ClassicLB: 1, EIP: 1, EventBridgeRules: 50}
162+
requiredResources.WriteRequestedResources(e2eCtx, specName)
163+
Expect(shared.AcquireResources(requiredResources, ginkgo.GinkgoParallelProcess(), flock.New(shared.ResourceQuotaFilePath))).To(Succeed())
164+
defer shared.ReleaseResources(requiredResources, ginkgo.GinkgoParallelProcess(), flock.New(shared.ResourceQuotaFilePath))
165+
namespace := shared.SetupNamespace(ctx, specName, e2eCtx)
166+
defer shared.DumpSpecResourcesAndCleanup(ctx, "", namespace, e2eCtx)
167+
ginkgo.By("Creating cluster with single control plane")
168+
clusterName := fmt.Sprintf("%s-%s", specName, util.RandomString(6))
169+
170+
configCluster := defaultConfigCluster(clusterName, namespace.Name)
171+
configCluster.WorkerMachineCount = pointer.Int64(1)
172+
c, md, cp := createCluster(ctx, configCluster, result)
173+
Expect(c).NotTo(BeNil(), "Expecting cluster created")
174+
Expect(len(md)).To(Equal(1), "Expecting one MachineDeployment")
175+
Expect(cp).NotTo(BeNil(), "Expecting control plane created")
176+
177+
ginkgo.By(fmt.Sprintf("getting cluster with name %s", clusterName))
178+
cluster := framework.GetClusterByName(ctx, framework.GetClusterByNameInput{
179+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
180+
Namespace: namespace.Name,
181+
Name: clusterName,
182+
})
183+
Expect(cluster).NotTo(BeNil(), "couldn't find cluster")
184+
185+
workloadClusterProxy := e2eCtx.Environment.BootstrapClusterProxy.GetWorkloadCluster(ctx, cluster.Namespace, cluster.Name)
186+
workloadYamlPath := e2eCtx.E2EConfig.GetVariable(shared.GcWorkloadPath)
187+
ginkgo.By(fmt.Sprintf("Installing sample workload with load balancer services: %s", workloadYamlPath))
188+
workloadYaml, err := os.ReadFile(workloadYamlPath) //nolint:gosec
189+
Expect(err).ShouldNot(HaveOccurred())
190+
Expect(workloadClusterProxy.Apply(ctx, workloadYaml)).ShouldNot(HaveOccurred())
191+
192+
ginkgo.By("Waiting for the Deployment to be available")
193+
shared.WaitForDeploymentsAvailable(ctx, shared.WaitForDeploymentsAvailableInput{
194+
Getter: workloadClusterProxy.GetClient(),
195+
Name: "podinfo",
196+
Namespace: "default",
197+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready")...)
198+
199+
ginkgo.By("Checking we have the load balancers in AWS")
200+
shared.WaitForLoadBalancerToExistForService(shared.WaitForLoadBalancerToExistForServiceInput{
201+
AWSSession: e2eCtx.BootstrapUserAWSSession,
202+
ServiceName: "podinfo-nlb",
203+
ServiceNamespace: "default",
204+
ClusterName: clusterName,
205+
Type: infrav1.LoadBalancerTypeNLB,
206+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-loadbalancer-ready")...)
207+
shared.WaitForLoadBalancerToExistForService(shared.WaitForLoadBalancerToExistForServiceInput{
208+
AWSSession: e2eCtx.BootstrapUserAWSSession,
209+
ServiceName: "podinfo-elb",
210+
ServiceNamespace: "default",
211+
ClusterName: clusterName,
212+
Type: infrav1.LoadBalancerTypeELB,
213+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-loadbalancer-ready")...)
214+
215+
ginkgo.By(fmt.Sprintf("Deleting workload/tenant cluster %s", clusterName))
216+
framework.DeleteCluster(ctx, framework.DeleteClusterInput{
217+
Deleter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
218+
Cluster: cluster,
219+
})
220+
framework.WaitForClusterDeleted(ctx, framework.WaitForClusterDeletedInput{
221+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
222+
Cluster: cluster,
223+
}, e2eCtx.E2EConfig.GetIntervals("", "wait-delete-cluster")...)
224+
225+
ginkgo.By("Getting counts of service load balancers")
226+
arns, err := shared.GetLoadBalancerARNs(shared.GetLoadBalancerARNsInput{
227+
AWSSession: e2eCtx.BootstrapUserAWSSession,
228+
ServiceName: "podinfo-nlb",
229+
ServiceNamespace: "default",
230+
ClusterName: clusterName,
231+
Type: infrav1.LoadBalancerTypeNLB,
232+
})
233+
Expect(err).NotTo(HaveOccurred())
234+
Expect(arns).To(BeEmpty(), "there are %d service load balancers (nlb) still", len(arns))
235+
arns, err = shared.GetLoadBalancerARNs(shared.GetLoadBalancerARNsInput{
236+
AWSSession: e2eCtx.BootstrapUserAWSSession,
237+
ServiceName: "podinfo-elb",
238+
ServiceNamespace: "default",
239+
ClusterName: clusterName,
240+
Type: infrav1.LoadBalancerTypeELB,
241+
})
242+
Expect(err).NotTo(HaveOccurred())
243+
Expect(arns).To(BeEmpty(), "there are %d service load balancers (elb) still", len(arns))
244+
245+
shared.ReconfigureDeployment(ctx, shared.ReconfigureDeploymentInput{
246+
Getter: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
247+
ClientSet: e2eCtx.Environment.BootstrapClusterProxy.GetClientSet(),
248+
Name: "capa-controller-manager",
249+
Namespace: "capa-system",
250+
WaitInterval: e2eCtx.E2EConfig.GetIntervals("", "wait-deployment-ready"),
251+
}, shared.DisableAlternativeGCStrategy, shared.ValidateAlternativeGCStrategyDisabled)
252+
})
142253
})
143254

144255
// TODO (richardcase): remove this when we merge these tests with the main eks e2e tests.

0 commit comments

Comments
 (0)