s4-python: Format to PEP8, simplify tests.
[samba.git] / source4 / scripting / python / samba_external / dnspython / tests / resolver.py
1 # Copyright (C) 2003-2007, 2009, 2010 Nominum, Inc.
2 #
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.
7 #
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.
15
16 import cStringIO
17 import sys
18 import time
19 import unittest
20
21 import dns.name
22 import dns.message
23 import dns.name
24 import dns.rdataclass
25 import dns.rdatatype
26 import dns.resolver
27
28 resolv_conf = """
29     /t/t
30 # comment 1
31 ; comment 2
32 domain foo
33 nameserver 10.0.0.1
34 nameserver 10.0.0.2
35 """
36
37 message_text = """id 1234
38 opcode QUERY
39 rcode NOERROR
40 flags QR AA RD
41 ;QUESTION
42 example. IN A
43 ;ANSWER
44 example. 1 IN A 10.0.0.1
45 ;AUTHORITY
46 ;ADDITIONAL
47 """
48
49 class ResolverTestCase(unittest.TestCase):
50
51     if sys.platform != 'win32':
52         def testRead(self):
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'))
57
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,
62                                      message)
63         cache = dns.resolver.Cache()
64         cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
65         time.sleep(2)
66         self.failUnless(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
67                         is None)
68
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,
73                                      message)
74         cache = dns.resolver.Cache(cleaning_interval=1.0)
75         cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
76         time.sleep(2)
77         self.failUnless(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
78                         is None)
79
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)
85
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)
91
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)
97
98     def testZoneForName4(self):
99         def bad():
100             name = dns.name.from_text('dnspython.org', None)
101             zname = dns.resolver.zone_for_name(name)
102         self.failUnlessRaises(dns.resolver.NotAbsolute, bad)
103
104 if __name__ == '__main__':
105     unittest.main()