@@ -3,8 +3,10 @@ package ingress
3
3
import (
4
4
"context"
5
5
awssdk "github.com/aws/aws-sdk-go/aws"
6
+ "github.com/pkg/errors"
6
7
"github.com/stretchr/testify/assert"
7
8
corev1 "k8s.io/api/core/v1"
9
+ networking "k8s.io/api/networking/v1beta1"
8
10
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9
11
"k8s.io/apimachinery/pkg/types"
10
12
"k8s.io/apimachinery/pkg/util/intstr"
@@ -510,3 +512,126 @@ func Test_defaultModelBuildTask_buildTargetGroupHealthCheckMatcher(t *testing.T)
510
512
})
511
513
}
512
514
}
515
+
516
+ func Test_defaultModelBuildTask_buildTargetGroupBindingNodeSelector (t * testing.T ) {
517
+ type fields struct {
518
+ ing * networking.Ingress
519
+ svc * corev1.Service
520
+ targetType elbv2model.TargetType
521
+ }
522
+ tests := []struct {
523
+ name string
524
+ fields fields
525
+ want * metav1.LabelSelector
526
+ wantErr error
527
+ }{
528
+ {
529
+ name : "no annotation" ,
530
+ fields : fields {
531
+ ing : & networking.Ingress {
532
+ ObjectMeta : metav1.ObjectMeta {
533
+ Annotations : map [string ]string {},
534
+ },
535
+ },
536
+ svc : & corev1.Service {},
537
+ },
538
+ want : nil ,
539
+ },
540
+ {
541
+ name : "ingress has annotation" ,
542
+ fields : fields {
543
+ ing : & networking.Ingress {
544
+ ObjectMeta : metav1.ObjectMeta {
545
+ Annotations : map [string ]string {
546
+ "alb.ingress.kubernetes.io/target-node-labels" : "key1=value1, node.label/key2=value.2" ,
547
+ },
548
+ },
549
+ },
550
+ svc : & corev1.Service {},
551
+ targetType : elbv2model .TargetTypeInstance ,
552
+ },
553
+ want : & metav1.LabelSelector {
554
+ MatchLabels : map [string ]string {
555
+ "key1" : "value1" ,
556
+ "node.label/key2" : "value.2" ,
557
+ },
558
+ },
559
+ },
560
+ {
561
+ name : "service annotation overrides ingress" ,
562
+ fields : fields {
563
+ ing : & networking.Ingress {
564
+ ObjectMeta : metav1.ObjectMeta {
565
+ Annotations : map [string ]string {
566
+ "alb.ingress.kubernetes.io/target-node-labels" : "key1=value1, node.label/key2=value.2" ,
567
+ },
568
+ },
569
+ },
570
+ svc : & corev1.Service {
571
+ ObjectMeta : metav1.ObjectMeta {
572
+ Annotations : map [string ]string {
573
+ "alb.ingress.kubernetes.io/target-node-labels" : "service/key1=value1.service, service.node.label/key2=value.2.service" ,
574
+ },
575
+ },
576
+ },
577
+ targetType : elbv2model .TargetTypeInstance ,
578
+ },
579
+ want : & metav1.LabelSelector {
580
+ MatchLabels : map [string ]string {
581
+ "service/key1" : "value1.service" ,
582
+ "service.node.label/key2" : "value.2.service" ,
583
+ },
584
+ },
585
+ },
586
+ {
587
+ name : "target type ip" ,
588
+ fields : fields {
589
+ ing : & networking.Ingress {
590
+ ObjectMeta : metav1.ObjectMeta {
591
+ Annotations : map [string ]string {
592
+ "alb.ingress.kubernetes.io/target-node-labels" : "key1=value1, node.label/key2=value.2" ,
593
+ },
594
+ },
595
+ },
596
+ svc : & corev1.Service {
597
+ ObjectMeta : metav1.ObjectMeta {
598
+ Annotations : map [string ]string {
599
+ "alb.ingress.kubernetes.io/target-node-labels" : "service/key1=value1.service, service.node.label/key2=value.2.service" ,
600
+ },
601
+ },
602
+ },
603
+ targetType : elbv2model .TargetTypeIP ,
604
+ },
605
+ want : nil ,
606
+ },
607
+ {
608
+ name : "annotation parse error" ,
609
+ fields : fields {
610
+ ing : & networking.Ingress {
611
+ ObjectMeta : metav1.ObjectMeta {
612
+ Annotations : map [string ]string {
613
+ "alb.ingress.kubernetes.io/target-node-labels" : "key1" ,
614
+ },
615
+ },
616
+ },
617
+ svc : & corev1.Service {},
618
+ targetType : elbv2model .TargetTypeInstance ,
619
+ },
620
+ wantErr : errors .New ("failed to parse stringMap annotation, alb.ingress.kubernetes.io/target-node-labels: key1" ),
621
+ },
622
+ }
623
+ for _ , tt := range tests {
624
+ t .Run (tt .name , func (t * testing.T ) {
625
+ task := & defaultModelBuildTask {
626
+ annotationParser : annotations .NewSuffixAnnotationParser ("alb.ingress.kubernetes.io" ),
627
+ }
628
+ got , err := task .buildTargetGroupBindingNodeSelector (context .Background (), tt .fields .ing , tt .fields .svc , tt .fields .targetType )
629
+ if tt .wantErr != nil {
630
+ assert .EqualError (t , err , tt .wantErr .Error ())
631
+ } else {
632
+ assert .NoError (t , err )
633
+ assert .Equal (t , tt .want , got )
634
+ }
635
+ })
636
+ }
637
+ }
0 commit comments