BIND 10 trac967, updated. 9b93c0778662b587f0a526583fb011ebdf9788d2 [trac967] added some more tests for nested lists/maps
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon May 30 09:04:13 UTC 2011
The branch, trac967 has been updated
via 9b93c0778662b587f0a526583fb011ebdf9788d2 (commit)
from a5dd2311e2083f2c32fc55b5339b1e064e8b7de3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 9b93c0778662b587f0a526583fb011ebdf9788d2
Author: Jelte Jansen <jelte at isc.org>
Date: Mon May 30 10:47:36 2011 +0200
[trac967] added some more tests for nested lists/maps
and added a check for the right identifier
-----------------------------------------------------------------------
Summary of changes:
src/lib/config/tests/testdata/Makefile.am | 1 +
src/lib/config/tests/testdata/spec31.spec | 63 ++++++++++++++++++++
src/lib/python/isc/config/config_data.py | 7 ++-
.../python/isc/config/tests/config_data_test.py | 21 +++++++
4 files changed, 90 insertions(+), 2 deletions(-)
create mode 100644 src/lib/config/tests/testdata/spec31.spec
-----------------------------------------------------------------------
diff --git a/src/lib/config/tests/testdata/Makefile.am b/src/lib/config/tests/testdata/Makefile.am
index 53d3ea5..57d1ed3 100644
--- a/src/lib/config/tests/testdata/Makefile.am
+++ b/src/lib/config/tests/testdata/Makefile.am
@@ -52,3 +52,4 @@ EXTRA_DIST += spec27.spec
EXTRA_DIST += spec28.spec
EXTRA_DIST += spec29.spec
EXTRA_DIST += spec30.spec
+EXTRA_DIST += spec31.spec
diff --git a/src/lib/config/tests/testdata/spec31.spec b/src/lib/config/tests/testdata/spec31.spec
new file mode 100644
index 0000000..9eebfd1
--- /dev/null
+++ b/src/lib/config/tests/testdata/spec31.spec
@@ -0,0 +1,63 @@
+{
+ "module_spec": {
+ "module_name": "lists",
+ "module_description": "Logging options",
+ "config_data": [
+ {
+ "item_name": "first_list_items",
+ "item_type": "list",
+ "item_optional": false,
+ "item_default": [],
+ "list_item_spec": {
+ "item_name": "first_list_item",
+ "item_type": "map",
+ "item_optional": false,
+ "item_default": {},
+ "map_item_spec": [
+ { "item_name": "foo",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": "foo"
+ },
+ { "item_name": "second_list_items",
+ "item_type": "list",
+ "item_optional": false,
+ "item_default": [],
+ "list_item_spec": {
+ "item_name": "second_list_item",
+ "item_type": "map",
+ "item_optional": false,
+ "item_default": {},
+ "map_item_spec": [
+ { "item_name": "map_element",
+ "item_type": "map",
+ "item_optional": false,
+ "item_default": {},
+ "map_item_spec": [
+ { "item_name": "list1",
+ "item_type": "list",
+ "item_optional": false,
+ "item_default": [],
+ "list_item_spec":
+ { "item_name": "list2",
+ "item_type": "list",
+ "item_optional": false,
+ "item_default": [],
+ "list_item_spec":
+ { "item_name": "number",
+ "item_type": "integer",
+ "item_optional": false,
+ "item_default": 1
+ }
+ }
+ }]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/src/lib/python/isc/config/config_data.py b/src/lib/python/isc/config/config_data.py
index 3a006f4..1efe4a9 100644
--- a/src/lib/python/isc/config/config_data.py
+++ b/src/lib/python/isc/config/config_data.py
@@ -133,7 +133,7 @@ def _find_spec_part_single(cur_spec, id_part):
# The specification we want a sub-part for should be either a
# list or a map, which is internally represented by a dict with
# an element 'map_item_spec', a dict with an element 'list_item_spec',
- # or a list.
+ # or a list (when it is the 'main' config_data element of a module).
if type(cur_spec) == dict and 'map_item_spec' in cur_spec.keys():
for cur_spec_item in cur_spec['map_item_spec']:
if cur_spec_item['item_name'] == id:
@@ -141,7 +141,10 @@ def _find_spec_part_single(cur_spec, id_part):
# not found
raise isc.cc.data.DataNotFoundError(id + " not found")
elif type(cur_spec) == dict and 'list_item_spec' in cur_spec.keys():
- return cur_spec['list_item_spec']
+ if cur_spec['item_name'] == id:
+ return cur_spec['list_item_spec']
+ # not found
+ raise isc.cc.data.DataNotFoundError(id + " not found")
elif type(cur_spec) == list:
for cur_spec_item in cur_spec:
if cur_spec_item['item_name'] == id:
diff --git a/src/lib/python/isc/config/tests/config_data_test.py b/src/lib/python/isc/config/tests/config_data_test.py
index 8d6c57e..fc1bffa 100644
--- a/src/lib/python/isc/config/tests/config_data_test.py
+++ b/src/lib/python/isc/config/tests/config_data_test.py
@@ -337,6 +337,27 @@ class TestMultiConfigData(unittest.TestCase):
spec_part = self.mcd.find_spec_part("/BAD_NAME/first_list_items[0]/second_list_items[1]/final_element")
self.assertEqual(None, spec_part)
+ def test_find_spec_part_nested2(self):
+ module_spec = isc.config.module_spec_from_file(self.data_path + os.sep + "spec31.spec")
+ self.mcd.set_specification(module_spec)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/second_list_items[1]/map_element/list1[1]/list2[2]")
+ self.assertEqual({"item_name": "number", "item_type": "integer", "item_optional": False, "item_default": 1}, spec_part)
+
+ spec_part = self.mcd.find_spec_part("/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/second_list_items[1]/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/second_list_items[1]/map_element/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/second_list_items[1]/map_element/list1[1]/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+ spec_part = self.mcd.find_spec_part("/lists/first_list_items[0]/second_list_items[1]/map_element/list1[1]/list2[1]/DOESNOTEXIST")
+ self.assertEqual(None, spec_part)
+
def test_get_current_config(self):
cf = { 'module1': { 'item1': 2, 'item2': True } }
self.mcd._set_current_config(cf);
More information about the bind10-changes
mailing list