#!/usr/bin/env bash # Alle headless Tests. Aufruf: make test (oder: bash tests/run.sh) # Der Mehrspieler-Test braucht einen freien Port; 8000 ist auf Rechnern mit # laufendem Entwicklungsserver oft belegt, deshalb 8765. set -u GODOT="${GODOT:-$HOME/bin/godot}" PORT="${PORT:-8765}" TMP="$(mktemp -d)" cd "$(dirname "$0")/.." ergebnis=0 lauf() { # name, timeout, argumente... local name="$1"; local zeit="$2"; shift 2 echo "=== $name" timeout "$zeit" "$GODOT" --headless --path . "res://tests/$name.tscn" -- "$@" > "$TMP/$name.log" 2>&1 local rc=$? grep -E "^(OK |FEHL| |TEST:)" "$TMP/$name.log" local fehler; fehler=$(grep -c "SCRIPT ERROR" "$TMP/$name.log") [ "$fehler" -gt 0 ] && { echo " $fehler Skriptfehler im Log: $TMP/$name.log"; rc=1; } [ $rc -ne 0 ] && ergebnis=1 } lauf logik 200 lauf nochmal 120 lauf bots 900 2 echo "=== mehrspieler" rm -f "$TMP/code.txt" timeout 700 "$GODOT" --headless --path . res://tests/mp_start.tscn -- server "$PORT" > "$TMP/srv.log" 2>&1 & SRV=$! sleep 3 PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" timeout 680 "$GODOT" --headless --path . res://tests/mp_start.tscn -- host "$TMP/code.txt" > "$TMP/host.log" 2>&1 & H=$! sleep 2 PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" timeout 680 "$GODOT" --headless --path . res://tests/mp_start.tscn -- join "$TMP/code.txt" > "$TMP/join.log" 2>&1 & J=$! wait $H; rc_h=$? wait $J; rc_j=$? # Der Server beendet sich nach dem Ende selbst. Ihn abzuschiessen würde # seine letzten Zeilen verlieren - Ausgabe in eine Datei ist gepuffert. for _ in $(seq 1 40); do kill -0 $SRV 2>/dev/null || break; sleep 1; done kill $SRV 2>/dev/null; wait $SRV 2>/dev/null grep -E "^(OK |FEHL|SERVER:|TEST:)" "$TMP/host.log" "$TMP/join.log" "$TMP/srv.log" | sed 's|^.*/||' pfad=$(cat "$TMP/host.log" "$TMP/join.log" "$TMP/srv.log" | grep -c "Failed to get path") fehler=$(cat "$TMP/host.log" "$TMP/join.log" "$TMP/srv.log" | grep -c "SCRIPT ERROR") echo " RPC-Pfadfehler=$pfad Skriptfehler=$fehler (Logs: $TMP)" [ $rc_h -ne 0 ] || [ $rc_j -ne 0 ] || [ "$pfad" -gt 0 ] || [ "$fehler" -gt 0 ] && ergebnis=1 echo [ $ergebnis -eq 0 ] && echo "ALLE TESTS GRÜN" || echo "TESTS ROT (Logs: $TMP)" exit $ergebnis