From: JINMEI Tatuya Date: Wed, 5 Oct 2011 05:26:35 +0000 (-0700) Subject: [1261] use IXFR or AXFR depending on the configuration X-Git-Tag: perftcpdns_before_epoll~37^2~21^2~13^2~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4edd9c38112db5161f46533ffb3886c85880ee03;p=thirdparty%2Fkea.git [1261] use IXFR or AXFR depending on the configuration --- diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py index 2206aeabdf..e55bab393d 100644 --- a/src/bin/xfrin/tests/xfrin_test.py +++ b/src/bin/xfrin/tests/xfrin_test.py @@ -1692,6 +1692,38 @@ class TestXfrin(unittest.TestCase): # since this has failed, we should still have the previous config self._check_zones_config(config2) + def common_ixfr_setup(self, xfr_mode, ixfr_disabled): + # This helper method explicitly sets up a zone configuration with + # ixfr_disabled, and invokes either retransfer or refresh. + # Shared by some of the following test cases. + config = {'zones': [ + {'name': 'example.com.', + 'master_addr': '192.0.2.1', + 'ixfr_disabled': ixfr_disabled}]} + self.assertEqual(self.xfr.config_handler(config)['result'][0], 0) + self.assertEqual(self.xfr.command_handler(xfr_mode, + self.args)['result'][0], 0) + + def test_command_handler_retransfer_ixfr_enabled(self): + # If IXFR is explicitly enabled in config, IXFR will be used + self.common_ixfr_setup('retransfer', False) + self.assertEqual(RRType.IXFR(), self.xfr.xfrin_started_request_type) + + def test_command_handler_refresh_ixfr_enabled(self): + # Same for refresh + self.common_ixfr_setup('refresh', False) + self.assertEqual(RRType.IXFR(), self.xfr.xfrin_started_request_type) + + def test_command_handler_retransfer_ixfr_disabled(self): + # Similar to the previous case, but explicitly disabled. AXFR should + # be used. + self.common_ixfr_setup('retransfer', True) + self.assertEqual(RRType.AXFR(), self.xfr.xfrin_started_request_type) + + def test_command_handler_refresh_ixfr_disabled(self): + # Same for refresh + self.common_ixfr_setup('refresh', True) + self.assertEqual(RRType.AXFR(), self.xfr.xfrin_started_request_type) def raise_interrupt(): raise KeyboardInterrupt() diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in index 02ffd13e6e..2e95eb17c6 100755 --- a/src/bin/xfrin/xfrin.py.in +++ b/src/bin/xfrin/xfrin.py.in @@ -938,14 +938,17 @@ class Xfrin: rrclass) zone_info = self._get_zone_info(zone_name, rrclass) tsig_key = None + request_type = RRType.AXFR() if zone_info: tsig_key = zone_info.tsig_key + if not zone_info.ixfr_disabled: + request_type = RRType.IXFR() db_file = args.get('db_file') or self._get_db_file() ret = self.xfrin_start(zone_name, rrclass, db_file, master_addr, - tsig_key, RRType.AXFR(), + tsig_key, request_type, (False if command == 'retransfer' else True)) answer = create_answer(ret[0], ret[1])