diff mbox series

[ovs-dev] tests: Fix flakiness of policy based routing on slower systems

Message ID 20230510080427.195113-1-amusil@redhat.com
State Changes Requested
Headers show
Series [ovs-dev] tests: Fix flakiness of policy based routing on slower systems | expand

Checks

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

Commit Message

Ales Musil May 10, 2023, 8:04 a.m. UTC
The test expected that the packet statistics will be
immediately reflected after packet inject, however that
might not be true on slower systems. Use OVS_WAIT_UNTIL
instead to ensure that the packet really went through.
Also align the IPv4 and IPv6 variant and fix some checks
that were suggesting flow statistics check, but checked
logical flows instead.

Signed-off-by: Ales Musil <amusil@redhat.com>
---
 tests/ovn.at | 73 ++++++++++++++--------------------------------------
 1 file changed, 19 insertions(+), 54 deletions(-)

Comments

Xavier Simonart May 10, 2023, 11:10 a.m. UTC | #1
Hi Ales

Thanks for the patch.
I have small questions/comments.
Otherwise, it looks good to me.
Thanks
Xavier

On Wed, May 10, 2023 at 10:04 AM Ales Musil <amusil@redhat.com> wrote:

> The test expected that the packet statistics will be
> immediately reflected after packet inject, however that
> might not be true on slower systems. Use OVS_WAIT_UNTIL
> instead to ensure that the packet really went through.
> Also align the IPv4 and IPv6 variant and fix some checks
> that were suggesting flow statistics check, but checked
> logical flows instead.
>
> Signed-off-by: Ales Musil <amusil@redhat.com>
> ---
>  tests/ovn.at | 73 ++++++++++++++--------------------------------------
>  1 file changed, 19 insertions(+), 54 deletions(-)
>
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 31f8d34d8..44ec955b2 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -7809,7 +7809,6 @@ ls3_p1_mac=00:00:00:01:02:05
>  check ovn-nbctl --wait=hv lr-policy-add R1 10 "ip4.src==192.168.1.0/24
> && ip4.dst==172.16.1.0/24" drop
>
>  # Check logical flow
> -ovn-sbctl dump-flows > sbflows
>  AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "192.168.1.0" |
> wc -l], [0], [dnl
>  1
>  ])
> @@ -7822,12 +7821,9 @@ packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac
> && eth.dst==$ls1_ro_mac &&
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
>
>  # Check if packet hit the drop policy
> -AT_CHECK([ovs-ofctl dump-flows br-int | \
> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>      grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24 actions=drop" | \
> -    grep "priority=10" | \
> -    grep "n_packets=1" | wc -l], [0], [dnl
> -1
> -])
> +    grep "priority=10" | grep "n_packets=1" | wc -l)"])
>
>  # Expected to drop the packet.
>  $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap >
> vif2.packets
> @@ -7849,12 +7845,9 @@ packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac
> && eth.dst==$ls1_ro_mac &&
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
>
>  # Check if packet hit the allow policy
> -sleep 1
> -AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
> -    grep "192.168.1.0" | \
> -    grep "priority=20" | wc -l], [0], [dnl
> -1
> -])
> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
> +    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
> +    grep "priority=20" | grep "n_packets=1" | wc -l)"])
>
>  # Expected packet has TTL decreased by 1
>  expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
> @@ -7881,18 +7874,10 @@ packet="inport==\"ls1-lp1\" &&
> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
>  sleep 1
>
> nit: can't we now also remove the sleep ?

> -echo "southbound flows"
> -ovn-sbctl --ovs dump-flows > sbflows
> -AT_CAPTURE_FILE([sbflows])
> -echo "ovs flows"
> -ovs-ofctl dump-flows br-int > brflows
> -AT_CAPTURE_FILE([brflows])
>  # Check if packet hit the allow policy
> -AT_CHECK([grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" brflows | \
> -    grep "priority=30" | \
> -    grep "n_packets=1" | wc -l], [0], [dnl
> -1
> -])
> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
> +    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
> +    grep "priority=30" | grep "n_packets=1" | wc -l)"])
>  echo "packet hit reroute policy"
>
>  # Expected packet has TTL decreased by 1
> @@ -7995,9 +7980,7 @@ ls3_p1_mac=00:00:00:01:02:05
>  check ovn-nbctl --wait=sb lr-policy-add R1 10 "ip6.src==2001::/64 &&
> ip6.dst==2002::/64" drop
>
>  # Check logical flow
> -ovn-sbctl dump-flows > sbflows
> -AT_CAPTURE_FILE([sbflows])
> -AT_CHECK([grep lr_in_policy sbflows | grep "2001" | wc -l], [0], [dnl
> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc
> -l], [0], [dnl
>  1
>  ])
>
> @@ -8009,12 +7992,9 @@ packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac
> && eth.dst==$ls1_ro_mac &&
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
>

>
 # Check if packet hit the drop policy
> -AT_CHECK([ovs-ofctl dump-flows br-int | \
> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>      grep "ipv6_src=2001::/64,ipv6_dst=2002::/64 actions=drop" | \
> -    grep "priority=10" | \
> -    grep "n_packets=1" | wc -l], [0], [dnl
> -1
> -])
> +    grep "priority=10" | grep "n_packets=1" | wc -l)"])
>


 # Expected to drop the packet.
>  $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap >
> vif2.packets
> @@ -8024,9 +8004,7 @@ AT_FAIL_IF([test -s vif2.packets])
>  check ovn-nbctl --wait=sb lr-policy-add R1 20 "ip6.src==2001::/64 &&
> ip6.dst==2002::/64" allow
>
>  # Check logical flow
> -ovn-sbctl dump-flows > sbflows2
> -AT_CAPTURE_FILE([sbflows2])
> -AT_CHECK([grep lr_in_policy sbflows2 | grep "2001" | wc -l], [0], [dnl
> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc
> -l], [0], [dnl

 2
>  ])
>
> @@ -8037,13 +8015,9 @@ packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac
> && eth.dst==$ls1_ro_mac &&
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
>
>  # Check if packet hit the allow policy
> -ovn-sbctl dump-flows > sbflows3
> -AT_CAPTURE_FILE([sbflows3])
> -AT_CHECK([grep lr_in_policy sbflows3 | \
> -    grep "2001" | \
> -    grep "priority=20" | wc -l], [0], [dnl
> -1
> -])
> +AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
> +    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
> +    grep "priority=20" | grep "n_packets=1" | wc -l)"])
>
Why not using OVS_WAIT_UNTIL? Don't we risk the same as above (i.e.
statistics not updated yet) ?

>  # Expected packet has TTL decreased by 1
>  expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
> @@ -8057,9 +8031,7 @@ OVN_CHECK_PACKETS([pbr-hv/vif2-tx.pcap], [expected])
>  check ovn-nbctl --wait=sb lr-policy-add R1 30 "ip6.src==2001::/64 &&
> ip6.dst==2002::/64" reroute 2003::2
>
>  # Check logical flow
> -ovn-sbctl dump-flows > sbflows4
> -AT_CAPTURE_FILE([sbflows4])
> -AT_CHECK([grep lr_in_policy sbflows4 | \
> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
>      grep "2001" | \
>      grep "priority=30" | wc -l], [0], [dnl
>  1
> @@ -8070,18 +8042,11 @@ packet="inport==\"ls1-lp1\" &&
> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>         ip6 && ip.ttl==64 && ip6.src==$ls1_p1_ip && ip6.dst==$ls2_p1_ip &&
>         udp && udp.src==53 && udp.dst==4369"
>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
> "$packet"])
> -sleep 1
>
> -ovn-sbctl dump-flows > sbflows5
> -ovs-ofctl dump-flows br-int > offlows5
> -AT_CAPTURE_FILE([sbflows5])
> -AT_CAPTURE_FILE([offlows5])
>  # Check if packet hit the allow policy
> -AT_CHECK([grep "ipv6_src=2001::/64,ipv6_dst=2002::/64" offlows5 | \
> -    grep "priority=30" | \
> -    grep "n_packets=1" | wc -l], [0], [dnl
> -1
> -])
> +AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
> +    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
> +    grep "priority=30" | grep "n_packets=1" | wc -l)"])
>
> Same comment as above: why not OVS_WAIT_UNTIL ?

>  # Expected packet has TTL decreased by 1
>  expected="eth.src==$ls3_ro_mac && eth.dst==$ls3_p1_mac &&
> --
> 2.40.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Ales Musil May 10, 2023, 11:41 a.m. UTC | #2
On Wed, May 10, 2023 at 1:11 PM Xavier Simonart <xsimonar@redhat.com> wrote:

> Hi Ales
>

Hi Xavier,

thank you for the review.



>
> Thanks for the patch.
> I have small questions/comments.
> Otherwise, it looks good to me.
> Thanks
> Xavier
>
> On Wed, May 10, 2023 at 10:04 AM Ales Musil <amusil@redhat.com> wrote:
>
>> The test expected that the packet statistics will be
>> immediately reflected after packet inject, however that
>> might not be true on slower systems. Use OVS_WAIT_UNTIL
>> instead to ensure that the packet really went through.
>> Also align the IPv4 and IPv6 variant and fix some checks
>> that were suggesting flow statistics check, but checked
>> logical flows instead.
>>
>> Signed-off-by: Ales Musil <amusil@redhat.com>
>> ---
>>  tests/ovn.at | 73 ++++++++++++++--------------------------------------
>>  1 file changed, 19 insertions(+), 54 deletions(-)
>>
>> diff --git a/tests/ovn.at b/tests/ovn.at
>> index 31f8d34d8..44ec955b2 100644
>> --- a/tests/ovn.at
>> +++ b/tests/ovn.at
>> @@ -7809,7 +7809,6 @@ ls3_p1_mac=00:00:00:01:02:05
>>  check ovn-nbctl --wait=hv lr-policy-add R1 10 "ip4.src==192.168.1.0/24
>> && ip4.dst==172.16.1.0/24" drop
>>
>>  # Check logical flow
>> -ovn-sbctl dump-flows > sbflows
>>  AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "192.168.1.0"
>> | wc -l], [0], [dnl
>>  1
>>  ])
>> @@ -7822,12 +7821,9 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>>
>>  # Check if packet hit the drop policy
>> -AT_CHECK([ovs-ofctl dump-flows br-int | \
>> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>>      grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24 actions=drop" | \
>> -    grep "priority=10" | \
>> -    grep "n_packets=1" | wc -l], [0], [dnl
>> -1
>> -])
>> +    grep "priority=10" | grep "n_packets=1" | wc -l)"])
>>
>>  # Expected to drop the packet.
>>  $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap >
>> vif2.packets
>> @@ -7849,12 +7845,9 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>>
>>  # Check if packet hit the allow policy
>> -sleep 1
>> -AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
>> -    grep "192.168.1.0" | \
>> -    grep "priority=20" | wc -l], [0], [dnl
>> -1
>> -])
>> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>> +    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
>> +    grep "priority=20" | grep "n_packets=1" | wc -l)"])
>>
>>  # Expected packet has TTL decreased by 1
>>  expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
>> @@ -7881,18 +7874,10 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>>  sleep 1
>>
>> nit: can't we now also remove the sleep ?
>

Definitely, removed in v2.

-echo "southbound flows"
>> -ovn-sbctl --ovs dump-flows > sbflows
>> -AT_CAPTURE_FILE([sbflows])
>> -echo "ovs flows"
>> -ovs-ofctl dump-flows br-int > brflows
>> -AT_CAPTURE_FILE([brflows])
>>  # Check if packet hit the allow policy
>> -AT_CHECK([grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" brflows | \
>> -    grep "priority=30" | \
>> -    grep "n_packets=1" | wc -l], [0], [dnl
>> -1
>> -])
>> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>> +    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
>> +    grep "priority=30" | grep "n_packets=1" | wc -l)"])
>>  echo "packet hit reroute policy"
>>
>>  # Expected packet has TTL decreased by 1
>> @@ -7995,9 +7980,7 @@ ls3_p1_mac=00:00:00:01:02:05
>>  check ovn-nbctl --wait=sb lr-policy-add R1 10 "ip6.src==2001::/64 &&
>> ip6.dst==2002::/64" drop
>>
>>  # Check logical flow
>> -ovn-sbctl dump-flows > sbflows
>> -AT_CAPTURE_FILE([sbflows])
>> -AT_CHECK([grep lr_in_policy sbflows | grep "2001" | wc -l], [0], [dnl
>> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc
>> -l], [0], [dnl
>>  1
>>  ])
>>
>> @@ -8009,12 +7992,9 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>>
>
>>
>  # Check if packet hit the drop policy
>> -AT_CHECK([ovs-ofctl dump-flows br-int | \
>> +OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
>>      grep "ipv6_src=2001::/64,ipv6_dst=2002::/64 actions=drop" | \
>> -    grep "priority=10" | \
>> -    grep "n_packets=1" | wc -l], [0], [dnl
>> -1
>> -])
>> +    grep "priority=10" | grep "n_packets=1" | wc -l)"])
>>
>
>
>  # Expected to drop the packet.
>>  $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap >
>> vif2.packets
>> @@ -8024,9 +8004,7 @@ AT_FAIL_IF([test -s vif2.packets])
>>  check ovn-nbctl --wait=sb lr-policy-add R1 20 "ip6.src==2001::/64 &&
>> ip6.dst==2002::/64" allow
>>
>>  # Check logical flow
>> -ovn-sbctl dump-flows > sbflows2
>> -AT_CAPTURE_FILE([sbflows2])
>> -AT_CHECK([grep lr_in_policy sbflows2 | grep "2001" | wc -l], [0], [dnl
>> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc
>> -l], [0], [dnl
>
>  2
>>  ])
>>
>> @@ -8037,13 +8015,9 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>>
>>  # Check if packet hit the allow policy
>> -ovn-sbctl dump-flows > sbflows3
>> -AT_CAPTURE_FILE([sbflows3])
>> -AT_CHECK([grep lr_in_policy sbflows3 | \
>> -    grep "2001" | \
>> -    grep "priority=20" | wc -l], [0], [dnl
>> -1
>> -])
>> +AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
>> +    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
>> +    grep "priority=20" | grep "n_packets=1" | wc -l)"])
>>
> Why not using OVS_WAIT_UNTIL? Don't we risk the same as above (i.e.
> statistics not updated yet) ?
>
 # Expected packet has TTL decreased by 1
>>  expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
>> @@ -8057,9 +8031,7 @@ OVN_CHECK_PACKETS([pbr-hv/vif2-tx.pcap], [expected])
>>  check ovn-nbctl --wait=sb lr-policy-add R1 30 "ip6.src==2001::/64 &&
>> ip6.dst==2002::/64" reroute 2003::2
>>
>>  # Check logical flow
>> -ovn-sbctl dump-flows > sbflows4
>> -AT_CAPTURE_FILE([sbflows4])
>> -AT_CHECK([grep lr_in_policy sbflows4 | \
>> +AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
>>      grep "2001" | \
>>      grep "priority=30" | wc -l], [0], [dnl
>>  1
>> @@ -8070,18 +8042,11 @@ packet="inport==\"ls1-lp1\" &&
>> eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
>>         ip6 && ip.ttl==64 && ip6.src==$ls1_p1_ip && ip6.dst==$ls2_p1_ip &&
>>         udp && udp.src==53 && udp.dst==4369"
>>  OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt
>> "$packet"])
>> -sleep 1
>>
>> -ovn-sbctl dump-flows > sbflows5
>> -ovs-ofctl dump-flows br-int > offlows5
>> -AT_CAPTURE_FILE([sbflows5])
>> -AT_CAPTURE_FILE([offlows5])
>>  # Check if packet hit the allow policy
>> -AT_CHECK([grep "ipv6_src=2001::/64,ipv6_dst=2002::/64" offlows5 | \
>> -    grep "priority=30" | \
>> -    grep "n_packets=1" | wc -l], [0], [dnl
>> -1
>> -])
>> +AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
>> +    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
>> +    grep "priority=30" | grep "n_packets=1" | wc -l)"])
>>
>> Same comment as above: why not OVS_WAIT_UNTIL ?
>

Yeah, you are right for both cases, updated in v2.


>  # Expected packet has TTL decreased by 1
>>  expected="eth.src==$ls3_ro_mac && eth.dst==$ls3_p1_mac &&
>> --
>> 2.40.1
>>
>> _______________________________________________
>> dev mailing list
>> dev@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>>
Thanks,
Ales
diff mbox series

Patch

diff --git a/tests/ovn.at b/tests/ovn.at
index 31f8d34d8..44ec955b2 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -7809,7 +7809,6 @@  ls3_p1_mac=00:00:00:01:02:05
 check ovn-nbctl --wait=hv lr-policy-add R1 10 "ip4.src==192.168.1.0/24 && ip4.dst==172.16.1.0/24" drop
 
 # Check logical flow
-ovn-sbctl dump-flows > sbflows
 AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "192.168.1.0" | wc -l], [0], [dnl
 1
 ])
@@ -7822,12 +7821,9 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
 
 # Check if packet hit the drop policy
-AT_CHECK([ovs-ofctl dump-flows br-int | \
+OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
     grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24 actions=drop" | \
-    grep "priority=10" | \
-    grep "n_packets=1" | wc -l], [0], [dnl
-1
-])
+    grep "priority=10" | grep "n_packets=1" | wc -l)"])
 
 # Expected to drop the packet.
 $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap > vif2.packets
@@ -7849,12 +7845,9 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
 
 # Check if packet hit the allow policy
-sleep 1
-AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
-    grep "192.168.1.0" | \
-    grep "priority=20" | wc -l], [0], [dnl
-1
-])
+OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
+    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
+    grep "priority=20" | grep "n_packets=1" | wc -l)"])
 
 # Expected packet has TTL decreased by 1
 expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
@@ -7881,18 +7874,10 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
 sleep 1
 
-echo "southbound flows"
-ovn-sbctl --ovs dump-flows > sbflows
-AT_CAPTURE_FILE([sbflows])
-echo "ovs flows"
-ovs-ofctl dump-flows br-int > brflows
-AT_CAPTURE_FILE([brflows])
 # Check if packet hit the allow policy
-AT_CHECK([grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" brflows | \
-    grep "priority=30" | \
-    grep "n_packets=1" | wc -l], [0], [dnl
-1
-])
+OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
+    grep "nw_src=192.168.1.0/24,nw_dst=172.16.1.0/24" | \
+    grep "priority=30" | grep "n_packets=1" | wc -l)"])
 echo "packet hit reroute policy"
 
 # Expected packet has TTL decreased by 1
@@ -7995,9 +7980,7 @@  ls3_p1_mac=00:00:00:01:02:05
 check ovn-nbctl --wait=sb lr-policy-add R1 10 "ip6.src==2001::/64 && ip6.dst==2002::/64" drop
 
 # Check logical flow
-ovn-sbctl dump-flows > sbflows
-AT_CAPTURE_FILE([sbflows])
-AT_CHECK([grep lr_in_policy sbflows | grep "2001" | wc -l], [0], [dnl
+AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc -l], [0], [dnl
 1
 ])
 
@@ -8009,12 +7992,9 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
 
 # Check if packet hit the drop policy
-AT_CHECK([ovs-ofctl dump-flows br-int | \
+OVS_WAIT_UNTIL([test "1" = "$(ovs-ofctl dump-flows br-int | \
     grep "ipv6_src=2001::/64,ipv6_dst=2002::/64 actions=drop" | \
-    grep "priority=10" | \
-    grep "n_packets=1" | wc -l], [0], [dnl
-1
-])
+    grep "priority=10" | grep "n_packets=1" | wc -l)"])
 
 # Expected to drop the packet.
 $PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" pbr-hv/vif2-tx.pcap > vif2.packets
@@ -8024,9 +8004,7 @@  AT_FAIL_IF([test -s vif2.packets])
 check ovn-nbctl --wait=sb lr-policy-add R1 20 "ip6.src==2001::/64 && ip6.dst==2002::/64" allow
 
 # Check logical flow
-ovn-sbctl dump-flows > sbflows2
-AT_CAPTURE_FILE([sbflows2])
-AT_CHECK([grep lr_in_policy sbflows2 | grep "2001" | wc -l], [0], [dnl
+AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | grep "2001" | wc -l], [0], [dnl
 2
 ])
 
@@ -8037,13 +8015,9 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
 
 # Check if packet hit the allow policy
-ovn-sbctl dump-flows > sbflows3
-AT_CAPTURE_FILE([sbflows3])
-AT_CHECK([grep lr_in_policy sbflows3 | \
-    grep "2001" | \
-    grep "priority=20" | wc -l], [0], [dnl
-1
-])
+AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
+    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
+    grep "priority=20" | grep "n_packets=1" | wc -l)"])
 
 # Expected packet has TTL decreased by 1
 expected="eth.src==$ls2_ro_mac && eth.dst==$ls2_p1_mac &&
@@ -8057,9 +8031,7 @@  OVN_CHECK_PACKETS([pbr-hv/vif2-tx.pcap], [expected])
 check ovn-nbctl --wait=sb lr-policy-add R1 30 "ip6.src==2001::/64 && ip6.dst==2002::/64" reroute 2003::2
 
 # Check logical flow
-ovn-sbctl dump-flows > sbflows4
-AT_CAPTURE_FILE([sbflows4])
-AT_CHECK([grep lr_in_policy sbflows4 | \
+AT_CHECK([ovn-sbctl dump-flows | grep lr_in_policy | \
     grep "2001" | \
     grep "priority=30" | wc -l], [0], [dnl
 1
@@ -8070,18 +8042,11 @@  packet="inport==\"ls1-lp1\" && eth.src==$ls1_p1_mac && eth.dst==$ls1_ro_mac &&
        ip6 && ip.ttl==64 && ip6.src==$ls1_p1_ip && ip6.dst==$ls2_p1_ip &&
        udp && udp.src==53 && udp.dst==4369"
 OVS_WAIT_UNTIL([as pbr-hv ovs-appctl -t ovn-controller inject-pkt "$packet"])
-sleep 1
 
-ovn-sbctl dump-flows > sbflows5
-ovs-ofctl dump-flows br-int > offlows5
-AT_CAPTURE_FILE([sbflows5])
-AT_CAPTURE_FILE([offlows5])
 # Check if packet hit the allow policy
-AT_CHECK([grep "ipv6_src=2001::/64,ipv6_dst=2002::/64" offlows5 | \
-    grep "priority=30" | \
-    grep "n_packets=1" | wc -l], [0], [dnl
-1
-])
+AT_CHECK([test "1" = "$(ovs-ofctl dump-flows br-int | \
+    grep "ipv6_src=2001::/64,ipv6_dst=2002::/64"  | \
+    grep "priority=30" | grep "n_packets=1" | wc -l)"])
 
 # Expected packet has TTL decreased by 1
 expected="eth.src==$ls3_ro_mac && eth.dst==$ls3_p1_mac &&