meldestelle/README-PING-TEST.md
2025-09-08 15:39:50 +02:00

9.5 KiB

Ping Service Testing Setup - Trace-Bullet Backend Testing

Übersicht

Dieses Docker Compose Setup ermöglicht das isolierte Testen des Ping Service Backends im Rahmen der Trace-Bullet Implementierung. Es stellt eine minimale, aber vollständige Testumgebung bereit, die alle notwendigen Abhängigkeiten enthält, ohne die Hauptentwicklungsumgebung zu beeinträchtigen.

Architektur

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Ping Service  │    │   Consul        │    │   PostgreSQL    │
│   Port: 8082    │◄──►│   Port: 8501    │    │   Port: 5433    │
│   (Test Target) │    │   (Discovery)   │    │   (Database)    │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                        │                        │
         ▼                        ▼                        ▼
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Prometheus    │    │   Redis         │    │   Test Runner   │
│   Port: 9091    │    │   Port: 6380    │    │   (Automated)   │
│   (Monitoring)  │    │   (Cache)       │    │   (Tests)       │
└─────────────────┘    └─────────────────┘    └─────────────────┘

Enthaltene Services

1. Ping Service (Hauptkomponente)

  • Port: 8082
  • Debug Port: 5005 (falls DEBUG=true)
  • Health Check: /actuator/health
  • Metriken: /actuator/prometheus
  • Circuit Breaker: /actuator/circuitbreakers

2. PostgreSQL Test-Datenbank

  • Port: 5433 (um Konflikte mit der Hauptdatenbank zu vermeiden)
  • Database: pingtest
  • User: testuser
  • Password: testpass

3. Redis Cache

  • Port: 6380 (um Konflikte zu vermeiden)
  • Verwendung: Event Store und Caching

4. Consul Service Discovery

  • Port: 8501 (um Konflikte zu vermeiden)
  • Web UI: http://localhost:8501
  • Verwendung: Service Registration und Discovery

5. Prometheus Monitoring

  • Port: 9091 (um Konflikte zu vermeiden)
  • Web UI: http://localhost:9091
  • Verwendung: Metriken-Sammlung und Monitoring

6. Test Runner (Optional)

  • Automatisierte Tests für alle Endpoints
  • Läuft nur mit --profile test

Schnellstart

1. Umgebung starten

# Basis-Setup starten (ohne automatische Tests)
docker-compose -f docker-compose-ping-test.yml up -d

# Mit automatischen Tests
docker-compose -f docker-compose-ping-test.yml --profile test up -d

2. Status prüfen

# Alle Container-Status anzeigen
docker-compose -f docker-compose-ping-test.yml ps

# Logs des Ping Service anzeigen
docker-compose -f docker-compose-ping-test.yml logs -f ping-service

# Health Checks aller Services
docker-compose -f docker-compose-ping-test.yml ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}"

3. Manuelle Tests durchführen

Health Check

curl http://localhost:8082/actuator/health

Service Info

curl http://localhost:8082/actuator/info

Circuit Breaker Status

curl http://localhost:8082/actuator/circuitbreakers

Prometheus Metriken

curl http://localhost:8082/actuator/prometheus

4. Umgebung stoppen und aufräumen

# Services stoppen
docker-compose -f docker-compose-ping-test.yml down

# Services stoppen und Volumes löschen
docker-compose -f docker-compose-ping-test.yml down -v

# Zusätzlich Images löschen
docker-compose -f docker-compose-ping-test.yml down -v --rmi all

Erweiterte Konfiguration

Umgebungsvariablen

Erstellen Sie eine .env.ping-test Datei für benutzerdefinierte Konfiguration:

# Database Configuration
POSTGRES_USER=mytestuser
POSTGRES_PASSWORD=mytestpassword
POSTGRES_DB=mypingtest

# Debug Configuration
DEBUG=true

# JVM Configuration
JAVA_OPTS=-Xmx1g -XX:+UseG1GC -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

Laden Sie die Konfiguration:

docker-compose -f docker-compose-ping-test.yml --env-file .env.ping-test up -d

Debug-Modus aktivieren

  1. Debug-Modus starten:
DEBUG=true docker-compose -f docker-compose-ping-test.yml up -d ping-service
  1. IDE mit Remote Debug verbinden:
    • Host: localhost
    • Port: 5005
    • Typ: Attach to remote JVM

Monitoring und Überwachung

Prometheus Dashboard

  • URL: http://localhost:9091
  • Verfügbare Metriken:
    • http_server_requests_seconds
    • jvm_memory_used_bytes
    • resilience4j_circuitbreaker_state
    • Custom Application Metriken

Consul Web UI

  • URL: http://localhost:8501
  • Zeigt registrierte Services
  • Service Health Status
  • Service Discovery Informationen

Troubleshooting

Häufige Probleme

1. Port-Konflikte

# Prüfen Sie, welche Ports bereits verwendet werden
netstat -tlnp | grep -E ':(8082|5433|6380|8501|9091)'

# Oder mit ss
ss -tlnp | grep -E ':(8082|5433|6380|8501|9091)'

2. Service startet nicht

# Detaillierte Logs anzeigen
docker-compose -f docker-compose-ping-test.yml logs ping-service

# Container Status prüfen
docker inspect ping-test-service

3. Consul Connection Probleme

# Consul Logs prüfen
docker-compose -f docker-compose-ping-test.yml logs consul-test

# Consul Services anzeigen
curl http://localhost:8501/v1/agent/services

4. Database Connection Issues

# PostgreSQL Logs
docker-compose -f docker-compose-ping-test.yml logs postgres-test

# Direkte Verbindung testen
docker exec -it ping-test-postgres psql -U testuser -d pingtest

Performance-Optimierung

1. Speicher-Limits setzen

# In docker-compose-ping-test.yml ergänzen:
services:
  ping-service:
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M

2. Build-Cache nutzen

# Build mit Cache
docker-compose -f docker-compose-ping-test.yml build --parallel

# Build ohne Cache (bei Problemen)
docker-compose -f docker-compose-ping-test.yml build --no-cache ping-service

Test-Szenarien

1. Circuit Breaker Tests

# Circuit Breaker Status abrufen
curl http://localhost:8082/actuator/circuitbreakers

# Mehrfache Requests senden um Circuit Breaker zu testen
for i in {1..10}; do
  curl -w "Response time: %{time_total}s\n" http://localhost:8082/actuator/health
  sleep 1
done

2. Load Testing

# Mit Apache Bench (falls installiert)
ab -n 100 -c 10 http://localhost:8082/actuator/health

# Mit curl (einfacher Loop)
for i in {1..50}; do
  curl -s http://localhost:8082/actuator/health > /dev/null &
done
wait

3. Service Discovery Tests

# Service Registration prüfen
curl http://localhost:8501/v1/agent/services | jq .

# Health Checks in Consul
curl http://localhost:8501/v1/health/service/ping-service | jq .

Continuous Integration

GitHub Actions Beispiel

name: Ping Service Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Start Test Environment
        run: |
          docker-compose -f docker-compose-ping-test.yml up -d          

      - name: Wait for Services
        run: |
          timeout 300 bash -c 'until curl -f http://localhost:8082/actuator/health; do sleep 5; done'          

      - name: Run Tests
        run: |
          docker-compose -f docker-compose-ping-test.yml --profile test up test-runner          

      - name: Cleanup
        run: |
          docker-compose -f docker-compose-ping-test.yml down -v          

Best Practices

1. Vor dem Testen

  • Stellen Sie sicher, dass keine anderen Services auf den Test-Ports laufen
  • Überprüfen Sie verfügbaren Speicher und CPU-Ressourcen
  • Löschen Sie alte Test-Volumes bei Bedarf

2. Während des Testens

  • Nutzen Sie die Health Check Endpoints
  • Überwachen Sie Logs in Echtzeit
  • Prüfen Sie Metriken in Prometheus

3. Nach dem Testen

  • Stoppen und entfernen Sie Test-Container
  • Löschen Sie Test-Volumes um Speicher zu sparen
  • Dokumentieren Sie gefundene Issues

Erweiterungen

Zusätzliche Services hinzufügen

Um weitere Services zu testen, erweitern Sie die docker-compose-ping-test.yml:

services:
  another-service:
    build:
      context: .
      dockerfile: path/to/Dockerfile
    depends_on:
      - ping-service
    networks:
      - ping-test-network

Grafana für erweiterte Visualisierung

services:
  grafana-test:
    image: grafana/grafana:latest
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    networks:
      - ping-test-network

Support

Bei Problemen oder Fragen:

  1. Prüfen Sie die Logs: docker-compose -f docker-compose-ping-test.yml logs
  2. Überprüfen Sie die Container-Status: docker-compose -f docker-compose-ping-test.yml ps
  3. Konsultieren Sie die Hauptdokumentation in README.md
  4. Überprüfen Sie die Service-spezifische Konfiguration in temp/ping-service/src/main/resources/application.yml

Erstellt für: Meldestelle Projekt - Ping Service Trace-Bullet Testing Version: 1.0.0 Datum: 2025-09-08