Files
tactical-shooter/tests/RUN_TESTS.sh
T
shawn e7299b17e9 Phase 7: netfox + godot-jolt stack upgrade
Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable

Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)

New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting

Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
2026-07-02 17:39:22 -04:00

125 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════════════════════
# Tactical Shooter — Netcode Bug Bash Test Runner
#
# Runs all test suites in headless Godot and reports results.
# Usage: ./tests/RUN_TESTS.sh
#
# Requirements:
# - Godot 4+ executable in PATH, or set GODOT_BIN env var
# ═══════════════════════════════════════════════════════════════════════════
set -euo pipefail
# Config
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
GODOT="${GODOT_BIN:-godot}"
# ANSI colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
BOLD='\033[1m'
TESTS=(
"test_anti_cheat.gd"
"test_net_sim.gd"
"test_rcon_edge_cases.gd"
)
PASS_COUNT=0
FAIL_COUNT=0
SKIP_COUNT=0
RESULTS=()
echo ""
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo -e "${CYAN} Tactical Shooter — Netcode Bug Bash Runner${NC}"
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo ""
echo " Project: $PROJECT_DIR"
echo " Godot: $(which "$GODOT" 2>/dev/null || echo 'NOT FOUND')"
echo ""
# Check godot is available
if ! command -v "$GODOT" &>/dev/null; then
echo -e "${RED}ERROR: Godot executable '$GODOT' not found in PATH.${NC}"
echo " Set GODOT_BIN env var to the godot binary path, or install Godot."
echo ""
echo " Example:"
echo " export GODOT_BIN=/usr/local/bin/godot"
echo " $0"
echo ""
exit 1
fi
# Run each test
for test_file in "${TESTS[@]}"; do
test_path="$SCRIPT_DIR/$test_file"
test_name="${test_file%.gd}"
if [ ! -f "$test_path" ]; then
echo -e "${YELLOW} [SKIP] $test_name — file not found${NC}"
SKIP_COUNT=$((SKIP_COUNT + 1))
RESULTS+=("SKIP|$test_name|file not found")
continue
fi
echo -e "${BOLD}Running: $test_name${NC}"
echo " $GODOT --headless --script $test_path"
echo ""
# Run the test — capture output and exit code
set +e
output=$("$GODOT" --headless --script "$test_path" 2>&1)
exit_code=$?
set -e
# Print output (indented)
echo "$output" | sed 's/^/ /'
if [ $exit_code -eq 0 ]; then
echo -e "${GREEN} ✓ PASS ($test_name)${NC}"
PASS_COUNT=$((PASS_COUNT + 1))
RESULTS+=("PASS|$test_name|")
else
# Extract failure info from output
fail_lines=$(echo "$output" | grep -c "\[FAIL\]" || true)
echo -e "${RED} ✗ FAIL ($test_name) — $fail_lines assertion(s) failed${NC}"
FAIL_COUNT=$((FAIL_COUNT + 1))
RESULTS+=("FAIL|$test_name|$fail_lines failures")
fi
echo ""
echo "──────────────────────────────────────"
echo ""
done
# Summary
echo ""
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo -e "${CYAN} Test Run Complete${NC}"
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo ""
for result in "${RESULTS[@]}"; do
IFS='|' read -r status name info <<< "$result"
case "$status" in
PASS) echo -e " ${GREEN}${NC} $name" ;;
FAIL) echo -e " ${RED}${NC} $name$info" ;;
SKIP) echo -e " ${YELLOW}${NC} $name ($info)" ;;
esac
done
echo ""
echo -e " ${BOLD}${GREEN}$PASS_COUNT passed${NC}, ${BOLD}${RED}$FAIL_COUNT failed${NC}, ${YELLOW}$SKIP_COUNT skipped${NC}"
echo ""
if [ $FAIL_COUNT -gt 0 ]; then
exit 1
fi
exit 0