Skip to content

Commit c383c6e

Browse files
authored
Merge pull request #5048 from AndiDog/test-fixes
🐛 Fix subtests running in same environment and reconciliation bug which was not covered because of that
2 parents d375b7d + a90caa7 commit c383c6e

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

exp/controllers/awsmachinepool_controller_test.go

+34-7
Original file line numberDiff line numberDiff line change
@@ -472,15 +472,15 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
472472
})
473473

474474
t.Run("ReconcileLaunchTemplate not mocked", func(t *testing.T) {
475-
g := NewWithT(t)
476-
setup(t, g)
477-
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
478-
reconSvc = nil // not used
479-
defer teardown(t, g)
480-
481475
launchTemplateIDExisting := "lt-existing"
482476

483477
t.Run("nothing exists, so launch template and ASG must be created", func(t *testing.T) {
478+
g := NewWithT(t)
479+
setup(t, g)
480+
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
481+
reconSvc = nil // not used
482+
defer teardown(t, g)
483+
484484
ec2Svc.EXPECT().GetLaunchTemplate(gomock.Eq("test")).Return(nil, "", nil, nil)
485485
ec2Svc.EXPECT().DiscoverLaunchTemplateAMI(gomock.Any()).Return(ptr.To[string]("ami-abcdef123"), nil)
486486
ec2Svc.EXPECT().CreateLaunchTemplate(gomock.Any(), gomock.Eq(ptr.To[string]("ami-abcdef123")), gomock.Eq(userDataSecretKey), gomock.Eq([]byte("shell-script"))).Return("lt-ghijkl456", nil)
@@ -497,6 +497,12 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
497497
})
498498

499499
t.Run("launch template and ASG exist and need no update", func(t *testing.T) {
500+
g := NewWithT(t)
501+
setup(t, g)
502+
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
503+
reconSvc = nil // not used
504+
defer teardown(t, g)
505+
500506
// Latest ID and version already stored, no need to retrieve it
501507
ms.AWSMachinePool.Status.LaunchTemplateID = launchTemplateIDExisting
502508
ms.AWSMachinePool.Status.LaunchTemplateVersion = ptr.To[string]("1")
@@ -538,6 +544,12 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
538544
})
539545

540546
t.Run("launch template and ASG exist and only AMI ID changed", func(t *testing.T) {
547+
g := NewWithT(t)
548+
setup(t, g)
549+
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
550+
reconSvc = nil // not used
551+
defer teardown(t, g)
552+
541553
// Latest ID and version already stored, no need to retrieve it
542554
ms.AWSMachinePool.Status.LaunchTemplateID = launchTemplateIDExisting
543555
ms.AWSMachinePool.Status.LaunchTemplateVersion = ptr.To[string]("1")
@@ -585,6 +597,12 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
585597
})
586598

587599
t.Run("launch template and ASG exist and only bootstrap data secret name changed", func(t *testing.T) {
600+
g := NewWithT(t)
601+
setup(t, g)
602+
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
603+
reconSvc = nil // not used
604+
defer teardown(t, g)
605+
588606
// Latest ID and version already stored, no need to retrieve it
589607
ms.AWSMachinePool.Status.LaunchTemplateID = launchTemplateIDExisting
590608
ms.AWSMachinePool.Status.LaunchTemplateVersion = ptr.To[string]("1")
@@ -635,6 +653,12 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
635653
})
636654

637655
t.Run("launch template and ASG created from zero, then bootstrap config reference changes", func(t *testing.T) {
656+
g := NewWithT(t)
657+
setup(t, g)
658+
reconciler.reconcileServiceFactory = nil // use real implementation, but keep EC2 calls mocked (`ec2ServiceFactory`)
659+
reconSvc = nil // not used
660+
defer teardown(t, g)
661+
638662
ec2Svc.EXPECT().GetLaunchTemplate(gomock.Eq("test")).Return(nil, "", nil, nil)
639663
ec2Svc.EXPECT().DiscoverLaunchTemplateAMI(gomock.Any()).Return(ptr.To[string]("ami-abcdef123"), nil)
640664
ec2Svc.EXPECT().CreateLaunchTemplate(gomock.Any(), gomock.Eq(ptr.To[string]("ami-abcdef123")), gomock.Eq(userDataSecretKey), gomock.Eq([]byte("shell-script"))).Return("lt-ghijkl456", nil)
@@ -650,7 +674,6 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
650674
g.Expect(err).To(Succeed())
651675

652676
g.Expect(ms.AWSMachinePool.Status.LaunchTemplateID).ToNot(BeEmpty())
653-
g.Expect(ptr.Deref[string](ms.AWSMachinePool.Status.LaunchTemplateVersion, "")).ToNot(BeEmpty())
654677

655678
// Data secret name changes
656679
newBootstrapSecret := &corev1.Secret{
@@ -665,6 +688,10 @@ func TestAWSMachinePoolReconciler(t *testing.T) {
665688
g.Expect(testEnv.Create(ctx, newBootstrapSecret)).To(Succeed())
666689
ms.MachinePool.Spec.Template.Spec.Bootstrap.DataSecretName = ptr.To[string](newBootstrapSecret.Name)
667690

691+
// Since `AWSMachinePool.status.launchTemplateVersion` isn't set yet,
692+
// the controller will ask for the current version and then set the status.
693+
ec2Svc.EXPECT().GetLaunchTemplateLatestVersion(gomock.Any()).Return("1", nil)
694+
668695
ec2Svc.EXPECT().GetLaunchTemplate(gomock.Eq("test")).Return(
669696
&expinfrav1.AWSLaunchTemplate{
670697
Name: "test",

pkg/cloud/services/ec2/launchtemplate.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ func (s *Service) ReconcileLaunchTemplate(
114114
return err
115115
}
116116
scope.SetLaunchTemplateLatestVersionStatus(launchTemplateVersion)
117-
return scope.PatchObject()
117+
if err := scope.PatchObject(); err != nil {
118+
return err
119+
}
118120
}
119121

120122
annotation, err := MachinePoolAnnotationJSON(scope, TagsLastAppliedAnnotation)

0 commit comments

Comments
 (0)