prole/tests/etc/test_init_openbao_recycles_released_pv_claimref.sh

127 lines
3.1 KiB
Bash

#!/usr/bin/env bash
# Regression test: OpenBao restart should auto-recycle a Released synology-iscsi PV with a stale
# claimRef when the PVC is Pending and rollout is stuck beyond the initial timeout.
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
KNOE_HOME=$(cd "$SCRIPT_DIR/../.." && pwd)
SOURCE_ETC_DIR="$KNOE_HOME/etc"
SOURCE_ETC_LIB_SHELL_DIR="$KNOE_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_openbao.sh" "$WORK_DIR/etc/init_openbao.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/knoe_cfg.sh" "$WORK_DIR/etc/knoe_cfg.sh"
chmod +x "$WORK_DIR/etc/init_openbao.sh"
cat <<EOF > "$WORK_DIR/conf/knoe.cfg"
[globals]
knoe.home = $WORK_DIR
knoe.mode = k3s
NAMESPACE = test-ns
SERVICE_NAMESPACE = knoe-system
EOF
export KUBECTL_LOG="$TMP_DIR/kubectl.log"
cat <<'EOF' > "$BIN_DIR/kubectl"
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' "$*" >> "${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)
# statefulset existence check
if [[ "$*" == *"get statefulset/openbao"* ]]; then
exit 0
fi
# PVC existence + phase/uid
if [[ "$*" == *"get pvc data-openbao-0"*"-o jsonpath={.status.phase}"* ]]; then
printf '%s' "Pending"
exit 0
fi
if [[ "$*" == *"get pvc data-openbao-0"*"-o jsonpath={.metadata.uid}"* ]]; then
printf '%s' "newuid"
exit 0
fi
if [[ "$*" == *"get pvc data-openbao-0"* ]]; then
exit 0
fi
# PV list for recycle helper
if [[ "$*" == *"get pv"*"-o jsonpath="* ]]; then
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
"synology-iscsi-d001-openbao" "synology-iscsi" "Retain" "Released" "knoe-system" "data-openbao-0" "olduid"
exit 0
fi
exit 0
;;
rollout)
if [[ "$*" == *"rollout status"*"--timeout=0s"* ]]; then
exit 1
fi
exit 0
;;
scale)
exit 0
;;
patch)
exit 0
;;
*)
exit 0
;;
esac
EOF
chmod +x "$BIN_DIR/kubectl"
export PATH="$BIN_DIR:$PATH"
export KNOE_HOME="$WORK_DIR"
export KNOE_CONF="$WORK_DIR/conf"
export KNOE_MODE="k3s"
export PVC_REPAIR_WAIT_TIMEOUT="0s"
if "$WORK_DIR/etc/init_openbao.sh" -n "knoe-system" restart >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr"; then
:
else
echo "FAILURE: init_openbao.sh restart exited non-zero" >&2
cat "$TMP_DIR/stderr" >&2
exit 1
fi
if ! grep -q "patch pv synology-iscsi-d001-openbao" "$KUBECTL_LOG"; then
echo "FAILURE: expected PV claimRef recycle (kubectl patch pv) was not invoked" >&2
echo "--- kubectl log ---" >&2
sed -n '1,200p' "$KUBECTL_LOG" >&2 || true
exit 1
fi
echo "SUCCESS"