From: Bob Halley Date: Thu, 18 Jun 2020 15:35:20 +0000 (-0700) Subject: more zone test coverage X-Git-Tag: v2.0.0rc1~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0361f3af0ead4667d3ed30ba4c4f0e19eaf1c9f5;p=thirdparty%2Fdnspython.git more zone test coverage --- diff --git a/tests/test_generate.py b/tests/test_generate.py index 8d90b254..e6fb6f48 100644 --- a/tests/test_generate.py +++ b/tests/test_generate.py @@ -138,6 +138,12 @@ ns2 3600 IN A 10.0.0.2 $GENERATE 27-28 prefix-${0,3} A 10.0.0.$ """ +last_ttl_input = """foo 300 mx 10 target. +$GENERATE 1-10 foo$ CNAME $.0 +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +""" def _rdata_sort(a): return (a[0], a[2].rdclass, a[2].to_text()) @@ -544,6 +550,45 @@ class GenerateTestCase(unittest.TestCase): exl.sort(key=_rdata_sort) self.assertEqual(l, exl) + def testNoOrigin(self): + def bad(): + dns.zone.from_text('$GENERATE 1-10 fooo$ CNAME $.0') + self.assertRaises(dns.zone.UnknownOrigin, bad) + + def testBadRdata(self): + def bad(): + dns.zone.from_text('$GENERATE 1-10 fooo$ CNAME 10 $.0', 'example') + self.assertRaises(dns.exception.SyntaxError, bad) + + def testUsesLastTTL(self): + z = dns.zone.from_text(last_ttl_input, 'example') + print(z.to_text()) + rrs = z.find_rrset('foo9', 'CNAME') + self.assertEqual(rrs.ttl, 300) + + def testClassMismatch(self): + def bad(): + dns.zone.from_text('$GENERATE 1-10 fooo$ CH CNAME $.0', 'example') + self.assertRaises(dns.exception.SyntaxError, bad) + + def testUnknownRdatatype(self): + def bad(): + dns.zone.from_text('$GENERATE 1-10 fooo$ BOGUSTYPE $.0', 'example') + self.assertRaises(dns.exception.SyntaxError, bad) + + def testBadAndDangling(self): + def bad1(): + dns.zone.from_text('$GENERATE bogus fooo$ CNAME $.0', + 'example.') + self.assertRaises(dns.exception.SyntaxError, bad1) + def bad2(): + dns.zone.from_text('$GENERATE 1-10', + 'example.') + self.assertRaises(dns.exception.SyntaxError, bad2) + def bad3(): + dns.zone.from_text('$GENERATE 1-10 foo$', + 'example.') + self.assertRaises(dns.exception.SyntaxError, bad3) if __name__ == '__main__': unittest.main() diff --git a/tests/test_zone.py b/tests/test_zone.py index 63578900..36428b12 100644 --- a/tests/test_zone.py +++ b/tests/test_zone.py @@ -168,6 +168,13 @@ foo a 10.0.0.1 @ soa foo bar 1 2 3 4 5 """ +origin_sets_input = """ +$ORIGIN example. +@ soa foo bar 1 2 3 4 5 +@ 300 ns ns1 +@ 300 ns ns2 +""" + _keep_output = True def _rdata_sort(a): @@ -700,6 +707,11 @@ class ZoneTestCase(unittest.TestCase): dns.zone.from_text('foo 300 ch txt hi', 'example.') self.assertRaises(dns.exception.SyntaxError, bad) + def testUnknownRdatatype(self): + def bad(): + dns.zone.from_text('foo 300 BOGUSTYPE hi', 'example.') + self.assertRaises(dns.exception.SyntaxError, bad) + def testDangling(self): def bad1(): dns.zone.from_text('foo', 'example.') @@ -713,11 +725,26 @@ class ZoneTestCase(unittest.TestCase): def bad4(): dns.zone.from_text('foo 300 in a', 'example.') self.assertRaises(dns.exception.SyntaxError, bad4) + def bad5(): + dns.zone.from_text('$TTL', 'example.') + self.assertRaises(dns.exception.SyntaxError, bad5) + def bad6(): + dns.zone.from_text('$ORIGIN', 'example.') + self.assertRaises(dns.exception.SyntaxError, bad6) def testUseLastTTL(self): z = dns.zone.from_text(last_ttl_input, 'example.') rds = z.find_rdataset('foo', 'A') self.assertEqual(rds.ttl, 300) + def testDollarOriginSetsZoneOriginIfUnknown(self): + z = dns.zone.from_text(origin_sets_input) + self.assertEqual(z.origin, dns.name.from_text('example')) + + def testValidateNameRelativizesNameInZone(self): + z = dns.zone.from_text(example_text, 'example.', relativize=True) + self.assertEqual(z._validate_name('foo.bar.example.'), + dns.name.from_text('foo.bar', None)) + if __name__ == '__main__': unittest.main()