diff --git a/conftest.py b/conftest.py index ec15278..2cd5dfb 100644 --- a/conftest.py +++ b/conftest.py @@ -1,5 +1,30 @@ +""" +configuration for the tests +""" + import pytest +# put test_settings.py into the toplevel dir and invoke py.test from there +# needs to look like (just with YOUR domain, IP, algo, key, hostnames, IPs): +""" +# this is to create a Domain entry in the database, so it can be used for unit tests: +BASEDOMAIN = "nsupdate.info" +NAMESERVER_IP = "85.10.192.104" +NAMESERVER_UPDATE_ALGORITHM = "HMAC_SHA512" +NAMESERVER_UPDATE_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==" +NAMESERVER_PUBLIC = True + +# for some unittests +WWW_HOST = BASEDOMAIN +NONEXISTING_HOST = 'nonexisting.' + BASEDOMAIN +WWW_IPV4_HOST = 'ipv4.' + BASEDOMAIN +WWW_IPV6_HOST = 'ipv6.' + BASEDOMAIN +WWW_IPV4_IP = '85.10.192.104' +WWW_IPV6_IP = '2a01:4f8:a0:2ffe:0:ff:fe00:8000' +""" + +import test_settings + from django.utils.translation import activate @@ -10,11 +35,13 @@ def db_init(db): Init the database contents for testing, so we have a service domain, ... """ from nsupdate.main.models import Domain - Domain.objects.create(domain='nsupdate.info', - nameserver_ip='85.10.192.104', - nameserver_update_algorithm='HMAC_SHA512', - nameserver_update_key='YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ==', - public=True) + Domain.objects.create( + domain=test_settings.BASEDOMAIN, + nameserver_ip=test_settings.NAMESERVER_IP, + nameserver_update_algorithm=test_settings.NAMESERVER_UPDATE_ALGORITHM, + nameserver_update_key=test_settings.NAMESERVER_UPDATE_KEY, + public=test_settings.NAMESERVER_PUBLIC, + ) def pytest_runtest_setup(item): diff --git a/nsupdate/main/_tests/test_dnstools.py b/nsupdate/main/_tests/test_dnstools.py index df004f7..39b0349 100644 --- a/nsupdate/main/_tests/test_dnstools.py +++ b/nsupdate/main/_tests/test_dnstools.py @@ -3,20 +3,18 @@ Tests for dnstools module. """ import pytest +from test_settings import * + pytestmark = pytest.mark.django_db from dns.resolver import NXDOMAIN -from django.conf import settings - from ..dnstools import add, delete, update, query_ns, parse_name, update_ns, SameIpError -BASEDOMAIN = settings.BASEDOMAIN - class TestIntelligentUpdater(object): def test_double_update(self): - host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4' + host, ip = 'test0.' + BASEDOMAIN, '1.2.3.4' # make sure the host is not there try: update_ns(host, 'A', action='del') @@ -33,7 +31,7 @@ class TestIntelligentUpdater(object): class TestIntelligentAdder(object): def test_double_add_same(self): - host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4' + host, ip = 'test0.' + BASEDOMAIN, '1.2.3.4' # make sure the host is not there try: update_ns(host, 'A', action='del') @@ -48,7 +46,7 @@ class TestIntelligentAdder(object): add(host, ip) def test_double_add_different(self): - host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4' + host, ip = 'test0.' + BASEDOMAIN, '1.2.3.4' # make sure the host is not there try: update_ns(host, 'A', action='del') @@ -66,7 +64,7 @@ class TestIntelligentAdder(object): class TestIntelligentDeleter(object): def test_delete(self): - host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4' + host, ip = 'test0.' + BASEDOMAIN, '1.2.3.4' # make sure the host is there update_ns(host, 'A', ip, action='add') delete(host) @@ -75,7 +73,7 @@ class TestIntelligentDeleter(object): query_ns(host, 'A') def test_double_delete(self): - host = 'test0.' + settings.BASEDOMAIN + host = 'test0.' + BASEDOMAIN # make sure the host is not there try: update_ns(host, 'A', action='del') @@ -87,16 +85,16 @@ class TestIntelligentDeleter(object): class TestQuery(object): def test_queries_ok(self): - assert query_ns(settings.WWW_IPV4_HOST, 'A') == settings.WWW_IPV4_IP # v4 ONLY - assert query_ns(settings.WWW_IPV6_HOST, 'AAAA') == settings.WWW_IPV6_IP # v6 ONLY - assert query_ns(settings.WWW_HOST, 'A') == settings.WWW_IPV4_IP # v4 and v6, query v4 - assert query_ns(settings.WWW_HOST, 'AAAA') == settings.WWW_IPV6_IP # v4 and v6, query v6 + assert query_ns(WWW_IPV4_HOST, 'A') == WWW_IPV4_IP # v4 ONLY + assert query_ns(WWW_IPV6_HOST, 'AAAA') == WWW_IPV6_IP # v6 ONLY + assert query_ns(WWW_HOST, 'A') == WWW_IPV4_IP # v4 and v6, query v4 + assert query_ns(WWW_HOST, 'AAAA') == WWW_IPV6_IP # v4 and v6, query v6 def test_queries_failing(self): with pytest.raises(NXDOMAIN): - query_ns(settings.NONEXISTING_HOST, 'A') + query_ns(NONEXISTING_HOST, 'A') with pytest.raises(NXDOMAIN): - query_ns(settings.NONEXISTING_HOST, 'AAAA') + query_ns(NONEXISTING_HOST, 'AAAA') class TestUpdate(object): diff --git a/nsupdate/main/dnstools.py b/nsupdate/main/dnstools.py index 2df297a..2818b87 100644 --- a/nsupdate/main/dnstools.py +++ b/nsupdate/main/dnstools.py @@ -157,7 +157,7 @@ def query_ns(qname, rdtype, origin=None): # we do not configure it from resolv.conf, but patch in the values we # want into the documented attributes: resolver.nameservers = [nameserver, ] - resolver.search = [dns.name.from_text(settings.BASEDOMAIN), ] + resolver.search = [dns.name.from_text('nsupdate.info'), ] # FIXME: should work with empty list resolver.lifetime = RESOLVER_TIMEOUT try: answer = resolver.query(qname, rdtype) diff --git a/nsupdate/settings.py b/nsupdate/settings.py index 8bc6a6f..81f2b11 100644 --- a/nsupdate/settings.py +++ b/nsupdate/settings.py @@ -6,6 +6,9 @@ import os import dns.tsig import django.conf.global_settings as DEFAULT_SETTINGS +# Use a unique, long, random, secret string here. +SECRET_KEY = 'this is for sure not secret, but good enough for running the unit tests' + DEBUG = True TEMPLATE_DEBUG = DEBUG @@ -28,13 +31,9 @@ DATABASES = { } BASEDOMAIN = 'nsupdate.info' - -NONEXISTING_HOST = 'nonexisting.' + BASEDOMAIN WWW_HOST = BASEDOMAIN WWW_IPV4_HOST = 'ipv4.' + BASEDOMAIN WWW_IPV6_HOST = 'ipv6.' + BASEDOMAIN -WWW_IPV4_IP = '178.32.221.14' -WWW_IPV6_IP = '2001:41d0:8:e00e::1' BAD_AGENTS = set() # useragent blacklist for /nic/update service @@ -101,9 +100,6 @@ STATICFILES_FINDERS = ( # 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) -# Make this unique, and don't share it with anybody. -SECRET_KEY = 'iwlqlh4mrwe6j+f(e8qb)^muiq2^=!v+h#_s9**6wghpd_&bg8' - # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader',