summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2021-10-10 16:53:26 -0700
committerBob Halley <halley@dnspython.org>2021-10-11 15:01:03 -0700
commit51a96a2e2c80aaf81229ce01e3f74a15d67f7ef9 (patch)
tree447763f681c750dfe6cfc3250192b2ccde38435d /tests
parent380846b2d6b550963d3e117f15abf8da26d18505 (diff)
downloaddnspython-51a96a2e2c80aaf81229ce01e3f74a15d67f7ef9.tar.gz
Fix #698 and #702, problems caused by _cmp() giving the wrong
result in certain comparisons of rdata with relative and absolute names.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_rdata.py46
-rw-r--r--tests/test_zonedigest.py15
2 files changed, 61 insertions, 0 deletions
diff --git a/tests/test_rdata.py b/tests/test_rdata.py
index 05ec6ca..ea3e3da 100644
--- a/tests/test_rdata.py
+++ b/tests/test_rdata.py
@@ -696,6 +696,52 @@ class RdataTestCase(unittest.TestCase):
rr = dns.rdata.from_text('IN', 'DNSKEY', input_variation)
new_text = rr.to_text(chunksize=chunksize)
self.assertEqual(output, new_text)
+
+ def test_relative_vs_absolute_compare(self):
+ r1 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'www.')
+ r2 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'www')
+ self.assertFalse(r1 == r2)
+ self.assertTrue(r1 != r2)
+ def bad1():
+ r1 < r2
+ def bad2():
+ r1 <= r2
+ def bad3():
+ r1 > r2
+ def bad4():
+ r1 >= r2
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad1)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad2)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad3)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad4)
+
+ def test_absolute_vs_absolute_compare(self):
+ r1 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'www.')
+ r2 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'xxx.')
+ self.assertFalse(r1 == r2)
+ self.assertTrue(r1 != r2)
+ self.assertTrue(r1 < r2)
+ self.assertTrue(r1 <= r2)
+ self.assertFalse(r1 > r2)
+ self.assertFalse(r1 >= r2)
+
+ def test_relative_vs_relative_compare(self):
+ r1 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'www')
+ r2 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'xxx')
+ self.assertFalse(r1 == r2)
+ self.assertTrue(r1 != r2)
+ def bad1():
+ r1 < r2
+ def bad2():
+ r1 <= r2
+ def bad3():
+ r1 > r2
+ def bad4():
+ r1 >= r2
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad1)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad2)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad3)
+ self.assertRaises(dns.rdata.NoRelativeRdataOrdering, bad4)
class UtilTestCase(unittest.TestCase):
diff --git a/tests/test_zonedigest.py b/tests/test_zonedigest.py
index f98e5f7..d94be24 100644
--- a/tests/test_zonedigest.py
+++ b/tests/test_zonedigest.py
@@ -176,3 +176,18 @@ class ZoneDigestTestCase(unittest.TestCase):
with self.assertRaises(dns.exception.SyntaxError):
dns.rdata.from_text('IN', 'ZONEMD', '100 1 0 ' + self.sha384_hash)
+ sorting_zone = textwrap.dedent('''
+ @ 86400 IN SOA ns1 admin 2018031900 (
+ 1800 900 604800 86400 )
+ 86400 IN NS ns1
+ 86400 IN NS ns2
+ 86400 IN RP n1.example. a.
+ 86400 IN RP n1. b.
+ ''')
+
+ def test_relative_zone_sorting(self):
+ z1 = dns.zone.from_text(self.sorting_zone, 'example.', relativize=True)
+ z2 = dns.zone.from_text(self.sorting_zone, 'example.', relativize=False)
+ zmd1 = z1.compute_digest(dns.zone.DigestHashAlgorithm.SHA384)
+ zmd2 = z2.compute_digest(dns.zone.DigestHashAlgorithm.SHA384)
+ self.assertEqual(zmd1, zmd2)