Update TESTING.md to include prerequisites for running tests, specifying the need for the Rust toolchain and SSH client.
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 0s

This commit is contained in:
AI Agent
2026-03-14 18:06:54 -06:00
parent 09ff51c2b0
commit 9c286823e6
3 changed files with 105 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
name: Smoke tests
on: [push, pull_request]
jobs:
smoke:
name: Build and smoke test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: sudo apt install -y cargo
- name: clone repository
action: actions/checkout@v4
- name: Build
run: cargo build
- name: Run smoke tests
run: ./run-tests.sh

View File

@@ -8,6 +8,8 @@
This builds the server and mudtool, starts the server with a temporary DB, runs the smoke test below (new player, persistence, admin, registration gate, combat), then cleans up. Use it locally to match what Gitea Actions run on push/pull_request. The script uses `MUD_TEST_DB` (default `./mudserver.db.test`) so it does not overwrite your normal `mudserver.db`.
Prerequisites: Rust toolchain (cargo), ssh client. In CI, Rust is installed by the workflow.
---
Run through the checks below before every commit to ensure consistent feature coverage.

82
run-tests.sh Executable file
View File

@@ -0,0 +1,82 @@
#!/usr/bin/env bash
set -e
TEST_DB=${MUD_TEST_DB:-./mudserver.db.test}
SERVER_PID=
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=$!
sleep 2
# Test 1: New player creation + basic commands
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF'
1
1
look
stats
go north
talk barkeep
go south
go south
examine thief
attack thief
flee
quit
EOF
# Test 2: Persistence - reconnect
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF'
look
stats
quit
EOF
# Test 3: Admin via mudtool (use same test DB)
./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
# Test 4: Admin commands in-game
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF'
admin help
admin list
admin registration on
admin info smoketest
quit
EOF
# Test 5: Registration gate
./target/debug/mudtool -d "$TEST_DB" settings set registration_open false
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 newplayer@localhost <<'EOF'
quit
EOF
# Test 6: Tick-based combat (connect and wait for ticks)
./target/debug/mudtool -d "$TEST_DB" settings set registration_open true
./target/debug/mudtool -d "$TEST_DB" players delete smoketest
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF'
1
1
go south
go south
attack thief
EOF
sleep 8
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 smoketest@localhost <<'EOF'
stats
quit
EOF
# Cleanup (trap handles server kill)
./target/debug/mudtool -d "$TEST_DB" settings set registration_open true
./target/debug/mudtool -d "$TEST_DB" players delete smoketest