From 9db46c5794493bcd7e768c97458aba105242c75f Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Sun, 20 Oct 2019 19:16:48 +0000 Subject: [PATCH] Reset timeout exception in DietTestCase when retrying In case of fixtures.TimeoutException, DietTestCase retries the execution of the test case (introduced in [1]). But the timeout fixture was not reset. This can lead to a general execution timeout if a test do not exit in a proper time. [1] If865c4683645f9bd11f5e1b528bade0547505bfd Related-Bug: #1843478 Partial-Bug: #1848944 Change-Id: Ib6ef58b5259ea4bf151e866f6244ff87b195b139 (cherry picked from commit 4f59db2fab33e39f3d101885263e5f6483ad2b94) --- neutron/tests/base.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/neutron/tests/base.py b/neutron/tests/base.py index 36a4a9b7531..a4fbf9f6eb0 100644 --- a/neutron/tests/base.py +++ b/neutron/tests/base.py @@ -44,6 +44,7 @@ from osprofiler import profiler import six from sqlalchemy import exc as sqlalchemy_exc import testtools +from testtools import content from neutron._i18n import _ from neutron.agent.linux import external_process @@ -187,12 +188,14 @@ def _catch_timeout(f): # declarations) this catch can be remove. # [1] https://review.opendev.org/#/c/631275/ except fixtures.TimeoutException: - with excutils.save_and_reraise_exception() as ctxt: - if idx < TESTCASE_RETRIES: - msg = ('"fixtures.TimeoutException" during test case ' - 'execution no %s; test case re-executed' % idx) - self.addDetail('DietTestCase', msg) - ctxt.reraise = False + if idx < TESTCASE_RETRIES: + msg = ('"fixtures.TimeoutException" during test case ' + 'execution no %s; test case re-executed' % idx) + self.addDetail('DietTestCase', + content.text_content(msg)) + self._set_timeout() + else: + self.fail('Execution of this test timed out') return func