summaryrefslogblamecommitdiff
path: root/project2/proj2_s4498062/dns_tests.py
blob: 4a054b678132afb3e910047f07a7317d1a5db5f3 (plain) (tree)
1
2
3
4
5
6
7
                      
                                             
 

               
 






                                                        
                                      
















                                                                         

                                           



























                                                                         









                                                                        
                                                               

                                           
 



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