#!/usr/bin/env bash # Regression test: in k3d mode, init_registry.sh should derive K3D cluster name # from the active kubectl context when K3D_CLUSTER_NAME is unset. set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) KNOE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd) ETC_DIR="$KNOE_HOME/etc" SCRIPT_UNDER_TEST="$ETC_DIR/init_registry.sh" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT export PROLE_TEST_TMP_DIR="$TMP_DIR" # Mock tools cat > "$TMP_DIR/kubectl" <<'EOF' #!/usr/bin/env bash set -euo pipefail LOG_DIR="${PROLE_TEST_TMP_DIR:-/tmp}" if [[ "${1:-}" == "config" && "${2:-}" == "current-context" ]]; then echo "k3d-knoe-system" exit 0 fi # If kubectl is being fed a manifest via stdin (e.g. `-f -`), consume it so # upstream renderers don't fail with SIGPIPE under `set -o pipefail`. for ((i=1; i<=$#; i++)); do if [[ "${!i}" == "-f" ]]; then j=$((i+1)) if [[ "${!j:-}" == "-" ]]; then cat >/dev/null || true break fi fi done echo "kubectl called with $*" >> "${LOG_DIR}/mock_calls.log" exit 0 EOF cat > "$TMP_DIR/docker" <<'EOF' #!/usr/bin/env bash set -euo pipefail LOG_DIR="${PROLE_TEST_TMP_DIR:-/tmp}" echo "docker called with $*" >> "${LOG_DIR}/mock_calls.log" exit 0 EOF cat > "$TMP_DIR/k3d" <<'EOF' #!/usr/bin/env bash set -euo pipefail LOG_DIR="${PROLE_TEST_TMP_DIR:-/tmp}" echo "k3d called with $*" >> "${LOG_DIR}/mock_calls.log" exit 0 EOF cat > "$TMP_DIR/curl" <<'EOF' #!/usr/bin/env bash set -euo pipefail LOG_DIR="${PROLE_TEST_TMP_DIR:-/tmp}" echo "curl called with $*" >> "${LOG_DIR}/mock_calls.log" exit 0 EOF chmod +x "$TMP_DIR/kubectl" "$TMP_DIR/docker" "$TMP_DIR/k3d" "$TMP_DIR/curl" # Minimal knoe.cfg mkdir -p "$TMP_DIR/conf" cat < "$TMP_DIR/conf/knoe.cfg" [globals] knoe.home = $KNOE_HOME knoe.mode = k3d [k3s] server = https://localhost:6443 token = test-token C_EOF export PATH="$TMP_DIR:$PATH" export KNOE_HOME="$KNOE_HOME" export KNOE_CONF="$TMP_DIR/conf" # Ensure we are testing kubectl-context based resolution. unset K3D_CLUSTER_NAME set +e bash "$SCRIPT_UNDER_TEST" initialize >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr" RC=$? set -e if [[ $RC -ne 0 ]]; then echo "FAILURE: init_registry.sh exited $RC" echo "--- stderr ---" cat "$TMP_DIR/stderr" || true exit 1 fi if ! grep -q "docker called with network connect --alias k3d-knoe-registry k3d-knoe-system k3d-knoe-registry" "$TMP_DIR/mock_calls.log"; then echo "FAILURE: expected registry network connect to target k3d-knoe-system network (derived from kubectx)" echo "--- mock_calls.log ---" cat "$TMP_DIR/mock_calls.log" || true exit 1 fi echo "SUCCESS"