refactor(tests): share test containers across parallel JVM forks#979
refactor(tests): share test containers across parallel JVM forks#979jnatten wants to merge 1 commit into
Conversation
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
gunnarvelle
left a comment
There was a problem hiding this comment.
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å? |
| containerId = c.getContainerId, | ||
| data = Map( | ||
| "host" -> c.getHost, | ||
| "port" -> c.getMappedPort(5432).toString, |
There was a problem hiding this comment.
Her spesifiseres 5432 som port under shared container. Men så lenge det ikkje går i beina på andre ting er det jo greit.
There was a problem hiding this comment.
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.
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.