Documentation
¶
Overview ¶
Package pgtest is test support: it starts one Dockerized Postgres per test binary and hands out fresh databases — migrated pools via NewPool, or bare DSNs via FreshDB for suites that exercise store.Open/Migrate themselves. Every Postgres-backed suite uses it; production code must never import it. A missing Docker daemon is a hard failure, not a skip: skipped contract tests would silently hollow out the coverage gate.
Index ¶
- func FreshDB(t *testing.T) string
- func Main(m *testing.M) int
- func NewChildThread(t *testing.T, pool *pgxpool.Pool, sessionID domain.ID) domain.ID
- func NewChildThreadWithAgent(t *testing.T, pool *pgxpool.Pool, sessionID domain.ID, agentJSON string) domain.ID
- func NewPool(t *testing.T) *pgxpool.Pool
- func NewSession(t *testing.T, pool *pgxpool.Pool, envKind string) (sessionID, envID domain.ID)
- func NewSessionInEnv(t *testing.T, pool *pgxpool.Pool, envID domain.ID) (sessionID domain.ID)
- func SetSessionStatus(t *testing.T, pool *pgxpool.Pool, sessionID domain.ID, status string)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FreshDB ¶ added in v0.2.0
FreshDB creates a new empty database in the shared container and returns its DSN, un-migrated, so a suite can exercise store.Open/Migrate itself from a clean slate.
func Main ¶
Main wraps testing.M: it starts the shared container, runs the suite, and tears the container down. Use from TestMain: os.Exit(pgtest.Main(m)). The start is attempted twice, with a fresh container in between (#265; see readyTimeout). The retry is unconditional on the error's class because even a failed `docker run` can be load-induced (port programming races under a crowded daemon); when the daemon is simply absent, the second attempt fails in milliseconds and costs nothing.
Teardown below is a defer, which a killed process never reaches, so the run opens by reaping what an earlier killed run left (#346; dockertest holds the whole rationale, including why a container young enough to be a peer's is never touched).
func NewChildThread ¶ added in v0.4.0
NewChildThread inserts an idle child thread under the session's primary — the test seam plan 35 slice 3 runs the thread substrate through until slice 4's delegation spawns real ones — carrying a minimal agent snapshot (model "fixture-model", no tools) named "worker", and returns its id.
func NewChildThreadWithAgent ¶ added in v0.4.0
func NewChildThreadWithAgent(t *testing.T, pool *pgxpool.Pool, sessionID domain.ID, agentJSON string) domain.ID
NewChildThreadWithAgent is NewChildThread with the given SessionThreadAgent snapshot (its name is the thread's agent_name).
func NewPool ¶
NewPool creates a fresh database in the shared container, migrates it, and returns a pool closed at test end.
func NewSession ¶
NewSession inserts the minimum fixture rows (agent, agent version, environment of the given kind, session) and returns the session and environment ids.
func NewSessionInEnv ¶
NewSessionInEnv inserts an additional idle session (with its own throwaway agent + version) into an existing environment and returns the session id. Use it to place several sessions — and thus several work items — under one environment, since Enqueue dedupes per (session, kind) while a live item exists.
func SetSessionStatus ¶ added in v0.4.0
SetSessionStatus moves a fixture session to status the way the platform does — the primary thread's row and the session's column together (plan 35 decision 4: the session's status is a fold over its threads', so a fixture that moved the column alone would be read back as its idle primary).
Types ¶
This section is empty.