77
77
self.assertLogContains('Cleanup failed:.*failing_cleanup goes boom')
79
79
def test_cleanup_error_debug_flag(self):
80
"""The -Dcleanup debug flag causes cleanup errors to be propagated."""
80
"""The -Dcleanup debug flag causes cleanup errors to be reported to the
82
84
trace.push_log_file(log)
83
85
debug.debug_flags.add('cleanup')
183
184
gone wrong), the first error is propagated, and subsequent errors are
186
class ErrorA(Exception): pass
187
class ErrorB(Exception): pass
187
cleanups = self.make_two_failing_cleanup_funcs()
192
188
self.assertRaises(ErrorA, do_with_cleanups, self.trivial_func,
194
190
self.assertLogContains('Cleanup failed:.*ErrorB')
195
191
log = self._get_log(keep_log_file=True)
196
192
self.assertFalse('ErrorA' in log)
194
def make_two_failing_cleanup_funcs(self):
196
raise ErrorA('Error A')
198
raise ErrorB('Error B')
199
return [raise_a, raise_b]
201
def test_multiple_cleanup_failures_debug_flag(self):
203
trace.push_log_file(log)
204
debug.debug_flags.add('cleanup')
205
cleanups = self.make_two_failing_cleanup_funcs()
206
self.assertRaises(ErrorA, do_with_cleanups, self.trivial_func, cleanups)
207
self.assertContainsRe(
208
log.getvalue(), "bzr: warning: Cleanup failed:.*Error B\n")
209
self.assertEqual(1, log.getvalue().count('bzr: warning:'),
212
def test_func_and_cleanup_errors_debug_flag(self):
214
trace.push_log_file(log)
215
debug.debug_flags.add('cleanup')
216
cleanups = self.make_two_failing_cleanup_funcs()
217
self.assertRaises(ZeroDivisionError, do_with_cleanups,
218
self.failing_func, cleanups)
219
self.assertContainsRe(
220
log.getvalue(), "bzr: warning: Cleanup failed:.*Error A\n")
221
self.assertContainsRe(
222
log.getvalue(), "bzr: warning: Cleanup failed:.*Error B\n")
223
self.assertEqual(2, log.getvalue().count('bzr: warning:'))
198
225
def test_func_may_mutate_cleanups(self):
199
226
"""The main func may mutate the cleanups before it returns.
212
239
self.assertEqual('result', result)
213
240
self.assertEqual(
214
241
['func_that_adds_cleanups', 'no_op_cleanup'], self.call_log)
243
def test_cleanup_error_debug_flag(self):
244
"""The -Dcleanup debug flag causes cleanup errors to be reported to the
248
trace.push_log_file(log)
249
debug.debug_flags.add('cleanup')
250
self.assertRaises(ZeroDivisionError, do_with_cleanups,
251
self.failing_func, [self.failing_cleanup])
252
self.assertContainsRe(
254
"bzr: warning: Cleanup failed:.*failing_cleanup goes boom")
255
self.assertEqual(1, log.getvalue().count('bzr: warning:'))
258
class ErrorA(Exception): pass
259
class ErrorB(Exception): pass