Skip to content

Commit b0a1f0a

Browse files
add tests for other tags overriding default tags
1 parent b940af8 commit b0a1f0a

15 files changed

+1677
-13
lines changed

pkg/algorithm/maps.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package algorithm
22

33
import (
4-
"strings"
5-
64
"k8s.io/apimachinery/pkg/util/sets"
5+
"strings"
76
)
87

98
// MapFindFirst get from list of maps until first found.

pkg/config/controller_config.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package config
22

33
import (
4+
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_constants"
45
"strings"
56
"time"
67

7-
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_constants"
8-
98
"github.com/pkg/errors"
109
"github.com/spf13/pflag"
1110
"k8s.io/apimachinery/pkg/util/sets"

pkg/deploy/elbv2/tagging_manager.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package elbv2
22

33
import (
44
"context"
5+
elbv2types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
56
"sync"
67
"time"
78

8-
elbv2types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
9-
109
"k8s.io/apimachinery/pkg/util/cache"
1110

1211
awssdk "github.com/aws/aws-sdk-go-v2/aws"

pkg/deploy/tracking/provider.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package tracking
22

33
import (
44
"fmt"
5-
65
"sigs.k8s.io/aws-load-balancer-controller/pkg/algorithm"
76
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
87
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_constants"

pkg/ingress/model_build_frontend_nlb_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"k8s.io/apimachinery/pkg/util/intstr"
1616
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
1717
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
18+
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
1819
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
1920
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
2021
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
@@ -987,7 +988,8 @@ func Test_buildFrontendNlbTags(t *testing.T) {
987988
ingGroup: tt.ingGroup,
988989
annotationParser: annotations.NewSuffixAnnotationParser("alb.ingress.kubernetes.io"),
989990
// Default implementation will return an empty map when no tags are specified
990-
defaultTags: tt.defaultTags,
991+
defaultTags: tt.defaultTags,
992+
featureGates: config.NewFeatureGates(),
991993
}
992994

993995
got, err := task.buildFrontendNlbTags(context.Background(), nil)

pkg/ingress/model_build_listener_rules_test.go

Lines changed: 216 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package ingress
22

33
import (
4+
"context"
5+
"testing"
6+
47
awssdk "github.com/aws/aws-sdk-go-v2/aws"
58
"github.com/pkg/errors"
69
"github.com/stretchr/testify/assert"
710
networking "k8s.io/api/networking/v1"
8-
"testing"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
13+
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
914
)
1015

1116
func Test_defaultModelBuildTask_sortIngressPath(t *testing.T) {
@@ -675,3 +680,213 @@ func Test_defaultModelBuildTask_buildPathPatternsForPrefixPathType(t *testing.T)
675680
})
676681
}
677682
}
683+
684+
func Test_defaultModelBuildTask_buildListenerRuleTags(t *testing.T) {
685+
type fields struct {
686+
ing ClassifiedIngress
687+
defaultTags map[string]string
688+
}
689+
tests := []struct {
690+
name string
691+
fields fields
692+
want map[string]string
693+
wantErr error
694+
}{
695+
{
696+
name: "empty default tags, no tags annotation",
697+
fields: fields{
698+
ing: ClassifiedIngress{
699+
Ing: &networking.Ingress{
700+
ObjectMeta: metav1.ObjectMeta{
701+
Namespace: "awesome-ns",
702+
Name: "ing-1",
703+
Annotations: map[string]string{},
704+
},
705+
},
706+
},
707+
defaultTags: nil,
708+
},
709+
want: map[string]string{},
710+
},
711+
{
712+
name: "empty default tags, non-empty tags annotation",
713+
fields: fields{
714+
ing: ClassifiedIngress{
715+
Ing: &networking.Ingress{
716+
ObjectMeta: metav1.ObjectMeta{
717+
Namespace: "awesome-ns",
718+
Name: "ing-1",
719+
Annotations: map[string]string{
720+
"alb.ingress.kubernetes.io/tags": "k1=v1,k2=v2",
721+
},
722+
},
723+
},
724+
},
725+
defaultTags: nil,
726+
},
727+
want: map[string]string{
728+
"k1": "v1",
729+
"k2": "v2",
730+
},
731+
},
732+
{
733+
name: "non-empty default tags, empty tags annotation",
734+
fields: fields{
735+
ing: ClassifiedIngress{
736+
Ing: &networking.Ingress{
737+
ObjectMeta: metav1.ObjectMeta{
738+
Namespace: "awesome-ns",
739+
Name: "ing-1",
740+
Annotations: map[string]string{},
741+
},
742+
},
743+
},
744+
defaultTags: map[string]string{
745+
"k3": "v3",
746+
"k4": "v4",
747+
},
748+
},
749+
want: map[string]string{
750+
"k3": "v3",
751+
"k4": "v4",
752+
},
753+
},
754+
{
755+
name: "non-empty default tags, non-empty tags annotation",
756+
fields: fields{
757+
ing: ClassifiedIngress{
758+
Ing: &networking.Ingress{
759+
ObjectMeta: metav1.ObjectMeta{
760+
Namespace: "awesome-ns",
761+
Name: "ing-1",
762+
Annotations: map[string]string{
763+
"alb.ingress.kubernetes.io/tags": "k1=v1,k2=v2,k3=v3a",
764+
},
765+
},
766+
},
767+
},
768+
defaultTags: map[string]string{
769+
"k3": "v3",
770+
"k4": "v4",
771+
},
772+
},
773+
want: map[string]string{
774+
"k1": "v1",
775+
"k2": "v2",
776+
"k3": "v3",
777+
"k4": "v4",
778+
},
779+
},
780+
}
781+
for _, tt := range tests {
782+
t.Run(tt.name, func(t *testing.T) {
783+
task := &defaultModelBuildTask{
784+
defaultTags: tt.fields.defaultTags,
785+
annotationParser: annotations.NewSuffixAnnotationParser("alb.ingress.kubernetes.io"),
786+
featureGates: config.NewFeatureGates(),
787+
}
788+
got, err := task.buildListenerRuleTags(context.Background(), tt.fields.ing)
789+
if tt.wantErr != nil {
790+
assert.EqualError(t, err, tt.wantErr.Error())
791+
} else {
792+
assert.NoError(t, err)
793+
assert.Equal(t, tt.want, got)
794+
}
795+
})
796+
}
797+
}
798+
799+
func Test_defaultModelBuildTask_buildListenerRuleTags_FeatureGate(t *testing.T) {
800+
type fields struct {
801+
ing ClassifiedIngress
802+
defaultTags map[string]string
803+
enabledFeatureGates func() config.FeatureGates
804+
}
805+
tests := []struct {
806+
name string
807+
fields fields
808+
want map[string]string
809+
wantErr error
810+
}{
811+
{
812+
name: "default tags take priority when feature gate disabled",
813+
fields: fields{
814+
ing: ClassifiedIngress{
815+
Ing: &networking.Ingress{
816+
ObjectMeta: metav1.ObjectMeta{
817+
Namespace: "awesome-ns",
818+
Name: "ing-1",
819+
Annotations: map[string]string{
820+
"alb.ingress.kubernetes.io/tags": "k1=v1,k2=v2,k3=v3",
821+
},
822+
},
823+
},
824+
},
825+
defaultTags: map[string]string{
826+
"k1": "v10",
827+
"k2": "v20",
828+
},
829+
enabledFeatureGates: func() config.FeatureGates {
830+
featureGates := config.NewFeatureGates()
831+
featureGates.Disable(config.EnableDefaultTagsLowPriority)
832+
return featureGates
833+
},
834+
},
835+
want: map[string]string{
836+
"k1": "v10",
837+
"k2": "v20",
838+
"k3": "v3",
839+
},
840+
},
841+
{
842+
name: "annotation tags take priority when feature gate enabled",
843+
fields: fields{
844+
ing: ClassifiedIngress{
845+
Ing: &networking.Ingress{
846+
ObjectMeta: metav1.ObjectMeta{
847+
Namespace: "awesome-ns",
848+
Name: "ing-1",
849+
Annotations: map[string]string{
850+
"alb.ingress.kubernetes.io/tags": "k1=v1,k2=v2,k3=v3",
851+
},
852+
},
853+
},
854+
},
855+
defaultTags: map[string]string{
856+
"k1": "v10",
857+
"k2": "v20",
858+
},
859+
enabledFeatureGates: func() config.FeatureGates {
860+
featureGates := config.NewFeatureGates()
861+
featureGates.Enable(config.EnableDefaultTagsLowPriority)
862+
return featureGates
863+
},
864+
},
865+
want: map[string]string{
866+
"k1": "v1",
867+
"k2": "v2",
868+
"k3": "v3",
869+
},
870+
},
871+
}
872+
for _, tt := range tests {
873+
t.Run(tt.name, func(t *testing.T) {
874+
task := &defaultModelBuildTask{
875+
defaultTags: tt.fields.defaultTags,
876+
annotationParser: annotations.NewSuffixAnnotationParser("alb.ingress.kubernetes.io"),
877+
featureGates: tt.fields.enabledFeatureGates(),
878+
}
879+
got, err := task.buildListenerRuleTags(context.Background(), tt.fields.ing)
880+
if tt.wantErr != nil {
881+
assert.EqualError(t, err, tt.wantErr.Error())
882+
} else {
883+
assert.NoError(t, err)
884+
assert.Equal(t, tt.want, got)
885+
}
886+
for key, value := range tt.want {
887+
assert.Contains(t, got, key)
888+
assert.Equal(t, value, got[key])
889+
}
890+
})
891+
}
892+
}

0 commit comments

Comments
 (0)