From 0c58fc7c4a961e3156ac87a5346eb19af1278c9e Mon Sep 17 00:00:00 2001 From: Paul Glass Date: Mon, 15 Feb 2016 20:28:55 +0000 Subject: [PATCH] Log stacktraces of MultipleExceptions in functionaltests Change-Id: I479bdb59d06c561c49ae63d8bcbe2e5c8f67577a --- designateclient/functionaltests/v2/fixtures.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/designateclient/functionaltests/v2/fixtures.py b/designateclient/functionaltests/v2/fixtures.py index 5e08bee4..54c3daa0 100644 --- a/designateclient/functionaltests/v2/fixtures.py +++ b/designateclient/functionaltests/v2/fixtures.py @@ -14,9 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. """ from __future__ import absolute_import +from __future__ import print_function +import sys +import traceback import fixtures from tempest_lib.exceptions import CommandFailed +from testtools.runtest import MultipleExceptions from designateclient.functionaltests.client import DesignateCLI @@ -30,6 +34,20 @@ class BaseFixture(fixtures.Fixture): self.kwargs = kwargs self.client = DesignateCLI.as_user(user) + def setUp(self): + # Sometimes, exceptions are raised in _setUp methods on fixtures. + # testtools pushes the exception into a MultipleExceptions object along + # with an artificial SetupError, which produces bad error messages. + # This just logs those stack traces to stderr for easier debugging. + try: + super(BaseFixture, self).setUp() + except MultipleExceptions as e: + for i, exc_info in enumerate(e.args): + print('--- printing MultipleExceptions traceback {} of {} ---' + .format(i + 1, len(e.args)), file=sys.stderr) + traceback.print_exception(*exc_info) + raise + class ZoneFixture(BaseFixture): """See DesignateCLI.zone_create for __init__ args"""