diff mbox series

[ovs-dev] tests: Don't assume first bucket will be chosen.

Message ID 20250502161632.27412-1-fnordahl@ubuntu.com
State Accepted
Headers show
Series [ovs-dev] tests: Don't assume first bucket will be chosen. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_ovn-kubernetes success github build: passed
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Frode Nordahl May 2, 2025, 4:16 p.m. UTC
The commit in the fixes tag introduced a system test that configure
load balancers with multiple backends.

Load balancers are implemented with the group action with equally
weighted buckets.

One of the assertions in the added system test are on there being
exactly one backends being utilized, and this assertion assumes
that the first bucket of the group will be used.

As demonstrated by the reported bug, this is not a correct
assumption, and factors such as system architecture may play a
role in which bucket will be selected.

Since the purpose of the assertion is to confirm only one backend
is utilized, we do not need to match on the exact IP address.

Clear the reply src value, allowing us to assert on there being one
data path flow, regardless of which bucket is chosen.

Reported-at: https://launchpad.net/bugs/2104227
Fixes: 15ab046e12cd ("northd: Add ipv6_{src, dst} to selection_fields column in the NB db.")
Signed-off-by: Frode Nordahl <fnordahl@ubuntu.com>
---
 tests/system-ovn.at | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

A successufl test run on s390x architecture can be viewed here:
https://github.com/canonical/ubuntu-ovn-robot/actions/runs/14798878414

Comments

Ales Musil May 16, 2025, 10:12 a.m. UTC | #1
On Fri, May 2, 2025 at 6:16 PM Frode Nordahl <fnordahl@ubuntu.com> wrote:

> The commit in the fixes tag introduced a system test that configure
> load balancers with multiple backends.
>
> Load balancers are implemented with the group action with equally
> weighted buckets.
>
> One of the assertions in the added system test are on there being
> exactly one backends being utilized, and this assertion assumes
> that the first bucket of the group will be used.
>
> As demonstrated by the reported bug, this is not a correct
> assumption, and factors such as system architecture may play a
> role in which bucket will be selected.
>
> Since the purpose of the assertion is to confirm only one backend
> is utilized, we do not need to match on the exact IP address.
>
> Clear the reply src value, allowing us to assert on there being one
> data path flow, regardless of which bucket is chosen.
>
> Reported-at: https://launchpad.net/bugs/2104227
> Fixes: 15ab046e12cd ("northd: Add ipv6_{src, dst} to selection_fields
> column in the NB db.")
> Signed-off-by: Frode Nordahl <fnordahl@ubuntu.com>
> ---
>  tests/system-ovn.at | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> A successufl test run on s390x architecture can be viewed here:
> https://github.com/canonical/ubuntu-ovn-robot/actions/runs/14798878414
>
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index 6e71286ad..b3990d848 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -2024,8 +2024,9 @@ done
>
>  # Only one backend should be chosen.
>  AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(30.0.0.1) | \
> -sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
>
> -tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=<cleared>,dport=<cleared>),reply=(src=172.16.1.2,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
> +sed -e 's/zone=[[0-9]]*/zone=<cleared>/' \
> +    -e 's/src=172.16.1.[[0-9]]*/src=<cleared>/'], [0], [dnl
>
> +tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=<cleared>,dport=<cleared>),reply=(src=<cleared>,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
>  ])
>
>  for i in $(seq 1 20); do
> @@ -2035,8 +2036,9 @@ done
>
>  # Only one backend should be chosen.
>  AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd03::2) | \
> -sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
>
> -tcp,orig=(src=fd01::2,dst=fd03::2,sport=<cleared>,dport=<cleared>),reply=(src=fd02::2,dst=fd01::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
> +sed -e 's/zone=[[0-9]]*/zone=<cleared>/' \
> +    -e 's/src=fd02::[[0-f]]*/src=<cleared>/'], [0], [dnl
>
> +tcp,orig=(src=fd01::2,dst=fd03::2,sport=<cleared>,dport=<cleared>),reply=(src=<cleared>,dst=fd01::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
>  ])
>
>  # Test load-balancing using IP src and IP dst.
> --
> 2.43.0
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Thank you Frode,

I went ahead and merged this into and backported to 25.03.

Regards,
Ales
diff mbox series

Patch

diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index 6e71286ad..b3990d848 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -2024,8 +2024,9 @@  done
 
 # Only one backend should be chosen.
 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(30.0.0.1) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
-tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=<cleared>,dport=<cleared>),reply=(src=172.16.1.2,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
+sed -e 's/zone=[[0-9]]*/zone=<cleared>/' \
+    -e 's/src=172.16.1.[[0-9]]*/src=<cleared>/'], [0], [dnl
+tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=<cleared>,dport=<cleared>),reply=(src=<cleared>,dst=192.168.1.2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
 
 for i in $(seq 1 20); do
@@ -2035,8 +2036,9 @@  done
 
 # Only one backend should be chosen.
 AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd03::2) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/'], [0], [dnl
-tcp,orig=(src=fd01::2,dst=fd03::2,sport=<cleared>,dport=<cleared>),reply=(src=fd02::2,dst=fd01::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
+sed -e 's/zone=[[0-9]]*/zone=<cleared>/' \
+    -e 's/src=fd02::[[0-f]]*/src=<cleared>/'], [0], [dnl
+tcp,orig=(src=fd01::2,dst=fd03::2,sport=<cleared>,dport=<cleared>),reply=(src=<cleared>,dst=fd01::2,sport=<cleared>,dport=<cleared>),zone=<cleared>,mark=2,protoinfo=(state=<cleared>)
 ])
 
 # Test load-balancing using IP src and IP dst.