]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
more zone test coverage
authorBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 15:35:20 +0000 (08:35 -0700)
committerBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 15:35:20 +0000 (08:35 -0700)
tests/test_generate.py
tests/test_zone.py

index 8d90b25461d2702f16c848df0b4836a22a52f38c..e6fb6f48631633ecb6bccb43b5354e19cbc380da 100644 (file)
@@ -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()
index 635789002fd344a82e4d519dd17ac4224f17bf02..36428b1264873caebf03389b2e067097ae81d67f 100644 (file)
@@ -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()