6a6ce52cf9
- Race Condition behoben: Pre-Sync wird vollstaendig abgewartet bevor Darktable startet - Post-Sync nach Schliessen von Darktable eingefuehrt (bisher fehlend) - .env aus festem Pfad ~/.config/darktable-sync/.env geladen (nicht mehr relativ) - Server-Erreichbarkeit per SSH statt ping (Firewall-sicher) - Darktable-Versionscheck (Major.Minor) vor Download mit Abbruch bei Konflikt - DB-Backup vor jedem Download (library.db.bak, data.db.bak) - sync_pending-Marker bei Offline/Fehler, Hinweis beim naechsten Start - darktable.active-Marker auf Server fuer Concurrent-Erkennung - Lock-Dateien vom Sync ausgeschlossen - systemd-Timer entfernt, Service bleibt als manueller Trigger - Gemeinsame Hilfsfunktionen in darktable_common.sh extrahiert - 20 BATS-Tests mit vollstaendigem Stub-System ohne GUI-Dialoge Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79 lines
2.4 KiB
Bash
79 lines
2.4 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load helpers/setup
|
|
|
|
WRAPPER_SCRIPT="$BATS_TEST_DIRNAME/../scripts/darktable_wrapper.sh"
|
|
|
|
setup() {
|
|
create_valid_env
|
|
mkdir -p "$HOME/.local/bin"
|
|
|
|
# Sync-Stub: tut nichts
|
|
cat > "$HOME/.local/bin/darktable_sync.sh" <<'EOF'
|
|
#!/bin/bash
|
|
exit 0
|
|
EOF
|
|
chmod +x "$HOME/.local/bin/darktable_sync.sh"
|
|
|
|
# Lokale Stubs in einem eigenen Verzeichnis pro Test (kein Überschreiben der globalen Stubs)
|
|
LOCAL_STUBS="$BATS_TMPDIR/stubs"
|
|
mkdir -p "$LOCAL_STUBS"
|
|
export LOCAL_STUBS
|
|
|
|
# Alle Stubs kopieren (verhindert echte Dialoge und GUI-Aufrufe)
|
|
cp "$BATS_TEST_DIRNAME/stubs/ssh" "$LOCAL_STUBS/ssh"
|
|
cp "$BATS_TEST_DIRNAME/stubs/notify-send" "$LOCAL_STUBS/notify-send"
|
|
cp "$BATS_TEST_DIRNAME/stubs/darktable" "$LOCAL_STUBS/darktable"
|
|
cp "$BATS_TEST_DIRNAME/stubs/pgrep" "$LOCAL_STUBS/pgrep"
|
|
cp "$BATS_TEST_DIRNAME/stubs/zenity" "$LOCAL_STUBS/zenity"
|
|
cp "$BATS_TEST_DIRNAME/stubs/kdialog" "$LOCAL_STUBS/kdialog"
|
|
chmod +x "$LOCAL_STUBS/"*
|
|
|
|
export DISPLAY=:99
|
|
}
|
|
|
|
@test "Server nicht erreichbar + Dialog abgelehnt: kein Darktable-Start, Exit 0" {
|
|
run env PATH="$LOCAL_STUBS:$PATH" SSH_STUB_FAIL=1 \
|
|
bash -c "echo 'n' | bash '$WRAPPER_SCRIPT'"
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "Server nicht erreichbar + Dialog bestaetigt: Darktable startet" {
|
|
STARTED_FILE="$BATS_TMPDIR/darktable_started"
|
|
cat > "$LOCAL_STUBS/darktable" <<EOF
|
|
#!/bin/bash
|
|
if [[ "\${1:-}" == "--version" ]]; then echo "this is darktable 5.0.1"; exit 0; fi
|
|
touch "$STARTED_FILE"
|
|
exit 0
|
|
EOF
|
|
chmod +x "$LOCAL_STUBS/darktable"
|
|
|
|
run env PATH="$LOCAL_STUBS:$PATH" SSH_STUB_FAIL=1 \
|
|
bash -c "echo 'j' | bash '$WRAPPER_SCRIPT'"
|
|
[ -f "$STARTED_FILE" ]
|
|
}
|
|
|
|
@test "Post-Sync schlaegt fehl: sync_pending gesetzt" {
|
|
SSH_CALL_COUNT="$BATS_TMPDIR/ssh_call_count"
|
|
echo "0" > "$SSH_CALL_COUNT"
|
|
|
|
cat > "$LOCAL_STUBS/ssh" <<EOF
|
|
#!/bin/bash
|
|
count=\$(cat "$SSH_CALL_COUNT")
|
|
count=\$((count + 1))
|
|
echo "\$count" > "$SSH_CALL_COUNT"
|
|
# Ab Aufruf 3 fehlschlagen (Post-Sync-Erreichbarkeitstest)
|
|
if [ "\$count" -ge 3 ]; then exit 1; fi
|
|
exit 0
|
|
EOF
|
|
chmod +x "$LOCAL_STUBS/ssh"
|
|
|
|
run env PATH="$LOCAL_STUBS:$PATH" SSH_STUB_FAIL=0 bash "$WRAPPER_SCRIPT"
|
|
[ -f "$CONFIG_DIR/sync_pending" ]
|
|
}
|
|
|
|
@test "Darktable laeuft bereits: Abbruch mit Exit 1" {
|
|
run env PATH="$LOCAL_STUBS:$PATH" PGREP_STUB_FOUND=1 bash "$WRAPPER_SCRIPT"
|
|
[ "$status" -eq 1 ]
|
|
}
|