#!/usr/bin/env bash # Regression test: etc/init_kdc.sh should treat local registry as enabled by default in k3s mode # (matching etc/prole_cfg.sh defaults), so it must not fail with “No registry host configured for k3s”. set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) PROLE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd) SOURCE_ETC_DIR="$PROLE_HOME/etc" 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" "$WORK_DIR/conf" "$WORK_DIR/authority" "$BIN_DIR" cp "$SOURCE_ETC_DIR/init_kdc.sh" "$WORK_DIR/etc/init_kdc.sh" cp "$SOURCE_ETC_DIR/prole_cfg.sh" "$WORK_DIR/etc/prole_cfg.sh" chmod +x "$WORK_DIR/etc/init_kdc.sh" cat < "$WORK_DIR/env.sh" #!/usr/bin/env bash export PROLE_HOME="$WORK_DIR" export PROLE_CONF="$WORK_DIR/conf" EOF cat < "$WORK_DIR/conf/prole.cfg" [globals] prole.home = $WORK_DIR prole.mode = k3s NAMESPACE = prole-db-a0001 EOF export KUBECTL_LOG="$TMP_DIR/kubectl.log" export DOCKER_LOG="$TMP_DIR/docker.log" cat <<'EOF' > "$BIN_DIR/kubectl" #!/usr/bin/env bash set -euo pipefail args=("$@") printf '%s\n' "${args[*]}" >> "${KUBECTL_LOG}" sub="${1:-}" case "$sub" in config) case "${2:-}" in current-context) printf '%s' "docker-desktop" exit 0 ;; use-context|get-contexts) exit 0 ;; esac exit 0 ;; get) # For namespace existence checks, succeed. if [[ "${2:-}" == "namespace" ]]; then exit 0 fi # For deployment checks, report missing to exercise the deploy-time timeout path. if [[ "${2:-}" == "deploy" || "${2:-}" == "deployment" ]]; then exit 1 fi exit 0 ;; create) # init_kdc.sh pipes YAML from create-secret into kubectl apply. if [[ "${2:-}" == "secret" ]]; then cat </dev/null || true exit 0 ;; rollout|wait|exec|delete|describe|logs|patch) exit 0 ;; *) exit 0 ;; esac EOF chmod +x "$BIN_DIR/kubectl" cat <<'EOF' > "$BIN_DIR/docker" #!/usr/bin/env bash set -euo pipefail args=("$@") printf '%s\n' "${args[*]}" >> "${DOCKER_LOG}" case "${1:-}" in info|build|tag|push) exit 0 ;; esac exit 0 EOF chmod +x "$BIN_DIR/docker" export PATH="$BIN_DIR:$PATH" export PROLE_HOME="$WORK_DIR" export PROLE_CONF="$WORK_DIR/conf" export PROLE_MODE="k3s" # Avoid secret generation paths (python/openssl) by providing explicit values. export PROLE_KDC_ADMIN_PASSWORD="test-admin" export PROLE_KDC_MASTER_PASSWORD="test-master" export PROLE_KDC_TRUST_PASSWORD="test-trust" export PROLE_KDC_TRUST_SHARED_PASSWORD="test-shared" if "$WORK_DIR/etc/init_kdc.sh" update >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr"; then : else echo "FAILURE: init_kdc.sh update exited non-zero" cat "$TMP_DIR/stderr" exit 1 fi if grep -q "No registry host configured for k3s" "$TMP_DIR/stderr"; then echo "FAILURE: unexpected missing-registry-host error for k3s mode" cat "$TMP_DIR/stderr" exit 1 fi if ! grep -q "push" "$DOCKER_LOG"; then echo "FAILURE: expected docker push to be attempted" cat "$DOCKER_LOG" exit 1 fi if ! grep -q "push localhost:5000/prole-authority:latest" "$DOCKER_LOG"; then echo "FAILURE: expected docker push to default localhost registry in k3s mode" cat "$DOCKER_LOG" exit 1 fi echo "SUCCESS"