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 ctrl-d 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' Signed-off-by: Vasu Dasari <[email protected]> Reviewed-by: Ben Pfaff <[email protected]> --- v0 -> v1: Discussion at: https://mail.openvswitch.org/pipermail/ovs-dev/2019-July/360589.html 1. Incorporated review commanets from Ben. 2. Changed topics/testing.rst to document this trick 3. Made this trick work via "make check" as well, by issuing command: "OVS_PAUSE_TEST=1 make check TESTSUITEFLAGS='-v'" --- Documentation/topics/testing.rst | 6 ++++++ tests/ovs-macros.at | 24 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Documentation/topics/testing.rst b/Documentation/topics/testing.rst index a8892e1c1..058b3986f 100644 --- a/Documentation/topics/testing.rst +++ b/Documentation/topics/testing.rst @@ -74,6 +74,12 @@ To run tests matching a keyword, e.g. ``ovsdb``, run:: $ make check TESTSUITEFLAGS='-k ovsdb' +To pause at a failing test (e.g. ``ovsdb``) and inspect the system in failed +state, follow the instructions given out by issuing following command to use +various ovs-* utilities:: + + $ OVS_PAUSE_TEST=1 make check TESTSUITEFLAGS='-v -k ovsdb' + To see a complete list of test options, run:: $ make check TESTSUITEFLAGS=--help diff --git a/tests/ovs-macros.at b/tests/ovs-macros.at index 10593429d..e58b0a1a0 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() { + $as_echo "=====================================================" + $as_echo "Set following environment variable to use various ovs utilities" + $as_echo "export OVS_RUNDIR=$ovs_base" + $as_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. -- 2.17.2 (Apple Git-113) _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
