|
@@ -2577,61 +2577,64 @@ class TestXfrin(unittest.TestCase):
|
|
|
self.common_ixfr_setup('refresh', False)
|
|
|
self.assertEqual(RRType.AXFR(), self.xfr.xfrin_started_request_type)
|
|
|
|
|
|
- def test_memory_zones(self):
|
|
|
+class TextXfrinMemoryZones(unittest.TestCase):
|
|
|
+ def setUp(self):
|
|
|
+ self.xfr = MockXfrin()
|
|
|
# Configuration snippet containing 2 memory datasources,
|
|
|
# one for IN and one for CH. Both contain a zone 'example.com'
|
|
|
# the IN ds also contains a zone example2.com, and a zone example3.com,
|
|
|
# which is of file type 'text' (and hence, should be ignored)
|
|
|
- config = { 'datasources': [
|
|
|
- { 'type': 'memory',
|
|
|
- 'class': 'IN',
|
|
|
- 'zones': [
|
|
|
- { 'origin': 'example.com',
|
|
|
- 'filetype': 'sqlite3' },
|
|
|
- { 'origin': 'example2.com',
|
|
|
- 'filetype': 'sqlite3' },
|
|
|
- { 'origin': 'example3.com',
|
|
|
- 'filetype': 'text' }
|
|
|
- ]
|
|
|
- },
|
|
|
- { 'type': 'memory',
|
|
|
- 'class': 'CH',
|
|
|
- 'zones': [
|
|
|
- { 'origin': 'example.com',
|
|
|
- 'filetype': 'sqlite3' }
|
|
|
- ]
|
|
|
- }
|
|
|
- ] }
|
|
|
-
|
|
|
+ self.config = { 'datasources': [
|
|
|
+ { 'type': 'memory',
|
|
|
+ 'class': 'IN',
|
|
|
+ 'zones': [
|
|
|
+ { 'origin': 'example.com',
|
|
|
+ 'filetype': 'sqlite3' },
|
|
|
+ { 'origin': 'EXAMPLE2.com.',
|
|
|
+ 'filetype': 'sqlite3' },
|
|
|
+ { 'origin': 'example3.com',
|
|
|
+ 'filetype': 'text' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ { 'type': 'memory',
|
|
|
+ 'class': 'CH',
|
|
|
+ 'zones': [
|
|
|
+ { 'origin': 'example.com',
|
|
|
+ 'filetype': 'sqlite3' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ] }
|
|
|
+
|
|
|
+ def test_updates(self):
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
# add them all
|
|
|
- self.xfr._set_memory_zones(config, None)
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
- # Remove the CH data source from the config snippet, and update
|
|
|
- del config['datasources'][1]
|
|
|
- self.xfr._set_memory_zones(config, None)
|
|
|
+ # Remove the CH data source from the self.config snippet, and update
|
|
|
+ del self.config['datasources'][1]
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
# Remove example2.com from the datasource, and update
|
|
|
- del config['datasources'][0]['zones'][1]
|
|
|
- self.xfr._set_memory_zones(config, None)
|
|
|
+ del self.config['datasources'][0]['zones'][1]
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
- # If 'datasources' is not in the config update list (i.e. its config
|
|
|
+ # If 'datasources' is not in the self.config update list (i.e. its self.config
|
|
|
# has not changed), no difference should be found
|
|
|
self.xfr._set_memory_zones({}, None)
|
|
|
self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
@@ -2640,13 +2643,70 @@ class TestXfrin(unittest.TestCase):
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
# If datasources list becomes empty, everything should be removed
|
|
|
- config['datasources'][0]['zones'] = []
|
|
|
- self.xfr._set_memory_zones(config, None)
|
|
|
+ self.config['datasources'][0]['zones'] = []
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
|
|
|
+ def test_normalization(self):
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+ # make sure it is case insensitive, root-dot-insensitive,
|
|
|
+ # and supports CLASSXXX notation
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("EXAMPLE.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example2.com.", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "CLASS3"))
|
|
|
+
|
|
|
+ def test_bad_name(self):
|
|
|
+ # First set it to some config
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+
|
|
|
+ # Error checking; bad owner name should result in no changes
|
|
|
+ self.config['datasources'][1]['zones'][0]['origin'] = ".."
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
+ self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
+
|
|
|
+ def test_bad_class(self):
|
|
|
+ # First set it to some config
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+
|
|
|
+ # Error checking; bad owner name should result in no changes
|
|
|
+ self.config['datasources'][1]['class'] = "Foo"
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
+ self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
+
|
|
|
+ def test_no_filetype(self):
|
|
|
+ # omitting the filetype should leave that zone out, but not
|
|
|
+ # the rest
|
|
|
+ del self.config['datasources'][1]['zones'][0]['filetype']
|
|
|
+ self.xfr._set_memory_zones(self.config, None)
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
+ self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
+ self.assertFalse(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
+
|
|
|
+ def test_class_filetype(self):
|
|
|
+ # omitting the class should have it default to what is in the
|
|
|
+ # specfile for Auth.
|
|
|
+ AuthConfigData = isc.config.config_data.ConfigData(
|
|
|
+ isc.config.module_spec_from_file(xfrin.AUTH_SPECFILE_LOCATION))
|
|
|
+ del self.config['datasources'][0]['class']
|
|
|
+ self.xfr._set_memory_zones(self.config, AuthConfigData)
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example2.com", "IN"))
|
|
|
+ self.assertFalse(self.xfr._is_memory_zone("example3.com", "IN"))
|
|
|
+ self.assertTrue(self.xfr._is_memory_zone("example.com", "CH"))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
def raise_interrupt():
|
|
|
raise KeyboardInterrupt()
|
|
|
|