diff mbox series

[ovs-dev,v2,1/5] tests: Move macros to ovn-macros.at.

Message ID 20241014101046.3309426-2-xsimonar@redhat.com
State Accepted
Headers show
Series Peer ports. | 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

Xavier Simonart Oct. 14, 2024, 10:10 a.m. UTC
Move macros from ovn.at to ovn-macros.at so other tests can use them.
No change done to any macros in this patch - only moving.

Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
---
 tests/ovn-macros.at | 188 ++++++++++++++++++++++++++++++++++++++++++++
 tests/ovn.at        | 187 -------------------------------------------
 2 files changed, 188 insertions(+), 187 deletions(-)

Comments

Ales Musil Nov. 7, 2024, 9:22 a.m. UTC | #1
On Mon, Oct 14, 2024 at 12:10 PM Xavier Simonart <xsimonar@redhat.com>
wrote:

> Move macros from ovn.at to ovn-macros.at so other tests can use them.
> No change done to any macros in this patch - only moving.
>
> Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
> ---
>  tests/ovn-macros.at | 188 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/ovn.at        | 187 -------------------------------------------
>  2 files changed, 188 insertions(+), 187 deletions(-)
>
> diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at
> index 77d1515f6..0f9a3ab09 100644
> --- a/tests/ovn-macros.at
> +++ b/tests/ovn-macros.at
> @@ -1,3 +1,191 @@
> +# OVN_CHECK_PACKETS([PCAP], [EXPECTED])
> +#
> +# This compares packets read from PCAP, in pcap format, to those read
> +# from EXPECTED, which is a text file containing packets as hex
> +# strings, one per line.  If PCAP contains fewer packets than
> +# EXPECTED, it waits up to 10 seconds for more packets to appear.
> +#
> +# The implementation is an m4 macro that is mostly implemented in
> +# terms of a shell function.  This reduces the size of the generated
> +# testsuite file since the shell function is only emitted once even
> +# when this macro is invoked many times.
> +m4_divert_text([PREPARE_TESTS],
> +  [dump_diff__ () {
> +     local rcv_pcap=$1 exp_text=$2
> +     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> +     echo "Expected:"
> +     sort $exp_text
> +     echo "Received:"
> +     sort $rcv_text
> +     sort $exp_text -o $exp_text.sorted
> +     sort $rcv_text -o $rcv_text.sorted
> +     echo "Diff:"
> +     diff -u $exp_text.sorted $rcv_text.sorted
> +   }
> +   ovn_check_packets__ () {
> +     if [[ -n "$4" ]]; then
> +       echo "$3: checking packets in $1 against $2: using $4"
> +     else
> +       echo "$3: checking packets in $1 against $2:"
> +     fi
> +     rcv_pcap=$1
> +     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> +     exp_text=$2
> +     exp_n=`wc -l < "$exp_text"`
> +     OVS_WAIT_UNTIL(
> +       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> +        rcv_n=`wc -l < "$rcv_text"`
> +        echo "rcv_n=$rcv_n exp_n=$exp_n"
> +        test $rcv_n -ge $exp_n],
> +       [dump_diff__ "$rcv_pcap" "$exp_text"])
> +     if [[ -n "$4" ]]; then
> +       sort $exp_text | $4 > expout
> +       cat $rcv_text | $4 > rcv_tmp
> +       mv rcv_tmp $rcv_text
> +     else
> +       sort $exp_text > expout
> +     fi
> +   }
> +   ovn_check_packets_remove_broadcast__ () {
> +     echo "$3: checking packets in $1 against $2:"
> +     rcv_pcap=$1
> +     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> +     exp_text=$2
> +     exp_n=`wc -l < "$exp_text"`
> +     OVS_WAIT_UNTIL(
> +       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> +        sed -i '/ffffffffffff/d' $rcv_text
> +        rcv_n=`wc -l < "$rcv_text"`
> +        echo "rcv_n=$rcv_n exp_n=$exp_n"
> +        test $rcv_n -ge $exp_n],
> +       [dump_diff__ "$rcv_pcap" "$exp_text"])
> +     sort $exp_text > expout
> +   }
> +   ovn_wait_packets__ () {
> +     echo "$3: waiting for packets from $2 at $1:"
> +     if [[ -n "$4" ]]; then
> +       echo "$3: checking packets from $2 at $1: using $4"
> +     else
> +       echo "$3: checking packets from $2 at $1:"
> +     fi
> +     rcv_pcap=$1
> +     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> +     exp_text=$2
> +     if [[ -n "$4" ]]; then
> +       cmd=$4
> +     else
> +       cmd=cat
> +     fi
> +     OVS_WAIT_UNTIL(
> +       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> +        sort $exp_text | $cmd > expout
> +        test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"],
> +       [dump_diff__ "$rcv_pcap" "$exp_text"])
> +     cat $rcv_text | $cmd > rcv_tmp
> +     mv rcv_tmp $rcv_text
> +   }
> +   ovn_wait_packets_uniq__ () {
> +     echo "$3: waiting for packets from $2 at $1:"
> +     rcv_pcap=$1
> +     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> +     exp_text=$2
> +     OVS_WAIT_UNTIL(
> +       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> +        sort $exp_text > expout
> +        test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"],
> +       [dump_diff__ "$rcv_pcap" "$exp_text"])
> +   }
> +
> +   ovn_wait_patch_port_flows () {
> +     for localnet in $1; do
> +       patch_port="patch-br-int-to-$localnet"
> +       for hv in $2; do
> +         echo "$3: waiting for flows for $patch_port on $hv"
> +         # Patch port might be created after ports are reported up
> +         OVS_WAIT_UNTIL([
> +             test 1 = $(as $hv ovs-vsctl show | grep "Port
> \b$patch_port\b" | wc -l)
> +         ])
> +         # Wait for a flow outputing to patch port
> +         OVS_WAIT_UNTIL([
> +             hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport
> find Interface name=$patch_port)
> +             echo "$patch_port=$hv_patch_ofport"
> +             test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c
> "output:\b$hv_patch_ofport\b")
> +         ])
> +       done
> +     done
> +   }
> +
> +   ovn_wait_remote_output_flows () {
> +     hv1=$1
> +     hv2=$2
> +     echo "$3: waiting for flows for remote output on $hv1"
> +     # Wait for a flow outputing  to remote output
> +     OVS_WAIT_UNTIL([
> +         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find
> Interface name=ovn-${hv2}-0)
> +         echo "tunnel port=$ofport"
> +         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c
> "output:$ofport")
> +     ])
> +   }
> +
> +   ovn_wait_remote_input_flows () {
> +     hv1=$1
> +     hv2=$2
> +     echo "$3: waiting for flows for remote input on $hv1"
> +     # Wait for a flow outputing  to remote input
> +     OVS_WAIT_UNTIL([
> +         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find
> Interface name=ovn-${hv2}-0)
> +         echo "tunnel port=$ofport"
> +         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c
> "in_port=$ofport")
> +     ])
> +   }
> +
> +   # ovn_wait_for_bfd_up HV
> +   # BFD might be quite slow. While BFD is not up, all chassis will fight
> to claim the port
> +   # Wait for BFD between different chassis to be up
> +   ovn_wait_for_bfd_up() {
> +     for hv; do
> +       as $hv
> +       for chassis; do
> +         if test $hv != $chassis; then
> +             echo "checking bdf_status for $hv -> $chassis"
> +             OVS_WAIT_UNTIL([
> +                 bfd_status=$(as $hv ovs-vsctl get interface
> ovn-$chassis-0 bfd_status:state)
> +                 echo "bfd status = $bfd_status"
> +                 test "$bfd_status" = "up"
> +             ])
> +         fi
> +       done
> +     done
> +   }
> +])
> +
> +m4_define([OVN_CHECK_PACKETS],
> +  [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0],
> [ignore])
> +   ovn_check_packets__ "$1" "$2" "__file__:__line__" $3
> +   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1"
> "$2"])])
> +
> +m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST],
> +  [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__"
> +   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1"
> "$2"])])
> +
> +m4_define([OVN_CHECK_PACKETS_CONTAIN],
> +  [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3])
> +
> +# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated.
> +# It fails if unexpected packets are received.
> +m4_define([OVN_CHECK_PACKETS_UNIQ],
> +  [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"])
> +
> +m4_define([OVN_WAIT_PATCH_PORT_FLOWS],
> +  [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"])
> +
> +m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS],
> +  [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"])
> +
> +m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS],
> +  [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"])
> +
> +
>  # OVN_CLEANUP_VSWITCH(sim)
>  #
>  # Gracefully terminate vswitch daemons in the
> diff --git a/tests/ovn.at b/tests/ovn.at
> index d7f01169c..e3c25be53 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -1,190 +1,3 @@
> -# OVN_CHECK_PACKETS([PCAP], [EXPECTED])
> -#
> -# This compares packets read from PCAP, in pcap format, to those read
> -# from EXPECTED, which is a text file containing packets as hex
> -# strings, one per line.  If PCAP contains fewer packets than
> -# EXPECTED, it waits up to 10 seconds for more packets to appear.
> -#
> -# The implementation is an m4 macro that is mostly implemented in
> -# terms of a shell function.  This reduces the size of the generated
> -# testsuite file since the shell function is only emitted once even
> -# when this macro is invoked many times.
> -m4_divert_text([PREPARE_TESTS],
> -  [dump_diff__ () {
> -     local rcv_pcap=$1 exp_text=$2
> -     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> -     echo "Expected:"
> -     sort $exp_text
> -     echo "Received:"
> -     sort $rcv_text
> -     sort $exp_text -o $exp_text.sorted
> -     sort $rcv_text -o $rcv_text.sorted
> -     echo "Diff:"
> -     diff -u $exp_text.sorted $rcv_text.sorted
> -   }
> -   ovn_check_packets__ () {
> -     if [[ -n "$4" ]]; then
> -       echo "$3: checking packets in $1 against $2: using $4"
> -     else
> -       echo "$3: checking packets in $1 against $2:"
> -     fi
> -     rcv_pcap=$1
> -     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> -     exp_text=$2
> -     exp_n=`wc -l < "$exp_text"`
> -     OVS_WAIT_UNTIL(
> -       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> -        rcv_n=`wc -l < "$rcv_text"`
> -        echo "rcv_n=$rcv_n exp_n=$exp_n"
> -        test $rcv_n -ge $exp_n],
> -       [dump_diff__ "$rcv_pcap" "$exp_text"])
> -     if [[ -n "$4" ]]; then
> -       sort $exp_text | $4 > expout
> -       cat $rcv_text | $4 > rcv_tmp
> -       mv rcv_tmp $rcv_text
> -     else
> -       sort $exp_text > expout
> -     fi
> -   }
> -   ovn_check_packets_remove_broadcast__ () {
> -     echo "$3: checking packets in $1 against $2:"
> -     rcv_pcap=$1
> -     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> -     exp_text=$2
> -     exp_n=`wc -l < "$exp_text"`
> -     OVS_WAIT_UNTIL(
> -       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> -        sed -i '/ffffffffffff/d' $rcv_text
> -        rcv_n=`wc -l < "$rcv_text"`
> -        echo "rcv_n=$rcv_n exp_n=$exp_n"
> -        test $rcv_n -ge $exp_n],
> -       [dump_diff__ "$rcv_pcap" "$exp_text"])
> -     sort $exp_text > expout
> -   }
> -   ovn_wait_packets__ () {
> -     echo "$3: waiting for packets from $2 at $1:"
> -     if [[ -n "$4" ]]; then
> -       echo "$3: checking packets from $2 at $1: using $4"
> -     else
> -       echo "$3: checking packets from $2 at $1:"
> -     fi
> -     rcv_pcap=$1
> -     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> -     exp_text=$2
> -     if [[ -n "$4" ]]; then
> -       cmd=$4
> -     else
> -       cmd=cat
> -     fi
> -     OVS_WAIT_UNTIL(
> -       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> -        sort $exp_text | $cmd > expout
> -        test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"],
> -       [dump_diff__ "$rcv_pcap" "$exp_text"])
> -     cat $rcv_text | $cmd > rcv_tmp
> -     mv rcv_tmp $rcv_text
> -   }
> -   ovn_wait_packets_uniq__ () {
> -     echo "$3: waiting for packets from $2 at $1:"
> -     rcv_pcap=$1
> -     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
> -     exp_text=$2
> -     OVS_WAIT_UNTIL(
> -       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
> -        sort $exp_text > expout
> -        test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"],
> -       [dump_diff__ "$rcv_pcap" "$exp_text"])
> -   }
> -
> -   ovn_wait_patch_port_flows () {
> -     for localnet in $1; do
> -       patch_port="patch-br-int-to-$localnet"
> -       for hv in $2; do
> -         echo "$3: waiting for flows for $patch_port on $hv"
> -         # Patch port might be created after ports are reported up
> -         OVS_WAIT_UNTIL([
> -             test 1 = $(as $hv ovs-vsctl show | grep "Port
> \b$patch_port\b" | wc -l)
> -         ])
> -         # Wait for a flow outputing to patch port
> -         OVS_WAIT_UNTIL([
> -             hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport
> find Interface name=$patch_port)
> -             echo "$patch_port=$hv_patch_ofport"
> -             test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c
> "output:\b$hv_patch_ofport\b")
> -         ])
> -       done
> -     done
> -   }
> -
> -   ovn_wait_remote_output_flows () {
> -     hv1=$1
> -     hv2=$2
> -     echo "$3: waiting for flows for remote output on $hv1"
> -     # Wait for a flow outputing  to remote output
> -     OVS_WAIT_UNTIL([
> -         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find
> Interface name=ovn-${hv2}-0)
> -         echo "tunnel port=$ofport"
> -         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c
> "output:$ofport")
> -     ])
> -   }
> -
> -   ovn_wait_remote_input_flows () {
> -     hv1=$1
> -     hv2=$2
> -     echo "$3: waiting for flows for remote input on $hv1"
> -     # Wait for a flow outputing  to remote input
> -     OVS_WAIT_UNTIL([
> -         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find
> Interface name=ovn-${hv2}-0)
> -         echo "tunnel port=$ofport"
> -         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c
> "in_port=$ofport")
> -     ])
> -   }
> -
> -   # ovn_wait_for_bfd_up HV
> -   # BFD might be quite slow. While BFD is not up, all chassis will fight
> to claim the port
> -   # Wait for BFD between different chassis to be up
> -   ovn_wait_for_bfd_up() {
> -     for hv; do
> -       as $hv
> -       for chassis; do
> -         if test $hv != $chassis; then
> -             echo "checking bdf_status for $hv -> $chassis"
> -             OVS_WAIT_UNTIL([
> -                 bfd_status=$(as $hv ovs-vsctl get interface
> ovn-$chassis-0 bfd_status:state)
> -                 echo "bfd status = $bfd_status"
> -                 test "$bfd_status" = "up"
> -             ])
> -         fi
> -       done
> -     done
> -   }
> -])
> -
> -m4_define([OVN_CHECK_PACKETS],
> -  [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0],
> [ignore])
> -   ovn_check_packets__ "$1" "$2" "__file__:__line__" $3
> -   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1"
> "$2"])])
> -
> -m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST],
> -  [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__"
> -   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1"
> "$2"])])
> -
> -m4_define([OVN_CHECK_PACKETS_CONTAIN],
> -  [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3])
> -
> -# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated.
> -# It fails if unexpected packets are received.
> -m4_define([OVN_CHECK_PACKETS_UNIQ],
> -  [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"])
> -
> -m4_define([OVN_WAIT_PATCH_PORT_FLOWS],
> -  [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"])
> -
> -m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS],
> -  [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"])
> -
> -m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS],
> -  [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"])
> -
>  AT_BANNER([OVN components])
>
>  AT_SETUP([lexer])
> --
> 2.31.1
>
>
Looks good to me, thanks.

Acked-by: Ales Musil <amusil@redhat.com>
diff mbox series

Patch

diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at
index 77d1515f6..0f9a3ab09 100644
--- a/tests/ovn-macros.at
+++ b/tests/ovn-macros.at
@@ -1,3 +1,191 @@ 
+# OVN_CHECK_PACKETS([PCAP], [EXPECTED])
+#
+# This compares packets read from PCAP, in pcap format, to those read
+# from EXPECTED, which is a text file containing packets as hex
+# strings, one per line.  If PCAP contains fewer packets than
+# EXPECTED, it waits up to 10 seconds for more packets to appear.
+#
+# The implementation is an m4 macro that is mostly implemented in
+# terms of a shell function.  This reduces the size of the generated
+# testsuite file since the shell function is only emitted once even
+# when this macro is invoked many times.
+m4_divert_text([PREPARE_TESTS],
+  [dump_diff__ () {
+     local rcv_pcap=$1 exp_text=$2
+     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
+     echo "Expected:"
+     sort $exp_text
+     echo "Received:"
+     sort $rcv_text
+     sort $exp_text -o $exp_text.sorted
+     sort $rcv_text -o $rcv_text.sorted
+     echo "Diff:"
+     diff -u $exp_text.sorted $rcv_text.sorted
+   }
+   ovn_check_packets__ () {
+     if [[ -n "$4" ]]; then
+       echo "$3: checking packets in $1 against $2: using $4"
+     else
+       echo "$3: checking packets in $1 against $2:"
+     fi
+     rcv_pcap=$1
+     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
+     exp_text=$2
+     exp_n=`wc -l < "$exp_text"`
+     OVS_WAIT_UNTIL(
+       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
+        rcv_n=`wc -l < "$rcv_text"`
+        echo "rcv_n=$rcv_n exp_n=$exp_n"
+        test $rcv_n -ge $exp_n],
+       [dump_diff__ "$rcv_pcap" "$exp_text"])
+     if [[ -n "$4" ]]; then
+       sort $exp_text | $4 > expout
+       cat $rcv_text | $4 > rcv_tmp
+       mv rcv_tmp $rcv_text
+     else
+       sort $exp_text > expout
+     fi
+   }
+   ovn_check_packets_remove_broadcast__ () {
+     echo "$3: checking packets in $1 against $2:"
+     rcv_pcap=$1
+     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
+     exp_text=$2
+     exp_n=`wc -l < "$exp_text"`
+     OVS_WAIT_UNTIL(
+       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
+        sed -i '/ffffffffffff/d' $rcv_text
+        rcv_n=`wc -l < "$rcv_text"`
+        echo "rcv_n=$rcv_n exp_n=$exp_n"
+        test $rcv_n -ge $exp_n],
+       [dump_diff__ "$rcv_pcap" "$exp_text"])
+     sort $exp_text > expout
+   }
+   ovn_wait_packets__ () {
+     echo "$3: waiting for packets from $2 at $1:"
+     if [[ -n "$4" ]]; then
+       echo "$3: checking packets from $2 at $1: using $4"
+     else
+       echo "$3: checking packets from $2 at $1:"
+     fi
+     rcv_pcap=$1
+     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
+     exp_text=$2
+     if [[ -n "$4" ]]; then
+       cmd=$4
+     else
+       cmd=cat
+     fi
+     OVS_WAIT_UNTIL(
+       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
+        sort $exp_text | $cmd > expout
+        test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"],
+       [dump_diff__ "$rcv_pcap" "$exp_text"])
+     cat $rcv_text | $cmd > rcv_tmp
+     mv rcv_tmp $rcv_text
+   }
+   ovn_wait_packets_uniq__ () {
+     echo "$3: waiting for packets from $2 at $1:"
+     rcv_pcap=$1
+     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
+     exp_text=$2
+     OVS_WAIT_UNTIL(
+       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
+        sort $exp_text > expout
+        test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"],
+       [dump_diff__ "$rcv_pcap" "$exp_text"])
+   }
+
+   ovn_wait_patch_port_flows () {
+     for localnet in $1; do
+       patch_port="patch-br-int-to-$localnet"
+       for hv in $2; do
+         echo "$3: waiting for flows for $patch_port on $hv"
+         # Patch port might be created after ports are reported up
+         OVS_WAIT_UNTIL([
+             test 1 = $(as $hv ovs-vsctl show | grep "Port \b$patch_port\b" | wc -l)
+         ])
+         # Wait for a flow outputing to patch port
+         OVS_WAIT_UNTIL([
+             hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport find Interface name=$patch_port)
+             echo "$patch_port=$hv_patch_ofport"
+             test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b")
+         ])
+       done
+     done
+   }
+
+   ovn_wait_remote_output_flows () {
+     hv1=$1
+     hv2=$2
+     echo "$3: waiting for flows for remote output on $hv1"
+     # Wait for a flow outputing  to remote output
+     OVS_WAIT_UNTIL([
+         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0)
+         echo "tunnel port=$ofport"
+         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport")
+     ])
+   }
+
+   ovn_wait_remote_input_flows () {
+     hv1=$1
+     hv2=$2
+     echo "$3: waiting for flows for remote input on $hv1"
+     # Wait for a flow outputing  to remote input
+     OVS_WAIT_UNTIL([
+         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0)
+         echo "tunnel port=$ofport"
+         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport")
+     ])
+   }
+
+   # ovn_wait_for_bfd_up HV
+   # BFD might be quite slow. While BFD is not up, all chassis will fight to claim the port
+   # Wait for BFD between different chassis to be up
+   ovn_wait_for_bfd_up() {
+     for hv; do
+       as $hv
+       for chassis; do
+         if test $hv != $chassis; then
+             echo "checking bdf_status for $hv -> $chassis"
+             OVS_WAIT_UNTIL([
+                 bfd_status=$(as $hv ovs-vsctl get interface ovn-$chassis-0 bfd_status:state)
+                 echo "bfd status = $bfd_status"
+                 test "$bfd_status" = "up"
+             ])
+         fi
+       done
+     done
+   }
+])
+
+m4_define([OVN_CHECK_PACKETS],
+  [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0], [ignore])
+   ovn_check_packets__ "$1" "$2" "__file__:__line__" $3
+   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])])
+
+m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST],
+  [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__"
+   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])])
+
+m4_define([OVN_CHECK_PACKETS_CONTAIN],
+  [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3])
+
+# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated.
+# It fails if unexpected packets are received.
+m4_define([OVN_CHECK_PACKETS_UNIQ],
+  [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"])
+
+m4_define([OVN_WAIT_PATCH_PORT_FLOWS],
+  [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"])
+
+m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS],
+  [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"])
+
+m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS],
+  [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"])
+
+
 # OVN_CLEANUP_VSWITCH(sim)
 #
 # Gracefully terminate vswitch daemons in the
diff --git a/tests/ovn.at b/tests/ovn.at
index d7f01169c..e3c25be53 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -1,190 +1,3 @@ 
-# OVN_CHECK_PACKETS([PCAP], [EXPECTED])
-#
-# This compares packets read from PCAP, in pcap format, to those read
-# from EXPECTED, which is a text file containing packets as hex
-# strings, one per line.  If PCAP contains fewer packets than
-# EXPECTED, it waits up to 10 seconds for more packets to appear.
-#
-# The implementation is an m4 macro that is mostly implemented in
-# terms of a shell function.  This reduces the size of the generated
-# testsuite file since the shell function is only emitted once even
-# when this macro is invoked many times.
-m4_divert_text([PREPARE_TESTS],
-  [dump_diff__ () {
-     local rcv_pcap=$1 exp_text=$2
-     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
-     echo "Expected:"
-     sort $exp_text
-     echo "Received:"
-     sort $rcv_text
-     sort $exp_text -o $exp_text.sorted
-     sort $rcv_text -o $rcv_text.sorted
-     echo "Diff:"
-     diff -u $exp_text.sorted $rcv_text.sorted
-   }
-   ovn_check_packets__ () {
-     if [[ -n "$4" ]]; then
-       echo "$3: checking packets in $1 against $2: using $4"
-     else
-       echo "$3: checking packets in $1 against $2:"
-     fi
-     rcv_pcap=$1
-     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
-     exp_text=$2
-     exp_n=`wc -l < "$exp_text"`
-     OVS_WAIT_UNTIL(
-       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
-        rcv_n=`wc -l < "$rcv_text"`
-        echo "rcv_n=$rcv_n exp_n=$exp_n"
-        test $rcv_n -ge $exp_n],
-       [dump_diff__ "$rcv_pcap" "$exp_text"])
-     if [[ -n "$4" ]]; then
-       sort $exp_text | $4 > expout
-       cat $rcv_text | $4 > rcv_tmp
-       mv rcv_tmp $rcv_text
-     else
-       sort $exp_text > expout
-     fi
-   }
-   ovn_check_packets_remove_broadcast__ () {
-     echo "$3: checking packets in $1 against $2:"
-     rcv_pcap=$1
-     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
-     exp_text=$2
-     exp_n=`wc -l < "$exp_text"`
-     OVS_WAIT_UNTIL(
-       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
-        sed -i '/ffffffffffff/d' $rcv_text
-        rcv_n=`wc -l < "$rcv_text"`
-        echo "rcv_n=$rcv_n exp_n=$exp_n"
-        test $rcv_n -ge $exp_n],
-       [dump_diff__ "$rcv_pcap" "$exp_text"])
-     sort $exp_text > expout
-   }
-   ovn_wait_packets__ () {
-     echo "$3: waiting for packets from $2 at $1:"
-     if [[ -n "$4" ]]; then
-       echo "$3: checking packets from $2 at $1: using $4"
-     else
-       echo "$3: checking packets from $2 at $1:"
-     fi
-     rcv_pcap=$1
-     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
-     exp_text=$2
-     if [[ -n "$4" ]]; then
-       cmd=$4
-     else
-       cmd=cat
-     fi
-     OVS_WAIT_UNTIL(
-       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
-        sort $exp_text | $cmd > expout
-        test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"],
-       [dump_diff__ "$rcv_pcap" "$exp_text"])
-     cat $rcv_text | $cmd > rcv_tmp
-     mv rcv_tmp $rcv_text
-   }
-   ovn_wait_packets_uniq__ () {
-     echo "$3: waiting for packets from $2 at $1:"
-     rcv_pcap=$1
-     rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'`
-     exp_text=$2
-     OVS_WAIT_UNTIL(
-       [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text
-        sort $exp_text > expout
-        test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"],
-       [dump_diff__ "$rcv_pcap" "$exp_text"])
-   }
-
-   ovn_wait_patch_port_flows () {
-     for localnet in $1; do
-       patch_port="patch-br-int-to-$localnet"
-       for hv in $2; do
-         echo "$3: waiting for flows for $patch_port on $hv"
-         # Patch port might be created after ports are reported up
-         OVS_WAIT_UNTIL([
-             test 1 = $(as $hv ovs-vsctl show | grep "Port \b$patch_port\b" | wc -l)
-         ])
-         # Wait for a flow outputing to patch port
-         OVS_WAIT_UNTIL([
-             hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport find Interface name=$patch_port)
-             echo "$patch_port=$hv_patch_ofport"
-             test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b")
-         ])
-       done
-     done
-   }
-
-   ovn_wait_remote_output_flows () {
-     hv1=$1
-     hv2=$2
-     echo "$3: waiting for flows for remote output on $hv1"
-     # Wait for a flow outputing  to remote output
-     OVS_WAIT_UNTIL([
-         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0)
-         echo "tunnel port=$ofport"
-         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport")
-     ])
-   }
-
-   ovn_wait_remote_input_flows () {
-     hv1=$1
-     hv2=$2
-     echo "$3: waiting for flows for remote input on $hv1"
-     # Wait for a flow outputing  to remote input
-     OVS_WAIT_UNTIL([
-         ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0)
-         echo "tunnel port=$ofport"
-         test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport")
-     ])
-   }
-
-   # ovn_wait_for_bfd_up HV
-   # BFD might be quite slow. While BFD is not up, all chassis will fight to claim the port
-   # Wait for BFD between different chassis to be up
-   ovn_wait_for_bfd_up() {
-     for hv; do
-       as $hv
-       for chassis; do
-         if test $hv != $chassis; then
-             echo "checking bdf_status for $hv -> $chassis"
-             OVS_WAIT_UNTIL([
-                 bfd_status=$(as $hv ovs-vsctl get interface ovn-$chassis-0 bfd_status:state)
-                 echo "bfd status = $bfd_status"
-                 test "$bfd_status" = "up"
-             ])
-         fi
-       done
-     done
-   }
-])
-
-m4_define([OVN_CHECK_PACKETS],
-  [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0], [ignore])
-   ovn_check_packets__ "$1" "$2" "__file__:__line__" $3
-   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])])
-
-m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST],
-  [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__"
-   AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])])
-
-m4_define([OVN_CHECK_PACKETS_CONTAIN],
-  [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3])
-
-# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated.
-# It fails if unexpected packets are received.
-m4_define([OVN_CHECK_PACKETS_UNIQ],
-  [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"])
-
-m4_define([OVN_WAIT_PATCH_PORT_FLOWS],
-  [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"])
-
-m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS],
-  [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"])
-
-m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS],
-  [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"])
-
 AT_BANNER([OVN components])
 
 AT_SETUP([lexer])