Files
KX-Bridge-Release/tests/test_install.sh

110 lines
4.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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