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.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
---
|
||||
type: Journal
|
||||
status: ACTIVE
|
||||
owner: DevOps Engineer
|
||||
last_update: 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.
|
||||
Reference in New Issue
Block a user