From e883bbf10bca34bb222ef5e9d92997c508e41dd2 Mon Sep 17 00:00:00 2001 From: bendikro Date: Thu, 27 Aug 2015 17:05:45 +0200 Subject: [PATCH] [Core] Do not remove components from component registry on shutdown By removing the components after they shut down, KeyErrors are raised when trying to acccess the component. Unit tests now clear the component registry on tear down. --- deluge/component.py | 7 +------ deluge/tests/basetest.py | 6 +++--- deluge/tests/test_core.py | 5 +++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/deluge/component.py b/deluge/component.py index 904c8462c..4ae985ac9 100644 --- a/deluge/component.py +++ b/deluge/component.py @@ -385,13 +385,8 @@ class ComponentRegistry(object): :rtype: twisted.internet.defer.Deferred """ - def on_success(result, key): - del _ComponentRegistry.components[key] - return succeed(result) - def on_stopped(result): - return DeferredList(map(lambda t: t[1]._component_shutdown().addCallback(on_success, t[0]), - self.components.items())) + return DeferredList(map(lambda c: c._component_shutdown(), self.components.values())) return self.stop(self.components.keys()).addCallback(on_stopped) diff --git a/deluge/tests/basetest.py b/deluge/tests/basetest.py index 952c58661..478ba398e 100644 --- a/deluge/tests/basetest.py +++ b/deluge/tests/basetest.py @@ -25,9 +25,9 @@ class BaseTestCase(unittest.TestCase): d = maybeDeferred(self.tear_down) def on_teared_down(result): - if len(component._ComponentRegistry.components) != 0: - warnings.warn("The component._ComponentRegistry.components is not empty after the test finished!: %s" % - component._ComponentRegistry.components) + component._ComponentRegistry.components.clear() + component._ComponentRegistry.dependents.clear() + return d.addCallback(on_teared_down) def set_up(self): diff --git a/deluge/tests/test_core.py b/deluge/tests/test_core.py index 2b7cca121..e2004ea75 100644 --- a/deluge/tests/test_core.py +++ b/deluge/tests/test_core.py @@ -69,7 +69,8 @@ class TopLevelResource(Resource): class CoreTestCase(BaseTestCase): - def setUp(self): # NOQA + + def set_up(self): common.set_tmp_config_dir() self.rpcserver = RPCServer(listen=False) self.core = Core() @@ -94,7 +95,7 @@ class CoreTestCase(BaseTestCase): raise error return result - def tearDown(self): # NOQA + def tear_down(self): def on_shutdown(result): del self.rpcserver