On 6/16/26 10:54 AM, Xavier Simonart via dev wrote:
> Starting a scapy server might take time on slow/busy systems, and cause
> some tests to fail in a flaky way when started in the middle of the test.
> 
> This caused some tests to be flaky such as:
> - "IP packet buffering"
> - "virtual port claim race condition"
> 
> Note that macros such as send_garp do not check anymore to skip the
> test if HAVE_SCAPY is not set as it is done through OVN_SCAPY_REQUIRED.
> OVN_SCAPY_REQUIRED is now enforced: a test calling send_garp, send_na or
> fmt_pkt will always fail if OVN_SCAPY_REQUIRED is not set.
> 
> Signed-off-by: Xavier Simonart <[email protected]>
> ---
>  tests/ovn-ic.at     |   2 +-
>  tests/ovn-macros.at |  12 ++---
>  tests/ovn-util.at   |   1 -
>  tests/ovn.at        | 128 +++++++++++++++++++++++---------------------
>  tests/system-ovn.at |   6 +--
>  5 files changed, 76 insertions(+), 73 deletions(-)
> 
> diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at
> index 68d78d9e4..35a531d89 100644
> --- a/tests/ovn-ic.at
> +++ b/tests/ovn-ic.at
> @@ -2872,7 +2872,7 @@ AT_CLEANUP
>  OVN_FOR_EACH_NORTHD([
>  AT_SETUP([spine-leaf: 3 AZs, 3 HVs, 3 LSs, connected via transit spine 
> switch])
>  AT_KEYWORDS([spine leaf])
> -AT_SKIP_IF([test $HAVE_SCAPY = no])
> +OVN_SCAPY_REQUIRED
>  
>  ovn_init_ic_db
>  
> diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at
> index 8744ff6b3..dd91af3b5 100644
> --- a/tests/ovn-macros.at
> +++ b/tests/ovn-macros.at
> @@ -536,6 +536,11 @@ m4_define([OVN_CLEANUP_IC],[
>      fi
>  ])
>  
> +m4_define([OVN_SCAPY_REQUIRED],[

I wonder if CHECK_SCAPY might be a better name, i.e. more in line
with some other stuff like CHECK_CONNTRACK.  WDYT?

> +    AT_SKIP_IF([test $HAVE_SCAPY = no])
> +    start_scapy_server
> +])
> +
>  m4_divert_push([PREPARE_TESTS])
>  
>  # ovn_init_db DATABASE [AZ]
> @@ -1294,7 +1299,6 @@ hex_to_mac() {
>  }
>  
>  send_garp() {
> -    AT_SKIP_IF([test $HAVE_SCAPY = no])
>      local hv=$1 inport=$2 op=$3 eth_src=$4 eth_dst=$5 spa=$6 tpa=$7
>  
>      local packet=$(fmt_pkt "Ether(dst='${eth_dst}', src='${eth_src}')/ \
> @@ -1380,10 +1384,6 @@ ovn_trace_client() {
>  #
>  fmt_pkt() {
>      ctlfile=$ovs_base/scapy.ctl
> -    if [[ ! -S $ctlfile ]]; then
> -        start_scapy_server
> -    fi
> -    while [[ ! -S $ctlfile ]]; do sleep 0.1; done
>      ovs-appctl -t $ctlfile payload "$1"
>  }
>  
> @@ -1396,6 +1396,7 @@ start_scapy_server() {
>      flock -n $lockfile "$top_srcdir"/tests/scapy-server.py \
>          --pidfile=$pidfile --unixctl=$ctlfile --log-file=$logfile --detach \
>      && on_exit "test -e \"$pidfile\" && ovs-appctl -t $ctlfile exit"
> +    while [[ ! -S $ctlfile ]]; do sleep 0.1; done

Maybe we can use something like:

OVS_WAIT_UNTIL([ovs-appctl -t $ctlfile list-commands])

?

I'm mostly concerned that the loop is unbounded, even though that was the
case before as well.  But this also should be a more reliable check as it
waits until the daemon is actually fully functional and is able to process
josnrpc requests.

If we do that in the fmt_pkt(), maybe we'd also not need the SKIP_IF changes?
Though changing the SKIP_IF into a simpler macro seems a little nicer indeed.

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to