Skip to content

Commit

Permalink
Add utility script to stress-test mapgen
Browse files Browse the repository at this point in the history
  • Loading branch information
sfan5 committed Jul 3, 2022
1 parent fc34604 commit 0e63f18
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 22 deletions.
51 changes: 51 additions & 0 deletions util/helper_mod/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
local mode = core.settings:get("helper_mode")

if mode == "devtest" then

-- Provide feedback to script by creating files in world path
core.after(0, function()
io.close(io.open(core.get_worldpath() .. "/startup", "w"))
end)
local function callback(test_ok)
if not test_ok then
io.close(io.open(core.get_worldpath() .. "/test_failure", "w"))
end
io.close(io.open(core.get_worldpath() .. "/done", "w"))
core.request_shutdown("", false, 2)
end
-- If tests are enabled exit when they're done, otherwise exit on player join
if core.settings:get_bool("devtest_unittests_autostart") and core.global_exists("unittests") then
unittests.on_finished = callback
else
core.register_on_joinplayer(function() callback(true) end)
end

elseif mode == "mapgen" then

-- Stress-test mapgen by constantly generating new area
local csize = tonumber(core.settings:get("chunksize")) * core.MAP_BLOCKSIZE
local MINP, MAXP = vector.new(0, -csize, 0), vector.new(csize*3, csize*2, csize)
local DIR = "x"
local pstart = vector.new(0, 0, 0)
local next_, callback
next_ = function(arg)
print("emerging " .. core.pos_to_string(pstart))
core.emerge_area(
vector.add(pstart, MINP), vector.add(pstart, MAXP),
callback, arg
)
end
local trig = {}
callback = function(blockpos, action, calls_rem, n)
if action == core.EMERGE_CANCELLED or action == core.EMERGE_ERRORED then
return
end
if calls_rem <= 20 and not trig[n] then
trig[n] = true
pstart[DIR] = pstart[DIR] + (MAXP[DIR] - MINP[DIR])
next_(n + 1)
end
end
core.after(0, next_, 1)

end
3 changes: 3 additions & 0 deletions util/helper_mod/mod.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = helper_mod
description = Helper used by various test scripts
optional_depends = unittests
30 changes: 30 additions & 0 deletions util/stress_mapgen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/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

run () {
if [ -n "$PERF" ]; then
perf record -z --call-graph dwarf -- "$@"
else
"$@"
fi
}

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

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

settings=(sqlite_synchronous=0 helper_mode=mapgen)
[ -n "$PROFILER" ] && settings+=(profiler_print_interval=15)
printf '%s\n' "${settings[@]}" >$testspath/server.conf \

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

args=(--config $conf_server --world $worldpath --gameid $gameid)
[ -n "$PROFILER" ] && args+=(--verbose)
run $minetest --server "${args[@]}"
27 changes: 5 additions & 22 deletions util/test_multiplayer.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
gameid=devtest
gameid=${gameid:-devtest}
minetest=$dir/../bin/minetest
testspath=$dir/../tests
conf_client1=$testspath/client1.conf
Expand All @@ -26,34 +26,17 @@ gdbrun () {
[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }

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

printf '%s\n' >$testspath/client1.conf \
video_driver=null name=client1 viewing_range=10 \
enable_{sound,minimap,shaders}=false

printf '%s\n' >$testspath/server.conf \
max_block_send_distance=1 devtest_unittests_autostart=true
max_block_send_distance=1 devtest_unittests_autostart=true \
helper_mode=devtest

cat >$worldpath/worldmods/test/init.lua <<"LUA"
core.after(0, function()
io.close(io.open(core.get_worldpath() .. "/startup", "w"))
end)
local function callback(test_ok)
if not test_ok then
io.close(io.open(core.get_worldpath() .. "/test_failure", "w"))
end
io.close(io.open(core.get_worldpath() .. "/done", "w"))
core.request_shutdown("", false, 2)
end
if core.settings:get_bool("devtest_unittests_autostart") then
unittests.on_finished = callback
else
core.register_on_joinplayer(function() callback(true) end)
end
LUA
printf '%s\n' >$worldpath/worldmods/test/mod.conf \
name=test optional_depends=unittests
ln -s $dir/helper_mod $worldpath/worldmods/

echo "Starting server"
gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
Expand Down

0 comments on commit 0e63f18

Please sign in to comment.