From: Ben Pfaff Date: Tue, 28 May 2013 18:44:21 +0000 (-0700) Subject: tests: Add support for running OFTest. X-Git-Tag: sliver-openvswitch-1.10.90-3~6^2~202 X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=81a114e557229fc4f0ced228626ff6f6e632ce6f tests: Add support for running OFTest. Signed-off-by: Ben Pfaff --- diff --git a/Makefile.am b/Makefile.am index 36beb6c4a..193b19ea9 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 3cb724eaf..790824d81 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 000000000..1b8516be5 --- /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= + +where 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= 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 4442eb509..15df6231f 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 000000000..d12a22fc0 --- /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 <