[svn] commit: r2369 - in /trunk/src/lib/python/isc/config: ccsession.py tests/ccsession_test.py tests/unittest_fakesession.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Wed Jun 30 20:28:25 UTC 2010
Author: jelte
Date: Wed Jun 30 20:28:25 2010
New Revision: 2369
Log:
merging trac ticket #242 (remote_config functions aren't fully cleaned up in CCSession)
Modified:
trunk/src/lib/python/isc/config/ccsession.py
trunk/src/lib/python/isc/config/tests/ccsession_test.py
trunk/src/lib/python/isc/config/tests/unittest_fakesession.py
Modified: trunk/src/lib/python/isc/config/ccsession.py
==============================================================================
--- trunk/src/lib/python/isc/config/ccsession.py (original)
+++ trunk/src/lib/python/isc/config/ccsession.py Wed Jun 30 20:28:25 2010
@@ -149,6 +149,11 @@
self._session.group_subscribe(self._module_name, "*")
self._remote_module_configs = {}
+
+ def __del__(self):
+ self._session.group_unsubscribe(self._module_name, "*")
+ for module_name in self._remote_module_configs:
+ self._session.group_unsubscribe(module_name)
def start(self):
"""Send the specification for this module to the configuration
@@ -244,7 +249,7 @@
self._session.group_subscribe(module_name);
# Get the current config for that module now
- seq = self._session.group_sendmsg({ "command": [ "get_config", { "module_name": module_name } ] }, "ConfigManager")
+ seq = self._session.group_sendmsg(create_command(COMMAND_GET_CONFIG, { "module_name": module_name }), "ConfigManager")
answer, env = self._session.group_recvmsg(False, seq)
if answer:
rcode, value = parse_answer(answer)
@@ -259,6 +264,7 @@
def remove_remote_config(self, module_name):
"""Removes the remote configuration access for this module"""
if module_name in self._remote_module_configs:
+ self._session.group_unsubscribe(module_name)
del self._remote_module_configs[module_name]
def get_remote_config_value(self, module_name, identifier):
@@ -280,7 +286,7 @@
def __request_config(self):
"""Asks the configuration manager for the current configuration, and call the config handler if set.
Raises a ModuleCCSessionError if there is no answer from the configuration manager"""
- seq = self._session.group_sendmsg({ "command": [ "get_config", { "module_name": self._module_name } ] }, "ConfigManager")
+ seq = self._session.group_sendmsg(create_command(COMMAND_GET_CONFIG, { "module_name": self._module_name }), "ConfigManager")
answer, env = self._session.group_recvmsg(False, seq)
if answer:
rcode, value = parse_answer(answer)
Modified: trunk/src/lib/python/isc/config/tests/ccsession_test.py
==============================================================================
--- trunk/src/lib/python/isc/config/tests/ccsession_test.py (original)
+++ trunk/src/lib/python/isc/config/tests/ccsession_test.py Wed Jun 30 20:28:25 2010
@@ -119,7 +119,10 @@
def test_start1(self):
fake_session = FakeModuleCCSession()
- mccs = self.create_session("spec1.spec", None, None, fake_session)
+ self.assertFalse("Spec1" in fake_session.subscriptions)
+ mccs = self.create_session("spec1.spec", None, None, fake_session)
+ self.assertTrue("Spec1" in fake_session.subscriptions)
+
self.assertEqual(len(fake_session.message_queue), 0)
self.assertRaises(ModuleCCSessionError, mccs.start)
self.assertEqual(len(fake_session.message_queue), 2)
@@ -139,6 +142,9 @@
self.assertEqual({'command': ['get_config', {'module_name': 'Spec1'}]},
fake_session.get_message('ConfigManager', None))
+ mccs = None
+ self.assertFalse("Spec1" in fake_session.subscriptions)
+
def test_start2(self):
fake_session = FakeModuleCCSession()
mccs = self.create_session("spec2.spec", None, None, fake_session)
@@ -352,7 +358,9 @@
self.assertRaises(ModuleCCSessionError, mccs.get_remote_config_value, "Spec2", "item1")
+ self.assertFalse("Spec2" in fake_session.subscriptions)
rmodname = mccs.add_remote_config(self.spec_file("spec2.spec"))
+ self.assertTrue("Spec2" in fake_session.subscriptions)
self.assertEqual("Spec2", rmodname)
self.assertRaises(isc.cc.data.DataNotFoundError, mccs.get_remote_config_value, rmodname, "asdf")
value, default = mccs.get_remote_config_value(rmodname, "item1")
@@ -360,7 +368,15 @@
self.assertEqual(True, default)
mccs.remove_remote_config(rmodname)
+ self.assertFalse("Spec2" in fake_session.subscriptions)
self.assertRaises(ModuleCCSessionError, mccs.get_remote_config_value, "Spec2", "item1")
+
+ # test if unsubscription is alse sent when object is deleted
+ rmodname = mccs.add_remote_config(self.spec_file("spec2.spec"))
+ self.assertTrue("Spec2" in fake_session.subscriptions)
+ mccs = None
+ self.assertFalse("Spec2" in fake_session.subscriptions)
+
class fakeUIConn():
def __init__(self):
Modified: trunk/src/lib/python/isc/config/tests/unittest_fakesession.py
==============================================================================
--- trunk/src/lib/python/isc/config/tests/unittest_fakesession.py (original)
+++ trunk/src/lib/python/isc/config/tests/unittest_fakesession.py Wed Jun 30 20:28:25 2010
@@ -15,6 +15,16 @@
self.subscriptions[group_name] = []
if instance_name:
self.subscriptions[group_name].append(instance_name)
+
+ def group_unsubscribe(self, group_name, instance_name = None):
+ if group_name in self.subscriptions:
+ if instance_name:
+ if len(self.subscriptions[group_name]) > 1:
+ del self.subscriptions[group_name][instance_name]
+ else:
+ del self.subscriptions[group_name]
+ else:
+ del self.subscriptions[group_name]
def has_subscription(self, group_name, instance_name = None):
More information about the bind10-changes
mailing list