summaryrefslogtreecommitdiffstats
path: root/modules/hints/tests/hints.test.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/hints/tests/hints.test.lua')
-rw-r--r--modules/hints/tests/hints.test.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/modules/hints/tests/hints.test.lua b/modules/hints/tests/hints.test.lua
new file mode 100644
index 0000000..b62e502
--- /dev/null
+++ b/modules/hints/tests/hints.test.lua
@@ -0,0 +1,64 @@
+-- SPDX-License-Identifier: GPL-3.0-or-later
+local utils = require('test_utils')
+
+-- setup resolver
+modules = { 'hints > iterate' }
+
+-- test for default configuration
+local function test_default()
+ -- get loaded root hints and change names to lowercase
+ local hints_data = utils.table_keys_to_lower(hints.root())
+
+ -- root hints loaded from default location
+ -- check correct ip address of a.root-server.net
+ utils.contains(hints_data['a.root-servers.net.'], '198.41.0.4', 'has IP address for a.root-servers.net.')
+end
+
+-- test loading from config file
+local function test_custom()
+ -- load custom root hints file with fake ip address for a.root-server.net
+ local err_msg = hints.root_file('hints_test.zone')
+ same(err_msg, '', 'load root hints from file')
+
+ -- get loaded root hints and change names to lowercase
+ local hints_data = utils.table_keys_to_lower(hints.root())
+ isnt(hints_data['a.root-servers.net.'], nil, 'can retrieve root hints')
+
+ -- check loaded ip address of a.root-server.net
+ utils.not_contains(hints_data['a.root-servers.net.'], '198.41.0.4',
+ 'real IP address for a.root-servers.net. is replaced')
+ utils.contains(hints_data['a.root-servers.net.'], '10.0.0.1',
+ 'real IP address for a.root-servers.net. is correct')
+end
+
+-- test that setting an address hint works (TODO: and NXDOMAIN)
+local function test_nxdomain()
+ hints.config() -- clean start
+ hints.use_nodata(false)
+ hints.add_hosts('hints.test.hosts')
+ -- TODO: prefilling or some other way of getting NXDOMAIN (instead of SERVFAIL)
+ utils.check_answer('bad name gives NXDOMAIN',
+ 'badname.lan', kres.type.A, kres.rcode.SERVFAIL)
+ utils.check_answer('another type gives NXDOMAIN',
+ 'myname.lan', kres.type.AAAA, kres.rcode.SERVFAIL)
+ utils.check_answer('record itself is OK',
+ 'myname.lan', kres.type.A, kres.rcode.NOERROR)
+end
+
+-- test that NODATA is correctly generated
+local function test_nodata()
+ hints.config() -- clean start
+ hints.use_nodata(true) -- default ATM but let's not depend on that
+ hints['myname.lan'] = '2001:db8::1'
+ utils.check_answer('another type gives NODATA',
+ 'myname.lan', kres.type.MX, utils.NODATA)
+ utils.check_answer('record itself is OK',
+ 'myname.lan', kres.type.AAAA, kres.rcode.NOERROR)
+end
+
+return {
+ test_default,
+ test_custom,
+ test_nxdomain,
+ test_nodata,
+}