diff options
| author | Bob Halley <halley@dnspython.org> | 2021-10-10 16:53:26 -0700 |
|---|---|---|
| committer | Bob Halley <halley@dnspython.org> | 2021-10-11 15:01:03 -0700 |
| commit | 51a96a2e2c80aaf81229ce01e3f74a15d67f7ef9 (patch) | |
| tree | 447763f681c750dfe6cfc3250192b2ccde38435d /tests | |
| parent | 380846b2d6b550963d3e117f15abf8da26d18505 (diff) | |
| download | dnspython-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.py | 46 | ||||
| -rw-r--r-- | tests/test_zonedigest.py | 15 |
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) |
