[ovs-dev] [PATCH v1] ovs-macros: An option to suspend test execution on error

Aaron Conole aconole at redhat.com
Mon Jul 15 19:48:38 UTC 2019


Hi Vasu,

Vasu Dasari <vdasari at gmail.com> writes:

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

>From this point  
   vvvvvvvvvvvvvvvvvv

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

To here ^^^^^^^^^^

I would propose to put this information in the documentation.  A new
developer may not actually trawl through the commits, but this
information would help such a developer (or even a not-so-new developer,
like me).

> Signed-off-by: Vasu Dasari <vdasari at gmail.com>
> Reviewed-by: Ben Pfaff <blp at ovn.org>
> ---
> 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.


More information about the dev mailing list