On Mon, Oct 14, 2024 at 12:10 PM Xavier Simonart <[email protected]> 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 <[email protected]> > --- > 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 <[email protected]> -- Ales Musil Senior Software Engineer - OVN Core Red Hat EMEA <https://www.redhat.com> [email protected] <https://red.ht/sig> _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
