Skip to content

Commit 45b43da

Browse files
committed
SERVER-42622 Call teardown_fixture() even if setup_fixture() errors.
1 parent 39e0f96 commit 45b43da

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

buildscripts/resmokelib/testing/job.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __call__(self, queue, interrupt_flag, setup_flag=None, teardown_flag=None):
8181
will be run before this method returns. If an error occurs
8282
while destroying the fixture, then the 'teardown_flag' will be set.
8383
"""
84+
setup_succeeded = True
8485
if setup_flag is not None:
8586
try:
8687
setup_succeeded = self.setup_fixture()
@@ -98,19 +99,20 @@ def __call__(self, queue, interrupt_flag, setup_flag=None, teardown_flag=None):
9899
setup_succeeded = False
99100

100101
if not setup_succeeded:
102+
setup_flag.set()
101103
self._interrupt_all_jobs(queue, interrupt_flag)
102-
return
103104

104-
try:
105-
self._run(queue, interrupt_flag)
106-
except errors.StopExecution as err:
107-
# Stop running tests immediately.
108-
self.logger.error("Received a StopExecution exception: %s.", err)
109-
self._interrupt_all_jobs(queue, interrupt_flag)
110-
except: # pylint: disable=bare-except
111-
# Unknown error, stop execution.
112-
self.logger.exception("Encountered an error during test execution.")
113-
self._interrupt_all_jobs(queue, interrupt_flag)
105+
if setup_succeeded:
106+
try:
107+
self._run(queue, interrupt_flag)
108+
except errors.StopExecution as err:
109+
# Stop running tests immediately.
110+
self.logger.error("Received a StopExecution exception: %s.", err)
111+
self._interrupt_all_jobs(queue, interrupt_flag)
112+
except: # pylint: disable=bare-except
113+
# Unknown error, stop execution.
114+
self.logger.exception("Encountered an error during test execution.")
115+
self._interrupt_all_jobs(queue, interrupt_flag)
114116

115117
if teardown_flag is not None:
116118
try:

buildscripts/tests/resmokelib/testing/test_job.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,13 @@ def __assert_when_run_tests(self, setup_succeeded=True, teardown_succeeded=True)
233233
self.__job_object(queue, interrupt_flag, setup_flag, teardown_flag)
234234

235235
self.assertEqual(setup_succeeded, not interrupt_flag.is_set())
236+
self.assertEqual(setup_succeeded, not setup_flag.is_set())
236237
self.assertEqual(teardown_succeeded, not teardown_flag.is_set())
237238

239+
# teardown_fixture() should be called even if setup_fixture() raises an exception.
240+
self.__job_object.setup_fixture.assert_called()
241+
self.__job_object.teardown_fixture.assert_called()
242+
238243
def test_setup_and_teardown_both_succeed(self):
239244
self.__assert_when_run_tests()
240245

0 commit comments

Comments
 (0)