[ovs-dev] [PATCH ovn v2] ovs-macros: Port OVS_PAUSE_TEST support from OpenvSwitch.
Dumitru Ceara
dceara at redhat.com
Fri Oct 23 10:20:55 UTC 2020
From: Vasu Dasari <vdasari at gmail.com>
Upstream OVS commit:
commit c99d14775f78cb38b2109add063f58201ba07652
Author: Vasu Dasari <vdasari at gmail.com>
Date: Mon Jul 15 17:15:01 2019 -0400
ovs-macros: An option to suspend test execution on error
Origins for this patch are captured at
https://mail.openvswitch.org/pipermail/ovs-discuss/2019-June/048923.html.
Summarizing here, when a test fails, it would be good to pause test execution
and let the developer poke around the system to see current status of system.
As part of this patch, made a small tweaks to ovs-macros.at, so that when test
suite fails, ovs_on_exit() function will be called. And in this function, a check
is made to see if an environment variable to OVS_PAUSE_TEST is set. If it is
set, then test suite is paused and will continue to wait for user input
Ctrl-D. Meanwhile user can poke around the system to see why test case has
failed. Once done with investigation, user can press ctrl-d to cleanup the
test suite.
For example, to re-run test case 139:
export OVS_PAUSE_TEST=1
cd tests/system-userspace-testsuite.dir/139
sudo -E ./run
When error occurs, above command would display something like this:
=====================================================
Set environment variable to use various ovs utilities
export OVS_RUNDIR=/opt/vdasari/Developer/ovs/_build-gcc/tests/system-userspace-testsuite.dir/139
Press ENTER to continue:
=====================================================
And from another window, one can execute ovs-xxx commands like:
export OVS_RUNDIR=/opt/vdasari/Developer/ovs/_build-gcc/tests/system-userspace-testsuite.dir/139
$ ovs-ofctl dump-ports br0
.
.
To be able to pause while performing `make check`, one can do:
$ OVS_PAUSE_TEST=1 make check TESTSUITEFLAGS='-v'
Acked-by: Aaron Conole <aconole at redhat.com>
Signed-off-by: Vasu Dasari <vdasari at gmail.com>
Signed-off-by: Ben Pfaff <blp at ovn.org>
Signed-off-by: Dumitru Ceara <dceara at redhat.com>
---
Documentation/topics/testing.rst | 24 ++++++++++++++++++++++++
tests/ovs-macros.at | 24 +++++++++++++++++++++++-
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst
index 242608a..e07cdf8 100644
--- a/Documentation/topics/testing.rst
+++ b/Documentation/topics/testing.rst
@@ -89,6 +89,30 @@ report test failures as bugs and include the ``testsuite.log`` in your report.
$ make check TESTSUITEFLAGS=-j8 RECHECK=yes
+Debugging unit tests
+++++++++++++++++++++
+
+To initiate debugging from artifacts generated from `make check` run, set the
+``OVS_PAUSE_TEST`` environment variable to 1. For example, to run test case
+139 and pause on error::
+
+ $ OVS_PAUSE_TEST=1 make check TESTSUITEFLAGS='-v 139'
+
+When error occurs, above command would display something like this::
+
+ Set environment variable to use various ovs utilities
+ export OVS_RUNDIR=<dir>/ovs/_build-gcc/tests/testsuite.dir/0139
+ Press ENTER to continue:
+
+And from another window, one can execute ovs-xxx commands like::
+
+ export OVS_RUNDIR=/opt/vdasari/Developer/ovs/_build-gcc/tests/testsuite.dir/0139
+ $ ovs-ofctl dump-ports br0
+ .
+ .
+
+Once done with investigation, press ENTER to perform cleanup operation.
+
.. _testing-coverage:
Coverage
diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at
index 3dcf8f9..2370cd2 100644
--- a/tests/ovs-macros.at
+++ b/tests/ovs-macros.at
@@ -35,11 +35,33 @@ m4_divert_push([PREPARE_TESTS])
# directory.
ovs_init() {
ovs_base=`pwd`
- trap '. "$ovs_base/cleanup"' 0
+ trap ovs_on_exit 0
: > cleanup
ovs_setenv
}
+# Catch testsuite error condition and cleanup test environment by tearing down
+# all interfaces and processes spawned.
+# User has an option to leave the test environment in error state so that system
+# can be poked around to get more information. User can enable this option by setting
+# environment variable OVS_PAUSE_TEST=1. User needs to press CTRL-D to resume the
+# cleanup operation.
+ovs_pause() {
+ echo "====================================================="
+ echo "Set following environment variable to use various ovs utilities"
+ echo "export OVS_RUNDIR=$ovs_base"
+ echo "Press ENTER to continue: "
+ read
+}
+
+ovs_on_exit () {
+ if [ ! -z "${OVS_PAUSE_TEST}" ] && [ -z $at_verbose ]; then
+ trap '' INT
+ ovs_pause
+ fi
+ . "$ovs_base/cleanup"
+}
+
# With no parameter or an empty parameter, sets the OVS_*DIR
# environment variables to point to $ovs_base, the base directory in
# which the test is running.
--
1.8.3.1
More information about the dev
mailing list