scopedvr-map-editor/tests/run_platzierung_identitaet.sh

77 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# Identitäts-Vertrag PLATZIERUNG (Karte t_e166e656): dieselben gekippten
# Objekte (15°/45°) laufen durch ALLE DREI Loader — Editor (KolliderBau),
# Quest-Client (svmap_world) und Match-Server (svmap_loader). Die Proben
# drucken `IDENT <name>=<wert>`-Zeilen; der Runner verlangt IDENTISCHE
# Zeilen über alle drei Projekte (Rotations-Euler + konservative AABB).
#
# Environment:
# GODOT Godot-Binary (Default: $HOME/bin/godot4, dann $PATH)
# SVR_CLIENT_DIR Client-Projektordner (Default: ../scopedvr-client)
# SVR_SERVER_DIR Server-Projektordner (Default: ../scopedvr-match-server)
# Exit 0 = Identität bestätigt.
set -u
if [ -n "${GODOT:-}" ]; then :
elif [ -x "$HOME/bin/godot4" ]; then
GODOT="$HOME/bin/godot4"
elif command -v godot4 >/dev/null 2>&1; then
GODOT=$(command -v godot4)
else
echo "FAIL: Kein Godot gefunden — GODOT=<pfad> setzen." >&2
exit 1
fi
EDITOR_DIR="$(cd "$(dirname "$0")/.." && pwd)"
CLIENT_DIR="${SVR_CLIENT_DIR:-$EDITOR_DIR/../scopedvr-client}"
SERVER_DIR="${SVR_SERVER_DIR:-$EDITOR_DIR/../scopedvr-match-server}"
for d in "$CLIENT_DIR" "$SERVER_DIR"; do
if [ ! -f "$d/project.godot" ]; then
echo "FAIL: Projekt nicht gefunden: $d" >&2
exit 1
fi
done
export GODOT_SILENCE_ROOT_WARNING=1
# Server-Projekt: im -s-Modus NICHT hosten (Testclient-Modus, wie test_svmap).
export MATCHD_NO_HOST=1
LOGDIR="${SVR_PLATZ_LOGDIR:-/tmp/svr_platz_ident_logs_$$}"
mkdir -p "$LOGDIR"
PROBE="$EDITOR_DIR/tests/probe_platzierung_ident.gd"
fail=0
for name in editor client server; do
case "$name" in
editor) DIR="$EDITOR_DIR" ;;
client) DIR="$CLIENT_DIR" ;;
server) DIR="$SERVER_DIR" ;;
esac
echo "== Identitäts-Probe: $name ($DIR) =="
"$GODOT" --headless --path "$DIR" -s "$PROBE" > "$LOGDIR/$name.log" 2>&1
code=$?
grep -E "^IDENT [a-z_0-9]+=" "$LOGDIR/$name.log" > "$LOGDIR/$name.ident"
if [ $code -ne 0 ]; then
fail=1
echo "FAIL: $name-Probe rot (exit=$code):" >&2
cat "$LOGDIR/$name.log" >&2
fi
done
echo "== Vergleich =="
if ! diff -u "$LOGDIR/editor.ident" "$LOGDIR/client.ident"; then
echo "FAIL: Editor ↔ Client weichen ab." >&2
fail=1
fi
if ! diff -u "$LOGDIR/editor.ident" "$LOGDIR/server.ident"; then
echo "FAIL: Editor ↔ Server weichen ab." >&2
fail=1
fi
n=$(wc -l < "$LOGDIR/editor.ident")
if [ "$n" -lt 6 ]; then
echo "FAIL: Zu wenige IDENT-Zeilen ($n) — Proben gecrasht." >&2
fail=1
fi
if [ $fail -eq 0 ]; then
echo "ALL OK — Identität Editor = Client = Server ($n Zeilen)."
exit 0
fi
exit 1