From 2702e041699467d69d202a48450326381f427d60 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADt=C4=9Bzslav=20K=C5=99=C3=AD=C5=BE?= Date: Mon, 11 Dec 2017 15:11:46 +0100 Subject: [PATCH] config-test: refactor config test framework, add keyfile tests Config tests now have ability to run daemon with different arguments and to check exit code. --- .luacheckrc | 2 +- daemon/lua/config.lua | 2 +- daemon/lua/trust_anchors.lua.in | 2 +- .../{hints_test.lua => tests/hints.test.lua} | 8 ++-- modules/hints/{ => tests}/hints_test.zone | 0 .../{policy_test.lua => policy.test.lua} | 0 .../predict.test.lua} | 0 .../config/{basic_test.lua => basic.test.lua} | 0 .../config/{cache_test.lua => cache.test.lua} | 0 .../{bad_parameters.args => bad_args.args} | 0 ...ameters.returncode => bad_args.returncode} | 0 tests/config/keyfile/bad_args.test.lua | 0 tests/config/keyfile/bad_parameters.cfg | 3 -- .../keyfile/{test.args => load_ta.args} | 0 tests/config/keyfile/load_ta.test.lua | 37 ++++++++++++++ tests/config/keyfile/nonexist_keyfile1.args | 1 + .../keyfile/nonexist_keyfile1.returncode | 1 + .../config/keyfile/nonexist_keyfile1.test.lua | 2 + tests/config/keyfile/nonexist_keyfile2.args | 1 + .../keyfile/nonexist_keyfile2.returncode | 1 + .../config/keyfile/nonexist_keyfile2.test.lua | 2 + tests/config/keyfile/test.cfg | 48 ------------------- tests/config/runtest.sh | 17 +++++-- tests/config/test_config.mk | 6 ++- .../tests/keyfile/nonexist_keyfile1.args | 1 + .../keyfile/nonexist_keyfile1.returncode | 1 + .../tests/keyfile/nonexist_keyfile1.test.lua | 2 + .../tests/keyfile/nonexist_keyfile2.args | 1 + .../keyfile/nonexist_keyfile2.returncode | 1 + .../tests/keyfile/nonexist_keyfile2.test.lua | 2 + 30 files changed, 78 insertions(+), 63 deletions(-) rename modules/hints/{hints_test.lua => tests/hints.test.lua} (85%) rename modules/hints/{ => tests}/hints_test.zone (100%) rename modules/policy/{policy_test.lua => policy.test.lua} (100%) rename modules/predict/{predict_test.lua => tests/predict.test.lua} (100%) rename tests/config/{basic_test.lua => basic.test.lua} (100%) rename tests/config/{cache_test.lua => cache.test.lua} (100%) rename tests/config/keyfile/{bad_parameters.args => bad_args.args} (100%) rename tests/config/keyfile/{bad_parameters.returncode => bad_args.returncode} (100%) create mode 100644 tests/config/keyfile/bad_args.test.lua delete mode 100644 tests/config/keyfile/bad_parameters.cfg rename tests/config/keyfile/{test.args => load_ta.args} (100%) create mode 100644 tests/config/keyfile/load_ta.test.lua create mode 100644 tests/config/keyfile/nonexist_keyfile1.args create mode 100644 tests/config/keyfile/nonexist_keyfile1.returncode create mode 100644 tests/config/keyfile/nonexist_keyfile1.test.lua create mode 100644 tests/config/keyfile/nonexist_keyfile2.args create mode 100644 tests/config/keyfile/nonexist_keyfile2.returncode create mode 100644 tests/config/keyfile/nonexist_keyfile2.test.lua delete mode 100644 tests/config/keyfile/test.cfg create mode 100644 tests/config/tests/keyfile/nonexist_keyfile1.args create mode 100644 tests/config/tests/keyfile/nonexist_keyfile1.returncode create mode 100644 tests/config/tests/keyfile/nonexist_keyfile1.test.lua create mode 100644 tests/config/tests/keyfile/nonexist_keyfile2.args create mode 100644 tests/config/tests/keyfile/nonexist_keyfile2.returncode create mode 100644 tests/config/tests/keyfile/nonexist_keyfile2.test.lua diff --git a/.luacheckrc b/.luacheckrc index 29e59a28e..a6a321086 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -76,4 +76,4 @@ files['daemon/lua/kres-gen.lua'].ignore = {'631'} -- Allow overly long lines -- Tests and scripts can use global variables files['scripts'].ignore = {'111', '112', '113'} files['tests'].ignore = {'111', '112', '113'} -files['modules/*/*_test.lua'].ignore = {'111', '112', '113', '122'} \ No newline at end of file +files['modules/**/*.test.lua'].ignore = {'111', '112', '113', '122'} diff --git a/daemon/lua/config.lua b/daemon/lua/config.lua index 36f89e672..7abf18184 100644 --- a/daemon/lua/config.lua +++ b/daemon/lua/config.lua @@ -22,7 +22,7 @@ end if not trust_anchors.keysets['\0'] and trust_anchors.keyfile_default then if io.open(trust_anchors.keyfile_default, 'r') then trust_anchors.config(trust_anchors.keyfile_default, true) - else + else panic("cannot open default trust anchor file:'%s'", trust_anchors.keyfile_default ) diff --git a/daemon/lua/trust_anchors.lua.in b/daemon/lua/trust_anchors.lua.in index d2755b80c..43b8fb1f7 100644 --- a/daemon/lua/trust_anchors.lua.in +++ b/daemon/lua/trust_anchors.lua.in @@ -401,7 +401,7 @@ local add_file = function (path, unmanaged) end -- Parse the file and check its sanity - local keyset, err = keyset_read(path) + local keyset, err = keyset_read(path) if not keyset then panic("[ ta ] ERROR: failed to read anchors from '%s' (%s)", path, err) end diff --git a/modules/hints/hints_test.lua b/modules/hints/tests/hints.test.lua similarity index 85% rename from modules/hints/hints_test.lua rename to modules/hints/tests/hints.test.lua index 2b8a1a736..b60d2a364 100644 --- a/modules/hints/hints_test.lua +++ b/modules/hints/tests/hints.test.lua @@ -6,7 +6,7 @@ modules = { 'hints' } -- test for default configuration local function test_default() -- get loaded root hints and change names to lowercase - hints_data = utils.table_keys_to_lower(hints.root()) + 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 @@ -16,11 +16,11 @@ end -- test loading from config file local function test_custom() -- load custom root hints file with fake ip address for a.root-server.net - err_msg = hints.root_file(TEST_DIR .. 'hints_test.zone') + local err_msg = hints.root_file(TEST_DIR .. 'hints_test.zone') same(err_msg, '', 'load root hints from file') -- get loaded root hints and change names to lowercase - hints_data = utils.table_keys_to_lower(hints.root()) + 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 @@ -33,4 +33,4 @@ end return { test_default, test_custom -} \ No newline at end of file +} diff --git a/modules/hints/hints_test.zone b/modules/hints/tests/hints_test.zone similarity index 100% rename from modules/hints/hints_test.zone rename to modules/hints/tests/hints_test.zone diff --git a/modules/policy/policy_test.lua b/modules/policy/policy.test.lua similarity index 100% rename from modules/policy/policy_test.lua rename to modules/policy/policy.test.lua diff --git a/modules/predict/predict_test.lua b/modules/predict/tests/predict.test.lua similarity index 100% rename from modules/predict/predict_test.lua rename to modules/predict/tests/predict.test.lua diff --git a/tests/config/basic_test.lua b/tests/config/basic.test.lua similarity index 100% rename from tests/config/basic_test.lua rename to tests/config/basic.test.lua diff --git a/tests/config/cache_test.lua b/tests/config/cache.test.lua similarity index 100% rename from tests/config/cache_test.lua rename to tests/config/cache.test.lua diff --git a/tests/config/keyfile/bad_parameters.args b/tests/config/keyfile/bad_args.args similarity index 100% rename from tests/config/keyfile/bad_parameters.args rename to tests/config/keyfile/bad_args.args diff --git a/tests/config/keyfile/bad_parameters.returncode b/tests/config/keyfile/bad_args.returncode similarity index 100% rename from tests/config/keyfile/bad_parameters.returncode rename to tests/config/keyfile/bad_args.returncode diff --git a/tests/config/keyfile/bad_args.test.lua b/tests/config/keyfile/bad_args.test.lua new file mode 100644 index 000000000..e69de29bb diff --git a/tests/config/keyfile/bad_parameters.cfg b/tests/config/keyfile/bad_parameters.cfg deleted file mode 100644 index a45213ded..000000000 --- a/tests/config/keyfile/bad_parameters.cfg +++ /dev/null @@ -1,3 +0,0 @@ -dofile('./test_utils.lua') -- load test utilities - -quit() diff --git a/tests/config/keyfile/test.args b/tests/config/keyfile/load_ta.args similarity index 100% rename from tests/config/keyfile/test.args rename to tests/config/keyfile/load_ta.args diff --git a/tests/config/keyfile/load_ta.test.lua b/tests/config/keyfile/load_ta.test.lua new file mode 100644 index 000000000..bfe851b7c --- /dev/null +++ b/tests/config/keyfile/load_ta.test.lua @@ -0,0 +1,37 @@ +-- test fixtures + +-- count warning message, fail with other than allowed message +warn_msg = {} +overriding_msg="[ ta ] warning: overriding previously set trust anchors for ." +warn_msg[overriding_msg] = 0 +function warn(fmt, ...) + msg = string.format(fmt, ...) + if warn_msg[msg] == nil then + fail(string.format("Not allowed warn message: %s", msg)) + else + warn_msg[msg] = warn_msg[msg] + 1 + end +end + +-- tests + +boom(trust_anchors.add_file, {'nonwriteable/root.keys', false}, + "Managed trust anchor in non-writeable directory") + +boom(trust_anchors.add_file, {'nonexist.keys', true}, + "Nonexist unmanaged trust anchor file") + +trust_anchors.add_file('root2.keys', true) +trust_anchors.add_file('root1.keys', true) +is(warn_msg[overriding_msg], 1, "Warning message when override trust anchors") + +is(trust_anchors.keysets['\0'][1].key_tag, 19036, + "Loaded KeyTag from root1.keys") + +local function test_loading_from_cmdline() + is(trust_anchors.keysets['\0'][1].key_tag , 20326, + "Loaded KeyTag from cmdline file root2.keys") + is(warn_msg[overriding_msg], 2, "Warning message when override trust anchors") +end + +return {test_loading_from_cmdline} diff --git a/tests/config/keyfile/nonexist_keyfile1.args b/tests/config/keyfile/nonexist_keyfile1.args new file mode 100644 index 000000000..6fead684f --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile1.args @@ -0,0 +1 @@ +--keyfile-ro nonexist \ No newline at end of file diff --git a/tests/config/keyfile/nonexist_keyfile1.returncode b/tests/config/keyfile/nonexist_keyfile1.returncode new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile1.returncode @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/config/keyfile/nonexist_keyfile1.test.lua b/tests/config/keyfile/nonexist_keyfile1.test.lua new file mode 100644 index 000000000..be73f32f4 --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile1.test.lua @@ -0,0 +1,2 @@ +-- simulate building without KEYFILE_DEFAULT +trust_anchors.keyfile_default = nil diff --git a/tests/config/keyfile/nonexist_keyfile2.args b/tests/config/keyfile/nonexist_keyfile2.args new file mode 100644 index 000000000..6fead684f --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile2.args @@ -0,0 +1 @@ +--keyfile-ro nonexist \ No newline at end of file diff --git a/tests/config/keyfile/nonexist_keyfile2.returncode b/tests/config/keyfile/nonexist_keyfile2.returncode new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile2.returncode @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/config/keyfile/nonexist_keyfile2.test.lua b/tests/config/keyfile/nonexist_keyfile2.test.lua new file mode 100644 index 000000000..bb2f98bf1 --- /dev/null +++ b/tests/config/keyfile/nonexist_keyfile2.test.lua @@ -0,0 +1,2 @@ +-- simulate building with KEYFILE_DEFAULT +trust_anchors.keyfile_default = "root1.keys" diff --git a/tests/config/keyfile/test.cfg b/tests/config/keyfile/test.cfg deleted file mode 100644 index 2f1ff20a5..000000000 --- a/tests/config/keyfile/test.cfg +++ /dev/null @@ -1,48 +0,0 @@ -dofile('./test_utils.lua') -- load test utilities - --- test fixtures - --- count warning message, fail with other than allowed message -warn_msg = {} -overriding_msg="[ ta ] warning: overriding previously set trust anchors for ." -warn_msg[overriding_msg] = 0 -function warn(fmt, ...) - msg = string.format(fmt, ...) - if warn_msg[msg] == nil then - fail("Not allowed warn message: %s", msg) - else - warn_msg[msg] = warn_msg[msg] + 1 - end -end - --- test -if pcall(trust_anchors.add_file, 'nonwriteable/root.keys', false) then - fail("Managed trsut anchor file in directory without write access should fail") -end - -if pcall(trust_anchors.add_file, 'nonexist.keys', true) then - fail("Nonexist unmanaged file should fail") -end - -trust_anchors.add_file('root2.keys', true) - -trust_anchors.add_file('root1.keys', true) -if warn_msg[overriding_msg] ~= 1 then - fail("Missing warning message for override: %s", overriding_msg) -end - -if trust_anchors.keysets['\0'][1].key_tag ~= 19036 then - fail("Not loaded or loaded trust anchor from root1.keys") -end - --- run test after processed config file -ev = event.after(0, function (ev) - -- check overiding trust anchor from cmdline args - if trust_anchors.keysets['\0'][1].key_tag ~= 20326 then - fail("Not loaded or loaded trust anchor from root2.keys") - end - if warn_msg[overriding_msg] ~= 2 then - fail("Missing warning message for override: %s", overriding_msg) - end - quit() -end) diff --git a/tests/config/runtest.sh b/tests/config/runtest.sh index 48dad22e2..11d9b460b 100755 --- a/tests/config/runtest.sh +++ b/tests/config/runtest.sh @@ -1,6 +1,7 @@ #!/bin/bash -e -export SOURCE_PATH=$(cd "$(dirname "$0")" && pwd -P) -export TEST_FILE=${2} +export SOURCE_PATH="$(cd "$(dirname "$0")" && pwd -P)" +export TEST_FILE="${2}" +TEST_DIR="$(dirname $TEST_FILE)" export TMP_RUNDIR="$(mktemp -d)" export KRESD_NO_LISTEN=1 function finish { @@ -8,5 +9,15 @@ function finish { } trap finish EXIT + echo "# $(basename ${TEST_FILE})" -${DEBUGGER} ${1} -f 1 -c ${SOURCE_PATH}/test.cfg "${TMP_RUNDIR}" \ No newline at end of file +cp -a "${TEST_DIR}/"* "${TMP_RUNDIR}/" +CMDLINE_ARGS="$(cat "${TEST_FILE%.test.lua}.args" 2>/dev/null || echo "")" +EXPECTED_RETURNCODE="$(cat "${TEST_FILE%.test.lua}.returncode" 2>/dev/null || echo 0)" +set +e +${DEBUGGER} ${1} -f 1 -c ${SOURCE_PATH}/test.cfg $CMDLINE_ARGS "${TMP_RUNDIR}" +RETCODE="$?" +if [ "$RETCODE" -ne "$EXPECTED_RETURNCODE" ]; then + echo "Expected return code '$EXPECTED_RETURNCODE' got '$RETCODE'." +fi +test "$RETCODE" -eq "$EXPECTED_RETURNCODE" diff --git a/tests/config/test_config.mk b/tests/config/test_config.mk index 28a34bfb4..58d7d1987 100644 --- a/tests/config/test_config.mk +++ b/tests/config/test_config.mk @@ -6,8 +6,10 @@ # Check return code of kresd. Passed test have to call quit(). tests_config := \ - $(wildcard modules/*/*_test.lua) \ - $(wildcard tests/config/*_test.lua) + $(wildcard modules/*/*.test.lua) \ + $(wildcard modules/*/*/*.test.lua) \ + $(wildcard tests/config/*.test.lua) \ + $(wildcard tests/config/*/*.test.lua) define make_config_test $(1): check-install-precond diff --git a/tests/config/tests/keyfile/nonexist_keyfile1.args b/tests/config/tests/keyfile/nonexist_keyfile1.args new file mode 100644 index 000000000..6fead684f --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile1.args @@ -0,0 +1 @@ +--keyfile-ro nonexist \ No newline at end of file diff --git a/tests/config/tests/keyfile/nonexist_keyfile1.returncode b/tests/config/tests/keyfile/nonexist_keyfile1.returncode new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile1.returncode @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/config/tests/keyfile/nonexist_keyfile1.test.lua b/tests/config/tests/keyfile/nonexist_keyfile1.test.lua new file mode 100644 index 000000000..be73f32f4 --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile1.test.lua @@ -0,0 +1,2 @@ +-- simulate building without KEYFILE_DEFAULT +trust_anchors.keyfile_default = nil diff --git a/tests/config/tests/keyfile/nonexist_keyfile2.args b/tests/config/tests/keyfile/nonexist_keyfile2.args new file mode 100644 index 000000000..6fead684f --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile2.args @@ -0,0 +1 @@ +--keyfile-ro nonexist \ No newline at end of file diff --git a/tests/config/tests/keyfile/nonexist_keyfile2.returncode b/tests/config/tests/keyfile/nonexist_keyfile2.returncode new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile2.returncode @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/config/tests/keyfile/nonexist_keyfile2.test.lua b/tests/config/tests/keyfile/nonexist_keyfile2.test.lua new file mode 100644 index 000000000..bb2f98bf1 --- /dev/null +++ b/tests/config/tests/keyfile/nonexist_keyfile2.test.lua @@ -0,0 +1,2 @@ +-- simulate building with KEYFILE_DEFAULT +trust_anchors.keyfile_default = "root1.keys" -- 2.47.3