1 # Copyright (C) 2003-2007, 2009, 2010 Nominum, Inc.
3 # Permission to use, copy, modify, and distribute this software and its
4 # documentation for any purpose with or without fee is hereby granted,
5 # provided that the above copyright notice and this permission notice
6 # appear in all copies.
8 # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
9 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
11 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
14 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
37 message_text = """id 1234
44 example. 1 IN A 10.0.0.1
49 class ResolverTestCase(unittest.TestCase):
51 if sys.platform != 'win32':
53 f = cStringIO.StringIO(resolv_conf)
54 r = dns.resolver.Resolver(f)
55 self.failUnless(r.nameservers == ['10.0.0.1', '10.0.0.2'] and
56 r.domain == dns.name.from_text('foo'))
58 def testCacheExpiration(self):
59 message = dns.message.from_text(message_text)
60 name = dns.name.from_text('example.')
61 answer = dns.resolver.Answer(name, dns.rdatatype.A, dns.rdataclass.IN,
63 cache = dns.resolver.Cache()
64 cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
66 self.failUnless(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
69 def testCacheCleaning(self):
70 message = dns.message.from_text(message_text)
71 name = dns.name.from_text('example.')
72 answer = dns.resolver.Answer(name, dns.rdatatype.A, dns.rdataclass.IN,
74 cache = dns.resolver.Cache(cleaning_interval=1.0)
75 cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
77 self.failUnless(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
80 def testZoneForName1(self):
81 name = dns.name.from_text('www.dnspython.org.')
82 ezname = dns.name.from_text('dnspython.org.')
83 zname = dns.resolver.zone_for_name(name)
84 self.failUnless(zname == ezname)
86 def testZoneForName2(self):
87 name = dns.name.from_text('a.b.www.dnspython.org.')
88 ezname = dns.name.from_text('dnspython.org.')
89 zname = dns.resolver.zone_for_name(name)
90 self.failUnless(zname == ezname)
92 def testZoneForName3(self):
93 name = dns.name.from_text('dnspython.org.')
94 ezname = dns.name.from_text('dnspython.org.')
95 zname = dns.resolver.zone_for_name(name)
96 self.failUnless(zname == ezname)
98 def testZoneForName4(self):
100 name = dns.name.from_text('dnspython.org', None)
101 zname = dns.resolver.zone_for_name(name)
102 self.failUnlessRaises(dns.resolver.NotAbsolute, bad)
104 if __name__ == '__main__':