Browse Source

[1649] one more check, and doc update

Jelte Jansen 13 years ago
parent
commit
bbd3fd0f48

+ 7 - 7
src/lib/python/isc/config/config_data.py

@@ -178,10 +178,10 @@ def find_spec_part(element, identifier, strict_identifier = True):
        Parameters:
        element: The specification element to start the search in
        identifier: The element to find (relative to element above)
-       strict_identifier: If True (the default), additional checking occurs,
-                          currently whether or not an index is specified
-                          for list elements in the identifier that are not
-                          the leaf node
+       strict_identifier: If True (the default), additional checking occurs.
+                          Currently the only check is whether a list index is
+                          specified (except for the last part of the
+                          identifier)
        Raises a DataNotFoundError if the data is not found, or if
        strict_identifier is True and any non-final identifier parts
        (i.e. before the last /) identify a list element and do not contain
@@ -645,7 +645,7 @@ class MultiConfigData:
            Throws DataNotFoundError if the identifier is bad
         """
         result = []
-        if not identifier:
+        if not identifier or identifier == "/":
             # No identifier, so we need the list of current modules
             for module in self._specifications.keys():
                 if all:
@@ -658,9 +658,9 @@ class MultiConfigData:
                     result.append(entry)
         else:
             # Strip off start and end slashes, if they are there
-            if identifier[0] == '/':
+            if len(identifier) > 0 and identifier[0] == '/':
                 identifier = identifier[1:]
-            if identifier[-1] == '/':
+            if len(identifier) > 0 and identifier[-1] == '/':
                 identifier = identifier[:-1]
             module, sep, id = identifier.partition('/')
             spec = self.get_module_spec(module)

+ 13 - 2
src/lib/python/isc/config/tests/config_data_test.py

@@ -520,15 +520,25 @@ class TestMultiConfigData(unittest.TestCase):
         self.assertEqual(MultiConfigData.DEFAULT, status)
 
 
-
     def test_get_value_maps(self):
         maps = self.mcd.get_value_maps()
         self.assertEqual([], maps)
         
         module_spec = isc.config.module_spec_from_file(self.data_path + os.sep + "spec1.spec")
         self.mcd.set_specification(module_spec)
+
+        expected = [{'default': False,
+                     'type': 'module',
+                     'name': 'Spec1',
+                     'value': None,
+                     'modified': False}]
+
         maps = self.mcd.get_value_maps()
-        self.assertEqual([{'default': False, 'type': 'module', 'name': 'Spec1', 'value': None, 'modified': False}], maps)
+        self.assertEqual(expected, maps)
+
+        maps = self.mcd.get_value_maps("/")
+        self.assertEqual(expected, maps)
+
         maps = self.mcd.get_value_maps('Spec2')
         self.assertEqual([], maps)
         maps = self.mcd.get_value_maps('Spec1')
@@ -602,6 +612,7 @@ class TestMultiConfigData(unittest.TestCase):
                    ]
         maps = self.mcd.get_value_maps("/Spec22/value9")
         self.assertEqual(expected, maps)
+
         # A slash at the end should not produce different output
         maps = self.mcd.get_value_maps("/Spec22/value9/")
         self.assertEqual(expected, maps)