Browse Source

[1259] Test for add_data

Michal 'vorner' Vaner 13 years ago
parent
commit
4e458fc15b
1 changed files with 47 additions and 1 deletions
  1. 47 1
      src/lib/python/isc/xfrin/tests/diff_tests.py

+ 47 - 1
src/lib/python/isc/xfrin/tests/diff_tests.py

@@ -15,7 +15,7 @@
 
 import isc.log
 import unittest
-from isc.dns import Name
+from isc.dns import Name, RRset, RRClass, RRType, RRTTL, Rdata
 from isc.xfrin.diff import Diff, NoSuchZone
 
 class DiffTest(unittest.TestCase):
@@ -28,8 +28,32 @@ class DiffTest(unittest.TestCase):
     def setUp(self):
         """
         This sets internal variables so we can see nothing was called yet.
+
+        It also creates some variables used in multiple tests.
         """
+        # Track what was called already
         self.__updater_requested = False
+        # Some common values
+        self.__rrclass = RRClass.IN()
+        self.__type = RRType.A()
+        self.__ttl = RRTTL(3600)
+        # And RRsets
+        # Create two valid rrsets
+        self.__rrset1 = RRset(Name('a.example.org.'), self.__rrclass,
+                              self.__type, self.__ttl)
+        self.__rdata = Rdata(self.__type, self.__rrclass, '192.0.2.1')
+        self.__rrset1.add_rdata(self.__rdata)
+        self.__rrset2 = RRset(Name('b.example.org.'), self.__rrclass,
+                              self.__type, self.__ttl)
+        self.__rrset2.add_rdata(self.__rdata)
+        # And two invalid
+        self.__rrset_empty = RRset(Name('empty.example.org.'), self.__rrclass,
+                                   self.__type, self.__ttl)
+        self.__rrset_multi = RRset(Name('multi.example.org.'), self.__rrclass,
+                                   self.__type, self.__ttl)
+        self.__rrset_multi.add_rdata(self.__rdata)
+        self.__rrset_multi.add_rdata(Rdata(self.__type, self.__rrclass,
+                                           '192.0.2.2'))
 
     def get_updater(self, zone_name, replace):
         """
@@ -65,6 +89,28 @@ class DiffTest(unittest.TestCase):
         self.assertRaises(NoSuchZone, Diff, self, Name('none.example.org.'))
         self.assertTrue(self.__updater_requested)
 
+    def test_add(self):
+        """
+        Try to add few items into the diff and see they are stored in there.
+
+        Also try passing an rrset that has more differnt amount of RRs than 1.
+        """
+        diff = Diff(self, Name('example.org.'))
+        # Try putting there the bad data first
+        self.assertRaises(ValueError, diff.add_data, self.__rrset_empty)
+        self.assertRaises(ValueError, diff.add_data, self.__rrset_multi)
+        # They were not added
+        self.assertEqual([], diff.get_buffer())
+        # Add some proper data
+        diff.add_data(self.__rrset1)
+        diff.add_data(self.__rrset2)
+        dlist = [('add', self.__rrset1), ('add', self.__rrset2)]
+        self.assertEqual(dlist, diff.get_buffer())
+        # Check the data are not destroyed by raising an exception because of
+        # bad data
+        self.assertRaises(ValueError, diff.add_data, self.__rrset_empty)
+        self.assertEqual(dlist, diff.get_buffer())
+
 if __name__ == "__main__":
     isc.log.init("bind10")
     unittest.main()