net-dnsserver/dns_tests.py

72 lines
2.5 KiB
Python

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