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

Reply via email to