[svn] commit: r1000 - in /trunk/src/lib/config/python/isc/config: ccsession.py ccsession_test.py cfgmgr.py module_spec.py unittest_fakesession.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Feb 26 12:18:29 UTC 2010
Author: jelte
Date: Fri Feb 26 12:18:28 2010
New Revision: 1000
Log:
unittests complete for ModuleCCSession (python version)
Modified:
trunk/src/lib/config/python/isc/config/ccsession.py
trunk/src/lib/config/python/isc/config/ccsession_test.py
trunk/src/lib/config/python/isc/config/cfgmgr.py
trunk/src/lib/config/python/isc/config/module_spec.py
trunk/src/lib/config/python/isc/config/unittest_fakesession.py
Modified: trunk/src/lib/config/python/isc/config/ccsession.py
==============================================================================
--- trunk/src/lib/config/python/isc/config/ccsession.py (original)
+++ trunk/src/lib/config/python/isc/config/ccsession.py Fri Feb 26 12:18:28 2010
@@ -177,7 +177,7 @@
there is."""
msg, env = self._session.group_recvmsg(False)
# should we default to an answer? success-by-default? unhandled error?
- if msg:
+ if msg and not 'result' in msg:
answer = None
try:
cmd, arg = isc.config.ccsession.parse_command(msg)
@@ -191,7 +191,10 @@
else:
answer = self._config_handler(new_config)
else:
- answer = self._command_handler(cmd, arg)
+ if self._command_handler:
+ answer = self._command_handler(cmd, arg)
+ else:
+ answer = create_answer(2, self._module_name + " has no command handler")
except Exception as exc:
answer = create_answer(1, str(exc))
if answer:
Modified: trunk/src/lib/config/python/isc/config/ccsession_test.py
==============================================================================
--- trunk/src/lib/config/python/isc/config/ccsession_test.py (original)
+++ trunk/src/lib/config/python/isc/config/ccsession_test.py Fri Feb 26 12:18:28 2010
@@ -137,6 +137,74 @@
self.assertEqual({'command': ['get_config', {'module_name': 'Spec1'}]},
fake_session.get_message('ConfigManager', None))
+ def test_start2(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ self.assertRaises(ModuleCCSessionError, mccs.start)
+ self.assertEqual(len(fake_session.message_queue), 2)
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
+ self.assertEqual(len(fake_session.message_queue), 0)
+ fake_session.group_sendmsg({'result': [ 0 ]}, "Spec2")
+ fake_session.group_sendmsg({'result': [ 0, {} ]}, "Spec2")
+ mccs.start()
+ self.assertEqual(len(fake_session.message_queue), 2)
+
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
+ def test_start3(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_ok)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ self.assertRaises(ModuleCCSessionError, mccs.start)
+ self.assertEqual(len(fake_session.message_queue), 2)
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
+ self.assertEqual(len(fake_session.message_queue), 0)
+ fake_session.group_sendmsg({'result': [ 0 ]}, "Spec2")
+ fake_session.group_sendmsg({'result': [ 0, {} ]}, "Spec2")
+ mccs.start()
+ self.assertEqual(len(fake_session.message_queue), 2)
+
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
+ def test_start4(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_ok)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ self.assertRaises(ModuleCCSessionError, mccs.start)
+ self.assertEqual(len(fake_session.message_queue), 2)
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
+ self.assertEqual(len(fake_session.message_queue), 0)
+ fake_session.group_sendmsg({'result': [ 0 ]}, "Spec2")
+ fake_session.group_sendmsg({'result': [ 1, "just an error" ]}, "Spec2")
+ mccs.start()
+ self.assertEqual(len(fake_session.message_queue), 2)
+
+ self.assertEqual({'command': ['module_spec', mccs.specification._module_spec]},
+ fake_session.get_message('ConfigManager', None))
+ self.assertEqual({'command': ['get_config', {'module_name': 'Spec2'}]},
+ fake_session.get_message('ConfigManager', None))
+
def test_get_socket(self):
fake_session = FakeModuleCCSession()
mccs = self.create_session("spec1.spec", None, None, fake_session)
@@ -153,7 +221,22 @@
mccs.close()
self.assertEqual("closed", fake_session._socket)
- def test_check_command(self):
+ def my_config_handler_ok(self, new_config):
+ return isc.config.ccsession.create_answer(0)
+
+ def my_config_handler_err(self, new_config):
+ return isc.config.ccsession.create_answer(1, "just an error")
+
+ def my_config_handler_exc(self, new_config):
+ raise Exception("just an exception")
+
+ def my_command_handler_ok(self, command, args):
+ return isc.config.ccsession.create_answer(0)
+
+ def my_command_handler_no_answer(self, command, args):
+ pass
+
+ def test_check_command1(self):
fake_session = FakeModuleCCSession()
mccs = self.create_session("spec1.spec", None, None, fake_session)
@@ -161,6 +244,102 @@
self.assertEqual(len(fake_session.message_queue), 0)
fake_session.group_sendmsg({'result': [ 0 ]}, "Spec1")
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 0)
+
+ cmd = isc.config.ccsession.create_command(isc.config.ccsession.COMMAND_CONFIG_UPDATE, { 'Spec1': 'a' })
+
+ fake_session.group_sendmsg(cmd, 'Spec1')
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [2, 'Spec1 has no config handler']},
+ fake_session.get_message('Spec1', None))
+
+ def test_check_command2(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec1.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_ok)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command(isc.config.ccsession.COMMAND_CONFIG_UPDATE, { 'Spec1': 'a' })
+ fake_session.group_sendmsg(cmd, 'Spec1')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [1, 'No config_data specification']},
+ fake_session.get_message('Spec1', None))
+
+ def test_check_command3(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_ok)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command(isc.config.ccsession.COMMAND_CONFIG_UPDATE, { 'Spec2': { 'item1': 2 }})
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [0]},
+ fake_session.get_message('Spec2', None))
+
+ def test_check_command4(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_err)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command(isc.config.ccsession.COMMAND_CONFIG_UPDATE, { 'Spec2': { 'item1': 'aaa' }})
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [1, 'just an error']},
+ fake_session.get_message('Spec2', None))
+
+ def test_check_command5(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_config_handler(self.my_config_handler_exc)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command(isc.config.ccsession.COMMAND_CONFIG_UPDATE, { 'Spec2': { 'item1': 'aaa' }})
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [1, 'just an exception']},
+ fake_session.get_message('Spec2', None))
+
+ def test_check_command6(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command("print_message", "just a message")
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [2, 'Spec2 has no command handler']},
+ fake_session.get_message('Spec2', None))
+
+ def test_check_command7(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_command_handler(self.my_command_handler_ok)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command("print_message", "just a message")
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
+ mccs.check_command()
+ self.assertEqual(len(fake_session.message_queue), 1)
+ self.assertEqual({'result': [0]},
+ fake_session.get_message('Spec2', None))
+
+ def test_check_command8(self):
+ fake_session = FakeModuleCCSession()
+ mccs = self.create_session("spec2.spec", None, None, fake_session)
+ mccs.set_command_handler(self.my_command_handler_no_answer)
+ self.assertEqual(len(fake_session.message_queue), 0)
+ cmd = isc.config.ccsession.create_command("print_message", "just a message")
+ fake_session.group_sendmsg(cmd, 'Spec2')
+ self.assertEqual(len(fake_session.message_queue), 1)
mccs.check_command()
self.assertEqual(len(fake_session.message_queue), 0)
Modified: trunk/src/lib/config/python/isc/config/cfgmgr.py
==============================================================================
--- trunk/src/lib/config/python/isc/config/cfgmgr.py (original)
+++ trunk/src/lib/config/python/isc/config/cfgmgr.py Fri Feb 26 12:18:28 2010
@@ -313,11 +313,8 @@
def handle_msg(self, msg):
"""Handle a command from the cc channel to the configuration manager"""
answer = {}
- #print("[XX] got msg:")
- #print(msg)
cmd, arg = isc.config.ccsession.parse_command(msg)
if cmd:
- #print("[XX] cmd: " + cmd)
if cmd == isc.config.ccsession.COMMAND_GET_COMMANDS_SPEC:
answer = isc.config.ccsession.create_answer(0, self.get_commands_spec())
elif cmd == isc.config.ccsession.COMMAND_GET_MODULE_SPEC:
@@ -347,7 +344,7 @@
self.running = True
while (self.running):
msg, env = self.cc.group_recvmsg(False)
- if msg:
+ if msg and not 'result' in msg:
answer = self.handle_msg(msg);
self.cc.group_reply(env, answer)
else:
Modified: trunk/src/lib/config/python/isc/config/module_spec.py
==============================================================================
--- trunk/src/lib/config/python/isc/config/module_spec.py (original)
+++ trunk/src/lib/config/python/isc/config/module_spec.py Fri Feb 26 12:18:28 2010
@@ -76,7 +76,12 @@
validate only a part of a configuration tree (like a list of
non-default values)"""
data_def = self.get_config_spec()
- return _validate_spec_list(data_def, full, data, errors)
+ if data_def:
+ return _validate_spec_list(data_def, full, data, errors)
+ else:
+ # no spec, always bad
+ errors.append("No config_data specification")
+ return False
def get_module_name(self):
Modified: trunk/src/lib/config/python/isc/config/unittest_fakesession.py
==============================================================================
--- trunk/src/lib/config/python/isc/config/unittest_fakesession.py (original)
+++ trunk/src/lib/config/python/isc/config/unittest_fakesession.py Fri Feb 26 12:18:28 2010
@@ -30,13 +30,14 @@
self.message_queue.append([ channel, target, msg ])
def group_reply(self, env, msg):
- pass
+ if 'to' in env:
+ self.message_queue.append([ env['to'], None, msg])
def group_recvmsg(self, blocking):
for qm in self.message_queue:
if qm[0] in self.subscriptions and (qm[1] == None or qm[1] in self.subscriptions[qm[0]]):
self.message_queue.remove(qm)
- return qm[2], {}
+ return qm[2], {'to': qm[0], 'from': qm[1]}
return None, None
def get_message(self, channel, target = None):
More information about the bind10-changes
mailing list