Skip to content

Commit

Permalink
ovs-macros: Port OVS_PAUSE_TEST support from OpenvSwitch.
Browse files Browse the repository at this point in the history
Upstream OVS commit:
    commit c99d147
    Author: Vasu Dasari <vdasari@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@redhat.com>
    Signed-off-by: Vasu Dasari <vdasari@gmail.com>
    Signed-off-by: Ben Pfaff <blp@ovn.org>

Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Acked-by: Mark Gray <mark.d.gray@redhat.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
  • Loading branch information
vasu-dasari authored and ovsrobot committed Oct 23, 2020
1 parent 3e3de6c commit 4c18f8a
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
24 changes: 24 additions & 0 deletions Documentation/topics/testing.rst
Expand Up @@ -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
Expand Down
24 changes: 23 additions & 1 deletion tests/ovs-macros.at
Expand Up @@ -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.
Expand Down

0 comments on commit 4c18f8a

Please sign in to comment.