Clone
1
Testing
admin edited this page 2026-01-25 09:34:24 -08:00

Testing

Das Customer Installer System verfügt über umfassende Test-Suites zur Qualitätssicherung.

📋 Übersicht

Das Testing-System umfasst:

  • 4 Test-Suites mit über 40 Test-Cases
  • Automatisierte Tests für alle Komponenten
  • Infrastruktur-Tests (Container, Docker, Netzwerk)
  • API-Tests (n8n, PostgREST)
  • Integration-Tests (End-to-End)
  • Farbcodierte Ausgabe für bessere Lesbarkeit

🧪 Test-Suites

1. test_installation.sh - Infrastruktur-Tests

Testet die grundlegende Infrastruktur und Container-Konfiguration.

./test_installation.sh <ctid> <ip> <hostname>

# Beispiel
./test_installation.sh 769276659 192.168.45.45 sb-1769276659

Test-Bereiche (25 Tests):

  • Container-Status und Konfiguration
  • Docker-Installation und -Status
  • Docker-Container (PostgreSQL, PostgREST, n8n)
  • Datenbank-Konnektivität
  • pgvector-Extension
  • Netzwerk-Konfiguration
  • Volume-Berechtigungen
  • Systemd-Services
  • Log-Dateien

2. test_n8n_workflow.sh - n8n API-Tests

Testet n8n API, Workflows und Credentials.

./test_n8n_workflow.sh <ctid> <ip> <email> <password>

# Beispiel
./test_n8n_workflow.sh 769276659 192.168.45.45 admin@userman.de "FAmeVE7t9d1iMIXWA1"

Test-Bereiche (13 Tests):

  • n8n API-Login
  • Credentials (PostgreSQL, Ollama)
  • Workflows (Liste, Status, Aktivierung)
  • Webhook-Endpoints
  • n8n-Settings
  • Execution-History
  • Container-Konnektivität
  • Environment-Variablen
  • Log-Analyse

3. test_postgrest_api.sh - PostgREST API-Tests

Testet die Supabase-kompatible REST API.

./test_postgrest_api.sh <ctid> <ip> <jwt_secret> <anon_key> <service_key>

# Beispiel
./test_postgrest_api.sh 769276659 192.168.45.45 \
  "IM9/HRQR9mw63lU/1G7vXPMe7q0n3oLcr35dryv0ToU=" \
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Test-Bereiche (13 Tests):

  • PostgREST Root-Endpoint
  • Tabellen-Listing
  • Documents-Tabelle
  • Authentication (anon_key, service_role_key)
  • CORS-Headers
  • RPC-Funktionen (match_documents)
  • OpenAPI-Schema
  • Content-Negotiation
  • Container-Health
  • Interne Netzwerk-Konnektivität

4. test_complete_system.sh - Vollständige Integration

Führt alle Tests in der richtigen Reihenfolge aus.

./test_complete_system.sh <ctid> <ip> <hostname>

# Beispiel
./test_complete_system.sh 769276659 192.168.45.45 sb-1769276659

Test-Bereiche (40+ Tests):

  • Alle Infrastruktur-Tests
  • Alle n8n-Tests
  • Alle PostgREST-Tests
  • Zusätzliche Integration-Tests

🚀 Schnellstart

Nach Installation testen

# 1. Installation durchführen
OUTPUT=$(./install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90)

# 2. Werte extrahieren
CTID=$(echo "$OUTPUT" | jq -r '.ctid')
IP=$(echo "$OUTPUT" | jq -r '.ip')
HOSTNAME=$(echo "$OUTPUT" | jq -r '.hostname')

# 3. Vollständige Tests ausführen
./test_complete_system.sh "$CTID" "$IP" "$HOSTNAME"

Mit Credentials-Datei

# Credentials laden
CREDS=$(cat credentials/sb-*.json)

# Werte extrahieren
CTID=$(echo "$CREDS" | jq -r '.ctid')
IP=$(echo "$CREDS" | jq -r '.ip')
HOSTNAME=$(echo "$CREDS" | jq -r '.hostname')

# Tests ausführen
./test_complete_system.sh "$CTID" "$IP" "$HOSTNAME"

📊 Test-Ausgabe

Erfolgreiche Tests

========================================
Customer Installer - Test Suite
========================================

Testing Container: 769276659
IP Address: 192.168.45.45
Hostname: sb-1769276659

[TEST] Checking if container 769276659 exists and is running...
[PASS] Container 769276659 is running
[TEST] Verifying container IP address...
[PASS] Container has correct IP: 192.168.45.45
...

========================================
Test Summary
========================================
Total Tests: 25
Passed: 25
Failed: 0

✓ All tests passed!

Fehlgeschlagene Tests

[TEST] Testing n8n API login...
[FAIL] n8n API login failed: Connection refused

========================================
Test Summary
========================================
Total Tests: 13
Passed: 10
Failed: 3

✗ Some tests failed. Please review the output above.

🔍 Einzelne Test-Kategorien

Container-Tests

# Container-Status
pct status <ctid>

# Container-Konfiguration
pct config <ctid>

# Container-Ressourcen
pct exec <ctid> -- free -m
pct exec <ctid> -- df -h

Docker-Tests

# Docker-Status
pct exec <ctid> -- systemctl status docker

# Container-Liste
pct exec <ctid> -- docker ps

# Container-Logs
pct exec <ctid> -- docker logs n8n
pct exec <ctid> -- docker logs customer-postgres
pct exec <ctid> -- docker logs customer-postgrest

Datenbank-Tests

# PostgreSQL-Verbindung
pct exec <ctid> -- docker exec customer-postgres pg_isready -U customer

# pgvector-Extension
pct exec <ctid> -- docker exec customer-postgres \
  psql -U customer -d customer -c "SELECT extname FROM pg_extension WHERE extname='vector';"

# Tabellen-Liste
pct exec <ctid> -- docker exec customer-postgres \
  psql -U customer -d customer -c "\dt"

API-Tests

# n8n Health
curl http://<ip>:5678/healthz

# PostgREST Root
curl http://<ip>:3000/

# Documents-Tabelle
curl http://<ip>:3000/documents \
  -H "apikey: ${ANON_KEY}"

# Chat-Webhook
curl -X POST http://<ip>:5678/webhook/rag-chat-webhook/chat \
  -H "Content-Type: application/json" \
  -d '{"query":"Test"}'

🔧 Erweiterte Tests

Performance-Tests

# Datenbank-Performance
pct exec <ctid> -- docker exec customer-postgres \
  psql -U customer -d customer -c "EXPLAIN ANALYZE SELECT * FROM documents LIMIT 10;"

# API-Response-Zeit
time curl -s http://<ip>:3000/documents > /dev/null

# n8n-Response-Zeit
time curl -s http://<ip>:5678/ > /dev/null

Load-Tests

# Apache Bench für API
ab -n 1000 -c 10 http://<ip>:3000/

# Parallel-Requests
seq 1 100 | xargs -P 10 -I {} curl -s http://<ip>:3000/documents > /dev/null

Netzwerk-Tests

# Port-Scanning
nmap -p 3000,5678 <ip>

# Latenz-Test
ping -c 10 <ip>

# Bandbreite-Test
iperf3 -c <ip>

📝 Test-Protokollierung

Log-Dateien

# Test-Logs speichern
./test_complete_system.sh <ctid> <ip> <hostname> 2>&1 | tee test-results.log

# Mit Zeitstempel
./test_complete_system.sh <ctid> <ip> <hostname> 2>&1 | \
  tee "test-results-$(date +%Y%m%d-%H%M%S).log"

JSON-Output

# Test-Ergebnisse als JSON
./test_complete_system.sh <ctid> <ip> <hostname> 2>&1 | \
  grep -E '\[PASS\]|\[FAIL\]' | \
  awk '{print "{\"status\":\""$1"\",\"test\":\""substr($0,8)"\"}"}' | \
  jq -s '.'

🔄 Continuous Testing

Automatisierte Tests

#!/bin/bash
# test-runner.sh - Automatische Test-Ausführung

CREDS_FILE="credentials/sb-*.json"
CTID=$(jq -r '.ctid' $CREDS_FILE)
IP=$(jq -r '.ip' $CREDS_FILE)
HOSTNAME=$(jq -r '.hostname' $CREDS_FILE)

# Tests ausführen
./test_complete_system.sh "$CTID" "$IP" "$HOSTNAME"

# Bei Fehler benachrichtigen
if [ $? -ne 0 ]; then
  echo "Tests failed!" | mail -s "Test Failure" admin@example.com
fi

Cron-Job

# Tägliche Tests um 2 Uhr nachts
0 2 * * * /root/customer-installer/test-runner.sh

🚨 Troubleshooting

Tests schlagen fehl

# 1. Container-Status prüfen
pct status <ctid>

# 2. Docker-Container prüfen
pct exec <ctid> -- docker ps

# 3. Logs prüfen
pct exec <ctid> -- docker logs n8n
pct exec <ctid> -- docker logs customer-postgres

# 4. Netzwerk prüfen
ping <ip>
curl http://<ip>:5678/

Timeout-Probleme

# Längere Timeouts in Tests
export CURL_TIMEOUT=30

# Oder Tests einzeln ausführen
./test_installation.sh <ctid> <ip> <hostname>
sleep 10
./test_n8n_workflow.sh <ctid> <ip> <email> <password>

Credentials-Probleme

# Credentials neu laden
CREDS=$(cat credentials/sb-*.json)

# Passwort prüfen
echo "$CREDS" | jq -r '.n8n.owner_password'

# Manuell einloggen testen
curl -X POST http://<ip>:5678/rest/login \
  -H "Content-Type: application/json" \
  -d '{"emailOrLdapLoginId":"admin@userman.de","password":"..."}'

📊 Test-Metriken

Test-Coverage

  • Infrastruktur: 100% (alle Komponenten getestet)
  • APIs: 100% (alle Endpoints getestet)
  • Integration: 100% (End-to-End getestet)
  • Gesamt: 40+ Test-Cases

Test-Dauer

  • test_installation.sh: ~30 Sekunden
  • test_n8n_workflow.sh: ~20 Sekunden
  • test_postgrest_api.sh: ~15 Sekunden
  • test_complete_system.sh: ~90 Sekunden

📚 Weiterführende Dokumentation


Best Practices:

  1. Tests nach jeder Installation ausführen
  2. Tests regelmäßig wiederholen (z.B. täglich)
  3. Test-Logs für Debugging aufbewahren
  4. Bei Fehlern systematisch vorgehen (Container → Docker → Services → APIs)
  5. Performance-Tests bei Produktiv-Systemen durchführen