diff options
author | Bob Halley <halley@dnspython.org> | 2021-11-20 13:39:11 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-20 13:39:11 -0800 |
commit | 83650017359efc475c83e0057a7aac159fc2da58 (patch) | |
tree | 68bc0b6dd0328ac4d169df4f3c0a9f7c51879954 /tests | |
parent | 6ab1de0d242e44e8d14a9e0ecbadf2dee1a41d6c (diff) | |
parent | 7af340e8e6f30dbab6035915a7f62b18b37bb98f (diff) | |
download | dnspython-83650017359efc475c83e0057a7aac159fc2da58.tar.gz |
Merge pull request #715 from rthalley/rrset-reader
rrset-reader PR
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_rrset_reader.py | 131 |
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. +#''' |