#!/usr/bin/env python2 """ Tests for your DNS resolver and server """ portnr = 5353 server = "localhost" import dns.resolver from dns.resource import ResourceRecord, RecordData from dns.classes import Class from dns.types import Type import unittest import sys import time class TestResolver(unittest.TestCase): # solve a FQDN, output with corresponding IP/CNAME/authoitative status generated def test_solve(self): resolver = dns.resolver.Resolver(False, 0) host, alias, ip = resolver.gethostbyname("mail.polvanaubel.com") self.assertEqual(host, "sog.polvanaubel.com") self.assertEqual(alias, ["sog.polvanaubel.com"]) self.assertEqual(ip, ["138.201.39.104"]) def test_invalid(self): resolver = dns.resolver.Resolver(False, 0) host, alias, ip = resolver.gethostbyname("invalid.example.com") self.assertFalse(host) self.assertFalse(alias) self.assertFalse(ip) class TestResolverCache(unittest.TestCase): # solve an invalid cached FQDN, output corresponds to cache def test_solveinv(self): resolver = dns.resolver.Resolver(True, 0) resolver.cache.add_record(ResourceRecord("invalid.example.com", Type.A, Class.IN, 60, RecordData("1.2.3.4"))) host, alias, ip = resolver.gethostbyname("invalid.example.com") self.assertEqual(host, "invalid.example.com") self.assertEqual(alias, []) self.assertEqual(ip, ["1.2.3.4"]) # start your server and wait configured TTL + 1 time for an invalid cached FQDN to expire, # an empty output should be generated def test_ttlexpire(self): resolver = dns.resolver.Resolver(True, 0.05) resolver.cache.add_record(ResourceRecord("invalid.example.com", Type.A, Class.IN, 60, RecordData("1.2.3.4"))) time.sleep(0.06) host, alias, ip = resolver.gethostbyname("invalid.example.com") self.assertFalse(host) self.assertFalse(alias) self.assertFalse(ip) 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=5001) 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()