Author: file Date: Thu Feb 26 06:23:07 2015 New Revision: 6467 URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=6467 Log: testsuite: Add DNS server pluggable module.
This change adds a pluggable module to the testsuite which runs a DNS server using twisted-names. This is an authoritative DNS server that responds with records which are specified in a Python style zone file or a BIND style zone file. The DNS server lives for the lifetime of the test. This is useful since it removes any reliance on an external DNS server and reduces the work required to test DNS. Review: https://reviewboard.asterisk.org/r/4451/ Added: asterisk/trunk/lib/python/asterisk/dns_server.py (with props) asterisk/trunk/sample-yaml/dns-server-config.yaml (with props) Added: asterisk/trunk/lib/python/asterisk/dns_server.py URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/dns_server.py?view=auto&rev=6467 ============================================================================== --- asterisk/trunk/lib/python/asterisk/dns_server.py (added) +++ asterisk/trunk/lib/python/asterisk/dns_server.py Thu Feb 26 06:23:07 2015 @@ -1,0 +1,55 @@ +#!/usr/bin/env python +""" Pluggable module for running an isolated configured DNS server + +Copyright (C) 2015, Digium, Inc. +Joshua Colp <jc...@digium.com> + +This program is free software, distributed under the terms of +the GNU General Public License Version 2. +""" + +import logging + +from twisted.internet import reactor +from twisted.names import server, authority, dns + +LOGGER = logging.getLogger(__name__) + + +class DNSServer(object): + """Start a local DNS server instance using twisted-names with provided zones. + + Configuration options include: + port: The port to listen for DNS requests on. + defaults to 10053. + python-zones: An array of Python zone files. + bind-zones: An array of BIND zone files. + + Python zone files are defined using python source code. An example is present + at https://twistedmatrix.com/documents/current/names/howto/names.html + + BIND zone files are defined in BIND-syntax style. + """ + def __init__(self, config, test_obj): + """Initialize and configure the DNS object.""" + + zones = [] + port = config.get('port', 10053) + pyzones = config.get('python-zones', []) + bindzones = config.get('bind-zones', []) + + for pyzone in pyzones: + zones.append(authority.PySourceAuthority('%s/dns_zones/%s' % (test_obj.test_name, pyzone))) + LOGGER.info("Added Python zone file %s" % (pyzone)) + + for bindzone in bindzones: + zones.append(authority.BindAuthority('%s/dns_zones/%s' % (test_obj.test_name, bindzone))) + LOGGER.info("Added BIND zone file %s" % (bindzone)) + + factory = server.DNSServerFactory(authorities=zones) + protocol = dns.DNSDatagramProtocol(controller=factory) + + reactor.listenUDP(port, protocol) + reactor.listenTCP(port, factory) + + LOGGER.info("Started DNS server (UDP and TCP) on port %d" % (port)) Propchange: asterisk/trunk/lib/python/asterisk/dns_server.py ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/lib/python/asterisk/dns_server.py ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/lib/python/asterisk/dns_server.py ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/sample-yaml/dns-server-config.yaml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/sample-yaml/dns-server-config.yaml?view=auto&rev=6467 ============================================================================== --- asterisk/trunk/sample-yaml/dns-server-config.yaml (added) +++ asterisk/trunk/sample-yaml/dns-server-config.yaml Thu Feb 26 06:23:07 2015 @@ -1,0 +1,18 @@ +# Configuration sample for the DNS server pluggable module. The module will +# start a local authoritative DNS server for provided zone files. This test +# is useful for testing DNS related operations. + +dns-server-config: + + # The port to listen on for DNS requests. + port: 10053 + + # Python style zone files. + python-zones: + - + example-domain.com + + # BIND style zone files. + bind-zones: + - + another-example-domain.com Propchange: asterisk/trunk/sample-yaml/dns-server-config.yaml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/sample-yaml/dns-server-config.yaml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/sample-yaml/dns-server-config.yaml ------------------------------------------------------------------------------ svn:mime-type = text/plain -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits