tests: Add support for running OFTest.
authorBen Pfaff <blp@nicira.com>
Tue, 28 May 2013 18:44:21 +0000 (11:44 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 28 May 2013 22:39:56 +0000 (15:39 -0700)
Signed-off-by: Ben Pfaff <blp@nicira.com>
Makefile.am
NEWS
README-OFTest [new file with mode: 0644]
tests/automake.mk
tests/run-oftest [new file with mode: 0755]

index 36beb6c..193b19e 100644 (file)
@@ -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 3cb724e..790824d 100644 (file)
--- 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 (file)
index 0000000..1b8516b
--- /dev/null
@@ -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/
index 4442eb5..15df623 100644 (file)
@@ -145,6 +145,12 @@ check-valgrind: all tests/atconfig tests/atlocal $(TESTSUITE) \
        @echo 'Valgrind output can be found in tests/testsuite.dir/*/valgrind.*'
        @echo '----------------------------------------------------------------------'
 \f
+# OFTest support.
+
+check-oftest: all
+       srcdir='$(srcdir)' $(SHELL) $(srcdir)/tests/run-oftest
+EXTRA_DIST += tests/run-oftest
+\f
 clean-local:
        test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' -C tests --clean
 
diff --git a/tests/run-oftest b/tests/run-oftest
new file mode 100755 (executable)
index 0000000..d12a22f
--- /dev/null
@@ -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