#!/usr/bin/env bash # test-helper.sh — Test de podman-helper direct op de host # Gebruik: ./test-helper.sh (standaard: test-web.service) set -euo pipefail UNIT="${1:-test-web.service}" SOCKET="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/podman-helper.sock" GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m' ok() { echo -e "${GREEN}✓${NC} $*"; } fail() { echo -e "${RED}✗${NC} $*"; } send() { local action="$1" local result result=$(echo "{\"action\": \"$action\", \"unit\": \"$UNIT\"}" | \ socat - UNIX-CONNECT:"$SOCKET" 2>/dev/null) echo "$result" } echo "Socket: $SOCKET" echo "Unit: $UNIT" echo "" # Check socat command -v socat &>/dev/null || { echo "socat niet gevonden — installeer: sudo apt install socat"; exit 1; } # Check socket [[ -S "$SOCKET" ]] || { fail "Socket niet gevonden. Is podman-helper.service actief?"; exit 1; } # ── Test 1: stop ────────────────────────────────────────────────────────────── echo "Test 1: stop" systemctl --user start "$UNIT" 2>/dev/null || true sleep 2 RESULT=$(send "stop") echo " Response: $RESULT" sleep 5 STATE=$(systemctl --user is-active "$UNIT" 2>/dev/null || true) echo " State na stop: $STATE" [[ "$STATE" == "inactive" ]] && ok "Stop werkt" || fail "Stop mislukt (state: $STATE)" echo "" # ── Test 2: start ───────────────────────────────────────────────────────────── echo "Test 2: start" RESULT=$(send "start") echo " Response: $RESULT" sleep 5 STATE=$(systemctl --user is-active "$UNIT" 2>/dev/null || true) echo " State na start: $STATE" [[ "$STATE" == "active" ]] && ok "Start werkt" || fail "Start mislukt (state: $STATE)" echo "" # ── Test 3: restart ─────────────────────────────────────────────────────────── echo "Test 3: restart" RESULT=$(send "restart") echo " Response: $RESULT" sleep 5 STATE=$(systemctl --user is-active "$UNIT" 2>/dev/null || true) echo " State na restart: $STATE" [[ "$STATE" == "active" ]] && ok "Restart werkt" || fail "Restart mislukt (state: $STATE)" echo "" # ── Test 4: ongeldige actie (whitelist check) ───────────────────────────────── echo "Test 4: ongeldige actie (whitelist)" RESULT=$(echo '{"action": "kill", "unit": "'"$UNIT"'"}' | \ socat - UNIX-CONNECT:"$SOCKET" 2>/dev/null) echo " Response: $RESULT" echo "$RESULT" | grep -q '"ok": false' && ok "Whitelist werkt" || fail "Whitelist werkt NIET" echo "" # ── Test 5: gelijktijdige aanvragen ─────────────────────────────────────────── echo "Test 5: gelijktijdig (5 status aanvragen)" for i in {1..5}; do echo '{"action": "restart", "unit": "'"$UNIT"'"}' | \ socat - UNIX-CONNECT:"$SOCKET" 2>/dev/null & done wait sleep 5 STATE=$(systemctl --user is-active "$UNIT" 2>/dev/null || true) echo " State na gelijktijdige aanvragen: $STATE" [[ "$STATE" == "active" ]] && ok "Gelijktijdig werkt" || fail "Gelijktijdig mislukt (state: $STATE)" echo "" echo "Tests klaar."