#!/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()