Skip to content

Commit d9bb1cf

Browse files
authored
Merge pull request #3099 from shivi28/ec2
Added unit test cases for launchtemplate.go
2 parents 123e023 + 9270911 commit d9bb1cf

File tree

4 files changed

+1199
-56
lines changed

4 files changed

+1199
-56
lines changed

pkg/cloud/services/ec2/ami_test.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/aws/aws-sdk-go/service/ssm"
2525
"github.com/golang/mock/gomock"
2626
. "github.com/onsi/gomega"
27+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2728

2829
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2930
"sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/awserrors"
@@ -184,10 +185,16 @@ func TestAMIs(t *testing.T) {
184185
t.Run(tc.name, func(t *testing.T) {
185186
g := NewWithT(t)
186187

188+
scheme, err := setupScheme()
189+
g.Expect(err).NotTo(HaveOccurred())
190+
client := fake.NewClientBuilder().WithScheme(scheme).Build()
191+
187192
ec2Mock := mock_ec2iface.NewMockEC2API(mockCtrl)
188193
tc.expect(ec2Mock.EXPECT())
189194

190-
clusterScope := setupClusterScope(g)
195+
clusterScope, err := setupClusterScope(client)
196+
g.Expect(err).NotTo(HaveOccurred())
197+
191198
s := NewService(clusterScope)
192199
s.EC2Client = ec2Mock
193200

@@ -443,12 +450,18 @@ func TestEKSAMILookUp(t *testing.T) {
443450
t.Run(tt.name, func(t *testing.T) {
444451
g := NewWithT(t)
445452

453+
scheme, err := setupScheme()
454+
g.Expect(err).NotTo(HaveOccurred())
455+
client := fake.NewClientBuilder().WithScheme(scheme).Build()
456+
446457
ssmMock := mock_ssmiface.NewMockSSMAPI(mockCtrl)
447458
if tt.expect != nil {
448459
tt.expect(ssmMock.EXPECT())
449460
}
450461

451-
clusterScope := setupClusterScope(g)
462+
clusterScope, err := setupClusterScope(client)
463+
g.Expect(err).NotTo(HaveOccurred())
464+
452465
s := NewService(clusterScope)
453466
s.SSMClient = ssmMock
454467

pkg/cloud/services/ec2/helper_test.go

Lines changed: 141 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,97 @@ limitations under the License.
1717
package ec2
1818

1919
import (
20-
. "github.com/onsi/gomega"
20+
"sort"
21+
22+
"github.com/aws/aws-sdk-go/aws"
23+
"github.com/aws/aws-sdk-go/service/ec2"
2124
corev1 "k8s.io/api/core/v1"
2225
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2326
"k8s.io/apimachinery/pkg/runtime"
24-
"sigs.k8s.io/controller-runtime/pkg/client/fake"
27+
"k8s.io/utils/pointer"
28+
"sigs.k8s.io/controller-runtime/pkg/client"
2529

2630
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
31+
ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/controlplane/eks/api/v1beta1"
2732
expinfrav1 "sigs.k8s.io/cluster-api-provider-aws/exp/api/v1beta1"
2833
"sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/scope"
2934
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
35+
"sigs.k8s.io/cluster-api/exp/api/v1beta1"
3036
)
3137

32-
func setupScheme() (*runtime.Scheme, error) {
33-
scheme := runtime.NewScheme()
34-
if err := clusterv1.AddToScheme(scheme); err != nil {
35-
return nil, err
36-
}
37-
if err := corev1.AddToScheme(scheme); err != nil {
38-
return nil, err
39-
}
40-
if err := infrav1.AddToScheme(scheme); err != nil {
41-
return nil, err
38+
func setupClusterScope(cl client.Client) (*scope.ClusterScope, error) {
39+
return scope.NewClusterScope(scope.ClusterScopeParams{
40+
Client: cl,
41+
Cluster: newCluster(),
42+
AWSCluster: newAWSCluster(),
43+
})
44+
}
45+
46+
func setupNewManagedControlPlaneScope(cl client.Client) (*scope.ManagedControlPlaneScope, error) {
47+
return scope.NewManagedControlPlaneScope(scope.ManagedControlPlaneScopeParams{
48+
Client: cl,
49+
Cluster: newCluster(),
50+
ControlPlane: newAWSManagedControlPlane(),
51+
})
52+
}
53+
54+
func setupMachinePoolScope(cl client.Client, ec2Scope scope.EC2Scope) (*scope.MachinePoolScope, error) {
55+
return scope.NewMachinePoolScope(scope.MachinePoolScopeParams{
56+
Client: cl,
57+
InfraCluster: ec2Scope,
58+
Cluster: newCluster(),
59+
MachinePool: newMachinePool(),
60+
AWSMachinePool: newAWSMachinePool(),
61+
})
62+
}
63+
64+
func defaultEC2Tags(name, clusterName string) []*ec2.Tag {
65+
return []*ec2.Tag{
66+
{
67+
Key: aws.String("Name"),
68+
Value: aws.String(name),
69+
},
70+
{
71+
Key: aws.String(infrav1.ClusterAWSCloudProviderTagKey(clusterName)),
72+
Value: aws.String("owned"),
73+
},
74+
{
75+
Key: aws.String(infrav1.ClusterTagKey(clusterName)),
76+
Value: aws.String("owned"),
77+
},
78+
{
79+
Key: aws.String(infrav1.NameAWSClusterAPIRole),
80+
Value: aws.String("node"),
81+
},
4282
}
43-
if err := expinfrav1.AddToScheme(scheme); err != nil {
44-
return nil, err
83+
}
84+
85+
func newAWSMachinePool() *expinfrav1.AWSMachinePool {
86+
return &expinfrav1.AWSMachinePool{
87+
TypeMeta: metav1.TypeMeta{
88+
Kind: "AWSMachinePool",
89+
APIVersion: "v1",
90+
},
91+
ObjectMeta: metav1.ObjectMeta{
92+
Name: "aws-mp-name",
93+
Namespace: "aws-mp-ns",
94+
},
95+
Spec: expinfrav1.AWSMachinePoolSpec{
96+
AvailabilityZones: []string{"us-east-1"},
97+
AdditionalTags: infrav1.Tags{},
98+
AWSLaunchTemplate: expinfrav1.AWSLaunchTemplate{
99+
Name: "aws-launch-template",
100+
IamInstanceProfile: "instance-profile",
101+
AMI: infrav1.AMIReference{},
102+
InstanceType: "t3.large",
103+
SSHKeyName: aws.String("default"),
104+
AdditionalSecurityGroups: []infrav1.AWSResourceReference{{ID: aws.String("1")}},
105+
},
106+
},
107+
Status: expinfrav1.AWSMachinePoolStatus{
108+
LaunchTemplateID: "launch-template-id",
109+
},
45110
}
46-
return scheme, nil
47111
}
48112

49113
func newCluster() *clusterv1.Cluster {
@@ -70,28 +134,77 @@ func newAWSCluster() *infrav1.AWSCluster {
70134
Name: "aws-cluster-name",
71135
Namespace: "aws-cluster-ns",
72136
},
73-
Spec: infrav1.AWSClusterSpec{},
137+
Spec: infrav1.AWSClusterSpec{
138+
ImageLookupFormat: "img-lookup-format",
139+
ImageLookupBaseOS: "img-lookup-os",
140+
ImageLookupOrg: "img-lookup-org",
141+
},
74142
Status: infrav1.AWSClusterStatus{
75143
Ready: true,
76144
Network: infrav1.NetworkStatus{
77-
SecurityGroups: map[infrav1.SecurityGroupRole]infrav1.SecurityGroup{},
145+
SecurityGroups: map[infrav1.SecurityGroupRole]infrav1.SecurityGroup{
146+
infrav1.SecurityGroupNode: {ID: "nodeSG"},
147+
infrav1.SecurityGroupLB: {ID: "lbSG"},
148+
},
78149
},
79150
},
80151
}
81152
}
82153

83-
func setupClusterScope(g *WithT) *scope.ClusterScope {
84-
scheme, err := setupScheme()
85-
g.Expect(err).NotTo(HaveOccurred())
154+
func newAWSManagedControlPlane() *ekscontrolplanev1.AWSManagedControlPlane {
155+
return &ekscontrolplanev1.AWSManagedControlPlane{
156+
TypeMeta: metav1.TypeMeta{
157+
Kind: "AWSManagedControlPlane",
158+
APIVersion: "v1",
159+
},
160+
ObjectMeta: metav1.ObjectMeta{
161+
Name: "aws-cluster-name",
162+
Namespace: "aws-cluster-ns",
163+
},
164+
}
165+
}
86166

87-
awsCluster := newAWSCluster()
88-
client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(awsCluster).Build()
167+
func newMachinePool() *v1beta1.MachinePool {
168+
return &v1beta1.MachinePool{
169+
TypeMeta: metav1.TypeMeta{
170+
Kind: "MachinePool",
171+
APIVersion: "v1",
172+
},
173+
ObjectMeta: metav1.ObjectMeta{
174+
Name: "mp",
175+
},
176+
Spec: v1beta1.MachinePoolSpec{
177+
Template: clusterv1.MachineTemplateSpec{
178+
Spec: clusterv1.MachineSpec{
179+
Version: pointer.StringPtr("v1.23.3"),
180+
},
181+
},
182+
},
183+
}
184+
}
89185

90-
cs, err := scope.NewClusterScope(scope.ClusterScopeParams{
91-
Client: client,
92-
Cluster: newCluster(),
93-
AWSCluster: awsCluster,
186+
func sortTags(a []*ec2.Tag) {
187+
sort.Slice(a, func(i, j int) bool {
188+
return *(a[i].Key) < *(a[j].Key)
94189
})
95-
g.Expect(err).NotTo(HaveOccurred())
96-
return cs
190+
}
191+
192+
func setupScheme() (*runtime.Scheme, error) {
193+
scheme := runtime.NewScheme()
194+
if err := clusterv1.AddToScheme(scheme); err != nil {
195+
return nil, err
196+
}
197+
if err := corev1.AddToScheme(scheme); err != nil {
198+
return nil, err
199+
}
200+
if err := infrav1.AddToScheme(scheme); err != nil {
201+
return nil, err
202+
}
203+
if err := expinfrav1.AddToScheme(scheme); err != nil {
204+
return nil, err
205+
}
206+
if err := ekscontrolplanev1.AddToScheme(scheme); err != nil {
207+
return nil, err
208+
}
209+
return scheme, nil
97210
}

pkg/cloud/services/ec2/launchtemplate.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (s *Service) GetLaunchTemplate(launchTemplateName string) (*expinfrav1.AWSL
5757
return nil, "", err
5858
}
5959

60-
if len(out.LaunchTemplateVersions) == 0 {
60+
if out == nil || out.LaunchTemplateVersions == nil || len(out.LaunchTemplateVersions) == 0 {
6161
return nil, "", nil
6262
}
6363

@@ -84,7 +84,7 @@ func (s *Service) GetLaunchTemplateID(launchTemplateName string) (string, error)
8484
return "", err
8585
}
8686

87-
if len(out.LaunchTemplateVersions) == 0 {
87+
if out == nil || out.LaunchTemplateVersions == nil || len(out.LaunchTemplateVersions) == 0 {
8888
return "", nil
8989
}
9090

0 commit comments

Comments
 (0)