Browse Source

[trac811] some more comments

added tests for get_default_value() in ConfigData
removed the now unnecessary self.name_str in ZoneInfo
downcase Name objects for storage in internal zones dict
Jelte Jansen 14 years ago
parent
commit
47e5578077

+ 37 - 15
src/bin/xfrin/tests/xfrin_test.py

@@ -604,6 +604,28 @@ class TestXfrin(unittest.TestCase):
         self.assertEqual(int(TEST_MASTER_PORT),
                          self.xfr.xfrin_started_master_port)
 
+    def test_command_handler_retransfer_short_command4(self):
+        # try it when only specifying the zone name (of known zone, with
+        # different case)
+        short_args = {}
+
+        # swap the case of the zone name in our command
+        short_args['zone_name'] = TEST_ZONE_NAME_STR.swapcase()
+
+        zones = { 'zones': [
+                  { 'name': TEST_ZONE_NAME_STR,
+                    'master_addr': TEST_MASTER_IPV4_ADDRESS,
+                    'master_port': TEST_MASTER_PORT
+                  }
+                ]}
+        self.xfr.config_handler(zones)
+        self.assertEqual(self.xfr.command_handler("retransfer",
+                                                  short_args)['result'][0], 0)
+        self.assertEqual(TEST_MASTER_IPV4_ADDRESS,
+                         self.xfr.xfrin_started_master_addr)
+        self.assertEqual(int(TEST_MASTER_PORT),
+                         self.xfr.xfrin_started_master_port)
+
     def test_command_handler_retransfer_badcommand(self):
         self.args['master'] = 'invalid'
         self.assertEqual(self.xfr.command_handler("retransfer",
@@ -702,17 +724,17 @@ class TestXfrin(unittest.TestCase):
                 self.assertIsNone(zone_info.tsig_key)
 
     def test_command_handler_zones(self):
-        zones1 = { 'transfers_in': 3,
+        config1 = { 'transfers_in': 3,
                    'zones': [
                    { 'name': 'test.example.',
                     'master_addr': '192.0.2.1',
                     'master_port': 53
                    }
                  ]}
-        self.assertEqual(self.xfr.config_handler(zones1)['result'][0], 0)
-        self._check_zones_config(zones1)
+        self.assertEqual(self.xfr.config_handler(config1)['result'][0], 0)
+        self._check_zones_config(config1)
 
-        zones2 = { 'transfers_in': 4,
+        config2 = { 'transfers_in': 4,
                    'zones': [
                    { 'name': 'test.example.',
                     'master_addr': '192.0.2.2',
@@ -720,8 +742,8 @@ class TestXfrin(unittest.TestCase):
                     'tsig_key': "example.com:SFuWd/q99SzF8Yzd1QbB9g=="
                    }
                  ]}
-        self.assertEqual(self.xfr.config_handler(zones2)['result'][0], 0)
-        self._check_zones_config(zones2)
+        self.assertEqual(self.xfr.config_handler(config2)['result'][0], 0)
+        self._check_zones_config(config2)
 
         # test that configuring the zone multiple times fails
         zones = { 'transfers_in': 5,
@@ -737,7 +759,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': 'test.example.',
@@ -747,7 +769,7 @@ class TestXfrin(unittest.TestCase):
                   }
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'master_addr': '192.0.2.4',
@@ -756,7 +778,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': 'bad..zone.',
@@ -766,7 +788,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': '',
@@ -776,7 +798,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': 'test.example',
@@ -786,7 +808,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': 'test.example',
@@ -796,7 +818,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         zones = { 'zones': [
                   { 'name': 'test.example',
@@ -808,7 +830,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
         # let's also add a zone that is correct too, and make sure
         # that the new config is not partially taken
@@ -825,7 +847,7 @@ class TestXfrin(unittest.TestCase):
                 ]}
         self.assertEqual(self.xfr.config_handler(zones)['result'][0], 1)
         # since this has failed, we should still have the previous config
-        self._check_zones_config(zones2)
+        self._check_zones_config(config2)
 
 
 def raise_interrupt():

+ 8 - 5
src/bin/xfrin/xfrin.py.in

@@ -77,8 +77,8 @@ class XfrinException(Exception):
 
 class XfrinZoneInfoException(Exception):
     """This exception is raised if there is an error in the given
-       configuration (part), or when a command does not have the
-       required or bad arguments, for instance when the zone's master
+       configuration (part), or when a command does not have a required
+       argument or has bad arguments, for instance when the zone's master
        address is not a valid IP address, when the zone does not
        have a name, or when multiple settings are given for the same
        zone."""
@@ -88,7 +88,12 @@ def _check_zone_name(zone_name_str):
     """Checks if the given zone name is a valid domain name, and returns
     it as a Name object. Raises an XfrinException if it is not."""
     try:
-        return Name(zone_name_str)
+        # In the _zones dict, part of the key is the zone name,
+        # but due to a limitation in the Name class, we
+        # cannot directly use it as a dict key, and we use to_text()
+        #
+        # Downcase the name here for that reason.
+        return Name(zone_name_str, True)
     except (EmptyLabel, TooLongLabel, BadLabelType, BadEscape,
             TooLongName, IncompleteName) as ne:
         raise XfrinZoneInfoException("bad zone name: " + zone_name_str + " (" + str(ne) + ")")
@@ -430,8 +435,6 @@ class ZoneInfo:
         """Set the name for this zone given a name string.
            Raises XfrinZoneInfoException if name_str is None or if it
            cannot be parsed."""
-        #TODO: remove name_str
-        self.name_str = name_str
         if name_str is None:
             raise XfrinZoneInfoException("Configuration zones list "
                                          "element does not contain "

+ 20 - 0
src/lib/python/isc/config/tests/config_data_test.py

@@ -237,6 +237,26 @@ class TestConfigData(unittest.TestCase):
         self.assertEqual(None, value)
         self.assertEqual(False, default)
 
+    def test_get_default_value(self):
+        self.assertEqual(1, self.cd.get_default_value("item1"))
+        self.assertEqual('default', self.cd.get_default_value("item6/value1"))
+
+        # set some local values to something else, and see if we
+        # still get the default
+        self.cd.set_local_config({"item1": 2, "item6": { "value1": "asdf" } })
+
+        self.assertEqual((2, False), self.cd.get_value("item1"))
+        self.assertEqual(1, self.cd.get_default_value("item1"))
+        self.assertEqual(('asdf', False), self.cd.get_value("item6/value1"))
+        self.assertEqual('default', self.cd.get_default_value("item6/value1"))
+
+        self.assertRaises(isc.cc.data.DataNotFoundError,
+                          self.cd.get_default_value,
+                          "does_not_exist/value1")
+        self.assertRaises(isc.cc.data.DataNotFoundError,
+                          self.cd.get_default_value,
+                          "item6/doesnotexist")
+
     def test_set_local_config(self):
         self.cd.set_local_config({"item1": 2})
         value, default = self.cd.get_value("item1")