]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[1261] added another sqlite3-based test. also make sure any remaining diff
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 5 Oct 2011 03:34:30 +0000 (20:34 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 5 Oct 2011 03:34:30 +0000 (20:34 -0700)
object is cleared as soon as possible after the xfrin session.

src/bin/xfrin/tests/xfrin_test.py
src/bin/xfrin/xfrin.py.in

index 4fef1ef671ddc7ae1a97e9e910f518897c5abd68..7496affa4d20c1a24970514d9cd27e7040318c75 100644 (file)
@@ -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()
index 85a03c4cad1a4829441721969333808753d205cd..fc72c94121e9a8da6dc905486d9779dc233ea3ae 100755 (executable)
@@ -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