diff options
Diffstat (limited to 'tests/test_zone.py')
-rw-r--r-- | tests/test_zone.py | 153 |
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() |