meldestelle/docs/END_TO_END_TESTING.md
2025-08-11 23:47:05 +02:00

163 lines
4.5 KiB
Markdown

# End-to-End Communication Testing
## Übersicht
Dieses Dokument beschreibt die Implementierung eines minimalen Clients für die Validierung der durchgehenden Kommunikation vom Frontend zum Backend über das Gateway.
## Architektur
Die Kommunikation erfolgt über folgende Komponenten:
```
Web Client (Kotlin/JS) → API Gateway (Spring Cloud Gateway) → Ping Service (Spring Boot)
Port: Browser Port: 8080 Port: dynamisch
```
## Implementierte Lösung
### 1. Minimal Test Client (Web App)
**Datei:** `client/web-app/src/main/kotlin/at/mocode/client/web/App.kt`
Der Client enthält:
- Eine benutzerfreundliche Web-Oberfläche
- "Ping Backend" Button für Tests
- Automatische Fehlerbehandlung
- Mehrere Gateway-URLs für Fallback-Verhalten
**Konfigurierte Endpoints:**
1. `http://localhost:8080/api/ping/ping` - Korrekte Gateway-Route
2. `http://localhost:8080/ping` - Direkte Service-Verbindung (Fallback)
3. `http://localhost:8081/api/ping/ping` - Alternative Gateway-Port
### 2. API Gateway Konfiguration
**Datei:** `infrastructure/gateway/src/main/resources/application.yml`
Das Gateway ist konfiguriert mit:
- Port: 8080
- Route: `/api/ping/**``lb://ping-service`
- Consul Service Discovery
- CORS-Unterstützung
- Health Checks
### 3. Ping Service
**Datei:** `temp/ping-service/src/main/kotlin/at/mocode/temp/pingservice/PingController.kt`
Einfacher REST-Endpoint:
- `GET /ping``{"status": "pong"}`
### 4. Docker Compose Integration
**Datei:** `docker-compose.yml`
Hinzugefügte Services:
- `api-gateway`: Port 8080, abhängig von Consul
- `ping-service`: Dynamischer Port, registriert bei Consul
## Kommunikationsfluss
1. **Client-Request:** Browser sendet GET-Request an `http://localhost:8080/api/ping/ping`
2. **Gateway-Routing:** Gateway empfängt Request, entfernt `/api` Präfix
3. **Service Discovery:** Gateway löst `lb://ping-service` über Consul auf
4. **Backend-Call:** Gateway leitet Request an `/ping` des Ping-Service weiter
5. **Response:** Ping-Service antwortet mit `{"status": "pong"}`
6. **Client-Display:** Web-Client zeigt Antwort in grüner Erfolgsmeldung an
## Validierte Funktionalität
### Tests bestätigt:
- ✅ Ping-Service Funktionalität (2/2 Tests bestehen)
- ✅ Gateway Routing-Funktionalität (3/3 Tests bestehen)
- ✅ Client-Endpoint-Korrektur implementiert
- ✅ Docker-Orchestrierung konfiguriert
## Verwendung
### Lokale Entwicklung:
1. **Services starten:**
```bash
# Consul starten (für Service Discovery)
docker-compose up consul
# Gateway starten
./gradlew :infrastructure:gateway:bootRun
# Ping Service starten
./gradlew :temp:ping-service:bootRun
```
2. **Web Client starten:**
```bash
./gradlew :client:web-app:jsBrowserRun
```
3. **Test durchführen:**
- Browser öffnet sich automatisch
- "Ping Backend" Button klicken
- Erfolgreiche Antwort: "Backend Response: pong"
### Docker-basiert:
1. **Alle Services starten:**
```bash
# Services builden und starten
docker-compose up --build
```
2. **Web Interface aufrufen:**
- Öffne http://localhost:3000 (falls Web-App containerisiert)
- Oder führe Client lokal aus und teste gegen containerisierte Services
## Monitoring und Debugging
### Health Checks:
- Gateway: `http://localhost:8080/actuator/health`
- Ping Service: Automatisch via Consul
- Consul UI: `http://localhost:8500`
### Logs:
```bash
# Gateway Logs
docker-compose logs api-gateway
# Ping Service Logs
docker-compose logs ping-service
```
## Erweiterte Funktionen
### Fehlerbehandlung:
- Client versucht automatisch mehrere Endpoints
- Benutzerfreundliche Fehlermeldungen
- Loading-Indikatoren während Requests
### Service Discovery:
- Automatische Service-Registrierung bei Consul
- Load Balancing über Spring Cloud Gateway
- Health Check Integration
## Troubleshooting
### Häufige Probleme:
1. **"Could not reach any backend service"**
- Prüfe ob Gateway und Ping Service laufen
- Prüfe Consul-Verbindung
- Prüfe Service-Registrierung in Consul UI
2. **CORS-Fehler**
- Gateway ist bereits mit CORS konfiguriert
- Prüfe Browser-Konsole für Details
3. **Service Discovery-Probleme**
- Prüfe Consul-Logs
- Prüfe Service-Registrierung
- Restart Services falls nötig
## Fazit
Die Implementierung bietet eine vollständige End-to-End-Validierung der Kommunikation vom Web-Client über das API Gateway zum Backend-Service. Alle Komponenten sind getestet und für die Entwicklungs- und Produktionsumgebung konfiguriert.