#!/usr/bin/env bash # scripts/k3d-knoe-smoke.sh # Smoke-test the k3d-knoe dev cluster. # # Requires: make k3d-knoe-up completed successfully. # Does NOT require make k3d-knoe-pf (uses kubectl exec for DB check). # # Checks: # 1. CNPG cluster knoe-db is in healthy state # 2. knoe.* schema has ≥6 tables # 3. KDC deployment is 1/1 ready # 4. admin/admin@KNOE.LOCAL principal exists in the KDC set -euo pipefail ctx=k3d-k3d-knoe ns_db=knoe-db-0 ns_sys=knoe-system PASS=0 FAIL=0 ok() { echo " ✓ $*"; PASS=$((PASS+1)); } fail() { echo " ✗ $*" >&2; FAIL=$((FAIL+1)); } echo "" echo "=== k3d-knoe smoke test ===" echo "" # 1. CNPG cluster healthy echo "1. CNPG cluster phase..." phase=$(kubectl --context="$ctx" -n "$ns_db" get cluster knoe-db \ -o jsonpath='{.status.phase}' 2>/dev/null || echo "") if [[ "$phase" == "Cluster in healthy state" ]]; then ok "CNPG cluster: $phase" else fail "CNPG cluster phase: '$phase' (expected 'Cluster in healthy state')" fi # 2. knoe.* schema present (≥6 tables) echo "2. knoe.* schema tables..." pod=$(kubectl --context="$ctx" -n "$ns_db" \ get pod -l cnpg.io/cluster=knoe-db,role=primary \ -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "") if [[ -z "$pod" ]]; then fail "Cannot find CNPG primary pod" else tables=$(kubectl --context="$ctx" -n "$ns_db" exec "$pod" -c postgres -- \ psql -U postgres -tAc \ "SELECT count(*) FROM information_schema.tables WHERE table_schema='knoe'" \ 2>/dev/null || echo "0") tables="${tables//[[:space:]]/}" if [[ "$tables" =~ ^[0-9]+$ ]] && [[ "$tables" -ge 6 ]]; then ok "knoe.* tables: $tables (≥6)" else fail "knoe.* tables: $tables (expected ≥6) — schema may not be applied yet" fi fi # 3. KDC deployment ready echo "3. KDC deployment readiness..." ready=$(kubectl --context="$ctx" -n "$ns_sys" get deploy knoe-kdc \ -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo "0") if [[ "${ready:-0}" -ge 1 ]]; then ok "knoe-kdc deployment: ${ready}/1 ready" else fail "knoe-kdc deployment: ${ready:-0}/1 ready" fi # 4. admin/admin@KNOE.LOCAL principal exists echo "4. KDC admin principal..." kdc_pod=$(kubectl --context="$ctx" -n "$ns_sys" \ get pod -l app=knoe-kdc \ -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "") if [[ -z "$kdc_pod" ]]; then fail "Cannot find knoe-kdc pod" else if kubectl --context="$ctx" -n "$ns_sys" exec "$kdc_pod" -- \ kadmin.local listprincs 2>/dev/null | grep -q 'admin/admin@KNOE.LOCAL'; then ok "admin/admin@KNOE.LOCAL principal exists" else fail "admin/admin@KNOE.LOCAL principal not found in KDC" fi fi # ── Summary ─────────────────────────────────────────────────────────────────── echo "" echo "=== Results: $PASS passed, $FAIL failed ===" echo "" if [[ $FAIL -gt 0 ]]; then echo "Some checks failed. See above for details." >&2 exit 1 fi echo "k3d-knoe-smoke: PASS" echo "" echo "Next steps:" echo " make k3d-knoe-pf &" echo " export KRB5_CONFIG=\$PWD/etc/krb5.local.conf" echo " mvn -pl authority spring-boot:run"