Go¶
Stove treats Go as a first-class application under test. The same Stove DSL — http {}, postgresql {}, kafka {}, tracing {}, dashboard {} — drives a Go service end to end. Distributed traces, dashboard streams, and integration coverage all flow through the standard Stove pipeline.
The full source is at recipes/process/golang/go-showcase. One showcase, two AUT modes — pick the one that matches what you want to test.
Pick a mode¶
| Mode | Starter | When to use | Trade-off |
|---|---|---|---|
| Process | stove-process (goApp / processApp) |
Fast local iteration, direct binary run, easiest debugging | You manage host runtime/binary alignment |
| Container | stove-container (containerApp) |
CI parity with the production image, environment isolation | Image build adds setup cost |
Rule of thumb: start with process mode for fast feedback, then add container mode when you want image-level confidence in CI. The same Kotlin tests run against either.
-
Process Mode
Run the Go binary directly. Fastest iteration loop.
-
Container Mode
Run the production Docker image. CI-grade parity.
What you get out of the box¶
- HTTP, PostgreSQL, Kafka, MongoDB, Redis, … — every Stove system works against a Go AUT
- Distributed tracing via OpenTelemetry — spans from Go appear in the same trace tree as the test
- Dashboard — the Go run streams to
http://localhost:4040like any JVM run - MCP triage — failed Go runs are queryable through the
stoveCLI MCP server - Kafka assertions —
shouldBePublished/shouldBeConsumedwork for Go via thestove-kafkabridge (sarama, franz-go, segmentio, or any client via the core API) - Integration coverage —
go build -cover+GOCOVERDIRcollected on graceful shutdown, with HTML/summary reports
Adapting for other languages¶
The same model works for any language. Replace the Go-specific parts (build step, OTel SDK, Kafka bridge):
| Part | Go | Python | Node.js | Rust |
|---|---|---|---|---|
| Build step | go build |
(none or pip install) | npm install && npm run build |
cargo build |
| AUT runner | goApp() / containerApp() |
processApp() / containerApp() |
processApp() / containerApp() |
processApp() / containerApp() |
| OTel HTTP | otelhttp.NewHandler |
opentelemetry-instrumentation-flask |
@opentelemetry/instrumentation-http |
tracing-opentelemetry |
| OTel DB | otelsql |
opentelemetry-instrumentation-psycopg2 |
@opentelemetry/instrumentation-pg |
tracing-opentelemetry |
| Kafka assertions | stove-kafka bridge |
(bridge library needed) | (bridge library needed) | (bridge library needed) |
The Kotlin test side stays exactly the same — only the AUT runner and config mapping differ.