On 23/10/2020 11:20, Dumitru Ceara wrote:
> From: Vasu Dasari <vdas...@gmail.com>
> 
> Upstream OVS commit:
>     commit c99d14775f78cb38b2109add063f58201ba07652
>     Author: Vasu Dasari <vdas...@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 <acon...@redhat.com>
>     Signed-off-by: Vasu Dasari <vdas...@gmail.com>
>     Signed-off-by: Ben Pfaff <b...@ovn.org>
> 
> Signed-off-by: Dumitru Ceara <dce...@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.
> 

This applied and worked for me. This is useful functionality for
debugging and now it works as OVS does.

In the future, I think the UI/docs could be improved. For example, I
think this should be a flag to 'TESTSUITE_FLAGS' rather than an
environment variable and I don't think the -v flag should be necessary
for this. For the moment, it is better to get it to the same level as
OVS so I think it should be applied as-is.

Acked-by: Mark Gray <mark.d.g...@redhat.com>

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to