@@ -22,6 +22,8 @@ import (
22
22
23
23
"github.com/aws/aws-sdk-go/aws"
24
24
"github.com/aws/aws-sdk-go/service/ec2"
25
+ "github.com/aws/aws-sdk-go/service/elb"
26
+ "github.com/stretchr/testify/assert"
25
27
)
26
28
27
29
func TestElbProtocolsAreEqual (t * testing.T ) {
@@ -222,3 +224,135 @@ func TestSecurityGroupFiltering(t *testing.T) {
222
224
}
223
225
224
226
}
227
+
228
+ func TestSyncElbListeners (t * testing.T ) {
229
+ tests := []struct {
230
+ name string
231
+ loadBalancerName string
232
+ listeners []* elb.Listener
233
+ listenerDescriptions []* elb.ListenerDescription
234
+ toCreate []* elb.Listener
235
+ toDelete []* int64
236
+ }{
237
+ {
238
+ name : "no edge cases" ,
239
+ loadBalancerName : "lb_one" ,
240
+ listeners : []* elb.Listener {
241
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )},
242
+ {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )},
243
+ {InstancePort : aws .Int64 (8443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (8443 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )},
244
+ },
245
+ listenerDescriptions : []* elb.ListenerDescription {
246
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )}},
247
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (8443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (8443 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )}},
248
+ },
249
+ toDelete : []* int64 {
250
+ aws .Int64 (80 ),
251
+ },
252
+ toCreate : []* elb.Listener {
253
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )},
254
+ {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )},
255
+ },
256
+ },
257
+ {
258
+ name : "no listeners to delete" ,
259
+ loadBalancerName : "lb_two" ,
260
+ listeners : []* elb.Listener {
261
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )},
262
+ {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )},
263
+ },
264
+ listenerDescriptions : []* elb.ListenerDescription {
265
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )}},
266
+ },
267
+ toCreate : []* elb.Listener {
268
+ {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" ), SSLCertificateId : aws .String ("def-456" )},
269
+ },
270
+ toDelete : []* int64 {},
271
+ },
272
+ {
273
+ name : "no listeners to create" ,
274
+ loadBalancerName : "lb_three" ,
275
+ listeners : []* elb.Listener {
276
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )},
277
+ },
278
+ listenerDescriptions : []* elb.ListenerDescription {
279
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )}},
280
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )}},
281
+ },
282
+ toDelete : []* int64 {
283
+ aws .Int64 (80 ),
284
+ },
285
+ toCreate : []* elb.Listener {},
286
+ },
287
+ {
288
+ name : "nil actual listener" ,
289
+ loadBalancerName : "lb_four" ,
290
+ listeners : []* elb.Listener {
291
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" )},
292
+ },
293
+ listenerDescriptions : []* elb.ListenerDescription {
294
+ {Listener : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" ), SSLCertificateId : aws .String ("abc-123" )}},
295
+ {Listener : nil },
296
+ },
297
+ toDelete : []* int64 {
298
+ aws .Int64 (443 ),
299
+ },
300
+ toCreate : []* elb.Listener {
301
+ {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("HTTP" )},
302
+ },
303
+ },
304
+ }
305
+
306
+ for _ , test := range tests {
307
+ t .Run (test .name , func (t * testing.T ) {
308
+ additions , removals := syncElbListeners (test .loadBalancerName , test .listeners , test .listenerDescriptions )
309
+ assert .Equal (t , additions , test .toCreate )
310
+ assert .Equal (t , removals , test .toDelete )
311
+ })
312
+ }
313
+ }
314
+
315
+ func TestElbListenersAreEqual (t * testing.T ) {
316
+ tests := []struct {
317
+ name string
318
+ expected , actual * elb.Listener
319
+ equal bool
320
+ }{
321
+ {
322
+ name : "should be equal" ,
323
+ expected : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
324
+ actual : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
325
+ equal : true ,
326
+ },
327
+ {
328
+ name : "instance port should be different" ,
329
+ expected : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
330
+ actual : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
331
+ equal : false ,
332
+ },
333
+ {
334
+ name : "instance protocol should be different" ,
335
+ expected : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("HTTP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
336
+ actual : & elb.Listener {InstancePort : aws .Int64 (80 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
337
+ equal : false ,
338
+ },
339
+ {
340
+ name : "load balancer port should be different" ,
341
+ expected : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (443 ), Protocol : aws .String ("TCP" )},
342
+ actual : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
343
+ equal : false ,
344
+ },
345
+ {
346
+ name : "protocol should be different" ,
347
+ expected : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("TCP" )},
348
+ actual : & elb.Listener {InstancePort : aws .Int64 (443 ), InstanceProtocol : aws .String ("TCP" ), LoadBalancerPort : aws .Int64 (80 ), Protocol : aws .String ("HTTP" )},
349
+ equal : false ,
350
+ },
351
+ }
352
+
353
+ for _ , test := range tests {
354
+ t .Run (test .name , func (t * testing.T ) {
355
+ assert .Equal (t , test .equal , elbListenersAreEqual (test .expected , test .actual ))
356
+ })
357
+ }
358
+ }
0 commit comments