|
@@ -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()
|