Running OVS Unit Tests
OVS comes with its own unit test suite. The instructions for running it may be found in the OVS Testing document.
Bootstrap OVS build
The first step is to initialize the ovs build system by running the bootstrap script. You can skip this step if you’ve already run it (e.g., by building OVS).
pushd ovs/ovs
./boot.sh
popd
The script copies a number of files to the ovs/ovs
directory and
generates the configure
script.
Initialize test directory
The next step is to build OVS. We’re going to do an out-of-source build so as not to clutter the OVS directory or interfere with our regular build.
pushd ovs
mkdir test && cd test
../ovs/configure
Note that we do not specify any configuration options.
This step generates the files necessary to do the build in the ovs/test directory.
Build OVS in test directory
The next step is to build OVS in the ovs/test directory.
make -j6 V=0
You can change the number of build threads (-jN
) to something
appropriate for your system.
The V=0 parameter gives you a less verbose build log.
Run unit tests
Now you can run the unit test suite.
make check TESTSUITEFLAGS=-j8
The TESTSUITEFLAGS parameter accepts a number of options, which are described in the testing.rst document.
The -j8 parameter value specifies the number of test threads to use. You will almost undoubtedly want to use this parameter; there are ~2500 test cases in the suite.
Review test results
Each test case generates a single line of output as it is executed, consisting of the test number, test name, and the results of the test.
A summary is displayed after the last test case has been run.
## ------------- ##
## Test results. ##
## ------------- ##
ERROR: 2504 tests were run,
8 failed unexpectedly.
3 tests were skipped.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##
Please send \`tests/testsuite.log' and all information you think might
help:
To: <bugs@openvswitch.org>
Subject: [openvswitch 3.0.90] testsuite: 771 773 778 780 781 1279 1949 2232 failed
You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point. Its output may
be found below \`tests/testsuite.dir'.
Details of each failed test are saved in the ovs/tests/testsuite.dir
directory, for use in debugging.
~/recipe/ovs/test$ ls tests/testsuite.dir
0771 0773 0778 0780 0781 1279 1949 2232 at-job-fifo
~/recipe/ovs/test$ ls tests/testsuite.dir/0771
cleanup conf.db flows.txt ovs-vswitchd.log ovsdb-server.log run stderr stdout testsuite.log
Measure code coverage
Enable measurement
To enable unit test code coverage, you will need to build OVS with the –enable-coverage option.
cd recipe/ovs
rm -fr test
mkdir test && cd test
../ovs/configure --enable-coverage
make -j8 V=0
Run and measure tests
Then run the test suite using the check-lcov Makefile target.
make check-lcov TESTSUITEFLAGS=-j8
(progress messages omitted)
## ------------- ##
## Test results. ##
## ------------- ##
ERROR: 2504 tests were run,
7 failed unexpectedly.
3 tests were skipped.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##
Please send \`tests/testsuite.log' and all information you think might
help:
To: <bugs@openvswitch.org>
Subject: [openvswitch 3.0.90] testsuite: 771 773 778 780 781 961 1279 failed
You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point. Its output may
be found below \`tests/testsuite.dir'.
make: [Makefile:7035: check-lcov] Error 1 (ignored)
/usr/bin/mkdir -p tests/lcov
lcov -b /home/porthos/recipe/ovs/test -d /home/porthos/recipe/ovs/test -q -c --rc lcov_branch_coverage=1 -o tests/lcov/coverage.info
genhtml -q --branch-coverage --num-spaces 4 -o tests/lcov tests/lcov/coverage.info
genhtml: WARNING: negative counts found in tracefile tests/lcov/coverage.info
coverage report generated at tests/lcov/index.html
View report
To view the coverage report, open ovs/tests/lcov/index.html in a browser.