Files
feresaria/docs/native-soak-testing.md

67 lines
2.9 KiB
Markdown

# Native-client soak testing
The soak runner repeatedly opens and closes native Wayland clients, testing focus,
resize, column width, fullscreen, floating windows and workspace changes. Every
tenth iteration terminates a client abruptly. When a local malformed-client probe
is available, it sends malformed Wayland messages through three isolated connections.
The runner requires Ferese to disconnect each malformed client, then checks that
the compositor and authenticated IPC socket still respond. It also records
compositor RSS growth.
Build `ferese` and `feresectl` and start a disposable
[nested session](installation.md#preview-and-logs). Select its Wayland socket and
compositor PID explicitly, then run:
```sh
WAYLAND_DISPLAY=wayland-N FERESE_PID=PID ./scripts/soak-native.sh
```
Replace `wayland-N` and `PID` with the preview's values. Do not use the host socket
or rely on automatic PID selection when multiple sessions are running.
The default duration is 24 hours. A shorter validation run is:
```bash
WAYLAND_DISPLAY=wayland-N \
FERESE_PID=PID \
FERESE_SOAK_SECONDS=300 \
./scripts/soak-native.sh
```
Development probes are local tools and are not distributed in the Cargo workspace.
Set `FERESE_MALFORMED_CLIENT` to an existing executable to enable protocol checks.
If you explicitly configure a probe that does not exist, the runner reports an
error. Without a probe, it reports that protocol checks are skipped.
The local probe can also be run independently against a disposable Ferese session:
```bash
WAYLAND_DISPLAY=wayland-1 /path/to/ferese-malformed-client
target/debug/feresectl outputs
```
Do not point the malformed-client probe at the host compositor socket.
Environment controls:
- `FERESE_SOAK_SECONDS`: run duration, default `86400`;
- `FERESE_SOAK_DELAY`: delay between operations, default `0.15` seconds;
- `FERESE_SOAK_CLIENT`: native client executable, default `foot`;
- `FERESECTL`: path to `feresectl`, default `target/debug/feresectl`;
- `FERESE_MALFORMED_CLIENT`: path to the malformed protocol probe, default
`target/debug/ferese-malformed-client`;
- `FERESE_PID`: compositor PID; automatic lookup is only a fallback;
- `FERESE_SOAK_LOG`: result log, default `/tmp/ferese-soak-<pid>.log`.
- `FERESE_SOAK_MAX_RSS_GROWTH_KIB`: maximum RSS growth, default `131072`
(128 MiB);
- `FERESE_SOAK_MAX_FD_GROWTH`: maximum open-file-descriptor growth, default
`32`;
- `FERESE_SOAK_MAX_THREAD_GROWTH`: maximum thread growth, default `8`.
Run the same workload once with the nested backend and once from a direct DRM
session. Samples are taken after spawned clients are reaped. A passing run
requires the compositor to remain alive, IPC queries to succeed, and RSS, file
descriptor, and thread growth to stay within the declared budgets. Tighten the
defaults for release hardware when its normal cache behavior is known. Preserve
the soak log and the `ferese::render` summaries with the release artifacts.