prole/tests/etc/test_init_registry_k3d_cluster_from_kubectx.sh

112 lines
2.6 KiB
Bash

#!/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 <<C_EOF > "$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"