From 02e6f2f7005d8dd3932bb03dea922a8d850f3f72 Mon Sep 17 00:00:00 2001 From: Andy Zhou Date: Tue, 13 Jan 2015 14:57:14 -0800 Subject: [PATCH] autotest: refactor OVS_VSWITCHD_START MACRO Refactor in preparation for the next patch. Signed-off-by: Andy Zhou --- tests/automake.mk | 1 + tests/ofproto-macros.at | 35 +++++++++----- tests/ovs-macros.at | 98 ++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 102 +--------------------------------------- 4 files changed, 123 insertions(+), 113 deletions(-) create mode 100644 tests/ovs-macros.at diff --git a/tests/automake.mk b/tests/automake.mk index 33502bc1b..fceb06059 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -7,6 +7,7 @@ EXTRA_DIST += \ TESTSUITE_AT = \ tests/testsuite.at \ tests/ovsdb-macros.at \ + tests/ovs-macros.at \ tests/library.at \ tests/heap.at \ tests/bundle.at \ diff --git a/tests/ofproto-macros.at b/tests/ofproto-macros.at index cbf0ad679..93d8a7751 100644 --- a/tests/ofproto-macros.at +++ b/tests/ofproto-macros.at @@ -39,20 +39,12 @@ m4_define([STRIP_USED], [[sed 's/used:[0-9]\.[0-9]*/used:0.0/']]) m4_define([STRIP_UFID], [[sed 's/ufid:[0-9a-f]* //']]) m4_define([TESTABLE_LOG], [-vPATTERN:ANY:'%c|%p|%m']) -# OVS_VSWITCHD_START([vsctl-args], [vsctl-output], [=override]) +# _OVS_VSWITCHD_START([vswitchd-aux-args]) # -# Creates a database and starts ovsdb-server, starts ovs-vswitchd -# connected to that database, calls ovs-vsctl to create a bridge named -# br0 with predictable settings, passing 'vsctl-args' as additional -# commands to ovs-vsctl. If 'vsctl-args' causes ovs-vsctl to provide -# output (e.g. because it includes "create" commands) then 'vsctl-output' -# specifies the expected output after filtering through uuidfilt.pl. +# Creates an empty database and starts ovsdb-server. +# Starts ovs-vswitchd, with additional arguments 'vswitchd-aux-args'. # -# If a test needs to use "system" devices (as dummies), then specify -# =override (literally) as the third argument. Otherwise, system devices -# won't work at all (which makes sense because tests should not access a -# system's real Ethernet devices). -m4_define([OVS_VSWITCHD_START], +m4_define([_OVS_VSWITCHD_START], [OVS_RUNDIR=`pwd`; export OVS_RUNDIR OVS_LOGDIR=`pwd`; export OVS_LOGDIR OVS_DBDIR=`pwd`; export OVS_DBDIR @@ -74,7 +66,7 @@ m4_define([OVS_VSWITCHD_START], AT_CHECK([ovs-vsctl --no-wait init]) dnl Start ovs-vswitchd. - AT_CHECK([ovs-vswitchd --detach --no-chdir --pidfile --enable-dummy$3 --disable-system --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) + AT_CHECK([ovs-vswitchd $1 --detach --no-chdir --pidfile --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) AT_CAPTURE_FILE([ovs-vswitchd.log]) AT_CHECK([[sed < stderr ' /ovs_numa|INFO|Discovered /d @@ -83,6 +75,23 @@ m4_define([OVS_VSWITCHD_START], /reconnect|INFO|/d /ofproto|INFO|using datapath ID/d /ofproto|INFO|datapath ID changed to fedcba9876543210/d']]) +]) + +# OVS_VSWITCHD_START([vsctl-args], [vsctl-output], [=override]) +# +# Creates a database and starts ovsdb-server, starts ovs-vswitchd +# connected to that database, calls ovs-vsctl to create a bridge named +# br0 with predictable settings, passing 'vsctl-args' as additional +# commands to ovs-vsctl. If 'vsctl-args' causes ovs-vsctl to provide +# output (e.g. because it includes "create" commands) then 'vsctl-output' +# specifies the expected output after filtering through uuidfilt.pl. +# +# If a test needs to use "system" devices (as dummies), then specify +# =override (literally) as the third argument. Otherwise, system devices +# won't work at all (which makes sense because tests should not access a +# system's real Ethernet devices). +m4_define([OVS_VSWITCHD_START], + [_OVS_VSWITCHD_START([--enable-dummy$3 --disable-system]) dnl Add bridges, ports, etc. AT_CHECK([ovs-vsctl -- add-br br0 -- set bridge br0 datapath-type=dummy other-config:datapath-id=fedcba9876543210 other-config:hwaddr=aa:55:aa:55:00:00 protocols=[[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14,OpenFlow15]] fail-mode=secure -- $1 m4_if([$2], [], [], [| ${PERL} $srcdir/uuidfilt.pl])], [0], [$2]) diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at new file mode 100644 index 000000000..05815128e --- /dev/null +++ b/tests/ovs-macros.at @@ -0,0 +1,98 @@ +AT_TESTED([ovs-vswitchd]) +AT_TESTED([ovs-vsctl]) +AT_TESTED([perl]) + +m4_include([m4/compat.at]) + +m4_divert_push([PREPARE_TESTS]) +[ +ovs_wait () { + # First try a quick sleep, so that the test completes very quickly + # in the normal case. POSIX doesn't require fractional times to + # work, so this might not work. + sleep 0.1 + ovs_wait_cond && exit 0 + # Then wait up to 10 seconds. + for d in 0 1 2 3 4 5 6 7 8 9; do + sleep 1 + ovs_wait_cond && exit 0 + done + exit 1 +} + +# Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout. +seq () { + while test $1 -le $2; do + echo $1 + set `expr $1 + ${3-1}` $2 $3 + done +} + +if test "$IS_WIN32" = "yes"; then + pwd () { + command pwd -W "$@" + } + + diff () { + command diff --strip-trailing-cr "$@" + } + + kill () { + case "$1" in + -0) + shift + for i in $*; do + # tasklist will always have return code 0. + # If pid does exist, there will be a line with the pid. + if tasklist //fi "PID eq $i" | grep $i >/dev/null; then + : + else + return 1 + fi + done + return 0 + ;; + -[1-9]*) + shift + for i in $*; do + taskkill //F //PID $i >/dev/null + done + ;; + [1-9][0-9]*) + for i in $*; do + taskkill //F //PID $i >/dev/null + done + ;; + esac + } +fi +] +m4_divert_pop([PREPARE_TESTS]) + +m4_define([OVS_WAIT], + [AT_CHECK( + [ovs_wait_cond () { $1 +} +ovs_wait], [0], [ignore], [ignore], [$2])]) +m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])]) +m4_define([OVS_WAIT_WHILE], + [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])]) + +dnl OVS_APP_EXIT_AND_WAIT(DAEMON) +dnl +dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it +dnl to exit. +m4_define([OVS_APP_EXIT_AND_WAIT], + [ovs-appctl -t $1 exit + OVS_WAIT_WHILE([test -e $1.pid])]) + +dnl ON_EXIT([COMMANDS]) +dnl +dnl Adds the shell COMMANDS to a collection executed when the current test +dnl completes, as a cleanup action. (The most common use is to kill a +dnl daemon started by the test. This is important to prevent tests that +dnl start daemons from hanging at exit.) +m4_define([ON_EXIT], [trap '. ./cleanup' 0; cat >>cleanup <<'EOF' +$1 +EOF +]) diff --git a/tests/testsuite.at b/tests/testsuite.at index 3792328f4..57e9205dc 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -1,6 +1,6 @@ AT_INIT -AT_COPYRIGHT([Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. +AT_COPYRIGHT([Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,105 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.]) -AT_TESTED([ovs-vswitchd]) -AT_TESTED([ovs-vsctl]) -AT_TESTED([perl]) - -m4_include([m4/compat.at]) - -m4_divert_push([PREPARE_TESTS]) -[ -ovs_wait () { - # First try a quick sleep, so that the test completes very quickly - # in the normal case. POSIX doesn't require fractional times to - # work, so this might not work. - sleep 0.1 - ovs_wait_cond && exit 0 - # Then wait up to 10 seconds. - for d in 0 1 2 3 4 5 6 7 8 9; do - sleep 1 - ovs_wait_cond && exit 0 - done - exit 1 -} - -# Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout. -seq () { - while test $1 -le $2; do - echo $1 - set `expr $1 + ${3-1}` $2 $3 - done -} - -if test "$IS_WIN32" = "yes"; then - pwd () { - command pwd -W "$@" - } - - diff () { - command diff --strip-trailing-cr "$@" - } - - kill () { - case "$1" in - -0) - shift - for i in $*; do - # tasklist will always have return code 0. - # If pid does exist, there will be a line with the pid. - if tasklist //fi "PID eq $i" | grep $i >/dev/null; then - : - else - return 1 - fi - done - return 0 - ;; - -[1-9]*) - shift - for i in $*; do - taskkill //F //PID $i >/dev/null - done - ;; - [1-9][0-9]*) - for i in $*; do - taskkill //F //PID $i >/dev/null - done - ;; - esac - } -fi -] -m4_divert_pop([PREPARE_TESTS]) - -m4_define([OVS_WAIT], - [AT_CHECK( - [ovs_wait_cond () { $1 -} -ovs_wait], [0], [ignore], [ignore], [$2])]) -m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])]) -m4_define([OVS_WAIT_WHILE], - [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])]) - -dnl OVS_APP_EXIT_AND_WAIT(DAEMON) -dnl -dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it -dnl to exit. -m4_define([OVS_APP_EXIT_AND_WAIT], - [ovs-appctl -t $1 exit - OVS_WAIT_WHILE([test -e $1.pid])]) - -dnl ON_EXIT([COMMANDS]) -dnl -dnl Adds the shell COMMANDS to a collection executed when the current test -dnl completes, as a cleanup action. (The most common use is to kill a -dnl daemon started by the test. This is important to prevent tests that -dnl start daemons from hanging at exit.) -m4_define([ON_EXIT], [trap '. ./cleanup' 0; cat >>cleanup <<'EOF' -$1 -EOF -]) - +m4_include([tests/ovs-macros.at]) m4_include([tests/ovsdb-macros.at]) m4_include([tests/ofproto-macros.at]) -- 2.20.1