1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/usr/bin/env python2
""" Tests for the DNS resolver and server """
import sys
import time
import unittest
from dns.cache import RecordCache
from dns.classes import Class
from dns.resolver import Resolver
from dns.resource import ResourceRecord, CNAMERecordData
from dns.types import Type
portnr = 5300
server = '127.0.0.1'
class TestResolver(unittest.TestCase):
"""Test cases for the resolver with caching disabled"""
def setUp(self):
self.resolv = Resolver(False, 0)
def test_solve(self):
"""Test solving some FQDN"""
host, aliases, addrs = self.resolv.gethostbyname('camilstaps.nl')
self.assertEqual(host, 'camilstaps.nl')
self.assertEqual(aliases, [])
self.assertEqual(addrs, ['84.22.111.158'])
def test_nonexistant(self):
"""Test solving a nonexistant FQDN"""
host, aliases, addrs = self.resolv.gethostbyname('nothing.ru.nl')
self.assertEqual(host, 'nothing.ru.nl')
self.assertEqual(aliases, [])
self.assertEqual(addrs, [])
class TestResolverCache(unittest.TestCase):
"""Test cases for the resolver with caching enabled"""
TTL = 3
def setup_resolver(self):
"""Setup a resolver with an invalid cache"""
self.resolv = Resolver(True, self.TTL)
self.cache = RecordCache(self.TTL)
self.cache.add_record(ResourceRecord(
'nothing.ru.nl', Type.CNAME, Class.IN, self.TTL,
CNAMERecordData('camilstaps.nl')))
self.resolv.cache = self.cache
def test_solve_invalid(self):
"""Test solving an invalid cached FQDN"""
self.setup_resolver()
host, aliases, addrs = self.resolv.gethostbyname('nothing.ru.nl')
self.assertEqual(host, 'camilstaps.nl')
self.assertEqual(aliases, [])
self.assertEqual(addrs, ['84.22.111.158'])
def test_solve_invalid_after_expiration(self):
"""Test solving an invalid cached FQDN after TTL expiration"""
self.setup_resolver()
time.sleep(self.TTL + 1)
host, aliases, addrs = self.resolv.gethostbyname('nothing.ru.nl')
self.assertEqual(host, 'nothing.ru.nl')
self.assertEqual(aliases, [])
self.assertEqual(addrs, [])
class TestServer(unittest.TestCase):
pass
if __name__ == "__main__":
# Parse command line arguments
import argparse
parser = argparse.ArgumentParser(description="HTTP Tests")
parser.add_argument("-s", "--server", type=str, default="localhost")
parser.add_argument("-p", "--port", type=int, default=5300)
args, extra = parser.parse_known_args()
portnr = args.port
server = args.server
# Pass the extra arguments to unittest
sys.argv[1:] = extra
# Start test suite
unittest.main()
|