Skip to content

refactor(tests): share test containers across parallel JVM forks#979

Open
jnatten wants to merge 1 commit into
fix/search-engine-containerfrom
refactor/test-container-sharing
Open

refactor(tests): share test containers across parallel JVM forks#979
jnatten wants to merge 1 commit into
fix/search-engine-containerfrom
refactor/test-container-sharing

Conversation

@jnatten
Copy link
Copy Markdown
Contributor

@jnatten jnatten commented May 28, 2026

Stacker på denne #977

Gir det et nytt forsøk på å kjøre delte containere under testing.
Dette gjør at vi bruker drastisk mye mindre minne under kjøring av tester vha at vi kjører kun en elasticsearch container og en kun en postgres container etc.

Krever bittelitt mer tunga rett i munnen når man skriver tester pga man kan i teorien lage kolliderende tester.
Denne fikser så vi appender pid'en (siden jvmen blir forka) til schema og index navn. Men jeg tror det lett er worth.

Introduce SharedContainer, a file-based coordination mechanism that
allows parallel jvm test forks to reuse a single Postgres, Elasticsearch,
and Redis container via cross-process refcounting and file locks.

- Add SharedContainer with acquire/release lifecycle, health checks,
  stale container cleanup, and shutdown hooks
- Refactor DatabaseIntegrationSuite, ElasticsearchIntegrationSuite, and
  RedisIntegrationSuite to use SharedContainer instead of spawning
  individual containers per test suite
- Append PID to search index names and database schema names to isolate
  parallel forks sharing the same container
- Make search index properties lazy so they pick up test environment
  overrides
@jnatten jnatten requested a review from a team May 28, 2026 21:54
Copy link
Copy Markdown
Member

@gunnarvelle gunnarvelle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Det ser ut som om du bruker standardporter 5432 og 9200. Vil det sei at det ikkje brukes randomporter som testene gjør i dag? Altså at det ikkje kan kjøre postgres og es lokal på maskina?

@jnatten
Copy link
Copy Markdown
Contributor Author

jnatten commented May 29, 2026

Det ser ut som om du bruker standardporter 5432 og 9200. Vil det sei at det ikkje brukes randomporter som testene gjør i dag? Altså at det ikkje kan kjøre postgres og es lokal på maskina?

Uhm nei? Hvor da tenker du på?
Jeg har kjørt lokale containere ved siden av når jeg har kjørt testene.

containerId = c.getContainerId,
data = Map(
"host" -> c.getHost,
"port" -> c.getMappedPort(5432).toString,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Her spesifiseres 5432 som port under shared container. Men så lenge det ikkje går i beina på andre ting er det jo greit.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c.getMappedPort(x) henter porten som på utsiden av containeren blir mappet til x på innsiden av containeren så det er ikke x det som eksponeres på hosten.

Testcontainers bruker en random åpen port dersom ingenting annet er spesifisert på selve containeren, så det er det som skjer.

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.

2 participants