Skip to content

Commit

Permalink
tests: Add support for running OFTest.
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
blp committed May 28, 2013
1 parent eab5611 commit 81a114e
Show file tree
Hide file tree
Showing 5 changed files with 173 additions and 0 deletions.
1 change: 1 addition & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ EXTRA_DIST = \
NOTICE \
OPENFLOW-1.1+ \
PORTING \
README-OFTest \
README-gcov \
README-lisp \
REPORTING-BUGS \
Expand Down
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
70 changes: 70 additions & 0 deletions README-OFTest
Original file line number Diff line number Diff line change
@@ -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
-------

[email protected]
http://openvswitch.org/
6 changes: 6 additions & 0 deletions tests/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
94 changes: 94 additions & 0 deletions tests/run-oftest
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 81a114e

Please sign in to comment.