From 07ee8549149d520610a98b9a7932f638bc508b23 Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Wed, 15 Nov 2023 17:33:31 -0500 Subject: [PATCH] Tweaked order of ingress IPs in ServiceLB (#8711) * Tweaked order of ingress IPs in ServiceLB Previously, ingress IPs were only string-sorted when returned Sorted by IP family and string-sorted in each family as part of filterByIPFamily method * Update pkg/cloudprovider/servicelb.go * Formatting Signed-off-by: Jason Costello Co-authored-by: Brad Davidson --- pkg/cloudprovider/servicelb.go | 5 +++-- pkg/cloudprovider/servicelb_test.go | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/pkg/cloudprovider/servicelb.go b/pkg/cloudprovider/servicelb.go index fd5b4e756528..8d1cea0739d3 100644 --- a/pkg/cloudprovider/servicelb.go +++ b/pkg/cloudprovider/servicelb.go @@ -285,8 +285,6 @@ func (k *k3s) getStatus(svc *core.Service) (*core.LoadBalancerStatus, error) { return nil, err } - sort.Strings(expectedIPs) - loadbalancer := &core.LoadBalancerStatus{} for _, ip := range expectedIPs { loadbalancer.Ingress = append(loadbalancer.Ingress, core.LoadBalancerIngress{ @@ -393,6 +391,9 @@ func filterByIPFamily(ips []string, svc *core.Service) ([]string, error) { } } + sort.Strings(ipv4Addresses) + sort.Strings(ipv6Addresses) + for _, ipFamily := range svc.Spec.IPFamilies { switch ipFamily { case core.IPv4Protocol: diff --git a/pkg/cloudprovider/servicelb_test.go b/pkg/cloudprovider/servicelb_test.go index f12baeb4938a..6a25ade126b8 100644 --- a/pkg/cloudprovider/servicelb_test.go +++ b/pkg/cloudprovider/servicelb_test.go @@ -1,6 +1,7 @@ package cloudprovider import ( + "math/rand" "reflect" "testing" @@ -8,8 +9,10 @@ import ( ) const ( - addrv4 = "1.2.3.4" - addrv6 = "2001:db8::1" + addrv4 = "1.2.3.4" + addrv4_2 = "2.3.4.5" + addrv6 = "2001:db8::1" + addrv6_2 = "3001:db8::1" ) func Test_UnitFilterByIPFamily(t *testing.T) { @@ -89,3 +92,22 @@ func Test_UnitFilterByIPFamily(t *testing.T) { }) } } + +func Test_UnitFilterByIPFamily_Ordering(t *testing.T) { + want := []string{addrv4, addrv4_2, addrv6, addrv6_2} + ips := []string{addrv4, addrv4_2, addrv6, addrv6_2} + rand.Shuffle(len(ips), func(i, j int) { + ips[i], ips[j] = ips[j], ips[i] + }) + svc := &core.Service{ + Spec: core.ServiceSpec{ + IPFamilies: []core.IPFamily{core.IPv4Protocol, core.IPv6Protocol}, + }, + } + + got, _ := filterByIPFamily(ips, svc) + + if !reflect.DeepEqual(got, want) { + t.Errorf("filterByIPFamily() = %+v\nWant = %+v", got, want) + } +}