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.
80 lines
3.1 KiB
Markdown
80 lines
3.1 KiB
Markdown
# AetherForge Test Suite
|
||
|
||
One command runs everything:
|
||
|
||
```bat
|
||
test.bat
|
||
```
|
||
|
||
Or with PowerShell directly:
|
||
|
||
```powershell
|
||
.\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
|
||
|
||
```bat
|
||
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.
|
||
|
||
```bat
|
||
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.go` next 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_log` command** — Fleet Roster → Remote Control → Fetch Log (or `GET /api/v1/agents/{id}/log?refresh=1` triggers the command and returns cached tail)
|
||
- **`upload_log` AI tool** — when AI autonomy is enabled, the agent reports log content via `/api/v1/agent/report` after 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.
|