mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 11:03:59 +00:00
112 lines
2.6 KiB
Bash
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"
|