#!/usr/bin/env bash # Regression test: etc/init_kong.sh should not leak a RETURN trap that later # triggers `tmp: unbound variable` under `set -u`. set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) PROLE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd) SOURCE_ETC_DIR="$PROLE_HOME/etc" SOURCE_ETC_LIB_SHELL_DIR="$PROLE_HOME/etc/lib/shell" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT WORK_DIR="$TMP_DIR/work" BIN_DIR="$TMP_DIR/bin" mkdir -p "$WORK_DIR/etc/lib/shell" "$WORK_DIR/conf" "$BIN_DIR" cp "$SOURCE_ETC_DIR/init_kong.sh" "$WORK_DIR/etc/init_kong.sh" cp "$SOURCE_ETC_DIR/common_core_lib.sh" "$WORK_DIR/etc/common_core_lib.sh" cp "$SOURCE_ETC_LIB_SHELL_DIR/common_core_lib.sh" "$WORK_DIR/etc/lib/shell/common_core_lib.sh" cp "$SOURCE_ETC_DIR/prole_cfg.sh" "$WORK_DIR/etc/prole_cfg.sh" chmod +x "$WORK_DIR/etc/init_kong.sh" cat < "$WORK_DIR/conf/prole.cfg" [globals] prole.home = $WORK_DIR prole.mode = k3s NAMESPACE = knoe-db-a0001 SERVICE_NAMESPACE = knoe-system EOF export KUBECTL_LOG="$TMP_DIR/kubectl.log" cat <<'EOF' > "$BIN_DIR/kubectl" #!/usr/bin/env bash set -euo pipefail args=("$@") printf '%s\n' "${args[*]}" >> "${KUBECTL_LOG}" # Skip global options like --request-timeout=... while [[ "${1:-}" == --* ]]; do shift done sub="${1:-}" case "$sub" in config) case "${2:-}" in current-context) printf '%s' "default" exit 0 ;; use-context|get-contexts) exit 0 ;; esac exit 0 ;; get|create|apply|rollout|wait|exec|delete|describe|logs|patch) # Always succeed; this test focuses on avoiding trap/unbound-variable issues. if [[ "$sub" == "create" && "${2:-}" == "configmap" ]]; then # init_kong.sh expects YAML on stdout when using --dry-run=client -o yaml. cat <"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr"; then : else echo "FAILURE: init_kong.sh update exited non-zero" >&2 cat "$TMP_DIR/stderr" >&2 exit 1 fi if grep -q "unbound variable" "$TMP_DIR/stderr"; then echo "FAILURE: stderr contains an unbound-variable error" >&2 cat "$TMP_DIR/stderr" >&2 exit 1 fi if grep -q "tmp: unbound variable" "$TMP_DIR/stderr"; then echo "FAILURE: stderr contains 'tmp: unbound variable'" >&2 cat "$TMP_DIR/stderr" >&2 exit 1 fi echo "SUCCESS"