2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

tests: Add support for running OFTest.

Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Ben Pfaff 2013-05-28 11:44:21 -07:00
parent eab5611a38
commit 81a114e557
5 changed files with 173 additions and 0 deletions

View File

@ -55,6 +55,7 @@ EXTRA_DIST = \
NOTICE \
OPENFLOW-1.1+ \
PORTING \
README-OFTest \
README-gcov \
README-lisp \
REPORTING-BUGS \

2
NEWS
View File

@ -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

70
README-OFTest Normal file
View File

@ -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/

View 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 '----------------------------------------------------------------------'
# 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

94
tests/run-oftest Executable file
View File

@ -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