From: JINMEI Tatuya Date: Wed, 5 Oct 2011 03:34:30 +0000 (-0700) Subject: [1261] added another sqlite3-based test. also make sure any remaining diff X-Git-Tag: perftcpdns_before_epoll~37^2~21^2~13^2~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f85f868171956abcc1996235a26a276da2ca6209;p=thirdparty%2Fkea.git [1261] added another sqlite3-based test. also make sure any remaining diff object is cleared as soon as possible after the xfrin session. --- diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py index 4fef1ef671..7496affa4d 100644 --- a/src/bin/xfrin/tests/xfrin_test.py +++ b/src/bin/xfrin/tests/xfrin_test.py @@ -1238,10 +1238,29 @@ class TestIXFRSessionWithSQLite3(TestXfrinConnection): answers=[soa_rrset, begin_soa_rrset, soa_rrset, soa_rrset]) self.conn.response_generator = create_ixfr_response + # Confirm xfrin succeeds and SOA is updated self.assertEqual(1230, self.get_zone_serial()) self.assertEqual(XFRIN_OK, self.conn.do_xfrin(False, True)) self.assertEqual(1234, self.get_zone_serial()) + def test_do_xfrin_sqlite3_fail(self): + '''Similar to the previous test, but xfrin fails due to error. + + Check the DB is not changed. + + ''' + def create_ixfr_response(): + self.conn.reply_data = self.conn.create_response_data( + questions=[Question(TEST_ZONE_NAME, TEST_RRCLASS, + RRType.IXFR())], + answers=[soa_rrset, begin_soa_rrset, soa_rrset, + self._create_soa('1235')]) + self.conn.response_generator = create_ixfr_response + + self.assertEqual(1230, self.get_zone_serial()) + self.assertEqual(XFRIN_FAIL, self.conn.do_xfrin(False, True)) + self.assertEqual(1230, self.get_zone_serial()) + class TestXfrinRecorder(unittest.TestCase): def setUp(self): self.recorder = XfrinRecorder() diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in index 85a03c4cad..fc72c94121 100755 --- a/src/bin/xfrin/xfrin.py.in +++ b/src/bin/xfrin/xfrin.py.in @@ -525,7 +525,11 @@ class XfrinConnection(asyncore.dispatcher): logger.error(XFRIN_AXFR_INTERNAL_FAILURE, self.zone_str(), str(e)) ret = XFRIN_FAIL finally: - self.close() + # Make sure any remaining transaction in the diff is closed + # (if not yet - possible in case of xfr-level exception) as soon + # as possible + self._diff = None + self.close() return ret