diff options
author | sfan5 <sfan5@live.de> | 2022-07-04 01:06:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-04 01:06:57 +0200 |
commit | 0e63f18a73754ebf68ebf286a95af222ab058538 (patch) | |
tree | 5fd649939acf0dee5761cc8bf5b8b91dd821b3c5 | |
parent | fc3460470aec8d73317d2b35edf195bfeec2852c (diff) | |
download | minetest-0e63f18a73754ebf68ebf286a95af222ab058538.tar.gz minetest-0e63f18a73754ebf68ebf286a95af222ab058538.tar.bz2 minetest-0e63f18a73754ebf68ebf286a95af222ab058538.zip |
Add utility script to stress-test mapgen
-rw-r--r-- | util/helper_mod/init.lua | 51 | ||||
-rw-r--r-- | util/helper_mod/mod.conf | 3 | ||||
-rwxr-xr-x | util/stress_mapgen.sh | 30 | ||||
-rwxr-xr-x | util/test_multiplayer.sh | 27 |
4 files changed, 89 insertions, 22 deletions
diff --git a/util/helper_mod/init.lua b/util/helper_mod/init.lua new file mode 100644 index 000000000..4da832ed7 --- /dev/null +++ b/util/helper_mod/init.lua @@ -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 diff --git a/util/helper_mod/mod.conf b/util/helper_mod/mod.conf new file mode 100644 index 000000000..efdd9eaf3 --- /dev/null +++ b/util/helper_mod/mod.conf @@ -0,0 +1,3 @@ +name = helper_mod +description = Helper used by various test scripts +optional_depends = unittests diff --git a/util/stress_mapgen.sh b/util/stress_mapgen.sh new file mode 100755 index 000000000..ba152dd80 --- /dev/null +++ b/util/stress_mapgen.sh @@ -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[@]}" diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index 5ffc044e0..e0d0ec742 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -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 @@ -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) /' & |