Skip to content

Commit

Permalink
Add test script for server error cases
Browse files Browse the repository at this point in the history
  • Loading branch information
sfan5 committed Sep 28, 2024
1 parent 9e14f5f commit bca4457
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 1 deletion.
7 changes: 6 additions & 1 deletion .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ jobs:
- name: Install deps
run: |
source ./util/ci/common.sh
install_linux_deps clang-7 llvm
install_linux_deps clang-7 llvm-7
- name: Build
run: |
Expand All @@ -102,6 +102,11 @@ jobs:
run: |
./bin/minetest --run-unittests
# Do this here because we have ASan and error paths are sensitive to dangling pointers
- name: Test error cases
run: |
./util/test_error_cases.sh
# Current clang version
clang_18:
runs-on: ubuntu-24.04
Expand Down
1 change: 1 addition & 0 deletions util/helper_mod/error.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
error("intentional")
20 changes: 20 additions & 0 deletions util/helper_mod/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,24 @@ elseif mode == "mapgen" then
end
core.after(0, next_, 1)

elseif mode == "error" then

local n = tonumber(core.settings:get("error_type"))
local error_lua = core.get_modpath(core.get_current_modname()) .. "/error.lua"
if n == 1 then
print("=> error during startup <=")
error("intentional")
elseif n == 2 then
print("=> error on first step <=")
core.after(0, error, "intentional")
elseif n == 3 then
print("=> error in async script <=")
core.register_async_dofile(error_lua)
elseif n == 4 then
print("=> error in mapgen script <=")
core.register_mapgen_script(error_lua)
else
assert(false)
end

end
46 changes: 46 additions & 0 deletions util/test_error_cases.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
gameid=${gameid:-devtest}
minetest=$dir/../bin/minetest
testspath=$dir/../tests
conf_server=$testspath/server.conf
worldpath=$testspath/world

[ -e "$minetest" ] || { echo "executable $minetest missing"; exit 1; }

write_config () {
printf '%s\n' >"$conf_server" \
helper_mode=error mg_name=singlenode "$@"
}

run () {
timeout 10 "$@"
r=$?
echo "Exit status: $r"
[ $r -eq 124 ] && echo "(timed out)"
if [ $r -ne 1 ]; then
echo "-> Test failed"
exit 1
fi
}

rm -rf "$worldpath"
mkdir -p "$worldpath/worldmods"

ln -s "$dir/helper_mod" "$worldpath/worldmods/"

args=(--server --config "$conf_server" --world "$worldpath" --gameid $gameid)

# make sure we can tell apart sanitizer and minetest errors
export ASAN_OPTIONS="exitcode=42"
export MSAN_OPTIONS="exitcode=42"

# see helper_mod/init.lua for the different types
for n in $(seq 1 4); do
write_config error_type=$n
run "$minetest" "${args[@]}"
echo "---------------"
done

echo "All done."
exit 0

0 comments on commit bca4457

Please sign in to comment.