From accf3871bb4bdbd0c8e835833839bf010060a8e1 Mon Sep 17 00:00:00 2001 From: Helene Durand Date: Mon, 10 Feb 2025 10:54:14 +0100 Subject: [PATCH] TEST/MINOR: add unit test for balance annotation --- pkg/annotations/service/loadbalance.go | 4 +- test/annotations/loadbalance_test.go | 117 +++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 test/annotations/loadbalance_test.go diff --git a/pkg/annotations/service/loadbalance.go b/pkg/annotations/service/loadbalance.go index 133bf82f..d4ac7db4 100644 --- a/pkg/annotations/service/loadbalance.go +++ b/pkg/annotations/service/loadbalance.go @@ -34,7 +34,7 @@ func (a *LoadBalance) Process(k store.K8s, annotations ...map[string]string) err } var params *models.Balance var err error - params, err = getParamsFromInput(input) + params, err = GetParamsFromInput(input) if err != nil { return fmt.Errorf("load-balance: %w", err) } @@ -46,7 +46,7 @@ func (a *LoadBalance) Process(k store.K8s, annotations ...map[string]string) err return nil } -func getParamsFromInput(value string) (*models.Balance, error) { +func GetParamsFromInput(value string) (*models.Balance, error) { balance := &models.Balance{} tokens := strings.Split(value, " ") if len(tokens) == 0 { diff --git a/test/annotations/loadbalance_test.go b/test/annotations/loadbalance_test.go new file mode 100644 index 00000000..0b21fc85 --- /dev/null +++ b/test/annotations/loadbalance_test.go @@ -0,0 +1,117 @@ +package annotations_test + +import ( + "reflect" + "testing" + + "github.com/haproxytech/client-native/v5/models" + "github.com/haproxytech/kubernetes-ingress/pkg/annotations/service" + "github.com/haproxytech/kubernetes-ingress/pkg/utils" +) + +func TestGetParamsFromInput(t *testing.T) { + type args struct { + value string + } + tests := []struct { + name string + args args + want *models.Balance + wantErr bool + }{ + { + name: "roundrobin", + args: args{ + value: "roundrobin", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("roundrobin"), + }, + }, + { + name: "hdr", + args: args{ + value: "hdr(User-Agent)", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("hdr"), + HdrName: "User-Agent", + }, + }, + { + name: "hdr-2", + args: args{ + value: "hdr(Host) use_domain_only", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("hdr"), + HdrName: "Host", + HdrUseDomainOnly: true, + }, + }, + { + name: "random ok", + args: args{ + value: "random(10)", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("random"), + RandomDraws: 10, + }, + }, + { + name: "random ko", + args: args{ + value: "random(notok)", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("random"), + }, + wantErr: true, + }, + { + name: "rdp cookie", + args: args{ + value: "rdp-cookie(cookiename)", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("rdp-cookie"), + RdpCookieName: "cookiename", + }, + }, + { + name: "url_param", + args: args{ + value: "url_param session_id check_post 64", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("url_param"), + URLParam: "session_id", + URLParamCheckPost: 64, + }, + }, + { + name: "uri", + args: args{ + value: "uri len 2 depth 3", + }, + want: &models.Balance{ + Algorithm: utils.PtrString("uri"), + URILen: 2, + URIDepth: 3, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := service.GetParamsFromInput(tt.args.value) + if (err != nil) != tt.wantErr { + t.Errorf("GetParamsFromInput() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("GetParamsFromInput() = %v, want %v", got, tt.want) + } + }) + } +}