101 lines
4.8 KiB
Markdown
101 lines
4.8 KiB
Markdown
# RVBox implementation test workflow
|
|
|
|
All Go, protobuf, and harness work runs in the pinned toolchain container. No
|
|
host Go installation is used.
|
|
|
|
Run the normal pre-commit gate with:
|
|
|
|
```sh
|
|
make verify
|
|
```
|
|
|
|
Run focused unit tests with:
|
|
|
|
```sh
|
|
scripts/test-unit --package ./internal/domain --run UUIDv7 --race
|
|
```
|
|
|
|
The integration harness provides the Phase 0 `sample` suite, the incremental
|
|
Phase 2 `store` suite, and the incremental Phase 3 `server-session` suite.
|
|
The resumable E2E harness adds `smoke`, `script`, `recovery`, and `all`
|
|
scenarios. Each run writes its manifest and run ID before starting work.
|
|
The storage suite uses a real temporary SQLite database in WAL mode and a real
|
|
segment/audit filesystem. The session suite uses a real HTTP/WebSocket listener,
|
|
binary protobuf frames, SQLite fencing, and the race detector; neither mocks its
|
|
respective durability or wire boundary:
|
|
|
|
```sh
|
|
scripts/test-env doctor
|
|
scripts/test-integration --suite sample --run-id my-sample
|
|
scripts/test-env status --run-id my-sample
|
|
scripts/test-env collect --run-id my-sample
|
|
scripts/test-env reset --run-id my-sample
|
|
scripts/test-env reuse --run-id my-sample
|
|
scripts/test-integration --suite sample --run-id my-sample --resume
|
|
scripts/test-env reset --run-id my-sample
|
|
scripts/test-env purge --run-id my-sample
|
|
|
|
scripts/test-integration --suite store --run-id store-smoke
|
|
scripts/test-env logs --run-id store-smoke
|
|
scripts/test-env collect --run-id store-smoke
|
|
scripts/test-env reset --run-id store-smoke
|
|
scripts/test-env purge --run-id store-smoke
|
|
|
|
scripts/test-integration --suite server-session --run-id session-smoke
|
|
scripts/test-env logs --run-id session-smoke
|
|
scripts/test-env collect --run-id session-smoke
|
|
scripts/test-env reset --run-id session-smoke
|
|
scripts/test-env purge --run-id session-smoke
|
|
|
|
scripts/test-e2e --scenario smoke --run-id e2e-smoke
|
|
scripts/test-env status --run-id e2e-smoke
|
|
scripts/test-env recover --run-id e2e-smoke
|
|
scripts/test-e2e --scenario smoke --run-id e2e-smoke --resume
|
|
scripts/test-env reset --run-id e2e-smoke
|
|
scripts/test-env purge --run-id e2e-smoke
|
|
```
|
|
|
|
The client runtime unit lane also exercises a real child process through the
|
|
portable supervisor adapter. `internal/client/agent/executor_test.go` verifies
|
|
that command text is accepted once, output is journaled, lifecycle/terminal
|
|
events are durable, and a script cannot launch before its contiguous upload is
|
|
committed. The Windows build uses the same executor contract with the
|
|
platform-native adapter: a verified token is selected, the child is created
|
|
suspended, assigned to a kill-on-close Job, and held behind an authenticated
|
|
per-command launcher pipe. The daemon records `launch_prepared`, then the
|
|
durable `launch_authorized` transition sends the launcher's release frame; the
|
|
launcher resumes the shell only after that acknowledgement. The durable
|
|
`launch_phase` barrier is recovered as `interrupted` after a daemon restart, so
|
|
an uncertain release is never redispatched.
|
|
|
|
The Windows artifact is linked with the GUI subsystem (`-H=windowsgui`) so
|
|
service, launcher, and tray startup do not flash a console. Human-facing modes
|
|
still attach to a parent console explicitly when one exists.
|
|
|
|
Suite output is capped at 1 MiB and stored as `artifacts/suite.log`. A failed
|
|
run remains inspectable and can be moved back to `ready` with `recover`, then
|
|
resumed with the same run ID and deterministic shuffle seed. Test-run cleanup
|
|
never removes the shared Go module or build-cache volumes.
|
|
|
|
Each run owns only `.test-runs/<run-id>` and resources explicitly recorded in
|
|
that run's versioned manifest. The journal is append-only and fsynced. `purge`
|
|
validates the run ID and manifest identity, refuses symlink targets or manifests
|
|
that still list runtime resources, and then removes only that exact run. Purged
|
|
artifacts are not recoverable. Dependency cache volumes are never part of run
|
|
cleanup.
|
|
|
|
`test/coverage.toml` is the incremental requirement-to-test inventory. The
|
|
`make verify` lint stage checks unique stable IDs and verifies every implemented
|
|
test reference against source. A resettable Windows smoke VM is now available.
|
|
The exact headless VirtualBox/Guest Control adapter is
|
|
`scripts/windows/test-host.ps1`; it takes the VM name, baseline snapshot, and
|
|
guest identity/password-file only from host environment variables, acquires an
|
|
exclusive lease, and never writes secrets to the repository. Set
|
|
`RVBOX_WINDOWS_GUEST_PASSWORD_FILE` to a mode-600 file outside the repository;
|
|
the adapter passes it with VirtualBox `--passwordfile` and never accepts an
|
|
inline password. Use `Prepare`, `Run`,
|
|
`Collect`, `Stop`, and `Reset` in that order for a native run. The VM is the
|
|
minimum smoke lane, so deferred native multi-session/ambiguous-session, Server
|
|
Core, and older-build entries remain explicitly blocked until their own
|
|
fixtures exist. Wine or a protocol stub is not treated as equivalent coverage.
|