]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
node replace_rdataset() should not permit rrsets
authorBob Halley <halley@dnspython.org>
Tue, 18 Aug 2020 13:28:21 +0000 (06:28 -0700)
committerBob Halley <halley@dnspython.org>
Tue, 18 Aug 2020 13:28:21 +0000 (06:28 -0700)
dns/node.py
tests/test_zone.py

index b7e21b54678e5a486c5ca01854829e507354e68b..b1baf27b17b510fb1ef920229bbafc050eda97b5 100644 (file)
@@ -180,6 +180,10 @@ class Node:
 
         if not isinstance(replacement, dns.rdataset.Rdataset):
             raise ValueError('replacement is not an rdataset')
+        if isinstance(replacement, dns.rrset.RRset):
+            # RRsets are not good replacements as the match() method
+            # is not compatible.
+            replacement = replacement.to_rdataset()
         self.delete_rdataset(replacement.rdclass, replacement.rdtype,
                              replacement.covers)
         self.rdatasets.append(replacement)
index a301cb25026de74e8f9c2b8c5b9bc79ec4c480f6..78fbb28c0a3789ecffd4699283f38a05513909ec 100644 (file)
@@ -792,5 +792,14 @@ class ZoneTestCase(unittest.TestCase):
         z2 = dns.zone.from_text(out, 'example.', relativize=True)
         self.assertEqual(z, z2)
 
+    def testNodeReplaceRdatasetConvertsRRsets(self):
+        node = dns.node.Node()
+        rrs = dns.rrset.from_text('foo', 300, 'in', 'a', '10.0.0.1')
+        node.replace_rdataset(rrs)
+        rds = node.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A)
+        self.assertEqual(rds, rrs)
+        self.assertTrue(rds is not rrs)
+        self.assertFalse(isinstance(rds, dns.rrset.RRset))
+
 if __name__ == '__main__':
     unittest.main()