--force reparieren, Tests ergänzen, Aufräumen

- --force erlaubt jetzt tatsächlich das Downgrade auf Stable/Beta
  (der Downgrade-Block war vorher unerreichbar)
- test.sh: Tests für cmp_versions und die Update-Entscheidung
  (gefakete curl/ollama, kein Netz nötig)
- --help: stdout + Exit 0; unbekannte Argumente werden benannt
- tote Zeilen entfernt (nullglob, basename-Zeremonie)
- README: Nummerierung und nullglob-Erwähnung korrigiert
This commit is contained in:
Tim committed 2026-10-18 00:06:38 +02:00
1 parent bca72afbe8
commit 2aa9b70b29
4 files changed
+124 -14

No files matched your search

Executable
+91
View File
@@ -0,0 +1,91 @@
#!/bin/bash
# Selbst-Test für ollama-update: Versionsvergleich und Update-Entscheidung.
# Benötigt keine Netzverbindung und installiert nichts (curl/ollama werden gefälscht).
set -euo pipefail
cd "$(dirname "$0")"
fails=0
check() { # check <Beschreibung> <erwartet> <bekommen>
if [[ "$2" == "$3" ]]; then
printf 'ok: %s\n' "$1"
else
printf 'FEHLER: %s — erwartet %q, bekommen %q\n' "$1" "$2" "$3" >&2
fails=$((fails + 1))
fi
}
# --- cmp_versions ---
source ./ollama-update
check "gleich" "0" "$(cmp_versions 0.5.7 0.5.7)"
check "neuer" "1" "$(cmp_versions 0.5.8 0.5.7)"
check "aelter" "-1" "$(cmp_versions 0.5.7 0.5.8)"
check "fehlende Stelle = 0" "0" "$(cmp_versions 0.5 0.5.0)"
check "zweistellig" "1" "$(cmp_versions 0.10.0 0.9.9)"
check "stable ueber rc" "1" "$(cmp_versions 0.5.7 0.5.7-rc1)"
check "rc unter stable" "-1" "$(cmp_versions 0.5.7-rc1 0.5.7)"
check "rc2 ueber rc1" "1" "$(cmp_versions 0.5.7-rc2 0.5.7-rc1)"
check "rc10 ueber rc2" "1" "$(cmp_versions 0.5.7-rc10 0.5.7-rc2)"
check "v-Praefix ignoriert" "0" "$(cmp_versions v0.5.7 0.5.7)"
# --- Entscheidungs-Matrix mit gefälschten curl/ollama ---
# GitHub liefert stable=v0.5.7 und beta=v0.6.0-rc1; install.sh ist ein Stub.
tmpbin=$(mktemp -d)
trap 'rm -rf "$tmpbin"' EXIT
cat > "$tmpbin/curl" <<'EOF'
#!/bin/bash
url=""; out=""
while [[ $# -gt 0 ]]; do
case "$1" in
-o) out=$2; shift 2 ;;
-*) shift ;;
*) url=$1; shift ;;
esac
done
if [[ "$url" == *install.sh ]]; then
printf '#!/bin/bash\nexit 0\n' > "$out"
elif [[ "$url" == *releases/latest ]]; then
printf '{\n "tag_name": "v0.5.7"\n}\n'
else
printf '[\n {\n "tag_name": "v0.6.0-rc1"\n }\n]\n'
fi
EOF
cat > "$tmpbin/ollama" <<'EOF'
#!/bin/bash
if [[ "${FAKE_LOCAL_VERSION:-}" == "none" ]]; then
exit 1
fi
printf 'ollama version is %s\n' "${FAKE_LOCAL_VERSION:-0.5.7}"
EOF
chmod +x "$tmpbin/curl" "$tmpbin/ollama"
expect() { # expect <Beschreibung> <erwarteter Text> <lokale Version> [Argumente...]
local desc=$1 pattern=$2 ver=$3
shift 3
local out
out=$(PATH="$tmpbin:$PATH" FAKE_LOCAL_VERSION="$ver" ./ollama-update "$@" 2>&1 || true)
if grep -qF -- "$pattern" <<< "$out"; then
printf 'ok: %s\n' "$desc"
else
printf 'FEHLER: %s — erwartet %q, bekommen:\n%s\n' "$desc" "$pattern" "$out" >&2
fails=$((fails + 1))
fi
}
expect "aktuell: kein Update" "Kein Update erforderlich." 0.5.7
expect "stable-Update" "Update verfuegbar: 0.5.6 -> 0.5.7" 0.5.6
expect "beta-Update" "Beta-Update verfuegbar: 0.5.7 -> 0.6.0-rc1" 0.5.7 --beta
expect "downgrade ohne --force blockiert" "Kein Update erforderlich." 0.9.9
expect "downgrade mit --force" "Downgrade wird erzwungen: 0.9.9 -> 0.5.7" 0.9.9 --force
expect "beta-downgrade mit --force" "Downgrade wird erzwungen: 0.9.9 -> 0.6.0-rc1" 0.9.9 --beta --force
expect "nicht installiert: stable" "Installation der Stable 0.5.7" none
expect "nicht installiert: beta" "Installation der Beta 0.6.0-rc1" none --beta
if [[ "$fails" -gt 0 ]]; then
printf '%d Test(s) fehlgeschlagen\n' "$fails" >&2
exit 1
fi
printf 'Alle Tests bestanden.\n'