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