--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:
1 parent
bca72afbe8
commit
2aa9b70b29
4 files changed
+124
-14
No files matched your search
@@ -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'
|
||||
Reference in new issue
Block a user