meldestelle/docs/99_Journal/2026-04-14_DevOps_Entries-Isolation-Test-Finalized.md
Stefan Mogeritsch f961b6e771 chore(docs+tests): reactivate EntriesIsolationIntegrationTest and resolve tenant data isolation issues
- Fixed schema isolation handling in Exposed by switching table creation to JDBC and explicitly setting `search_path` in PostgreSQL.
- Removed redundant `runBlocking` calls, unused variables, and IDE warnings in the test.
- Added `JwtDecoder` mock in `@TestConfiguration` to prevent application context loading errors.
- Verified that writes in one tenant schema are no longer visible in another.

chore(config): add `application-test.yaml` for better test environment setup

- Configured H2 as an in-memory database for tests.
- Disabled Flyway and Consul to avoid unnecessary dependencies during testing.
2026-04-14 12:25:27 +02:00

2.1 KiB

type status owner last_update
Journal ACTIVE DevOps Engineer 2026-04-14

Session Log: Finalize and Enable Entries Isolation Integration Test

Problem

Der Test EntriesIsolationIntegrationTest im Modul :backend:services:entries:entries-service war deaktiviert (@Disabled). Er hatte Probleme mit der Daten-Isolierung zwischen verschiedenen Tenants, wenn Exposed mit mehreren Schemas und PostgreSQL-Containern verwendet wurde.

Zusätzlich gab es IDE-Warnungen bezüglich nicht auflösbarer Symbole in SQL-Strings, redundantem runBlocking und ungenutzten Variablen.

Lösung

  1. Test-Bereinigung:

    • Entfernung der @Disabled Annotation.
    • Behebung der runBlocking Redundanz durch Verwendung von runBlocking auf Test-Methoden-Ebene.
    • Entfernung ungenutzter Variablen (saved).
    • Bereitstellung einer @TestConfiguration mit einem Mock JwtDecoder, um ApplicationContext-Ladefehler durch Security-Abhängigkeiten zu vermeiden.
  2. Schema-Isolierung fixiert:

    • Umstellung der Tabellen-Erstellung im setup auf JDBC, um zu verhindern, dass Exposed's Table-Singletons frühzeitig an ein falsches Schema gebunden werden.
    • Sicherstellung, dass tenantTransaction den search_path in PostgreSQL korrekt setzt.
    • Explizite Verwendung von SET search_path innerhalb der Transaktionen im Isolationstest, um Leaks zu vermeiden.
    • Verifizierung der Isolation: Schreibzugriffe in event_a landen nun nachweislich nicht mehr in event_b.
  3. Verifizierung:

    • Alle 10 Tests im Modul (inkl. der neu aktivierten Isolation-Tests) laufen erfolgreich durch.
    • Die IDE-Warnungen wurden durch Verwendung von Double-Quotes ("control"."tenants") und saubere Kotlin-Strukturen minimiert.

Betroffene Dateien

  • backend/services/entries/entries-service/src/test/kotlin/at/mocode/entries/service/tenant/EntriesIsolationIntegrationTest.kt: Reaktiviert und repariert.

Handover

  • Der EntriesIsolationIntegrationTest dient nun als Referenz für Multi-Tenancy Tests mit echten PostgreSQL-Containern. Bei weiteren Tests dieser Art sollte auf das Exposed-Schema-Caching geachtet werden.