Persist build extra_files for Build Manager history, print dashboard login on every start, add libp2p for Mesh P2P forge, defer WebSocket until login, and split devrun.bat from LAUNCH.bat with USB deck auto-detection.
3.1 KiB
AetherForge Test Suite
One command runs everything:
test.bat
Or with PowerShell directly:
.\scripts\test-suite.ps1
Phases
| Phase | What it runs | Location |
|---|---|---|
| 1 | Go server unit + integration tests | server/ |
| 2 | Go agent tests | agent/ |
| 3 | Fusion module compile check | fusion/ |
| 4 | Frontend unit tests (Vitest) | server/web/ |
| 5 | Frontend production build | server/web/ |
| 6 | Server binary compile | server/ |
| 7 | Agent binary compile (Windows) | agent/ → bin/install-worker.exe |
| 7b | Agent cross-compile (linux/darwin) | agent/ → bin/install-worker-* |
| 8 | E2E smoke (Playwright) | server/web/e2e/ — starts temp server on :18989 |
Phases 5–7 and 7b are skipped with -SkipBuild. Phase 8 is skipped with -SkipE2E.
Run individual suites
cd server && go test ./...
cd agent && go test ./...
cd server\web && npm test
cd server\web && npm run test:e2e
E2E only (server already running)
E2E credentials match server/internal/api/integration_test.go (testuser / testpass). Seed
users.json in the server data directory before first start, or the server generates a random
admin password instead.
set AETHERFORGE_E2E_USER=testuser
set AETHERFORGE_E2E_PASS=testpass
powershell -NoProfile -Command "[IO.File]::WriteAllText('data\\users.json','{\"testuser\":\"testpass\"}')"
set AETHERFORGE_URL=http://127.0.0.1:8989
cd server\web && npm run test:e2e
test.bat phase 8 seeds users.json automatically in a temp data dir. Override creds with
AETHERFORGE_E2E_USER / AETHERFORGE_E2E_PASS (used by Playwright, test-suite.ps1, and
scripts/smoke-test.ps1).
Adding tests
- Go:
*_test.gonext to the code under test - Frontend:
src/**/*.test.ts(Vitest) - E2E:
server/web/e2e/*.spec.ts(Playwright)
Coverage areas: forge/fusion, auth, DB, pool reconnect, API routes, fleet filters, preflight validation, media crypto roundtrip, dashboard login smoke, remote actions UI (offline gating).
e2e/remote-actions.spec.ts mocks the dashboard WebSocket init payload (AgentsPage prefers live WS fleet data over REST). Playwright HTTP page.route alone cannot intercept WebSockets in this toolchain version.
Agent logs (not a missing API)
There is no dedicated REST endpoint to push agent log files. Logs reach the dashboard by design through:
get_logcommand — Fleet Roster → Remote Control → Fetch Log (orGET /api/v1/agents/{id}/log?refresh=1triggers the command and returns cached tail)upload_logAI tool — when AI autonomy is enabled, the agent reports log content via/api/v1/agent/reportafter an Ollama tool call
Unit tests cover AgentRemoteActions offline gating in components.test.tsx; Playwright e2e/remote-actions.spec.ts mocks an offline agent and asserts disabled buttons.
Frontend types (types/index.ts)
TypeScript interfaces in server/web/src/types/ are compile-time contracts only — no runtime JSON schema guards. Validation lives in forms, forge preflight, and server-side handlers.