Testing hinzugefügt
415
Testing.md
Normal file
415
Testing.md
Normal file
@@ -0,0 +1,415 @@
|
||||
# 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.
|
||||
|
||||
```bash
|
||||
./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.
|
||||
|
||||
```bash
|
||||
./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.
|
||||
|
||||
```bash
|
||||
./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.
|
||||
|
||||
```bash
|
||||
./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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# Container-Status
|
||||
pct status <ctid>
|
||||
|
||||
# Container-Konfiguration
|
||||
pct config <ctid>
|
||||
|
||||
# Container-Ressourcen
|
||||
pct exec <ctid> -- free -m
|
||||
pct exec <ctid> -- df -h
|
||||
```
|
||||
|
||||
### Docker-Tests
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# Port-Scanning
|
||||
nmap -p 3000,5678 <ip>
|
||||
|
||||
# Latenz-Test
|
||||
ping -c 10 <ip>
|
||||
|
||||
# Bandbreite-Test
|
||||
iperf3 -c <ip>
|
||||
```
|
||||
|
||||
## 📝 Test-Protokollierung
|
||||
|
||||
### Log-Dateien
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
#!/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
|
||||
|
||||
```bash
|
||||
# Tägliche Tests um 2 Uhr nachts
|
||||
0 2 * * * /root/customer-installer/test-runner.sh
|
||||
```
|
||||
|
||||
## 🚨 Troubleshooting
|
||||
|
||||
### Tests schlagen fehl
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
- [Installation](Installation.md) - Installations-Anleitung
|
||||
- [Troubleshooting](Troubleshooting.md) - Problemlösung
|
||||
- [Monitoring](Monitoring.md) - Überwachung
|
||||
- [API-Referenz](API-Reference.md) - API-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
|
||||
Reference in New Issue
Block a user