Testskripte
Das Projekt enthält mehrere Test-Skripte, um bei der Entwicklung und dem Testen zu helfen:
Testdaten generieren
pnpm generate-test-data --servers=N
Dieses Skript generiert Testdaten für Sicherungen auf mehreren Servern und Sicherungen.
Der Parameter --servers=N ist erforderlich und gibt die Anzahl der zu generierenden Server an (1-30).
Verwenden Sie die Option --upload, um die generierten Daten an /api/upload zu senden.
pnpm generate-test-data --servers=N --upload
Beispiele:
# Generate data for 5 servers
pnpm generate-test-data --servers=5
# Generate data for 1 server with upload mode
pnpm generate-test-data --upload --servers=1
# Generate data for all 30 servers
pnpm generate-test-data --servers=30
Caution
Dieses Skript löscht alle vorherigen Daten in der Datenbank und ersetzt sie durch Testdaten. Sichern Sie Ihre Datenbank, bevor Sie dieses Skript ausführen.
Einblenden der Inhalte überfälliger Benachrichtigungen (zum Debuggen des Benachrichtigungssystems)
pnpm show-overdue-notifications
Überfällige Prüfung zu einem bestimmten Datum/einer bestimmten Uhrzeit ausführen (zum Debuggen des Benachrichtigungssystems)
pnpm run-overdue-check "YYYY-MM-DD HH:MM:SS"
Testen der Cron-Service-Port-Konnektivität
Um die Konnektivität des Cron-Dienstes zu testen, können Sie:
Prüfen Sie, ob der Cron-Dienst ausgeführt wird:
curl http://localhost:8667/health
- Oder verwenden Sie die Cron-Service-API-Endpunkte direkt über die Hauptanwendung:
curl http://localhost:8666/api/cron/health
- Verwenden Sie das Testskript, um die Port-Konnektivität zu bestätigen:
pnpm test-cron-port
Dieses Skript testet die Konnektivität zum Cron-Service-Port und liefert detaillierte Informationen zum Verbindungsstatus.
Testen der Überfällig-Erkennung
pnpm test-overdue-detection
Dieses Skript testet die Erkennungslogik für überfällige Sicherungen. Es überprüft:
- Identifikation überfälliger Sicherungen
- Auslösung von Benachrichtigungen
- Datums-/Zeitberechnungen für den Status "überfällig"
Nützlich zum Debuggen von Systemen zur Erkennung und Benachrichtigung überfälliger Sicherungen.
CSV-Exportieren validieren
pnpm validate-csv-export
Dieses Skript validiert die CSV-Exportfunktionalität. Es:
- Testet die CSV-Exportgenerierung
- Überprüft Datenformat und Struktur
- Prüft die Datenintegrität in exportierten Dateien
Nützlich, um sicherzustellen, dass CSV-Exporte vor Releases ordnungsgemäß funktionieren.
NTFY-Server vorübergehend blockieren (zum Testen)
sudo ./scripts/temporary_ntfy.sh_block.sh
Dieses Skript blockiert vorübergehend den ausgehenden Netzwerkzugriff auf den NTFY-Server (ntfy.sh), um den Wiederholungsmechanismus für Benachrichtigungen zu testen. Es:
- Löst die IP-Adresse des NTFY-Servers auf
- Fügt eine iptables-Regel hinzu, um ausgehenden Datenverkehr zu blockieren
- Blockiert für 10 Sekunden (konfigurierbar)
- Entfernt die Blockierungsregel beim Beenden automatisch
- Erfordert Root-Berechtigungen (sudo)
Caution
Dieses Skript ändert iptables-Regeln und erfordert Root-Privilegien. Verwenden Sie es nur zum Testen von Benachrichtigungs-Wiederholungsmechanismen.
Datenbankmigrationstests
Das Projekt enthält Skripte zum Testen von Datenbankmigrationen von älteren Versionen zur aktuellen Version. Diese Skripte stellen sicher, dass Datenbankmigrationen korrekt funktionieren und die Datenintegrität bewahrt bleibt.
Migrationstestdaten generieren
./scripts/generate-migration-test-data.sh
Dieses Skript generiert Testdatenbanken für mehrere historische Versionen der Anwendung. Es:
- Stoppt und entfernt jeden vorhandenen Docker-Container
- Für jede Version (v0.4.0, v0.5.0, v0.6.1, 0.7.27, 0.8.21):
- Entfernt vorhandene Datenbankdateien
- Erstellt eine Versions-Tag-Datei
- Startet einen Docker-Container mit der spezifischen Version
- Wartet, bis der Container bereit ist
- Generiert Testdaten mit
pnpm generate-test-data - Erstellt einen Screenshot der Benutzeroberfläche mit Testdaten
- Stoppt und entfernt den Container
- Leert WAL-Dateien und speichert das Datenbankschema
- Kopiert die Datenbankdatei nach
scripts/migration_test_data/
Anforderungen:
- Docker muss installiert und konfiguriert sein
- Google Chrome (über Puppeteer) muss installiert sein
- Root-/sudo-Zugriff für Docker-Operationen
- Das Docker-Volume
duplistatus_datamuss vorhanden sein
Ausgabe:
- Datenbankdateien:
scripts/migration_test_data/backups_<VERSION>.db - Schemadateien:
scripts/migration_test_data/backups_<VERSION>.schema - Screenshots:
scripts/migration_test_data/duplistatus_test_data_<VERSION>.png
Konfiguration:
- Anzahl der Server: Wird über die Variable
SERVERSfestgelegt (Standard: 3) - Datenverzeichnis:
/var/lib/docker/volumes/duplistatus_data/_data - Port: 9666 (Docker-Container-Port)
Caution
Dieses Skript erfordert Docker und stoppt/entfernt vorhandene Container. Es erfordert auch sudo-Zugriff für Docker-Operationen und Dateisystemzugriff. Das Skript pnpm take-screenshots muss zuerst ausgeführt werden, um Google Chrome zu installieren, falls noch nicht geschehen.
Important
Dieses Skript sollte nur einmal ausgeführt werden. Bei neuen Versionen kann der Entwickler die Datenbankdatei und Screenshots direkt in das Verzeichnis scripts/migration_test_data/ kopieren. Führen Sie während der Entwicklung einfach das Skript ./scripts/test-migrations.sh aus, um die Migrationen zu testen.
Testen von Datenbankmigrationen
./scripts/test-migrations.sh
Dieses Skript testet Datenbankmigrationen von alten Versionen zur aktuellen Version (4.0). Es:
- Für jede Version (v0.4.0, v0.5.0, v0.6.1, 0.7.27, 0.8.21):
- Erstellt eine temporäre Kopie der Testdatenbank
- Führt den Migrationsprozess mit
test-migration.tsaus - Validiert die Struktur der migrierten Datenbank
- Prüft auf erforderliche Tabellen und Spalten
- Überprüft, dass die Datenbankversion 4.0 ist
- Bereinigt temporäre Dateien
Anforderungen:
- Testdatenbanken müssen in
scripts/migration_test_data/vorhanden sein - Generiert durch vorheriges Ausführen von
generate-migration-test-data.sh
Ausgabe:
- Farbcodierte Testergebnisse (grün für bestanden, rot für fehlgeschlagen)
- Zusammenfassung bestandener und fehlgeschlagener Versionen
- Detaillierte Fehlermeldungen für fehlgeschlagene Migrationen
- Exit-Code 0, wenn alle Tests bestanden sind, 1 wenn einer fehlschlägt
Was wird validiert:
- Datenbankversion ist nach der Migration 4.0
- Alle erforderlichen Tabellen existieren:
servers,backups,configurations,users,sessions,audit_log,db_version - Erforderliche Spalten existieren in jeder Tabelle
- Datenbankstruktur ist korrekt
Beispielausgabe:
==========================================
Database Migration Test Suite
==========================================
Testing migrations from old versions to version 4.0
Test data directory: /path/to/migration_test_data
Temporary directory: /path/to/migration_test_data/.tmp
----------------------------------------
Testing version: v0.4.0
----------------------------------------
Copying database file to temporary location...
Running migration test...
✅ Version v0.4.0: Migration test PASSED
==========================================
Test Summary
==========================================
✅ Passed versions (5):
✓ v0.4.0
✓ v0.5.0
✓ v0.6.1
✓ 0.7.27
✓ 0.8.21
All migration tests passed!
Verwendung:
# Run all migration tests
./scripts/test-migrations.sh
# Check exit code
echo $? # 0 = all passed, 1 = some failed
Note
Dieses Skript verwendet intern das TypeScript-Migrationstestskript (test-migration.ts). Das Testskript validiert die Datenbankstruktur nach der Migration und stellt die Datenintegrität sicher.
SMTP-Testkonfiguration festlegen
pnpm set-smtp-test-config <connectionType>
Dieses Skript legt die SMTP-Testkonfiguration aus Umgebungsvariablen fest. Es akzeptiert einen connectionType-Parameter (plain, starttls oder ssl) und liest entsprechende Umgebungsvariablen mit Präfixen (PLAIN_, STARTTLS_, SSL_), um die SMTP-Konfiguration in der Datenbank zu aktualisieren.
Bei einfachen Verbindungen liest das Skript die Umgebungsvariable PLAIN_SMTP_FROM, um die erforderliche Absenderadresse festzulegen. Dies ermöglicht das Testen verschiedener SMTP-Verbindungstypen ohne manuelle Datenbankaktualisierungen.
Verwendung:
# Set Plain SMTP configuration
PLAIN_SMTP_HOST=smtp.example.com \
PLAIN_SMTP_PORT=25 \
PLAIN_SMTP_FROM=noreply@example.com \
pnpm set-smtp-test-config plain
# Set STARTTLS configuration
STARTTLS_SMTP_HOST=smtp.example.com \
STARTTLS_SMTP_PORT=587 \
STARTTLS_SMTP_USERNAME=user@example.com \
STARTTLS_SMTP_PASSWORD=password \
pnpm set-smtp-test-config starttls
# Set Direct SSL/TLS configuration
SSL_SMTP_HOST=smtp.example.com \
SSL_SMTP_PORT=465 \
SSL_SMTP_USERNAME=user@example.com \
SSL_SMTP_PASSWORD=password \
pnpm set-smtp-test-config ssl
Anforderungen:
- Die Anwendung muss ausgeführt werden
- Umgebungsvariablen müssen mit dem entsprechenden Präfix für den Verbindungstyp gesetzt werden
- Für einfache Verbindungen ist
PLAIN_SMTP_FROMerforderlich
Testen des SMTP-Verbindungstyps – Plattformübergreifende Kompatibilität
pnpm test-smtp-connections
Dieses Skript führt einen umfassenden 3x3-Matrix-Test durch, der überprüft, ob Konfigurationen, die für einen Verbindungstyp vorgesehen sind, korrekt mit verschiedenen Verbindungstypen funktionieren. Für jeden Basis-Konfigurationstyp (plain, starttls, ssl) führt das Skript:
- Liest Umgebungsvariablen mit entsprechenden Präfixen (
PLAIN_*,STARTTLS_*,SSL_*) - Testet alle drei Verbindungstypen durch Änderung nur des Feldes
connectionType - Sendet Test-E-Mails über die API
- Erfasst Ergebnisse in einem Matrixformat
- Zeigt eine Zusammenfassungstabelle an
- Speichert detaillierte Ergebnisse in
smtp-test-results.json
Verwendung:
# Set environment variables for all three connection types
PLAIN_SMTP_HOST=smtp.example.com \
PLAIN_SMTP_PORT=25 \
PLAIN_SMTP_FROM=noreply@example.com \
STARTTLS_SMTP_HOST=smtp.example.com \
STARTTLS_SMTP_PORT=587 \
STARTTLS_SMTP_USERNAME=user@example.com \
STARTTLS_SMTP_PASSWORD=password \
SSL_SMTP_HOST=smtp.example.com \
SSL_SMTP_PORT=465 \
SSL_SMTP_USERNAME=user@example.com \
SSL_SMTP_PASSWORD=password \
pnpm test-smtp-connections
Anforderungen:
- Die Anwendung muss ausgeführt werden
- Umgebungsvariablen müssen für alle drei Verbindungstypen festgelegt sein
- Das Skript validiert die verwendete Konfiguration durch detaillierte Protokollierung
Erwartet Verhalten: Konfigurationen sollten nur mit ihrem vorgesehenen Verbindungstyp funktionieren (z. B. einfache Konfiguration funktioniert mit einfachem Verbindungstyp, schlägt aber mit STARTTLS/SSL fehl).
Ausgabe:
- Konsolenausgabe mit einer Zusammenfassungstabelle mit Testergebnissen
smtp-test-results.jsonDatei mit detaillierten Testergebnissen für jede Kombination aus Konfiguration und Verbindungstyp
Testen des Docker-Entrypoint-Skripts
pnpm test-entrypoint
Dieses Skript bietet einen Test-Wrapper für docker-entrypoint.sh in der lokalen Entwicklung. Es richtet die Umgebung ein, um die Protokollierungsfunktionalität des Einstiegspunkts zu testen, und stellt sicher, dass Protokolle in data/logs/ geschrieben werden, damit die Anwendung darauf zugreifen kann.
Was es tut:
- Erstellt immer eine neue Version: Führt automatisch
pnpm build-localaus, um vor dem Testen einen neuen Build zu erstellen (kein manuelles Bauen erforderlich) - Erstellt den Cron-Service: Stellt sicher, dass der Cron-Service erstellt wird (
dist/cron-service.cjs) - Richtet eine Docker-ähnliche Struktur ein: Erstellt notwendige Symlinks und Verzeichnisstrukturen, um die Docker-Umgebung nachzuahmen
- Führt das Entrypoint-Skript aus: Führt
docker-entrypoint.shmit den richtigen Umgebungsvariablen aus - Räumt auf: Entfernt automatisch temporäre Dateien beim Beenden
Verwendung:
# Run the test (builds fresh version automatically)
pnpm test-entrypoint
Umgebungsvariablen:
PORT=8666- Port für den Next.js-Server (entsprichtstart-local)CRON_PORT=8667- Port für den Cron-ServiceVERSION- Wird automatisch im Formattest-YYYYMMDD-HHMMSSgesetzt
Ausgabe:
- Protokolle werden in
data/logs/application.loggeschrieben (zugänglich durch die Anwendung) - Die Konsolenausgabe zeigt die Ausführung des Einstiegspunktskripts
- Drücken Sie Strg+C zum Stoppen und Testen der Protokollpufferung
Anforderungen:
- Das Skript muss aus dem Repository-Stammverzeichnis ausgeführt werden (pnpm handhabt dies automatisch)
- Das Skript handhabt automatisch alle Voraussetzungen (Build, Cron-Service usw.)
Use Cases:
- Lokales Testen von Änderungen am Entrypoint-Skript vor der Docker-Bereitstellung
- Überprüfung der Protokollrotation und Protokollierungsfunktionalität
- Testen von ordnungsgemäßem Herunterfahren und Signalbehandlung
- Debugging des Verhaltens von Entrypoint-Skripten in einer lokalen Umgebung