feat: runtime manager

This commit is contained in:
Ilia Denisov
2026-04-28 20:39:18 +02:00
committed by GitHub
parent e0a99b346b
commit a7cee15115
289 changed files with 45660 additions and 2207 deletions
@@ -0,0 +1,54 @@
package harness
import (
"context"
"testing"
)
// RTManagerServicePersistence captures the per-test persistence
// dependencies of the Runtime Manager binary: a PostgreSQL container
// hosting the `rtmanager` schema owned by the `rtmanagerservice` role,
// plus the Redis credentials that point the service at the
// caller-supplied master address.
type RTManagerServicePersistence struct {
// Postgres exposes the started container so tests that need direct
// SQL access to the rtmanager schema can read or write through it.
Postgres *PostgresRuntime
// Env carries the environment entries that must be passed to the
// rtmanager process. It is safe to merge into the caller's existing
// env map, or to use as-is and append further RTMANAGER_* knobs in
// place. RTMANAGER_GAME_STATE_ROOT is intentionally omitted; the
// caller supplies a per-test directory.
Env map[string]string
}
// StartRTManagerServicePersistence brings up one isolated PostgreSQL
// container, provisions the `rtmanager` schema with the
// `rtmanagerservice` role, and returns the environment entries that
// wire the rtmanager binary at that container plus the supplied Redis
// master address.
//
// The Redis password value matches the architectural rule that Redis
// traffic is password-protected; miniredis accepts arbitrary password
// values when its own RequireAuth is not engaged, and the same value
// works against the real testcontainers Redis runtime.
//
// Cleanup of the container is handled by StartPostgresContainer through
// `t.Cleanup`; callers do not need to defer anything.
func StartRTManagerServicePersistence(t testing.TB, redisMasterAddr string) RTManagerServicePersistence {
t.Helper()
rt := StartPostgresContainer(t)
if err := rt.EnsureRoleAndSchema(context.Background(), "rtmanager", "rtmanagerservice", "rtmanagerservice"); err != nil {
t.Fatalf("ensure rtmanager schema/role: %v", err)
}
env := WithPostgres(rt, "RTMANAGER", "rtmanager", "rtmanagerservice")
env["RTMANAGER_REDIS_MASTER_ADDR"] = redisMasterAddr
env["RTMANAGER_REDIS_PASSWORD"] = "integration"
return RTManagerServicePersistence{
Postgres: rt,
Env: env,
}
}