Garbage databases are easy enough to create by hitting Ctrl-C while running the test suite. The subprocess currently running tests aborts, possibly after calling cleanup, but the parent test process then barfs and certainly doesn't call any cleanup: Traceback (most recent call last): File "bin/test", line 275, in Set up canonical.testing.layers.FunctionalLayer testrunner.run([]) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py", line 32, in run failed = run_internal(defaults, args, script_parts=script_parts) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py", line 45, in run_internal runner.run() File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 138, in run self.run_tests() File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 238, in run_tests layers_to_run, self.failures, self.errors) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 587, in resume_tests time.sleep(0.01) # Keep the loop from being too tight. KeyboardInterrupt SIGINT handled. Traceback (most recent call last): File "bin/test", line 275, in testrunner.run([]) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py", line 32, in run failed = run_internal(defaults, args, script_parts=script_parts) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/__init__.py", line 45, in run_internal runner.run() File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 138, in run self.run_tests() File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 219, in run_tests setup_layers, self.failures, self.errors) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 367, in run_layer setup_layer(options, layer, setup_layers) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 643, in setup_layer setup_layer(options, base, setup_layers) File "/home/stub/lp/lp-sourcedeps/eggs/zope.testing-3.9.4_p3-py2.6.egg/zope/testing/testrunner/runner.py", line 648, in setup_layer layer.setUp() File "/home/stub/lp/trivial/lib/canonical/testing/profiled.py", line 29, in profiled_func return func(cls, *args, **kw) File "/home/stub/lp/trivial/lib/canonical/testing/layers.py", line 1042, in setUp FunctionalTestSetup().setUp() File "/home/stub/lp/lp-sourcedeps/eggs/zope.app.testing-3.7.5-py2.6.egg/zope/app/testing/functional.py", line 215, in __init__ self.app = Debugger(self.db, config_file) File "/home/stub/lp/lp-sourcedeps/eggs/zope.app.debug-3.4.1-py2.6.egg/zope/app/debug/debug.py", line 36, in __init__ config(config_file) File "/home/stub/lp/lp-sourcedeps/eggs/zope.app.appsetup-3.12.0-py2.6.egg/zope/app/appsetup/appsetup.py", line 111, in config context = xmlconfig.file(file, context=context, execute=execute) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 647, in file include(context, name, package) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 546, in include processxmlfile(f, context) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 378, in processxmlfile parser.parse(src) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 107, in parse xmlreader.IncrementalParser.parse(self, source) File "/usr/lib/python2.6/xml/sax/xmlreader.py", line 123, in parse self.feed(buffer) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 207, in feed self._parser.Parse(data, isFinal) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 349, in end_element_ns self._cont_handler.endElementNS(pair, None) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 357, in endElementNS self.context.end() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 537, in end self.stack.pop().finish() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 685, in finish actions = self.handler(context, **args) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 546, in include processxmlfile(f, context) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 378, in processxmlfile parser.parse(src) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 107, in parse xmlreader.IncrementalParser.parse(self, source) File "/usr/lib/python2.6/xml/sax/xmlreader.py", line 123, in parse self.feed(buffer) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 207, in feed self._parser.Parse(data, isFinal) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 349, in end_element_ns self._cont_handler.endElementNS(pair, None) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 357, in endElementNS self.context.end() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 537, in end self.stack.pop().finish() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 685, in finish actions = self.handler(context, **args) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 546, in include processxmlfile(f, context) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 378, in processxmlfile parser.parse(src) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 107, in parse xmlreader.IncrementalParser.parse(self, source) File "/usr/lib/python2.6/xml/sax/xmlreader.py", line 123, in parse self.feed(buffer) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 207, in feed self._parser.Parse(data, isFinal) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 349, in end_element_ns self._cont_handler.endElementNS(pair, None) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 357, in endElementNS self.context.end() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 537, in end self.stack.pop().finish() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 685, in finish actions = self.handler(context, **args) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 546, in include processxmlfile(f, context) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 378, in processxmlfile parser.parse(src) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 107, in parse xmlreader.IncrementalParser.parse(self, source) File "/usr/lib/python2.6/xml/sax/xmlreader.py", line 123, in parse self.feed(buffer) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 207, in feed self._parser.Parse(data, isFinal) File "/usr/lib/python2.6/xml/sax/expatreader.py", line 349, in end_element_ns self._cont_handler.endElementNS(pair, None) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/xmlconfig.py", line 357, in endElementNS self.context.end() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 537, in end self.stack.pop().finish() File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 684, in finish args = toargs(context, *self.argdata) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 1376, in toargs args[str(name)] = field.fromUnicode(s) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/fields.py", line 229, in fromUnicode v = vt.fromUnicode(s) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/fields.py", line 139, in fromUnicode value = self.context.resolve(name) File "/home/stub/lp/lp-sourcedeps/eggs/zope.configuration-3.6.0-py2.6.egg/zope/configuration/config.py", line 180, in resolve mod = __import__(mname, *_import_chickens) File "/home/stub/lp/trivial/lib/lp/scripts/utilities/importfascist.py", line 190, in import_fascist module = original_import(name, globals, locals, fromlist, level) File "/home/stub/lp/trivial/lib/canonical/launchpad/browser/__init__.py", line 36, in from lp.code.browser.branchmergeproposal import * File "/home/stub/lp/trivial/lib/lp/scripts/utilities/importfascist.py", line 190, in import_fascist module = original_import(name, globals, locals, fromlist, level) File "/home/stub/lp/trivial/lib/lp/code/browser/branchmergeproposal.py", line 101, in from lp.code.browser.codereviewcomment import CodeReviewDisplayComment File "/home/stub/lp/trivial/lib/lp/scripts/utilities/importfascist.py", line 190, in import_fascist module = original_import(name, globals, locals, fromlist, level) File "/home/stub/lp/trivial/lib/lp/code/browser/codereviewcomment.py", line 52, in class CodeReviewDisplayComment: File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/advice.py", line 129, in advise newClass = meta(name,bases,cdict) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/advice.py", line 132, in advise return callback(newClass) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/declarations.py", line 484, in _implements_advice classImplements(cls, *interfaces) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/declarations.py", line 460, in classImplements spec = implementedBy(cls) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/declarations.py", line 354, in implementedByFallback spec = Implements(*[implementedBy(c) for c in bases]) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/declarations.py", line 46, in __init__ Specification.__init__(self, _normalizeargs(interfaces)) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/interface.py", line 261, in __init__ self.__bases__ = tuple(bases) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/interface.py", line 285, in __setBases self.changed(self) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/declarations.py", line 49, in changed Specification.changed(self, originally_changed) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/interface.py", line 300, in changed ancestors = ro(self) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/ro.py", line 24, in ro return mergeOrderings([_flatten(object)]) File "/home/stub/lp/lp-sourcedeps/eggs/zope.interface-3.5.2-py2.6-linux-x86_64.egg/zope/interface/ro.py", line 54, in mergeOrderings seen[o] = 1 KeyboardInterrupt ********************************************************************** Could not communicate with subprocess **********************************************************************