From 0f51edcb1f724d3e1c13ddd608441770f3a1730b Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 18 Feb 2025 19:10:46 +0100 Subject: [PATCH] Extend functional tests --- .github/workflows/build.yml | 6 +-- util/ci/script.sh | 12 ----- util/ci/test.sh | 100 ++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 16 deletions(-) create mode 100755 util/ci/test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 141b1f0..90c16eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,8 +37,7 @@ jobs: - name: Test run: | - source util/ci/script.sh - do_functional_test + ./util/ci/test.sh clang: runs-on: ubuntu-22.04 @@ -59,5 +58,4 @@ jobs: - name: Test run: | - source util/ci/script.sh - do_functional_test + ./util/ci/test.sh diff --git a/util/ci/script.sh b/util/ci/script.sh index b6a3ae1..5a6efdf 100755 --- a/util/ci/script.sh +++ b/util/ci/script.sh @@ -18,15 +18,3 @@ run_build() { make -j2 } - -do_functional_test() { - mkdir testmap - echo "backend = sqlite3" >testmap/world.mt - sqlite3 testmap/map.sqlite <testmap/world.mt + echo "default:stone 255 0 0" >testmap/colors.txt + rm -f testmap/map.sqlite + printf '%s\n' \ + "CREATE TABLE d(d BLOB);" \ + "INSERT INTO d VALUES (x'$(cat util/ci/test_block)');" \ + "$1" \ + "DROP TABLE d;" | sqlite3 testmap/map.sqlite +} + +# check that a non-empty ($1=1) or empty map ($1=0) was written with the args ($2 ...) +checkmap () { + local c=$1 + shift + rm -f map.png + ./minetestmapper --noemptyimage -i ./testmap -o map.png "$@" + if [[ $c -eq 1 && ! -f map.png ]]; then + echo "Output not generated!" + exit 1 + elif [[ $c -eq 0 && -f map.png ]]; then + echo "Output was generated, none expected!" + exit 1 + fi + echo "Passed." +} + +# this is missing the indices and primary keys but that doesn't matter +schema_old="CREATE TABLE blocks(pos INT, data BLOB);" +schema_new="CREATE TABLE blocks(x INT, y INT, z INT, data BLOB);" + +msg "old schema" +writemap " +$schema_old +INSERT INTO blocks SELECT $(encodepos 0 1 0), d FROM d; +" +checkmap 1 + +msg "old schema: Y limit" +# Note: test data contains a plane at y = 17 an a single node at y = 18 +checkmap 1 --max-y 17 +checkmap 0 --max-y 16 +checkmap 1 --min-y 18 +checkmap 0 --min-y 19 + +msg "old schema: all limits" +# fill the map with more blocks and then request just a single one to be rendered +# this will run through internal consistency asserts. +writemap " +$schema_old +INSERT INTO blocks SELECT $(encodepos 2 2 2), d FROM d; +INSERT INTO blocks SELECT $(encodepos 1 2 2), d FROM d; +INSERT INTO blocks SELECT $(encodepos 2 1 2), d FROM d; +INSERT INTO blocks SELECT $(encodepos 2 2 1), d FROM d; +INSERT INTO blocks SELECT $(encodepos 3 2 2), d FROM d; +INSERT INTO blocks SELECT $(encodepos 2 3 2), d FROM d; +INSERT INTO blocks SELECT $(encodepos 2 2 3), d FROM d; +" +checkmap 1 --geometry 32:32+16+16 --min-y 32 --max-y $((32+16-1)) + +msg "new schema" +writemap " +$schema_new +INSERT INTO blocks SELECT 0, 1, 0, d FROM d; +" +checkmap 1 + +msg "new schema: all limits" +# same as above +writemap " +$schema_new +INSERT INTO blocks SELECT 2, 2, 2, d FROM d; +INSERT INTO blocks SELECT 1, 2, 2, d FROM d; +INSERT INTO blocks SELECT 2, 1, 2, d FROM d; +INSERT INTO blocks SELECT 2, 2, 1, d FROM d; +INSERT INTO blocks SELECT 3, 2, 2, d FROM d; +INSERT INTO blocks SELECT 2, 3, 2, d FROM d; +INSERT INTO blocks SELECT 2, 2, 3, d FROM d; +" +checkmap 1 --geometry 32:32+16+16 --min-y 32 --max-y $((32+16-1)) + +msg "new schema: empty map" +writemap "$schema_new" +checkmap 0