summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2020-05-23 15:18:05 -0700
committerBob Halley <halley@dnspython.org>2020-05-23 15:18:05 -0700
commit33f3935fc3a0dd585a0b621bd42813b1f69a820f (patch)
tree5f2a7cdf9ef8999d558cc2901486c1c82176bdf6
parent8bb39d33ff5bc834773ee8e83bc62c4daa9e4372 (diff)
downloaddnspython-33f3935fc3a0dd585a0b621bd42813b1f69a820f.tar.gz
increase test coverage for various things
-rw-r--r--tests/test_name.py24
-rw-r--r--tests/test_namedict.py20
-rw-r--r--tests/test_ntoaaton.py36
-rw-r--r--tests/test_rdataset.py7
-rw-r--r--tests/test_rrset.py44
-rw-r--r--tests/test_update.py11
6 files changed, 140 insertions, 2 deletions
diff --git a/tests/test_name.py b/tests/test_name.py
index 6fc2fd3..3890175 100644
--- a/tests/test_name.py
+++ b/tests/test_name.py
@@ -440,6 +440,18 @@ class NameTestCase(unittest.TestCase):
v = n.to_wire()
self.assertEqual(v, b'\x03FOO\x03bar\x00')
+ def testToWireRelativeNameWithOrigin(self):
+ n = dns.name.from_text('FOO', None)
+ o = dns.name.from_text('bar')
+ v = n.to_wire(origin=o)
+ self.assertEqual(v, b'\x03FOO\x03bar\x00')
+
+ def testToWireRelativeNameWithoutOrigin(self):
+ n = dns.name.from_text('FOO', None)
+ def bad():
+ v = n.to_wire()
+ self.assertRaises(dns.name.NeedAbsoluteNameOrOrigin, bad)
+
def testBadToWire(self):
def bad():
n = dns.name.from_text('FOO.bar', None)
@@ -779,6 +791,18 @@ class NameTestCase(unittest.TestCase):
n.to_unicode(idna_codec=dns.name.IDNA_2003_Strict)
self.assertRaises(dns.name.IDNAException, bad)
+ def testINDA2008Decode(self):
+ # groß.com. in IDNA2008 form, pre-encoded.
+ n = dns.name.from_text('xn--gro-7ka.com')
+ self.assertEqual(n.to_unicode(idna_codec=dns.name.IDNA_2008),
+ 'groß.com.')
+
+ def testToUnicodeOmitFinalDot(self):
+ # groß.com. in IDNA2008 form, pre-encoded.
+ n = dns.name.from_text('xn--gro-7ka.com')
+ self.assertEqual(n.to_unicode(True, dns.name.IDNA_2008),
+ 'groß.com')
+
def testReverseIPv4(self):
e = dns.name.from_text('1.0.0.127.in-addr.arpa.')
n = dns.reversename.from_address('127.0.0.1')
diff --git a/tests/test_namedict.py b/tests/test_namedict.py
index eb66aae..51344fe 100644
--- a/tests/test_namedict.py
+++ b/tests/test_namedict.py
@@ -100,5 +100,25 @@ class NameTestCase(unittest.TestCase):
v = self.rndict.get_deepest_match(n)[1]
self.assertEqual(v, 100)
+ def test_max_depth_increases(self):
+ n = dns.name.from_text('a.foo.bar.')
+ self.assertEqual(self.ndict.max_depth, 3)
+ self.ndict[n] = 1
+ self.assertEqual(self.ndict.max_depth, 4)
+
+ def test_delete_no_max_depth_change(self):
+ self.assertEqual(self.ndict.max_depth, 3)
+ n = dns.name.from_text('bar.')
+ del self.ndict[n]
+ self.assertEqual(self.ndict.max_depth, 3)
+ self.assertEqual(self.ndict.get(n), None)
+
+ def test_delete_max_depth_changes(self):
+ self.assertEqual(self.ndict.max_depth, 3)
+ n = dns.name.from_text('foo.bar.')
+ del self.ndict[n]
+ self.assertEqual(self.ndict.max_depth, 2)
+ self.assertEqual(self.ndict.get(n), None)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_ntoaaton.py b/tests/test_ntoaaton.py
index ba6cc30..e1d8a15 100644
--- a/tests/test_ntoaaton.py
+++ b/tests/test_ntoaaton.py
@@ -71,6 +71,11 @@ class NtoAAtoNTestCase(unittest.TestCase):
aton6('1:2:3:4:5:6:7:8:9')
self.assertRaises(dns.exception.SyntaxError, bad)
+ def test_bad_aton4(self):
+ def bad():
+ aton4('001.002.003.004')
+ self.assertRaises(dns.exception.SyntaxError, bad)
+
def test_aton6(self):
a = aton6('::')
self.assertEqual(a, b'\x00' * 16)
@@ -159,14 +164,21 @@ class NtoAAtoNTestCase(unittest.TestCase):
def test_bad_ntoa1(self):
def bad():
- ntoa6('')
+ ntoa6(b'')
self.assertRaises(ValueError, bad)
def test_bad_ntoa2(self):
def bad():
- ntoa6('\x00' * 17)
+ ntoa6(b'\x00' * 17)
self.assertRaises(ValueError, bad)
+ def test_bad_ntoa3(self):
+ def bad():
+ ntoa4(b'\x00' * 5)
+ # Ideally we'd have been consistent and raised ValueError as
+ # we do for IPv6, but oh well!
+ self.assertRaises(dns.exception.SyntaxError, bad)
+
def test_good_v4_aton(self):
pairs = [('1.2.3.4', b'\x01\x02\x03\x04'),
('255.255.255.255', b'\xff\xff\xff\xff'),
@@ -226,6 +238,11 @@ class NtoAAtoNTestCase(unittest.TestCase):
self.assertFalse(dns.inet.is_multicast(t5))
self.assertTrue(dns.inet.is_multicast(t6))
+ def test_is_multicast_bad_input(self):
+ def bad():
+ dns.inet.is_multicast('hello world')
+ self.assertRaises(ValueError, bad)
+
def test_ignore_scope(self):
t1 = 'fe80::1%lo0'
t2 = 'fe80::1'
@@ -243,5 +260,20 @@ class NtoAAtoNTestCase(unittest.TestCase):
aton6(t1, True)
self.assertRaises(dns.exception.SyntaxError, bad)
+ def test_ptontop(self):
+ for (af, a) in [(dns.inet.AF_INET, '1.2.3.4'),
+ (dns.inet.AF_INET6, '2001:db8:0:1:1:1:1:1')]:
+ self.assertEqual(dns.inet.inet_ntop(af, dns.inet.inet_pton(af, a)),
+ a)
+
+ def test_isaddress(self):
+ for (t, e) in [('1.2.3.4', True),
+ ('2001:db8:0:1:1:1:1:1', True),
+ ('hello world', False),
+ ('http://www.dnspython.org', False),
+ ('1.2.3.4a', False),
+ ('2001:db8:0:1:1:1:1:q1', False)]:
+ self.assertEqual(dns.inet.is_address(t), e)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_rdataset.py b/tests/test_rdataset.py
index abc0841..4d132f9 100644
--- a/tests/test_rdataset.py
+++ b/tests/test_rdataset.py
@@ -24,5 +24,12 @@ class RdatasetTestCase(unittest.TestCase):
idna_codec=dns.name.IDNA_2008)
self.assertEqual(r1, r2)
+ def testCopy(self):
+ r1 = dns.rdataset.from_text_list('in', 'a', 30,
+ ['10.0.0.1', '10.0.0.2'])
+ r2 = r1.copy()
+ self.assertFalse(r1 is r2)
+ self.assertTrue(r1 == r2)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_rrset.py b/tests/test_rrset.py
index 12eac3f..e8211db 100644
--- a/tests/test_rrset.py
+++ b/tests/test_rrset.py
@@ -70,5 +70,49 @@ class RRsetTestCase(unittest.TestCase):
idna_codec=dns.name.IDNA_2008)
self.assertEqual(r1, r2)
+ def testCopy(self):
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ r2 = r1.copy()
+ self.assertFalse(r1 is r2)
+ self.assertTrue(r1 == r2)
+
+ def testMatch1(self):
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ self.assertTrue(r1.match(r1.name, dns.rdataclass.IN,
+ dns.rdatatype.A, dns.rdatatype.NONE))
+
+ def testMatch2(self):
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ r1.deleting = dns.rdataclass.NONE
+ self.assertTrue(r1.match(r1.name, dns.rdataclass.IN,
+ dns.rdatatype.A, dns.rdatatype.NONE,
+ dns.rdataclass.NONE))
+
+ def testNoMatch1(self):
+ n = dns.name.from_text('bar', None)
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ self.assertFalse(r1.match(n, dns.rdataclass.IN,
+ dns.rdatatype.A, dns.rdatatype.NONE,
+ dns.rdataclass.ANY))
+
+ def testNoMatch2(self):
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ r1.deleting = dns.rdataclass.NONE
+ self.assertFalse(r1.match(r1.name, dns.rdataclass.IN,
+ dns.rdatatype.A, dns.rdatatype.NONE,
+ dns.rdataclass.ANY))
+
+ def testToRdataset(self):
+ r1 = dns.rrset.from_text_list('foo', 30, 'in', 'a',
+ ['10.0.0.1', '10.0.0.2'])
+ r2 = dns.rdataset.from_text_list('in', 'a', 30,
+ ['10.0.0.1', '10.0.0.2'])
+ self.assertEqual(r1.to_rdataset(), r2)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_update.py b/tests/test_update.py
index b2c4767..41b3b8d 100644
--- a/tests/test_update.py
+++ b/tests/test_update.py
@@ -21,6 +21,7 @@ import binascii
import dns.update
import dns.rdata
import dns.rdataset
+import dns.tsigkeyring
goodhex = '0001 2800 0001 0005 0007 0000' \
'076578616d706c6500 0006 0001' \
@@ -113,5 +114,15 @@ class UpdateTestCase(unittest.TestCase):
want_shuffle=False)
self.assertEqual(w, goodwire)
+ def test_TSIG(self):
+ keyring = dns.tsigkeyring.from_text({
+ 'keyname.' : 'NjHwPsMKjdN++dOfE5iAiQ=='
+ })
+ update = dns.update.Update('example.', keyring=keyring)
+ update.replace('host.example.', 300, 'A', '1.2.3.4')
+ wire = update.to_wire()
+ update2 = dns.message.from_wire(wire, keyring)
+ self.assertEqual(update, update2)
+
if __name__ == '__main__':
unittest.main()