nsupdate.info/nsupdate/main/_tests/test_dnstools.py
Thomas Waldmann 49693121ea use zones/nameserver IPs/update keys from DB, logging (thanks to asmaps)
remove unneeded stuff from settings
(we still need some in conftest.py for the tests, though)
init DB for tests via conftest.py
more update algorithm choices
give origin zone (if we already know it) to dnstools functions
new views: DomainOverview, DeleteDomain
unify deletion templates using delete_object.html
add django-extensions
2013-10-18 15:30:17 -07:00

181 lines
6.1 KiB
Python

"""
Tests for dnstools module.
"""
import pytest
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'
# make sure the host is not there
try:
update_ns(host, 'A', action='del')
except NXDOMAIN:
# it is ok if it was never there
pass
# first update with this IP, should work without issue:
update(host, ip)
assert query_ns(host, 'A') == ip
with pytest.raises(SameIpError):
# trying to update again with same IP should raise
update(host, ip)
class TestIntelligentAdder(object):
def test_double_add_same(self):
host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4'
# make sure the host is not there
try:
update_ns(host, 'A', action='del')
except NXDOMAIN:
# it is ok if it was never there
pass
# first add with this IP, should work without issue:
add(host, ip)
assert query_ns(host, 'A') == ip
with pytest.raises(SameIpError):
# trying to add again with same IP should raise
add(host, ip)
def test_double_add_different(self):
host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4'
# make sure the host is not there
try:
update_ns(host, 'A', action='del')
except NXDOMAIN:
# it is ok if it was never there
pass
# first add with this IP, should work without issue:
add(host, ip)
assert query_ns(host, 'A') == ip
different_ip = '4.3.2.1'
# trying to add again with same IP should raise
add(host, different_ip) # internally triggers an update
assert query_ns(host, 'A') == different_ip
class TestIntelligentDeleter(object):
def test_delete(self):
host, ip = 'test0.' + settings.BASEDOMAIN, '1.2.3.4'
# make sure the host is there
update_ns(host, 'A', ip, action='add')
delete(host)
# make sure it is gone
with pytest.raises(NXDOMAIN):
query_ns(host, 'A')
def test_double_delete(self):
host = 'test0.' + settings.BASEDOMAIN
# make sure the host is not there
try:
update_ns(host, 'A', action='del')
except NXDOMAIN:
# it is ok if it was never there
pass
delete(host) # hmm, this doesn't raise NXDOMAIN!?
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
def test_queries_failing(self):
with pytest.raises(NXDOMAIN):
query_ns(settings.NONEXISTING_HOST, 'A')
with pytest.raises(NXDOMAIN):
query_ns(settings.NONEXISTING_HOST, 'AAAA')
class TestUpdate(object):
def test_parse1(self):
origin, relname = parse_name('foo.' + BASEDOMAIN)
assert str(origin) == BASEDOMAIN + '.'
assert str(relname) == 'foo'
def test_parse2(self):
origin, relname = parse_name('foo.bar.' + BASEDOMAIN)
assert str(origin) == BASEDOMAIN + '.'
assert str(relname) == 'foo.bar'
def test_parse_with_origin(self):
origin, relname = parse_name('foo.bar.baz.org', 'bar.baz.org')
assert str(origin) == 'bar.baz.org' + '.'
assert str(relname) == 'foo'
def test_add_del_v4(self):
host, ip = 'test1.' + BASEDOMAIN, '1.1.1.1'
response = update_ns(host, 'A', ip, action='add', ttl=60)
print response
assert query_ns(host, 'A') == ip
response = update_ns(host, 'A', action='del')
print response
with pytest.raises(NXDOMAIN):
query_ns(host, 'A') == ip
def test_update_v4(self):
host, ip = 'test2.' + BASEDOMAIN, '2.2.2.2'
response = update_ns(host, 'A', ip, action='upd', ttl=60)
print response
assert query_ns(host, 'A') == ip
host, ip = 'test2.' + BASEDOMAIN, '3.3.3.3'
response = update_ns(host, 'A', ip, action='upd', ttl=60)
print response
assert query_ns(host, 'A') == ip
def test_add_del_v6(self):
host, ip = 'test3.' + BASEDOMAIN, '::1'
response = update_ns(host, 'AAAA', ip, action='add', ttl=60)
print response
assert query_ns(host, 'AAAA') == ip
response = update_ns(host, 'AAAA', action='del')
print response
with pytest.raises(NXDOMAIN):
query_ns(host, 'AAAA') == ip
def test_update_v6(self):
host, ip = 'test4.' + BASEDOMAIN, '::2'
response = update_ns(host, 'AAAA', ip, action='upd', ttl=60)
print response
assert query_ns(host, 'AAAA') == ip
host, ip = 'test4.' + BASEDOMAIN, '::3'
response = update_ns(host, 'AAAA', ip, action='upd', ttl=60)
print response
assert query_ns(host, 'AAAA') == ip
def test_update_mixed(self):
host4, ip4 = 'test5.' + BASEDOMAIN, '4.4.4.4'
response = update_ns(host4, 'A', ip4, action='upd', ttl=60)
print response
assert query_ns(host4, 'A') == ip4
host6, ip6 = 'test5.' + BASEDOMAIN, '::4'
response = update_ns(host6, 'AAAA', ip6, action='upd', ttl=60)
print response
assert query_ns(host6, 'AAAA') == ip6
# make sure the v4 is unchanged
assert query_ns(host4, 'A') == ip4
host4, ip4 = 'test5.' + BASEDOMAIN, '5.5.5.5'
response = update_ns(host4, 'A', ip4, action='upd', ttl=60)
print response
assert query_ns(host4, 'A') == ip4
# make sure the v6 is unchanged
assert query_ns(host6, 'AAAA') == ip6