Skip to content

test: give each fixture its own Postgres database#39

Merged
Theauxm merged 3 commits into
mainfrom
test/isolate-postgres-dbs-per-fixture
May 5, 2026
Merged

test: give each fixture its own Postgres database#39
Theauxm merged 3 commits into
mainfrom
test/isolate-postgres-dbs-per-fixture

Conversation

@Theauxm
Copy link
Copy Markdown
Member

@Theauxm Theauxm commented May 5, 2026

Summary

  • Split the three Trax.Api test fixtures onto separate Postgres databases (trax_api_operations, trax_api_health, trax_api_auth).
  • Add a CI step that CREATE DATABASEs each before the test run.

NUnit runs fixtures in parallel within an assembly. All three were sharing Database=trax and each runs DatabaseMigrator.Migrate in OneTimeSetUp. When two fixtures hit the migrator advisory lock at the same time, one would time out with an Npgsql operation-timeout (the flake we saw on main). Per-DB isolation removes that contention without serializing the suite.

Test plan

  • Local: dotnet test Trax.Api.Tests passes (730 / 730)
  • CI: pull_request workflow green

Theauxm added 3 commits May 5, 2026 10:04
Three test fixtures (OperationsQueries, TraxHealthService, AuthE2E) all
migrated and ran against the same `trax` database. NUnit runs fixtures
in parallel, so two could enter DatabaseMigrator.Migrate at once, contend
on the migrator advisory lock, and one would time out (intermittently)
with a Npgsql operation-timeout during OneTimeSetUp.

Split each fixture onto its own DB (trax_api_operations / trax_api_health
/ trax_api_auth) and have CI psql CREATE DATABASE for each before tests run.
…cycle subscriptions and operations/dead-letter mutations
The five AuthE2E fixtures all shared trax_api_auth and ran sequentially
(NonParallelizable), but each test still spins up a fresh host — so the
suite produces 60+ migrations against the same DB. Under CI load this
intermittently times out at the Npgsql connect step inside the migrator.

Give each fixture its own DB:
- HttpAuthE2ETests          → trax_api_auth_http
- ModelQueryAuthE2ETests    → trax_api_auth_model
- SubscriptionE2ETests      → trax_api_auth_sub
- SubscriptionPrincipalPropagationE2ETests → trax_api_auth_subprop
- TraxAuthorizeE2ETests     → trax_api_auth_authorize

AuthE2EHost.StartAsync now takes the database name; each fixture wraps
it with a private static StartAsync(Schemes) helper that pins its own DB
constant, so existing call sites stay unchanged. ConnectionString became
a function of the database. CI bootstrap CREATEs the new DBs upfront.
@codecov
Copy link
Copy Markdown

codecov Bot commented May 5, 2026

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

ℹ️ You can also turn on project coverage checks and project coverage reporting on Pull Request comment

Thanks for integrating Codecov - We've got you covered ☂️

@Theauxm Theauxm merged commit 7ef21b8 into main May 5, 2026
2 checks passed
@Theauxm Theauxm deleted the test/isolate-postgres-dbs-per-fixture branch May 5, 2026 17:17
@traxsharp
Copy link
Copy Markdown

traxsharp Bot commented May 8, 2026

This PR is included in version 1.25.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant