forked from Mirrorlandia_minetest/minetest
Add utility script to stress-test mapgen
This commit is contained in:
parent
fc3460470a
commit
0e63f18a73
51
util/helper_mod/init.lua
Normal file
51
util/helper_mod/init.lua
Normal file
@ -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
util/helper_mod/mod.conf
Normal file
3
util/helper_mod/mod.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
name = helper_mod
|
||||||
|
description = Helper used by various test scripts
|
||||||
|
optional_depends = unittests
|
30
util/stress_mapgen.sh
Executable file
30
util/stress_mapgen.sh
Executable file
@ -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[@]}"
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
gameid=devtest
|
gameid=${gameid:-devtest}
|
||||||
minetest=$dir/../bin/minetest
|
minetest=$dir/../bin/minetest
|
||||||
testspath=$dir/../tests
|
testspath=$dir/../tests
|
||||||
conf_client1=$testspath/client1.conf
|
conf_client1=$testspath/client1.conf
|
||||||
@ -26,34 +26,17 @@ gdbrun () {
|
|||||||
[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }
|
[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }
|
||||||
|
|
||||||
rm -rf $worldpath
|
rm -rf $worldpath
|
||||||
mkdir -p $worldpath/worldmods/test
|
mkdir -p $worldpath/worldmods
|
||||||
|
|
||||||
printf '%s\n' >$testspath/client1.conf \
|
printf '%s\n' >$testspath/client1.conf \
|
||||||
video_driver=null name=client1 viewing_range=10 \
|
video_driver=null name=client1 viewing_range=10 \
|
||||||
enable_{sound,minimap,shaders}=false
|
enable_{sound,minimap,shaders}=false
|
||||||
|
|
||||||
printf '%s\n' >$testspath/server.conf \
|
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"
|
ln -s $dir/helper_mod $worldpath/worldmods/
|
||||||
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
|
|
||||||
|
|
||||||
echo "Starting server"
|
echo "Starting server"
|
||||||
gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
|
gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
|
||||||
|
Loading…
Reference in New Issue
Block a user