diff options
author | sfan5 <sfan5@live.de> | 2021-04-21 18:21:12 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2021-05-05 22:49:44 +0200 |
commit | ba40b3950057c54609f8e4a56139563d30f8b84f (patch) | |
tree | 71d33346d53db1154be5878f9a1ae06ea30da2d0 /util/test_multiplayer.sh | |
parent | 08f1a7fbed4139a0147a067d38af353935d79b57 (diff) | |
download | minetest-ba40b3950057c54609f8e4a56139563d30f8b84f.tar.gz minetest-ba40b3950057c54609f8e4a56139563d30f8b84f.tar.bz2 minetest-ba40b3950057c54609f8e4a56139563d30f8b84f.zip |
Add basic client-server test to CI
Diffstat (limited to 'util/test_multiplayer.sh')
-rwxr-xr-x | util/test_multiplayer.sh | 91 |
1 files changed, 54 insertions, 37 deletions
diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index 176cf11d9..9fb894a30 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -3,41 +3,58 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" gameid=devtest minetest=$dir/../bin/minetest testspath=$dir/../tests -worldpath=$testspath/testworld_$gameid -configpath=$testspath/configs -logpath=$testspath/log -conf_server=$configpath/minetest.conf.multi.server -conf_client1=$configpath/minetest.conf.multi.client1 -conf_client2=$configpath/minetest.conf.multi.client2 -log_server=$logpath/server.log -log_client1=$logpath/client1.log -log_client2=$logpath/client2.log - -mkdir -p $worldpath -mkdir -p $configpath -mkdir -p $logpath - -echo -ne 'client1::shout,interact,settime,teleport,give -client2::shout,interact,settime,teleport,give -' > $worldpath/auth.txt - -echo -ne '' > $conf_server - -echo -ne '# client 1 config -screenW=500 -screenH=380 -name=client1 -viewing_range_nodes_min=10 -' > $conf_client1 - -echo -ne '# client 2 config -screenW=500 -screenH=380 -name=client2 -viewing_range_nodes_min=10 -' > $conf_client2 - -echo $(sleep 1; $minetest --disable-unittests --logfile $log_client1 --config $conf_client1 --go --address localhost) & -echo $(sleep 2; $minetest --disable-unittests --logfile $log_client2 --config $conf_client2 --go --address localhost) & -$minetest --disable-unittests --server --logfile $log_server --config $conf_server --world $worldpath --gameid $gameid +conf_client1=$testspath/client1.conf +conf_server=$testspath/server.conf +worldpath=$testspath/world +waitfor () { + n=30 + while [ $n -gt 0 ]; do + [ -f "$1" ] && return 0 + sleep 0.5 + ((n-=1)) + done + echo "Waiting for ${1##*/} timed out" + pkill -P $$ + exit 1 +} + +gdbrun () { + gdb -q -ex 'set confirm off' -ex 'r' -ex 'bt' -ex 'quit' --args "$@" +} + +[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; } + +rm -rf $worldpath +mkdir -p $worldpath/worldmods/test + +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 + +cat >$worldpath/worldmods/test/init.lua <<"LUA" +core.after(0, function() + io.close(io.open(core.get_worldpath() .. "/startup", "w")) +end) +core.register_on_joinplayer(function(player) + io.close(io.open(core.get_worldpath() .. "/player_joined", "w")) + core.request_shutdown("", false, 2) +end) +LUA + +echo "Starting server" +gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' & +waitfor $worldpath/startup + +echo "Starting client" +gdbrun $minetest --config $conf_client1 --go --address 127.0.0.1 2>&1 | sed -u 's/^/(client) /' & +waitfor $worldpath/player_joined + +echo "Waiting for client and server to exit" +wait + +echo "Success" +exit 0 |