✨ feat(bdd): parallel-safe schema-per-package isolation (T12 stage 2/2)
Re-enables BDD_SCHEMA_ISOLATION=true with the foundation from PR #34 (NewPostgresRepositoryFromDSN). Achieves ~2.85x speedup on the BDD test suite by running feature packages in parallel. ARCHITECTURE When BDD_SCHEMA_ISOLATION=true, each test package (process) gets its own isolated PostgreSQL schema: 1. testserver.Start() generates a deterministic schema name per FEATURE 2. CREATE SCHEMA <name> 3. Open a per-package gorm.DB with DSN search_path=<name> 4. AutoMigrate runs in the isolated schema (creates users table) 5. Build a per-package server.Server with this isolated repo via server.NewServerWithUserRepo 6. Stop() drops the schema + closes the per-package pool Packages then run in parallel (default Go test parallelism) without contention because each has its own schema + connection pool. CHANGES - pkg/server/server.go : NEW factory NewServerWithUserRepo(cfg, ctx, userRepo, userService) that injects a per-test repo. Existing NewServer becomes a thin wrapper. - pkg/bdd/testserver/server.go : Start() chooses isolated mode based on BDD_SCHEMA_ISOLATION env var. Stop() drops schema + closes pool. - pkg/user/postgres_repository.go : Exec(sql) helper for the schema lifecycle (CREATE/DROP) used by testserver. - scripts/run-bdd-tests.sh : -p 1 only when BDD_SCHEMA_ISOLATION!=true. When true, default Go parallelism (~ NumCPU packages concurrent). - .gitea/workflows/ci-cd.yaml : exports BDD_SCHEMA_ISOLATION=true. - adr/0025-bdd-scenario-isolation-strategies.md : Status to "Implemented". VALIDATION 5x AuthBDD with isolation: 5/5 PASS, public.users count=0 after runs. Local benchmark on the full features/... suite: - Sequential -p 1 (no isolation): 12.87s - Parallel + isolation (this PR): 4.51s - Speedup: 2.85x 🤖 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -219,10 +219,12 @@ jobs:
|
||||
export DLC_DATABASE_PASSWORD=postgres
|
||||
export DLC_DATABASE_NAME=dance_lessons_coach_bdd_test
|
||||
export DLC_DATABASE_SSL_MODE=disable
|
||||
# NOTE: BDD_SCHEMA_ISOLATION was tried (PR #26) but creates empty per-scenario schemas
|
||||
# without table migrations, causing 500 errors on registration. Reverted in PR #28.
|
||||
# The default mode (CleanupDatabase truncates between scenarios) works fine when tests
|
||||
# run sequentially (Go BDD doesn't use t.Parallel by default).
|
||||
# T12: per-package isolated Postgres schema with migrations (re-enables what
|
||||
# PR #26 attempted but couldn't deliver because the empty schemas had no tables).
|
||||
# The fix: testserver Start() now builds a per-package isolated repo via
|
||||
# user.NewPostgresRepositoryFromDSN which DOES run AutoMigrate against the new
|
||||
# schema. Packages then run in parallel (~2.85x speedup observed locally).
|
||||
export BDD_SCHEMA_ISOLATION=true
|
||||
./scripts/run-bdd-tests.sh
|
||||
|
||||
# Generate BDD coverage report
|
||||
|
||||
Reference in New Issue
Block a user