Documentation
¶
Overview ¶
Package engine arranca y teardownea los 6 motores para el arnés del superapp, y verifica que no haya fugas (goroutines, conexiones del pool) tras cerrar.
Espeja el patrón PROBADO de bugbash/tools/docker.go: contenedores por `docker run` (NO testcontainers — su reaper tumba la imagen de Oracle en runners hosted, ADR-0018/PR #127), SQLite in-process, y override por env `SUPERAPP_DSN_<ENGINE>` que cortocircuita Docker (para reusar un contenedor ya levantado: el `quark-oracle` persistente, el postgres de Lantia, etc.). No importa el módulo bugbash (es otro módulo `-tags=bugbash`), así que replica.
Contenedores namespaced `superapp-<engine>` en puertos propios para no colisionar con los de bugbash ni con el postgres de Lantia (5432).
Index ¶
- func Down(engines ...control.Engine)
- func EnvVar(e control.Engine) string
- func Goroutines() int
- func Run(conns map[control.Engine]Conn, tol int, ...) map[control.Engine]Result
- func Settle()
- func Up(ctx context.Context, engines ...control.Engine) (map[control.Engine]Conn, error)
- type Conn
- type LeakReport
- type Result
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Down ¶
Down elimina los contenedores de los motores pedidos (SQLite es no-op; su fichero temporal lo limpia el caller). Best-effort. NO toca contenedores resueltos por SUPERAPP_DSN_<ENGINE> (no los gestionamos nosotros).
func Run ¶
func Run(conns map[control.Engine]Conn, tol int, newClient func(Conn) (*quark.Client, error), fn func(control.Engine, *quark.Client) error) map[control.Engine]Result
Run abre un Client por motor (vía newClient), corre fn, lo cierra, y verifica fugas: goroutines estables (dentro de tol) y pool a 0 tras Close. El pool se lee DESPUÉS de Close — ahí InUse/OpenConnections deben ser 0. Cada motor captura su propia línea base de goroutines, así que la acumulación entre motores no falsea el resultado.
func Settle ¶
func Settle()
Settle deja que las goroutines en cierre terminen antes de contar (GC + pausa).
func Up ¶
Up levanta los motores pedidos y devuelve un Conn por motor. SQLite resuelve a un fichero temporal sin contenedor. Para el resto, un SUPERAPP_DSN_<ENGINE> explícito gana a Docker; si no, se arranca (o reusa) el contenedor y se espera a que responda un ping. Idempotente: reusa un contenedor ya corriendo.
Types ¶
type Conn ¶
Conn es lo que hace falta para abrir un Client: el driver de database/sql y un DSN listo. El driver lo registra un blank-import del binario consumidor.
type LeakReport ¶
type LeakReport struct {
Engine control.Engine `json:"engine"`
GoroutinesBefore int `json:"goroutines_before"`
GoroutinesAfter int `json:"goroutines_after"`
Tolerance int `json:"tolerance"`
PoolInUse int `json:"pool_in_use"` // conexiones en uso tras Close (debe ser 0)
PoolOpen int `json:"pool_open"` // conexiones abiertas tras Close (debe ser 0)
}
LeakReport compara goroutines antes/después de la corrida y el estado del pool DESPUÉS de cerrar el Client. Un motor limpio deja el pool a 0 y no acumula goroutines (más allá de la tolerancia, que cubre goroutines residuales de algunos drivers).
func (LeakReport) GoroutinesLeaked ¶
func (r LeakReport) GoroutinesLeaked() bool
func (LeakReport) OK ¶
func (r LeakReport) OK() bool
func (LeakReport) PoolLeaked ¶
func (r LeakReport) PoolLeaked() bool
func (LeakReport) String ¶
func (r LeakReport) String() string
type Result ¶
type Result struct {
Err error
Leak LeakReport
}
Result reúne el error funcional de fn y el report de fugas de un motor.