]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
modules/daf: add some basic tests
authorTomas Krizek <tomas.krizek@nic.cz>
Wed, 1 Apr 2020 12:37:17 +0000 (14:37 +0200)
committerTomas Krizek <tomas.krizek@nic.cz>
Thu, 2 Apr 2020 11:57:33 +0000 (13:57 +0200)
modules/daf/daf.test.lua [new file with mode: 0644]
modules/daf/meson.build
modules/meson.build

diff --git a/modules/daf/daf.test.lua b/modules/daf/daf.test.lua
new file mode 100644 (file)
index 0000000..bd1d9cf
--- /dev/null
@@ -0,0 +1,87 @@
+-- SPDX-License-Identifier: GPL-3.0-or-later
+
+-- do not attempt to contact outside world, operate only on cache
+net.ipv4 = false
+net.ipv6 = false
+-- do not listen, test is driven by config code
+env.KRESD_NO_LISTEN = true
+
+modules.load('hints > iterate')
+modules.load('daf')
+
+hints['pass.'] = '127.0.0.1'
+hints['deny.'] = '127.0.0.1'
+hints['deny.'] = '127.0.0.1'
+hints['drop.'] = '127.0.0.1'
+hints['del.'] = '127.0.0.1'
+hints['del2.'] = '127.0.0.1'
+hints['toggle.'] = '127.0.0.1'
+
+local function check_answer(desc, qname, qtype, expected_rcode)
+       qtype_str = kres.tostring.type[qtype]
+       callback = function(pkt)
+               same(pkt:rcode(), expected_rcode,
+                    desc .. ': expecting answer for query ' .. qname .. ' ' .. qtype_str
+                     .. ' with rcode ' .. kres.tostring.rcode[expected_rcode])
+
+               ok((pkt:ancount() > 0) == (pkt:rcode() == kres.rcode.NOERROR),
+                  desc ..': checking number of answers for ' .. qname .. ' ' .. qtype_str)
+       end
+       resolve(qname, qtype, kres.class.IN, {}, callback)
+end
+
+local function test_sanity()
+       check_answer('daf sanity (no rules)', 'pass.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf sanity (no rules)', 'deny.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf sanity (no rules)', 'drop.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf sanity (no rules)', 'del.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf sanity (no rules)', 'del2.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf sanity (no rules)', 'toggle.', kres.type.A, kres.rcode.NOERROR)
+end
+
+local function test_basic_actions()
+       daf.add('qname = pass. pass')
+       daf.add('qname = deny. deny')
+       daf.add('qname = drop. drop')
+
+       check_answer('daf pass action', 'pass.', kres.type.A, kres.rcode.NOERROR)
+       check_answer('daf deny action', 'deny.', kres.type.A, kres.rcode.NXDOMAIN)
+       check_answer('daf drop action', 'drop.', kres.type.A, kres.rcode.SERVFAIL)
+end
+
+local function test_del()
+       -- first matching rule is used
+       local first = daf.add('qname = del. deny')
+       local second = daf.add('qname = del2. deny')
+
+       check_answer('daf del - first rule active',
+               'del.', kres.type.A, kres.rcode.NXDOMAIN)
+       check_answer('daf del - second rule active',
+               'del2.', kres.type.A, kres.rcode.NXDOMAIN)
+       daf.del(first.rule.id)
+       check_answer('daf del - first rule deleted',
+               'del.', kres.type.A, kres.rcode.NOERROR)
+       daf.del(second.rule.id)
+       check_answer('daf del - second rule deleted',
+               'del2.', kres.type.A, kres.rcode.NOERROR)
+end
+
+local function test_toggle()
+       local toggle = daf.add('qname = toggle. deny')
+
+       check_answer('daf - toggle active',
+               'toggle.', kres.type.A, kres.rcode.NXDOMAIN)
+       daf.disable(toggle.rule.id)
+       check_answer('daf - toggle disabled',
+               'toggle.', kres.type.A, kres.rcode.NOERROR)
+       daf.enable(toggle.rule.id)
+       check_answer('daf - toggle enabled',
+               'toggle.', kres.type.A, kres.rcode.NXDOMAIN)
+end
+
+return {
+       test_sanity,  -- must be first, expects no daf rules
+       test_basic_actions,
+       test_del,
+       test_toggle,
+}
index 4e6678f57afaeac778f6d7fb0426d265079d8443..a31bc4b5a891d3998affc037aafdc369b388f06b 100644 (file)
@@ -1,6 +1,11 @@
 # LUA module: daf
 # SPDX-License-Identifier: GPL-3.0-or-later
 
+config_tests += [
+  ['daf', files('daf.test.lua')],
+  ['daf_http', files('daf_http.test.lua')],
+]
+
 lua_mod_src += [
   files('daf.lua'),
 ]
index 5cc5404e20a8521290aba9e731873c5712d3e567..84061d0b7504862cb6bfc465680c8b437a8e5fa6 100644 (file)
@@ -21,7 +21,6 @@ lua_mod_src = [  # add lua modules without separate meson.build
 ]
 
 config_tests += [
-  ['daf_http', files('daf/daf_http.test.lua')],
   ['predict', files('predict/predict.test.lua')],
   ['hints', files('hints/tests/hints.test.lua'), ['skip_asan']],
   ['nsid', files('nsid/nsid.test.lua')],