110 lines
4.8 KiB
Bash
110 lines
4.8 KiB
Bash
#!/usr/bin/env bash
|
||
# test_install.sh – Smoke-Test: Release-Repo klonen, start.sh ausführen, HTTP prüfen.
|
||
#
|
||
# Simuliert den Weg eines anonymen Nutzers:
|
||
# 1. Release-Repo klonen
|
||
# 2. start.sh ausführen (baut Docker-Image, startet Container)
|
||
# 3. HTTP-Endpunkte prüfen
|
||
# 4. Aufräumen
|
||
#
|
||
# Voraussetzung: Docker installiert, Port 7125 frei
|
||
#
|
||
# Verwendung:
|
||
# bash tests/test_install.sh
|
||
|
||
set -euo pipefail
|
||
|
||
GITEA_URL="https://gitea.it-drui.de/viewit/KX-Bridge-Release"
|
||
WORK_DIR=$(mktemp -d /tmp/kx-bridge-test-XXXXXX)
|
||
PASS=0; FAIL=0
|
||
|
||
ok() { echo " ✓ $*"; PASS=$((PASS+1)); }
|
||
fail() { echo " ✗ $*"; FAIL=$((FAIL+1)); }
|
||
|
||
cleanup() {
|
||
echo ""
|
||
echo "[cleanup] Stoppe Container und lösche Testverzeichnis ..."
|
||
cd "$WORK_DIR/KX-Bridge-Release" 2>/dev/null && docker-compose down 2>/dev/null || true
|
||
rm -rf "$WORK_DIR"
|
||
}
|
||
trap cleanup EXIT
|
||
|
||
echo "=== KX-Bridge Installations-Smoke-Test ==="
|
||
echo ""
|
||
|
||
# ── Schritt 1: Repo klonen ────────────────────────────────────────────────────
|
||
echo "[1/5] Klone Release-Repo ..."
|
||
git clone --depth=1 "$GITEA_URL" "$WORK_DIR/KX-Bridge-Release" > /dev/null 2>&1 \
|
||
&& ok "Repo geklont" \
|
||
|| { fail "git clone fehlgeschlagen"; exit 1; }
|
||
|
||
cd "$WORK_DIR/KX-Bridge-Release"
|
||
|
||
# ── Schritt 2: Erwartete Dateien vorhanden ────────────────────────────────────
|
||
echo "[2/5] Prüfe Dateien im Repo ..."
|
||
for f in start.sh docker-compose.yml Dockerfile kobrax_moonraker_bridge.py \
|
||
anycubic_slicer.crt anycubic_slicer.key .env.example; do
|
||
[[ -f "$f" ]] && ok "$f vorhanden" || fail "$f FEHLT"
|
||
done
|
||
|
||
# Dockerfile darf keine 05_scripts/-Pfade enthalten
|
||
if grep -q "05_scripts/" Dockerfile; then
|
||
fail "Dockerfile enthält '05_scripts/' – falsches Dockerfile im Release-Repo!"
|
||
else
|
||
ok "Dockerfile Pfade korrekt (kein 05_scripts/-Präfix)"
|
||
fi
|
||
|
||
# ── Schritt 3: start.sh ausführen ────────────────────────────────────────────
|
||
echo "[3/5] Führe start.sh aus ..."
|
||
chmod +x start.sh
|
||
./start.sh > /tmp/kx-bridge-start.log 2>&1 \
|
||
&& ok "start.sh erfolgreich" \
|
||
|| { fail "start.sh fehlgeschlagen (siehe /tmp/kx-bridge-start.log)"; cat /tmp/kx-bridge-start.log; exit 1; }
|
||
|
||
# Kurz warten bis Bridge hochgefahren
|
||
sleep 3
|
||
|
||
# ── Schritt 4: HTTP-Endpunkte prüfen ─────────────────────────────────────────
|
||
echo "[4/5] Prüfe HTTP-Endpunkte ..."
|
||
BASE="http://localhost:7125"
|
||
|
||
check_endpoint() {
|
||
local path="$1"
|
||
local desc="$2"
|
||
local http_code
|
||
http_code=$(curl -s -o /dev/null -w "%{http_code}" "$BASE$path")
|
||
[[ "$http_code" == "200" ]] \
|
||
&& ok "$desc ($path → $http_code)" \
|
||
|| fail "$desc ($path → $http_code)"
|
||
}
|
||
|
||
check_endpoint "/" "Web-UI (index.html)"
|
||
check_endpoint "/api/state" "GET /api/state"
|
||
check_endpoint "/api/settings" "GET /api/settings"
|
||
check_endpoint "/server/info" "GET /server/info (Moonraker)"
|
||
check_endpoint "/printer/info" "GET /printer/info (Moonraker)"
|
||
check_endpoint "/printer/objects/list" "GET /printer/objects/list"
|
||
check_endpoint "/api/version" "GET /api/version (OctoPrint compat)"
|
||
|
||
# Beim ersten Start: printer_ip muss leer sein → Settings-Modal würde sich öffnen
|
||
SETTINGS=$(curl -s "$BASE/api/settings")
|
||
PRINTER_IP=$(echo "$SETTINGS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('printer_ip',''))" 2>/dev/null || echo "ERROR")
|
||
[[ -z "$PRINTER_IP" ]] \
|
||
&& ok "Erstkonfiguration erkannt: printer_ip leer → Settings-Modal öffnet sich" \
|
||
|| fail "printer_ip sollte beim Erststart leer sein, ist: '$PRINTER_IP'"
|
||
|
||
# ── Schritt 5: Container läuft stabil ────────────────────────────────────────
|
||
echo "[5/5] Prüfe Container-Stabilität ..."
|
||
sleep 2
|
||
RUNNING=$(docker-compose ps --services --filter "status=running" 2>/dev/null || true)
|
||
[[ -n "$RUNNING" ]] \
|
||
&& ok "Container läuft stabil" \
|
||
|| fail "Container ist nicht mehr aktiv"
|
||
|
||
# ── Ergebnis ──────────────────────────────────────────────────────────────────
|
||
echo ""
|
||
echo "══════════════════════════════════════"
|
||
echo " Ergebnis: $PASS bestanden, $FAIL fehlgeschlagen"
|
||
echo "══════════════════════════════════════"
|
||
[[ $FAIL -eq 0 ]] && exit 0 || exit 1
|