summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2021-10-31 14:16:36 -0700
committerBob Halley <halley@dnspython.org>2021-11-01 09:12:17 -0700
commit5a16bfb4c227da98b6c19a4ca88da991e6a24b47 (patch)
treee7a821be8694f492e507c27742fcb3dc2f3d6c49 /tests
parent3e5be3fc47248b9f4d4cc5c9dd81ad2ba2ee4797 (diff)
downloaddnspython-5a16bfb4c227da98b6c19a4ca88da991e6a24b47.tar.gz
rrset-reader PR
Diffstat (limited to 'tests')
-rw-r--r--tests/test_rrset_reader.py131
1 files changed, 131 insertions, 0 deletions
diff --git a/tests/test_rrset_reader.py b/tests/test_rrset_reader.py
new file mode 100644
index 0000000..8d4255e
--- /dev/null
+++ b/tests/test_rrset_reader.py
@@ -0,0 +1,131 @@
+import pytest
+
+import dns.rrset
+from dns.zonefile import read_rrsets
+
+expected_mx_1= dns.rrset.from_text('name.', 300, 'in', 'mx', '10 a.', '20 b.')
+expected_mx_2 = dns.rrset.from_text('name.', 10, 'in', 'mx', '10 a.', '20 b.')
+expected_mx_3 = dns.rrset.from_text('foo.', 10, 'in', 'mx', '10 a.')
+expected_mx_4 = dns.rrset.from_text('bar.', 10, 'in', 'mx', '20 b.')
+expected_mx_5 = dns.rrset.from_text('foo.example.', 10, 'in', 'mx',
+ '10 a.example.')
+expected_mx_6 = dns.rrset.from_text('bar.example.', 10, 'in', 'mx', '20 b.')
+expected_mx_7 = dns.rrset.from_text('foo', 10, 'in', 'mx', '10 a')
+expected_mx_8 = dns.rrset.from_text('bar', 10, 'in', 'mx', '20 b.')
+expected_ns_1 = dns.rrset.from_text('name.', 300, 'in', 'ns', 'hi.')
+expected_ns_2 = dns.rrset.from_text('name.', 300, 'ch', 'ns', 'hi.')
+
+def equal_rrsets(a, b):
+ # return True iff. a and b have the same rrsets regardless of order
+ if len(a) != len(b):
+ return False
+ for rrset in a:
+ if not rrset in b:
+ return False
+ return True
+
+def test_name_ttl_rdclass_forced():
+ input=''';
+mx 10 a
+mx 20 b.
+ns hi'''
+ rrsets = read_rrsets(input, name='name', ttl=300)
+ assert equal_rrsets(rrsets, [expected_mx_1, expected_ns_1])
+ assert rrsets[0].ttl == 300
+ assert rrsets[1].ttl == 300
+
+def test_name_ttl_rdclass_forced_rdata_split():
+ input=''';
+mx 10 a
+ns hi
+mx 20 b.'''
+ rrsets = read_rrsets(input, name='name', ttl=300)
+ assert equal_rrsets(rrsets, [expected_mx_1, expected_ns_1])
+
+def test_name_ttl_rdclass_rdtype_forced():
+ input=''';
+10 a
+20 b.'''
+ rrsets = read_rrsets(input, name='name', ttl=300, rdtype='mx')
+ assert equal_rrsets(rrsets, [expected_mx_1])
+
+def test_name_rdclass_forced():
+ input = '''30 mx 10 a
+10 mx 20 b.
+'''
+ rrsets = read_rrsets(input, name='name')
+ assert equal_rrsets(rrsets, [expected_mx_2])
+ assert rrsets[0].ttl == 10
+
+def test_rdclass_forced():
+ input = ''';
+foo 20 mx 10 a
+bar 30 mx 20 b.
+'''
+ rrsets = read_rrsets(input)
+ assert equal_rrsets(rrsets, [expected_mx_3, expected_mx_4])
+
+def test_rdclass_forced_with_origin():
+ input = ''';
+foo 20 mx 10 a
+bar.example. 30 mx 20 b.
+'''
+ rrsets = read_rrsets(input, origin='example')
+ assert equal_rrsets(rrsets, [expected_mx_5, expected_mx_6])
+
+
+def test_rdclass_forced_with_origin_relativized():
+ input = ''';
+foo 20 mx 10 a.example.
+bar.example. 30 mx 20 b.
+'''
+ rrsets = read_rrsets(input, origin='example', relativize=True)
+ assert equal_rrsets(rrsets, [expected_mx_7, expected_mx_8])
+
+def test_rdclass_matching_default_tolerated():
+ input = ''';
+foo 20 mx 10 a.example.
+bar.example. 30 in mx 20 b.
+'''
+ rrsets = read_rrsets(input, origin='example', relativize=True,
+ rdclass=None)
+ assert equal_rrsets(rrsets, [expected_mx_7, expected_mx_8])
+
+def test_rdclass_not_matching_default_rejected():
+ input = ''';
+foo 20 mx 10 a.example.
+bar.example. 30 ch mx 20 b.
+'''
+ with pytest.raises(dns.exception.SyntaxError):
+ rrsets = read_rrsets(input, origin='example', relativize=True,
+ rdclass=None)
+
+def test_default_rdclass_is_none():
+ input = ''
+ with pytest.raises(TypeError):
+ rrsets = read_rrsets(input, default_rdclass=None, origin='example',
+ relativize=True)
+
+def test_name_rdclass_rdtype_force():
+ # No real-world usage should do this, but it can be specified so we test it.
+ input = ''';
+30 10 a
+10 20 b.
+'''
+ rrsets = read_rrsets(input, name='name', rdtype='mx')
+ assert equal_rrsets(rrsets, [expected_mx_1])
+ assert rrsets[0].ttl == 10
+
+def test_rdclass_rdtype_force():
+ # No real-world usage should do this, but it can be specified so we test it.
+ input = ''';
+foo 30 10 a
+bar 30 20 b.
+'''
+ rrsets = read_rrsets(input, rdtype='mx')
+ assert equal_rrsets(rrsets, [expected_mx_3, expected_mx_4])
+
+# also weird but legal
+#input5 = '''foo 30 10 a
+#bar 10 20 foo.
+#'''