summaryrefslogtreecommitdiff
path: root/tests/test_zone.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_zone.py')
-rw-r--r--tests/test_zone.py153
1 files changed, 145 insertions, 8 deletions
diff --git a/tests/test_zone.py b/tests/test_zone.py
index 3e34e72..bdc99a3 100644
--- a/tests/test_zone.py
+++ b/tests/test_zone.py
@@ -192,6 +192,55 @@ ns1 3600 IN A 10.0.0.1 ; comment1
ns2 3600 IN A 10.0.0.2 ; comment2
"""
+
+example_cname = """$TTL 3600
+$ORIGIN example.
+@ soa foo bar (1 2 3 4 5)
+@ ns ns1
+@ ns ns2
+ns1 a 10.0.0.1
+ns2 a 10.0.0.2
+www a 10.0.0.3
+web cname www
+ nsec @ CNAME RRSIG
+ rrsig NSEC 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+ rrsig CNAME 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+web2 cname www
+ nsec3 1 1 12 aabbccdd 2t7b4g4vsa5smi47k61mv5bv1a22bojr CNAME RRSIG
+ rrsig NSEC3 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+ rrsig CNAME 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+"""
+
+
+example_other_data = """$TTL 3600
+$ORIGIN example.
+@ soa foo bar (1 2 3 4 5)
+@ ns ns1
+@ ns ns2
+ns1 a 10.0.0.1
+ns2 a 10.0.0.2
+www a 10.0.0.3
+web a 10.0.0.4
+ nsec @ A RRSIG
+ rrsig A 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+ rrsig NSEC 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+"""
+
+example_cname_and_other_data = """$TTL 3600
+$ORIGIN example.
+@ soa foo bar (1 2 3 4 5)
+@ ns ns1
+@ ns ns2
+ns1 a 10.0.0.1
+ns2 a 10.0.0.2
+www a 10.0.0.3
+web a 10.0.0.4
+ cname www
+ nsec @ A RRSIG
+ rrsig A 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+ rrsig NSEC 1 3 3600 20200101000000 20030101000000 2143 foo MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
+"""
+
_keep_output = True
def _rdata_sort(a):
@@ -839,6 +888,60 @@ class ZoneTestCase(unittest.TestCase):
self.assertTrue(rds is not rrs)
self.assertFalse(isinstance(rds, dns.rrset.RRset))
+ def testCnameAndOtherDataAddOther(self):
+ z = dns.zone.from_text(example_cname, 'example.', relativize=True)
+ rds = dns.rdataset.from_text('in', 'a', 300, '10.0.0.1')
+ z.replace_rdataset('web', rds)
+ z.replace_rdataset('web2', rds.copy())
+ n = z.find_node('web')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC))
+ n = z.find_node('web2')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC3))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC3))
+
+ def testCnameAndOtherDataAddCname(self):
+ z = dns.zone.from_text(example_other_data, 'example.', relativize=True)
+ rds = dns.rdataset.from_text('in', 'cname', 300, 'www')
+ z.replace_rdataset('web', rds)
+ n = z.find_node('web')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.CNAME),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC))
+
+ def testCnameAndOtherDataInZonefile(self):
+ with self.assertRaises(dns.zonefile.CNAMEAndOtherData):
+ dns.zone.from_text(example_cname_and_other_data, 'example.',
+ relativize=True)
+
+ def testNameInZoneWithStr(self):
+ z = dns.zone.from_text(example_text, 'example.', relativize=False)
+ self.assertTrue('ns1.example.' in z)
+ self.assertTrue('bar.foo.example.' in z)
+
+ def testNameInZoneWhereNameIsNotValid(self):
+ z = dns.zone.from_text(example_text, 'example.', relativize=False)
+ with self.assertRaises(KeyError):
+ self.assertTrue(1 in z)
+
class VersionedZoneTestCase(unittest.TestCase):
def testUseTransaction(self):
@@ -909,15 +1012,49 @@ class VersionedZoneTestCase(unittest.TestCase):
rds = txn.get('example.', 'soa')
self.assertEqual(rds[0].serial, 1)
- def testNameInZoneWithStr(self):
- z = dns.zone.from_text(example_text, 'example.', relativize=False)
- self.assertTrue('ns1.example.' in z)
- self.assertTrue('bar.foo.example.' in z)
+ def testCnameAndOtherDataAddOther(self):
+ z = dns.zone.from_text(example_cname, 'example.', relativize=True,
+ zone_factory=dns.versioned.Zone)
+ rds = dns.rdataset.from_text('in', 'a', 300, '10.0.0.1')
+ with z.writer() as txn:
+ txn.replace('web', rds)
+ txn.replace('web2', rds.copy())
+ n = z.find_node('web')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC))
+ n = z.find_node('web2')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN, dns.rdatatype.A),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC3))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC3))
+
+ def testCnameAndOtherDataAddCname(self):
+ z = dns.zone.from_text(example_other_data, 'example.', relativize=True,
+ zone_factory=dns.versioned.Zone)
+ rds = dns.rdataset.from_text('in', 'cname', 300, 'www')
+ with z.writer() as txn:
+ txn.replace('web', rds)
+ n = z.find_node('web')
+ self.assertEqual(len(n.rdatasets), 3)
+ self.assertEqual(n.find_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.CNAME),
+ rds)
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.NSEC))
+ self.assertIsNotNone(n.get_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.RRSIG,
+ dns.rdatatype.NSEC))
- def testNameInZoneWhereNameIsNotValid(self):
- z = dns.zone.from_text(example_text, 'example.', relativize=False)
- with self.assertRaises(KeyError):
- self.assertTrue(1 in z)
if __name__ == '__main__':
unittest.main()