@@ -2,13 +2,14 @@ package networking
22
33import (
44 "context"
5+ "reflect"
6+ "testing"
7+
58 ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
69 "github.com/aws/smithy-go"
710 "k8s.io/apimachinery/pkg/types"
8- "reflect"
911 "sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
1012 gwv1 "sigs.k8s.io/gateway-api/apis/v1"
11- "testing"
1213
1314 "github.com/go-logr/logr"
1415 corev1 "k8s.io/api/core/v1"
@@ -42,14 +43,26 @@ func Test_defaultBackendSGProvider_Get(t *testing.T) {
4243 resp * ec2sdk.CreateSecurityGroupOutput
4344 err error
4445 }
46+ type createTagsWithContextCall struct {
47+ req * ec2sdk.CreateTagsInput
48+ resp * ec2sdk.CreateTagsOutput
49+ err error
50+ }
51+ type deleteTagsWithContextCall struct {
52+ req * ec2sdk.DeleteTagsInput
53+ resp * ec2sdk.DeleteTagsOutput
54+ err error
55+ }
4556 type fields struct {
46- backendSG string
47- ingResources []* networking.Ingress
48- svcResource * corev1.Service
49- enableGatewayCheck bool
50- defaultTags map [string ]string
51- describeSGCalls []describeSecurityGroupsAsListCall
52- createSGCalls []createSecurityGroupWithContexCall
57+ backendSG string
58+ ingResources []* networking.Ingress
59+ svcResource * corev1.Service
60+ enableGatewayCheck bool
61+ defaultTags map [string ]string
62+ describeSGCalls []describeSecurityGroupsAsListCall
63+ createSGCalls []createSecurityGroupWithContexCall
64+ createTagsWithContextCalls []createTagsWithContextCall
65+ deleteTagsWithContextCalls []deleteTagsWithContextCall
5366 }
5467 defaultEC2Filters := []ec2types.Filter {
5568 {
@@ -112,10 +125,153 @@ func Test_defaultBackendSGProvider_Get(t *testing.T) {
112125 },
113126 },
114127 },
128+ createTagsWithContextCalls : []createTagsWithContextCall {
129+ {
130+ req : & ec2sdk.CreateTagsInput {
131+ Resources : []string {"sg-autogen" },
132+ Tags : []ec2types.Tag {
133+ {
134+ Key : awssdk .String ("elbv2.k8s.aws/cluster" ),
135+ Value : awssdk .String (defaultClusterName ),
136+ },
137+ {
138+ Key : awssdk .String ("elbv2.k8s.aws/resource" ),
139+ Value : awssdk .String ("backend-sg" ),
140+ },
141+ },
142+ },
143+ },
144+ },
145+ ingResources : []* networking.Ingress {ing , ing1 },
146+ },
147+ want : "sg-autogen" ,
148+ },
149+ {
150+ name : "backend sg enabled, auto-gen, SG exists, try to sync tags" ,
151+ fields : fields {
152+ describeSGCalls : []describeSecurityGroupsAsListCall {
153+ {
154+ req : & ec2sdk.DescribeSecurityGroupsInput {
155+ Filters : defaultEC2Filters ,
156+ },
157+ resp : []ec2types.SecurityGroup {
158+ {
159+ GroupId : awssdk .String ("sg-autogen" ),
160+ Tags : []ec2types.Tag {
161+ {
162+ Key : awssdk .String ("tag-to-be-deleted" ),
163+ Value : awssdk .String ("delete-me" ),
164+ },
165+ },
166+ },
167+ },
168+ },
169+ },
170+ createTagsWithContextCalls : []createTagsWithContextCall {
171+ {
172+ req : & ec2sdk.CreateTagsInput {
173+ Resources : []string {"sg-autogen" },
174+ Tags : []ec2types.Tag {
175+ {
176+ Key : awssdk .String ("KubernetesCluster" ),
177+ Value : awssdk .String (defaultClusterName ),
178+ },
179+ {
180+ Key : awssdk .String ("defaultTag" ),
181+ Value : awssdk .String ("specified" ),
182+ },
183+ {
184+ Key : awssdk .String ("elbv2.k8s.aws/cluster" ),
185+ Value : awssdk .String (defaultClusterName ),
186+ },
187+ {
188+ Key : awssdk .String ("elbv2.k8s.aws/resource" ),
189+ Value : awssdk .String ("backend-sg" ),
190+ },
191+ {
192+ Key : awssdk .String ("zzzKey" ),
193+ Value : awssdk .String ("value" ),
194+ },
195+ },
196+ },
197+ },
198+ },
199+ deleteTagsWithContextCalls : []deleteTagsWithContextCall {
200+ {
201+ req : & ec2sdk.DeleteTagsInput {
202+ Resources : []string {"sg-autogen" },
203+ Tags : []ec2types.Tag {
204+ {
205+ Key : awssdk .String ("tag-to-be-deleted" ),
206+ Value : awssdk .String ("delete-me" ),
207+ },
208+ },
209+ },
210+ },
211+ },
212+ defaultTags : map [string ]string {
213+ "zzzKey" : "value" ,
214+ "KubernetesCluster" : defaultClusterName ,
215+ "defaultTag" : "specified" ,
216+ },
115217 ingResources : []* networking.Ingress {ing , ing1 },
116218 },
117219 want : "sg-autogen" ,
118220 },
221+ {
222+ name : "backend sg enabled, auto-gen, SG exists, tags sync error" ,
223+ fields : fields {
224+ describeSGCalls : []describeSecurityGroupsAsListCall {
225+ {
226+ req : & ec2sdk.DescribeSecurityGroupsInput {
227+ Filters : defaultEC2Filters ,
228+ },
229+ resp : []ec2types.SecurityGroup {
230+ {
231+ GroupId : awssdk .String ("sg-autogen" ),
232+ },
233+ },
234+ },
235+ },
236+ createTagsWithContextCalls : []createTagsWithContextCall {
237+ {
238+ req : & ec2sdk.CreateTagsInput {
239+ Resources : []string {"sg-autogen" },
240+ Tags : []ec2types.Tag {
241+ {
242+ Key : awssdk .String ("KubernetesCluster" ),
243+ Value : awssdk .String (defaultClusterName ),
244+ },
245+ {
246+ Key : awssdk .String ("defaultTag" ),
247+ Value : awssdk .String ("specified" ),
248+ },
249+ {
250+ Key : awssdk .String ("elbv2.k8s.aws/cluster" ),
251+ Value : awssdk .String (defaultClusterName ),
252+ },
253+ {
254+ Key : awssdk .String ("elbv2.k8s.aws/resource" ),
255+ Value : awssdk .String ("backend-sg" ),
256+ },
257+ {
258+ Key : awssdk .String ("zzzKey" ),
259+ Value : awssdk .String ("value" ),
260+ },
261+ },
262+ },
263+ err : & smithy.GenericAPIError {Code : "Some.Other.Error" , Message : "unable to tag security group" },
264+ },
265+ },
266+ defaultTags : map [string ]string {
267+ "zzzKey" : "value" ,
268+ "KubernetesCluster" : defaultClusterName ,
269+ "defaultTag" : "specified" ,
270+ },
271+ svcResource : svc ,
272+ },
273+ wantErr : errors .New ("api error Some.Other.Error: unable to tag security group" ),
274+ },
119275 {
120276 name : "backend sg enabled, auto-gen new SG" ,
121277 fields : fields {
@@ -285,6 +441,12 @@ func Test_defaultBackendSGProvider_Get(t *testing.T) {
285441 for _ , call := range tt .fields .createSGCalls {
286442 ec2Client .EXPECT ().CreateSecurityGroupWithContext (context .Background (), call .req ).Return (call .resp , call .err )
287443 }
444+ for _ , call := range tt .fields .createTagsWithContextCalls {
445+ ec2Client .EXPECT ().CreateTagsWithContext (context .Background (), call .req ).Return (call .resp , call .err )
446+ }
447+ for _ , call := range tt .fields .deleteTagsWithContextCalls {
448+ ec2Client .EXPECT ().DeleteTagsWithContext (gomock .Any (), call .req ).Return (call .resp , call .err )
449+ }
288450 k8sClient := mock_client .NewMockClient (ctrl )
289451 sgProvider := NewBackendSGProvider (defaultClusterName , tt .fields .backendSG ,
290452 defaultVPCID , ec2Client , k8sClient , tt .fields .defaultTags , tt .fields .enableGatewayCheck , logr .New (& log.NullLogSink {}))
0 commit comments