#!/usr/bin/env bash # Regression test for etc/status.sh # - In k3d mode, it must not auto-select prole-k3s.kubeconfig via the fallback. # - It must call status_common_services.sh using SERVICE_NAMESPACE (not DB NAMESPACE). set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) PROLE_HOME_REPO=$(cd "$SCRIPT_DIR/../.." && pwd) ETC_DIR="$PROLE_HOME_REPO/etc" SCRIPT_UNDER_TEST="$ETC_DIR/status.sh" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT export TMP_DIR export PROLE_K3S_KUBECONFIG_PATH="$PROLE_HOME_REPO/prole-k3s.kubeconfig" BIN_DIR="$TMP_DIR/bin" mkdir -p "$BIN_DIR" cat <<'K_EOF' >"$BIN_DIR/kubectl" #!/usr/bin/env bash set -euo pipefail _log_file="${TMP_DIR}/mock_calls.log" echo "Mocked kubectl called with $*" >>"${_log_file}" args="$*" if [[ "$args" == "config current-context"* ]]; then echo "k3d-knoe-system" exit 0 fi if [[ "$args" == "config view --minify"* ]]; then echo "https://127.0.0.1:6443" exit 0 fi if [[ "$args" == "cluster-info"* ]]; then if [[ "${KUBECONFIG:-}" == "${PROLE_K3S_KUBECONFIG_PATH}" ]]; then echo "fallback-probe" >>"${TMP_DIR}/k3s_kubeconfig_probe" fi echo "Kubernetes control plane is running" exit 0 fi # Basic pods output so status.sh can iterate. if [[ "$args" == "get pods -o wide -A"* ]]; then echo "NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE" echo "kube-system coredns 1/1 Running 0 1h 10.0.0.1 node" exit 0 fi # Common services checks (SERVICE_NAMESPACE should be svc-ns) if [[ "$args" == "-n svc-ns get svc"* ]]; then echo "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE" echo "openbao ClusterIP 10.0.0.2 8200/TCP 1h" echo "garage ClusterIP 10.0.0.3 3900/TCP 1h" echo "opentofu ClusterIP 10.0.0.4 8080/TCP 1h" exit 0 fi if [[ "$args" == "-n svc-ns get svc auth"* ]]; then echo "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE" echo "auth ClusterIP 10.0.0.5 88/TCP 1h" exit 0 fi if [[ "$args" == "-n svc-ns get deploy"* || "$args" == "-n svc-ns get statefulset"* ]]; then exit 0 fi exit 0 K_EOF chmod +x "$BIN_DIR/kubectl" export PATH="$BIN_DIR:$PATH" # Provide a reachable prole-k3s.kubeconfig file (fallback must NOT probe it in k3d mode) touch "$PROLE_HOME_REPO/prole-k3s.kubeconfig" CFG_DIR="$TMP_DIR/conf" mkdir -p "$CFG_DIR" cat <"$CFG_DIR/prole.cfg" [User] NAMESPACE = db-ns SERVICE_NAMESPACE = svc-ns [Global] DEPLOYMENT_MODE = k3d C_EOF set +e STATUS_CHECK_TIMEOUT=2 bash "$SCRIPT_UNDER_TEST" -c "$CFG_DIR/prole.cfg" >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr" RC=$? set -e # We don't require rc=0; we only assert the correct calls were made. if [[ -f "$TMP_DIR/k3s_kubeconfig_probe" ]]; then echo "FAILURE: expected status.sh not to probe prole-k3s.kubeconfig via kubectl cluster-info in k3d mode" >&2 sed -n '1,200p' "$TMP_DIR/mock_calls.log" >&2 || true exit 1 fi if ! grep -q -- "-n svc-ns get svc opentofu garage openbao" "$TMP_DIR/mock_calls.log"; then echo "FAILURE: expected status_common_services.sh checks to use SERVICE_NAMESPACE (svc-ns)" >&2 sed -n '1,200p' "$TMP_DIR/mock_calls.log" >&2 || true exit 1 fi echo "SUCCESS"