#!/usr/bin/env bash set -ex ROOT="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT" TEST_DB=${MUD_TEST_DB:-./mudserver.db.test} SERVER_PID= ssh_mud() { set +e ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 "$@" r=$? set -e [[ $r -eq 0 || $r -eq 255 ]] || exit 1 } cleanup() { if [ -n "${SERVER_PID:-}" ]; then kill $SERVER_PID 2>/dev/null || true fi } trap cleanup EXIT cargo build RUST_LOG=info ./target/debug/mudserver -d "$TEST_DB" & SERVER_PID=$! bash "$ROOT/scripts/ci/wait-for-tcp.sh" 127.0.0.1 2222 ssh_mud smoketest@localhost <<'EOF' 1 1 look stats go south go down go north talk barkeep go south go south examine thief attack thief flee quit EOF ssh_mud smoketest@localhost <<'EOF' > weather_test.out go south go down look quit EOF if ! grep -q "The sky is\|raining\|storm\|snow\|fog" weather_test.out; then echo "Error: Weather info not found in look output" cat weather_test.out exit 1 fi if ! grep -q "\[Night\]\|\[Morning\]\|\[Afternoon\]\|\[Evening\]" weather_test.out; then echo "Error: Time of day info not found in look output" cat weather_test.out exit 1 fi rm weather_test.out ssh_mud smoketest@localhost <<'EOF' look stats quit EOF ./target/debug/mudtool -d "$TEST_DB" players list ./target/debug/mudtool -d "$TEST_DB" players set-admin smoketest true ./target/debug/mudtool -d "$TEST_DB" players show smoketest ./target/debug/mudtool -d "$TEST_DB" settings set registration_open false ./target/debug/mudtool -d "$TEST_DB" settings list ssh_mud smoketest@localhost <<'EOF' admin help admin list admin registration on admin info smoketest quit EOF ./target/debug/mudtool -d "$TEST_DB" settings set registration_open false ssh_mud newplayer@localhost <<'EOF' quit EOF ./target/debug/mudtool -d "$TEST_DB" settings set registration_open true ./target/debug/mudtool -d "$TEST_DB" players delete smoketest ( echo "1" echo "1" echo "go south" echo "go down" echo "go south" echo "attack thief" sleep 8 echo "stats" echo "quit" ) | ssh_mud smoketest@localhost ssh_mud rpctest@localhost <<'EOF' 1 1 quit EOF echo '{"_jsonrpc": "2.0", "method": "login", "params": {"username": "rpctest"}, "id": 1}' | nc -w 2 localhost 2223 > rpc_resp.json echo '{"_jsonrpc": "2.0", "method": "list_commands", "params": {}, "id": 2}' | nc -w 2 localhost 2223 >> rpc_resp.json if ! grep -q '"shop"' rpc_resp.json; then echo "Error: 'shop' command missing from JSON-RPC list_commands" cat rpc_resp.json exit 1 fi rm rpc_resp.json ./target/debug/mudtool -d "$TEST_DB" settings set registration_open true ./target/debug/mudtool -d "$TEST_DB" players delete smoketest ./target/debug/mudtool -d "$TEST_DB" players delete rpctest