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)
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')
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()
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)
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'),
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'
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()
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()
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()
import dns.update
import dns.rdata
import dns.rdataset
+import dns.tsigkeyring
goodhex = '0001 2800 0001 0005 0007 0000' \
'076578616d706c6500 0006 0001' \
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()