diff --git a/pkg/openstack/loadbalancer_test.go b/pkg/openstack/loadbalancer_test.go index 060fe40ca2..d02996b291 100644 --- a/pkg/openstack/loadbalancer_test.go +++ b/pkg/openstack/loadbalancer_test.go @@ -1,6 +1,7 @@ package openstack import ( + "fmt" "reflect" "sort" "testing" @@ -787,3 +788,133 @@ func Test_buildPoolCreateOpt(t *testing.T) { }) } } + +func Test_getSubnetID(t *testing.T) { + type args struct { + svcConf *serviceConfig + service *corev1.Service + lbaasV2 *LbaasV2 + } + tests := []struct { + name string + args args + want string + expectedErr error + }{ + { + name: "test get subnet from service annotation", + args: args{ + svcConf: &serviceConfig{}, + lbaasV2: &LbaasV2{ + LoadBalancer{ + opts: LoadBalancerOpts{ + LBClasses: map[string]*LBClass{ + "test-class": { + SubnetID: "test-id", + FloatingNetworkID: "test-floating-network-id", + FloatingSubnetID: "test-floating-subnet-id", + FloatingSubnet: "test-floating-subnet", + NetworkID: "test-network-id", + FloatingSubnetTags: "test-floating-subnet-tags", + MemberSubnetID: "test-member-subnet-id", + }, + }, + }, + }, + }, + service: &corev1.Service{ + ObjectMeta: v1.ObjectMeta{ + Annotations: map[string]string{ + "loadbalancer.openstack.org/subnet-id": "test-id", + "loadbalancer.openstack.org/class": "test-class", + }, + }, + }, + }, + want: "test-id", + }, + { + name: "test get subnet from config class", + args: args{ + svcConf: &serviceConfig{}, + lbaasV2: &LbaasV2{ + LoadBalancer{ + opts: LoadBalancerOpts{ + LBClasses: map[string]*LBClass{ + "test-class": { + SubnetID: "test-class-subnet-id", + FloatingNetworkID: "test-floating-network-id", + FloatingSubnetID: "test-floating-subnet-id", + FloatingSubnet: "test-floating-subnet", + NetworkID: "test-network-id", + FloatingSubnetTags: "test-floating-subnet-tags", + MemberSubnetID: "test-member-subnet-id", + }, + }, + }, + }, + }, + service: &corev1.Service{ + ObjectMeta: v1.ObjectMeta{ + Annotations: map[string]string{ + "loadbalancer.openstack.org/class": "test-class", + }, + }, + }, + }, + want: "test-class-subnet-id", + expectedErr: nil, + }, + { + name: "test get subnet from config class with invalid loadbalancer class", + args: args{ + svcConf: &serviceConfig{}, + lbaasV2: &LbaasV2{ + LoadBalancer{ + opts: LoadBalancerOpts{ + SubnetID: "test-subnet-id", + }, + }, + }, + service: &corev1.Service{ + ObjectMeta: v1.ObjectMeta{ + Annotations: map[string]string{ + "loadbalancer.openstack.org/class": "test-class", + }, + }, + }, + }, + want: "", + expectedErr: fmt.Errorf("invalid loadbalancer class %q", "test-class"), + }, + { + name: "test get subnet from default config", + args: args{ + svcConf: &serviceConfig{}, + lbaasV2: &LbaasV2{ + LoadBalancer{ + opts: LoadBalancerOpts{ + SubnetID: "test-default-subnet-id", + }, + }, + }, + service: &corev1.Service{}, + }, + want: "test-default-subnet-id", + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.args.lbaasV2.getSubnetID(tt.args.service, tt.args.svcConf) + if tt.expectedErr != nil { + assert.EqualError(t, err, tt.expectedErr.Error()) + } + + if !assert.Equal(t, got, tt.want) { + t.Errorf("getSubnetID() = %v, expected %v", got, tt.want) + } + }) + } +}