With this basic test case:
{{{
class TestBlah(TestCaseWithFactory):
run_tests_with = AsynchronousDeferredRunTest.make_factory(timeout=10)
def test_failing_test(self):
self.assertFalse(True)
}}}
I don't see a failure reported. Tracing through the code in pdb I can produce a "AttributeError: "can't set attribute"" at the backtrace below:
/home/ed/canonical/lp-branches/double-build-bug-705342/bin/test(275)<module>()
-> testrunner.run([])
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py(32)run()
-> failed = run_internal(defaults, args, script_parts=script_parts)
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py(45)run_internal()
-> runner.run()
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py(138)run()
-> self.run_tests()
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py(219)run_tests()
-> setup_layers, self.failures, self.errors)
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py(377)run_layer()
-> return run_tests(options, tests, layer_name, failures, errors)
/home/ed/canonical/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py(309)run_tests()
-> test(result)
/usr/lib/python2.6/unittest.py(300)__call__()
-> return self.run(*args, **kwds)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/testcase.py(450)run()
-> return self.__RunTest(self, self.exception_handlers).run(result)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/runtest.py(74)run()
-> return self._run_one(actual_result)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/runtest.py(88)_run_one()
-> return self._run_prepared_result(ExtendedToOriginalDecorator(result))
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/runtest.py(100)_run_prepared_result()
-> self._run_core()
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(226)_run_core()
-> self._blocking_run_deferred, spinner)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(68)run_with_log_observers()
-> return function(*args, **kwargs)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(208)_blocking_run_deferred()
-> spinner.run, self._timeout, self._run_deferred)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/_spinner.py(106)trap_unhandled_errors()
-> result = function(*args, **kwargs)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/_spinner.py(51)decorated()
-> return function(*args, **kwargs)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/_spinner.py(307)run()
-> self._reactor.run()
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(1157)run()
-> self.startRunning(installSignalHandlers=installSignalHandlers)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(1137)startRunning()
-> ReactorBase.startRunning(self)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(674)startRunning()
-> self.fireSystemEvent('startup')
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(628)fireSystemEvent()
-> event.fireEvent()
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(413)fireEvent()
-> DeferredList(beforeResults).addCallback(self._continueFiring)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(297)addCallback()
-> callbackKeywords=kw)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(286)addCallbacks()
-> self._runCallbacks()
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(542)_runCallbacks()
-> current.result = callback(current.result, *args, **kw)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/base.py(426)_continueFiring()
-> callable(*args, **kwargs)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/_spinner.py(302)run_function()
-> d = defer.maybeDeferred(function, *args, **kwargs)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(133)maybeDeferred()
-> result = f(*args, **kw)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(194)_run_deferred()
-> d.addCallback(set_up_done)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(297)addCallback()
-> callbackKeywords=kw)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(286)addCallbacks()
-> self._runCallbacks()
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(542)_runCallbacks()
-> current.result = callback(current.result, *args, **kw)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(182)set_up_done()
-> d = self._run_user(self.case._run_test_method, self.result)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(262)_run_user()
-> return d.addErrback(self._got_user_failure)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(308)addErrback()
-> errbackKeywords=kw)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(286)addCallbacks()
-> self._runCallbacks()
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/internet/defer.py(542)_runCallbacks()
-> current.result = callback(current.result, *args, **kw)
/home/ed/canonical/lp-sourcedeps/eggs/testtools-0.9.8-py2.6.egg/testtools/deferredruntest.py(46)_got_user_failure()
-> (failure.type, failure.value, failure.getTracebackObject()),
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/python/failure.py(466)getTracebackObject()
-> return _Traceback(self.frames)
/home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/python/failure.py(94)__init__()
-> self.tb_frame = _Frame(name, filename)
> /home/ed/canonical/lp-sourcedeps/eggs/Twisted-10.2.0_4395fix_1-py2.6-linux-x86_64.egg/twisted/python/failure.py(120)__init__()
-> self.f_locals = {}
AttributeError: "can't set attribute"
This AttributeError appears to cause the code to not report the failure.