diff mbox series

[ovs-dev,1/2,branch-24.03] tests: Add macro for checking flows after recompute.

Message ID 20240509073543.563418-1-amusil@redhat.com
State Accepted
Headers show
Series [ovs-dev,1/2,branch-24.03] tests: Add macro for checking flows after recompute. | expand

Checks

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

Commit Message

Ales Musil May 9, 2024, 7:35 a.m. UTC
From: Xavier Simonart <xsimonar@redhat.com>

The macro CHECK_FLOWS_AFTER_RECOMPUTE dumps the Openflows, then
recomputes, then dumps again the Openflows, and finally compares
both sets of flows. The test fails if flows are different.
As of now, the macro cannot be used in all tests: many tests would fail
as I+P does not properly remove flows when the last logical port of
a datapath is deleted.

Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
Acked-by: Ales Musil <amusil@redhat.com>
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
(cherry picked from commit 69ec36eba074263c43051ade7578792b44518d2c)
---
 tests/ovn-macros.at | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
diff mbox series

Patch

diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at
index 5b1e37d8a..344fdd69c 100644
--- a/tests/ovn-macros.at
+++ b/tests/ovn-macros.at
@@ -10,6 +10,50 @@  m4_define([OVN_CLEANUP_VSWITCH],[
     OVS_APP_EXIT_AND_WAIT([ovsdb-server])
 ])
 
+# DUMP_FLOWS(sbox, output_file)
+# Dump openflows to output_file for sbox
+m4_define([DUMP_FLOWS], [
+    sbox=$1
+    output_file=$2
+    as $sbox
+    ovs-ofctl dump-flows br-int |
+          sed 's/cookie=0x[[^,]]*/cookie=xx/g' |
+          sed 's/duration=[[^,]]*/duration=xx/g' |
+          sed 's/idle_age=[[^,]]*/idle_age=xx/g' |
+          sed 's/, hard_age=[[^,]]*//g' |
+          sed 's/n_bytes=[[^,]]*/n_bytes=xx/g' |
+          sed 's/n_packets=[[^,]]*/n_packets=xx/g' |
+          sed 's/conjunction([[^,]]*/conjunction(xx/g' |
+          sort > $output_file
+])
+
+m4_define([CHECK_FLOWS_AFTER_RECOMPUTE], [
+    hv=$1
+    sbox=$2
+    # Make sure I+P has finalized his job before getting flows and comparing them after recompte.
+    # Some tests have northd and ovn-nb ovsdb stopped, so avoid ovn-nbctl for those.
+    if [[ -e ovn-nb/ovn-nb.sock ]] && [[ -e northd/ovn-northd.pid ]]; then
+        # Do wait twice to handle some potential race conditions
+        check ovn-nbctl --wait=hv sync
+        check ovn-nbctl --wait=hv sync
+    fi
+
+    as $sbox
+    if test "$hv" != "vtep"; then
+      # Get flows before and after recompute
+      DUMP_FLOWS([$sbox], [flows-$hv-1])
+
+      check ovn-appctl -t ovn-controller recompute
+      # The recompute might cause some sb changes. Let controller catch up.
+      if [[ -e ovn-nb/ovn-nb.sock ]] && [[ -e northd/ovn-northd.pid ]]; then
+          check ovn-nbctl --wait=hv sync
+      fi
+      DUMP_FLOWS([$sbox], [flows-$hv-2])
+      diff flows-$hv-1 flows-$hv-2 > flow-diff
+      AT_CHECK([test $(diff flows-$hv-1 flows-$hv-2 | wc -l) == 0])
+    fi
+])
+
 # OVN_CLEANUP_CONTROLLER(sbox)
 #
 # Gracefully terminate ovn-controller in the specified