prole/tests/etc/test_status_k3d_common_services_namespace.sh
chrisfu ce5ff83eb4 checkpoint: improve init scripts, installer flows, and kube context handling
- Fix kube context switching for k3s single-context kubeconfigs and k3d shorthand prefixes

- Update common init/status scripts (registry, kerberos, cnpg backup, service layer, common services)

- Add Gitea init script and installer ArgoCD screen

- Add Supabase realtime probe patching plus regression tests

- Extend installer core/UI test coverage
2026-03-14 20:07:54 -07:00

113 lines
3.1 KiB
Bash

#!/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 <none> 8200/TCP 1h"
echo "garage ClusterIP 10.0.0.3 <none> 3900/TCP 1h"
echo "opentofu ClusterIP 10.0.0.4 <none> 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 <none> 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 <<C_EOF >"$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"