|
1 | 1 | package elbv2
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "context" |
| 5 | + "testing" |
| 6 | + |
4 | 7 | awssdk "github.com/aws/aws-sdk-go-v2/aws"
|
5 | 8 | elbv2types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
|
| 9 | + "github.com/go-logr/logr" |
| 10 | + "github.com/golang/mock/gomock" |
6 | 11 | "github.com/pkg/errors"
|
7 | 12 | "github.com/stretchr/testify/assert"
|
8 | 13 | "k8s.io/apimachinery/pkg/util/intstr"
|
9 | 14 | "sigs.k8s.io/aws-load-balancer-controller/pkg/config"
|
| 15 | + "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking" |
10 | 16 | coremodel "sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
|
11 | 17 | elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
|
12 |
| - "testing" |
| 18 | + "sigs.k8s.io/controller-runtime/pkg/log" |
13 | 19 | )
|
14 | 20 |
|
15 | 21 | func Test_matchResAndSDKTargetGroups(t *testing.T) {
|
@@ -992,3 +998,99 @@ func Test_isSDKTargetGroupRequiresReplacementDueToNLBHealthCheck(t *testing.T) {
|
992 | 998 | })
|
993 | 999 | }
|
994 | 1000 | }
|
| 1001 | +func Test_targetGroupSynthesizer_findSDKTargetGroups(t *testing.T) { |
| 1002 | + stack := coremodel.NewDefaultStack(coremodel.StackID{Namespace: "namespace", Name: "name"}) |
| 1003 | + logger := logr.New(log.NullLogSink{}) |
| 1004 | + |
| 1005 | + tests := []struct { |
| 1006 | + name string |
| 1007 | + cacheHasTargetGroups bool |
| 1008 | + cachedTargetGroups []TargetGroupWithTags |
| 1009 | + setupMocks func(mockTagging *MockTaggingManager) |
| 1010 | + wantTargetGroups []TargetGroupWithTags |
| 1011 | + wantError error |
| 1012 | + }{ |
| 1013 | + { |
| 1014 | + name: "should use cached target groups when available", |
| 1015 | + cacheHasTargetGroups: true, |
| 1016 | + cachedTargetGroups: []TargetGroupWithTags{ |
| 1017 | + { |
| 1018 | + TargetGroup: &elbv2types.TargetGroup{ |
| 1019 | + TargetGroupArn: awssdk.String("cached-arn"), |
| 1020 | + }, |
| 1021 | + }, |
| 1022 | + }, |
| 1023 | + wantTargetGroups: []TargetGroupWithTags{ |
| 1024 | + { |
| 1025 | + TargetGroup: &elbv2types.TargetGroup{ |
| 1026 | + TargetGroupArn: awssdk.String("cached-arn"), |
| 1027 | + }, |
| 1028 | + }, |
| 1029 | + }, |
| 1030 | + }, |
| 1031 | + { |
| 1032 | + name: "should fetch from AWS when cache is empty", |
| 1033 | + cacheHasTargetGroups: false, |
| 1034 | + setupMocks: func(mockTagging *MockTaggingManager) { |
| 1035 | + mockTagging.EXPECT().ListTargetGroups(gomock.Any(), gomock.Any(), gomock.Any()).Return( |
| 1036 | + []TargetGroupWithTags{ |
| 1037 | + { |
| 1038 | + TargetGroup: &elbv2types.TargetGroup{ |
| 1039 | + TargetGroupArn: awssdk.String("aws-arn"), |
| 1040 | + }, |
| 1041 | + }, |
| 1042 | + }, nil) |
| 1043 | + }, |
| 1044 | + wantTargetGroups: []TargetGroupWithTags{ |
| 1045 | + { |
| 1046 | + TargetGroup: &elbv2types.TargetGroup{ |
| 1047 | + TargetGroupArn: awssdk.String("aws-arn"), |
| 1048 | + }, |
| 1049 | + }, |
| 1050 | + }, |
| 1051 | + }, |
| 1052 | + { |
| 1053 | + name: "should return error from AWS", |
| 1054 | + cacheHasTargetGroups: false, |
| 1055 | + setupMocks: func(mockTagging *MockTaggingManager) { |
| 1056 | + mockTagging.EXPECT().ListTargetGroups(gomock.Any(), gomock.Any(), gomock.Any()).Return( |
| 1057 | + nil, errors.New("aws error")) |
| 1058 | + }, |
| 1059 | + wantError: errors.New("aws error"), |
| 1060 | + }, |
| 1061 | + } |
| 1062 | + |
| 1063 | + for _, tt := range tests { |
| 1064 | + t.Run(tt.name, func(t *testing.T) { |
| 1065 | + ctrl := gomock.NewController(t) |
| 1066 | + defer ctrl.Finish() |
| 1067 | + |
| 1068 | + cache := NewTargetGroupCache() |
| 1069 | + if tt.cacheHasTargetGroups { |
| 1070 | + cache.SetSDKTargetGroups(tt.cachedTargetGroups) |
| 1071 | + } |
| 1072 | + |
| 1073 | + mockTaggingManager := NewMockTaggingManager(ctrl) |
| 1074 | + if tt.setupMocks != nil { |
| 1075 | + tt.setupMocks(mockTaggingManager) |
| 1076 | + } |
| 1077 | + |
| 1078 | + synthesizer := &targetGroupSynthesizer{ |
| 1079 | + trackingProvider: tracking.NewDefaultProvider("ingress.k8s.aws", "my-cluster"), |
| 1080 | + taggingManager: mockTaggingManager, |
| 1081 | + logger: logger, |
| 1082 | + stack: stack, |
| 1083 | + targetGroupCache: cache, |
| 1084 | + } |
| 1085 | + |
| 1086 | + gotTargetGroups, gotErr := synthesizer.findSDKTargetGroups(context.Background()) |
| 1087 | + |
| 1088 | + if tt.wantError != nil { |
| 1089 | + assert.EqualError(t, gotErr, tt.wantError.Error()) |
| 1090 | + } else { |
| 1091 | + assert.NoError(t, gotErr) |
| 1092 | + assert.Equal(t, tt.wantTargetGroups, gotTargetGroups) |
| 1093 | + } |
| 1094 | + }) |
| 1095 | + } |
| 1096 | +} |
0 commit comments