aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2013-05-28 11:44:21 -0700
committerBen Pfaff <blp@nicira.com>2013-05-28 15:39:56 -0700
commit81a114e557229fc4f0ced228626ff6f6e632ce6f (patch)
tree0182171feea2d7db26d35cd2180442d05ecbf7b9
parenteab5611a383faf58728657252751f075c511072e (diff)
tests: Add support for running OFTest.
Signed-off-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--Makefile.am1
-rw-r--r--NEWS2
-rw-r--r--README-OFTest70
-rw-r--r--tests/automake.mk6
-rwxr-xr-xtests/run-oftest94
5 files changed, 173 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 36beb6c4..193b19ea 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -55,6 +55,7 @@ EXTRA_DIST = \
NOTICE \
OPENFLOW-1.1+ \
PORTING \
+ README-OFTest \
README-gcov \
README-lisp \
REPORTING-BUGS \
diff --git a/NEWS b/NEWS
index 3cb724ea..790824d8 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@ post-v1.11.0
* New support for matching outer source and destination IP address
of tunneled packets, for tunnel ports configured with the newly
added "remote_ip=flow" and "local_ip=flow" options.
+ - New "check-oftest" Makefile target for running OFTest against Open
+ vSwitch. See README-OFTest for details.
v1.11.0 - xx xxx xxxx
diff --git a/README-OFTest b/README-OFTest
new file mode 100644
index 00000000..1b8516be
--- /dev/null
+++ b/README-OFTest
@@ -0,0 +1,70 @@
+ How to Use OFTest With Open vSwitch
+ ===================================
+
+This document describes how to use the OFTest OpenFlow protocol
+testing suite with Open vSwitch in "dummy mode". In this mode of
+testing, no packets travel across physical or virtual networks.
+Instead, Unix domain sockets stand in as simulated networks. This
+simulation is imperfect, but it is much easier to set up, does not
+require extra physical or virtual hardware, and does not require
+supervisor privileges.
+
+Prerequisites
+-------------
+
+First, build Open vSwitch according to the instructions in INSTALL.
+You need not install it.
+
+Second, obtain a copy of OFTest and install its prerequisites. You
+need a copy of OFTest that includes commit 406614846c5 (make ovs-dummy
+platform work again). This commit was merged into the OFTest
+repository on Feb 1, 2013, so any copy of OFTest more recent than that
+should work.
+
+Testing OVS in dummy mode does not require root privilege, so you may
+ignore that requirement.
+
+Optionally, add the top-level OFTest directory (containing the "oft"
+program) to your $PATH. This slightly simplifies running OFTest later.
+
+Running OFTest
+--------------
+
+To run OFTest in dummy mode, run the following command from your Open
+vSwitch build directory:
+
+ make check-oftest OFT=<oft-binary>
+
+where <oft-binary> is the absolute path to the "oft" program in
+OFTest.
+
+If you added "oft" to your $PATH, you may omit the OFT variable
+assignment:
+
+ make check-oftest
+
+By default, "check-oftest" passes "oft" just enough options to enable
+dummy mode. You can use OFTFLAGS to pass additional options. For
+example, to run just the basic.Echo test instead of all tests (the
+default) and enable verbose logging:
+
+ make check-oftest OFT=<oft-binary> OFTFLAGS='--verbose -T basic.Echo'
+
+Interpreting OFTest Results
+---------------------------
+
+Please interpret OFTest results cautiously. Open vSwitch can fail a
+given test in OFTest for many reasons, including bugs in Open vSwitch,
+bugs in OFTest, bugs in the "dummy mode" integration, and differing
+interpretations of the OpenFlow standard and other standards.
+
+Open vSwitch has not been validated against OFTest. Please do report
+test failures that you believe to represent bugs in Open vSwitch.
+Include the precise versions of Open vSwitch and OFTest in your bug
+report, plus any other information needed to reproduce the problem.
+
+Contact
+-------
+
+bugs@openvswitch.org
+http://openvswitch.org/
diff --git a/tests/automake.mk b/tests/automake.mk
index 4442eb50..15df6231 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -145,6 +145,12 @@ check-valgrind: all tests/atconfig tests/atlocal $(TESTSUITE) \
@echo 'Valgrind output can be found in tests/testsuite.dir/*/valgrind.*'
@echo '----------------------------------------------------------------------'
+# OFTest support.
+
+check-oftest: all
+ srcdir='$(srcdir)' $(SHELL) $(srcdir)/tests/run-oftest
+EXTRA_DIST += tests/run-oftest
+
clean-local:
test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' -C tests --clean
diff --git a/tests/run-oftest b/tests/run-oftest
new file mode 100755
index 00000000..d12a22fc
--- /dev/null
+++ b/tests/run-oftest
@@ -0,0 +1,94 @@
+#! /bin/sh
+
+set -e
+
+run () {
+ echo "$@"
+ "$@" || exit 1
+}
+
+# Put built tools early in $PATH.
+builddir=`pwd`
+if test ! -e vswitchd/ovs-vswitchd; then
+ echo >&2 'not in build directory, please change directory or run via \"make check-oftest'
+ exit 1
+fi
+PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$PATH; export PATH
+
+# Find srcdir.
+case $srcdir in
+ '') srcdir=$builddir ;;
+ /*) ;;
+ *) srcdir=`pwd`/$srcdir ;;
+esac
+if test ! -e "$srcdir"/WHY-OVS; then
+ echo >&2 'source directory not found, please set $srcdir or run via \"make check-oftest'
+ exit 1
+fi
+
+# Make sure oftest is available.
+if test X"$OFT" = X; then
+ OFT=oft
+fi
+if ($OFT --version) >/dev/null 2>&1; then
+ :
+else
+ echo >&2 'OFTest "oft" binary not found or cannot be run, please add to $PATH or set $OFT'
+ exit 1
+fi
+
+# Create sandbox.
+rm -rf sandbox
+mkdir sandbox
+cd sandbox
+sandbox=`pwd`
+
+# Set up environment for OVS programs to sandbox themselves.
+OVS_RUNDIR=$sandbox; export OVS_RUNDIR
+OVS_LOGDIR=$sandbox; export OVS_LOGDIR
+OVS_DBDIR=$sandbox; export OVS_DBDIR
+OVS_SYSCONFDIR=$sandbox; export OVS_SYSCONFDIR
+
+trap 'kill `cat *.pid`' 0 1 2 3 13 14 15
+
+# Create database and start ovsdb-server.
+touch .conf.db.~lock~
+rm -f conf.db
+run ovsdb-tool create conf.db "$srcdir"/vswitchd/vswitch.ovsschema
+run ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
+ --remote=punix:"$sandbox"/db.sock
+
+# Start ovs-vswitchd.
+run ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
+ --enable-dummy --disable-system -vvconn -vnetdev_dummy
+
+# Add a bridge and some ports for OFTest to use,
+# and configure ovs-vswitchd to connect to OFTest.
+run ovs-vsctl --no-wait \
+ -- add-br br0 \
+ -- set bridge br0 datapath-type=dummy fail-mode=secure
+for port in p1 p2 p3 p4; do
+ run ovs-vsctl --no-wait \
+ -- add-port br0 $port \
+ -- set interface $port type=dummy \
+ options:pstream=punix:$OVS_RUNDIR/$port
+done
+run ovs-vsctl \
+ -- set-controller br0 tcp:127.0.0.1 \
+ -- set controller br0 connection-mode=out-of-band max-backoff=1000
+
+# Run OFTest.
+run $OFT -P ovs-dummy $OFTFLAGS; status=$?
+
+cat <<EOF
+
+----------------------------------------------------------------------
+Logs may be found under $sandbox, e.g.:
+ $sandbox/oft.log
+ $sandbox/ovs-vswitchd.log
+ $sandbox/ovsdb-server.log
+----------------------------------------------------------------------
+EOF
+
+# Propagate OFTest exit status.
+exit $status