Commit 604cba6a authored by Petr Špaček's avatar Petr Špaček

stats: integration tests

parent b0ee54f2
programs:
- name: kresd
binary: kresd
additional:
- -f
- "1"
templates:
- modules/stats/test.integr/kresd_config.j2
- tests/hints_zone.j2
configs:
- config
- hints
{% raw %}
modules.load('stats')
FWD_TARGET = policy.FORWARD('192.0.2.1')
function check_stats(got)
log('checking if stat values match expected values:')
local expected = {
['answer.cd'] = 2,
['answer.cached'] = 1,
['answer.nodata'] = 1,
['answer.noerror'] = 2,
['answer.nxdomain'] = 1,
['answer.servfail'] = 2,
['answer.edns0'] = 6,
['answer.ra'] = 6,
['answer.rd'] = 5,
['answer.do'] = 1,
['answer.ad'] = 0,
['answer.tc'] = 0,
['answer.aa'] = 0,
['answer.total'] = 6
}
print(table_print(expected))
local ok = true
for key, expval in pairs(expected) do
if got[key] ~= expval then
log('ERROR: stats key ' .. key
.. ' has unexpected value'
.. ' (expected ' .. tostring(expval)
.. ' got ' .. tostring(got[key] .. ')'))
ok = false
end
end
if ok then
log('no problem found')
return FWD_TARGET
else
return policy.DENY_MSG('Stats test failure')
end
end
function reply_result(state, req)
local got = stats.list()
log('current stats.list() values:')
print(table_print(got))
local result = check_stats(got)
return result(state, req)
end
policy.add(policy.pattern(reply_result, 'stats.test.'))
policy.add(policy.all(FWD_TARGET)) -- avoid iteration
-- Disable RFC8145 signaling, scenario doesn't provide expected answers
if ta_signal_query then
modules.unload('ta_signal_query')
end
-- Disable RFC8109 priming, scenario doesn't provide expected answers
if priming then
modules.unload('priming')
end
-- Disable this module because it make one priming query
if detect_time_skew then
modules.unload('detect_time_skew')
end
_hint_root_file('hints')
cache.size = 2*MB
verbose(true)
{% endraw %}
net = { '{{SELF_ADDR}}' }
{% if QMIN == "false" %}
option('NO_MINIMIZE', true)
{% else %}
option('NO_MINIMIZE', false)
{% endif %}
-- Self-checks on globals
assert(help() ~= nil)
assert(worker.id ~= nil)
-- Self-checks on facilities
assert(cache.count() == 0)
assert(cache.stats() ~= nil)
assert(cache.backends() ~= nil)
assert(worker.stats() ~= nil)
assert(net.interfaces() ~= nil)
-- Self-checks on loaded stuff
assert(net.list()['{{SELF_ADDR}}'])
assert(#modules.list() > 0)
-- Self-check timers
ev = event.recurrent(1 * sec, function (ev) return 1 end)
event.cancel(ev)
ev = event.after(0, function (ev) return 1 end)
trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
CONFIG_END
SCENARIO_BEGIN Test stats module
RANGE_BEGIN 0 100
ADDRESS 192.0.2.1
ENTRY_BEGIN
REPLY QR RA RD CD NOERROR
MATCH opcode question rcode
ADJUST copy_id
SECTION QUESTION
cd.test. IN TXT
SECTION ANSWER
cd.test. IN TXT "CD is set"
ENTRY_END
ENTRY_BEGIN
REPLY QR RA RD CD NOERROR
MATCH opcode question rcode
ADJUST copy_id
SECTION QUESTION
nodata.test. IN TXT
ENTRY_END
ENTRY_BEGIN
REPLY QR RA RD CD NXDOMAIN
MATCH opcode question
ADJUST copy_id
SECTION QUESTION
nxdomain.test. IN TXT
ENTRY_END
; failing DNSSEC-signed subdomain
ENTRY_BEGIN
REPLY QR RA RD CD SERVFAIL
MATCH opcode subdomain
ADJUST copy_id copy_query
SECTION QUESTION
bogus.test. IN TXT
ENTRY_END
; query for this name triggers check in Lua config
ENTRY_BEGIN
REPLY QR RA RD CD NOERROR
MATCH opcode question rcode
ADJUST copy_id
SECTION QUESTION
stats.test. IN TXT
SECTION ANSWER
stats.test. IN TXT "Ok, trigger query was not intercepted!"
ENTRY_END
ENTRY_BEGIN
REPLY QR RD RA CD TC NOERROR
MATCH opcode question rcode
ADJUST copy_id
SECTION QUESTION
tc.test. IN URI
ENTRY_END
RANGE_END
; +cd +rd
STEP 10 QUERY
ENTRY_BEGIN
REPLY RD CD NOERROR
SECTION QUESTION
cd.test. IN TXT
ENTRY_END
STEP 11 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RD RA CD NOERROR
SECTION QUESTION
cd.test. IN TXT
SECTION ANSWER
cd.test. IN TXT "CD is set"
ENTRY_END
; +cd +cached +rd
STEP 12 QUERY
ENTRY_BEGIN
REPLY RD CD NOERROR
SECTION QUESTION
cd.test. IN TXT
ENTRY_END
STEP 13 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
REPLY QR RD RA CD NOERROR
SECTION QUESTION
cd.test. IN TXT
SECTION ANSWER
cd.test. IN TXT "CD is set"
ENTRY_END
; +nodata +rd
STEP 20 QUERY
ENTRY_BEGIN
REPLY RD NOERROR
SECTION QUESTION
nodata.test. IN TXT
SECTION ADDITIONAL
ENTRY_END
STEP 21 CHECK_ANSWER
ENTRY_BEGIN
REPLY QR RD RA NOERROR
MATCH all
SECTION QUESTION
nodata.test. IN TXT
ENTRY_END
; +nxdomain +rd
STEP 30 QUERY
ENTRY_BEGIN
REPLY RD NOERROR
SECTION QUESTION
nxdomain.test. IN TXT
SECTION ADDITIONAL
ENTRY_END
STEP 31 CHECK_ANSWER
ENTRY_BEGIN
REPLY QR RD RA NXDOMAIN
MATCH all
SECTION QUESTION
nxdomain.test. IN TXT
ENTRY_END
; +servfail +do +rd
STEP 40 QUERY
ENTRY_BEGIN
REPLY RD DO NOERROR
SECTION QUESTION
bogus.test. IN TXT
SECTION ADDITIONAL
ENTRY_END
STEP 41 CHECK_ANSWER
ENTRY_BEGIN
REPLY QR RD RA DO SERVFAIL
MATCH all
SECTION QUESTION
bogus.test. IN TXT
ENTRY_END
; no rd
STEP 50 QUERY
ENTRY_BEGIN
REPLY NOERROR
SECTION QUESTION
bogus.test. IN TXT
SECTION ADDITIONAL
ENTRY_END
STEP 51 CHECK_ANSWER
ENTRY_BEGIN
REPLY QR RA SERVFAIL
MATCH all
SECTION QUESTION
bogus.test. IN TXT
ENTRY_END
STEP 100 QUERY
ENTRY_BEGIN
REPLY RD NOERROR
SECTION QUESTION
stats.test. IN TXT
SECTION ADDITIONAL
ENTRY_END
STEP 101 CHECK_ANSWER
ENTRY_BEGIN
REPLY NOERROR
MATCH opcode question additional rcode answer
; AD must not be set in the answer
SECTION QUESTION
stats.test. IN TXT
SECTION ANSWER
stats.test. IN TXT "Ok, trigger query was not intercepted!"
ENTRY_END
SCENARIO_END
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment