diff options
Diffstat (limited to 'project2/proj2_s4498062/dns_tests.py')
-rwxr-xr-x | project2/proj2_s4498062/dns_tests.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/project2/proj2_s4498062/dns_tests.py b/project2/proj2_s4498062/dns_tests.py new file mode 100755 index 0000000..4a054b6 --- /dev/null +++ b/project2/proj2_s4498062/dns_tests.py @@ -0,0 +1,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() |