diff mbox series

[ovs-dev] ovs-macros: Port OVS_PAUSE_TEST support from OpenvSwitch.

Message ID 1603445384-17208-1-git-send-email-dceara@redhat.com
State Superseded
Headers show
Series [ovs-dev] ovs-macros: Port OVS_PAUSE_TEST support from OpenvSwitch. | expand

Commit Message

Dumitru Ceara Oct. 23, 2020, 9:29 a.m. UTC
From: Vasu Dasari <vdasari@gmail.com>

From: Vasu Dasari <vdasari@gmail.com>

Upstream OVS commit:
    commit c99d14775f78cb38b2109add063f58201ba07652
    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>
---
 Documentation/topics/testing.rst | 24 ++++++++++++++++++++++++
 tests/ovs-macros.at              | 24 +++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 1 deletion(-)

Comments

0-day Robot Oct. 23, 2020, 9:59 a.m. UTC | #1
Bleep bloop.  Greetings Dumitru Ceara, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
ERROR: Author Vasu Dasari <vdasari@gmail.com> needs to sign off.
WARNING: Unexpected sign-offs from developers who are not authors or co-authors or committers: Dumitru Ceara <dceara@redhat.com>
WARNING: Line is 83 characters long (recommended limit is 79)
#86 FILE: Documentation/topics/testing.rst:109:
   export OVS_RUNDIR=/opt/vdasari/Developer/ovs/_build-gcc/tests/testsuite.dir/0139

Lines checked: 137, Warnings: 2, Errors: 1


Please check this out.  If you feel there has been an error, please email aconole@redhat.com

Thanks,
0-day Robot
Dumitru Ceara Oct. 23, 2020, 10:23 a.m. UTC | #2
On 10/23/20 11:29 AM, Dumitru Ceara wrote:
> From: Vasu Dasari <vdasari@gmail.com>
> 
> From: Vasu Dasari <vdasari@gmail.com>
> 
> Upstream OVS commit:
>     commit c99d14775f78cb38b2109add063f58201ba07652
>     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>
> ---
>  Documentation/topics/testing.rst | 24 ++++++++++++++++++++++++
>  tests/ovs-macros.at              | 24 +++++++++++++++++++++++-
>  2 files changed, 47 insertions(+), 1 deletion(-)
> 

I messed up this patch as 0-day Robot reported, sorry for the noise.

v2 available at:
http://patchwork.ozlabs.org/project/ovn/patch/1603448455-22787-1-git-send-email-dceara@redhat.com/

Thanks,
Dumitru
diff mbox series

Patch

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.