Pulse/scripts/tests/test-toggle-mock.sh
2026-03-24 15:17:12 +00:00

156 lines
3.7 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Smoke test for scripts/toggle-mock.sh managed runtime helpers.
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
TOGGLE_MOCK="${ROOT_DIR}/scripts/toggle-mock.sh"
if [[ ! -f "${TOGGLE_MOCK}" ]]; then
echo "toggle-mock.sh not found at ${TOGGLE_MOCK}" >&2
exit 1
fi
failures=0
temp_dirs=()
cleanup() {
local dir
for dir in "${temp_dirs[@]:-}"; do
rm -rf "${dir}" 2>/dev/null || true
done
}
trap cleanup EXIT
assert_contains() {
local desc="$1"
local haystack="$2"
local needle="$3"
if [[ "${haystack}" == *"${needle}"* ]]; then
echo "[PASS] ${desc}"
else
echo "[FAIL] ${desc}" >&2
echo "Expected to find: ${needle}" >&2
((failures++))
fi
}
make_stub_hot_dev_bg() {
local dir
dir="$(mktemp -d)"
temp_dirs+=("${dir}")
cat > "${dir}/hot-dev-bg.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
COMMAND="${1:-}"
shift || true
printf "%s %s\n" "${COMMAND}" "$*" >> "${HOT_DEV_BG_STUB_LOG}"
case "${COMMAND}" in
status)
if [[ "${HOT_DEV_BG_STUB_RUNNING:-false}" == "true" ]]; then
echo "[hot-dev-bg] Running (pid: 12345)"
echo "[hot-dev-bg] Frontend shell HTTP: 200"
echo "[hot-dev-bg] Frontend proxy /api/health: 200"
echo "[hot-dev-bg] Backend /api/health: 200"
else
echo "[hot-dev-bg] Not running"
fi
;;
start)
echo "[hot-dev-bg] Started"
;;
stop)
echo "[hot-dev-bg] Stopped"
;;
*)
echo "[hot-dev-bg] ${COMMAND}"
;;
esac
EOF
chmod +x "${dir}/hot-dev-bg.sh"
printf "%s\n" "${dir}/hot-dev-bg.sh"
}
test_detects_managed_hot_dev_runtime() {
local stub state output
state="$(mktemp -d)"
temp_dirs+=("${state}")
stub="$(make_stub_hot_dev_bg)"
output="$(
HOT_DEV_BG_PATH="${stub}" \
HOT_DEV_BG_STUB_LOG="${state}/calls.log" \
HOT_DEV_BG_STUB_RUNNING=true \
TOGGLE_MOCK_PATH="${TOGGLE_MOCK}" \
bash -lc '
source "${TOGGLE_MOCK_PATH}"
printf "mode=%s\n" "$(detect_runtime_mode)"
'
)"
assert_contains "detect_runtime_mode prefers managed hot-dev" "${output}" "mode=managed-hot-dev"
}
test_managed_hot_dev_start_uses_takeover() {
local stub state output calls
state="$(mktemp -d)"
temp_dirs+=("${state}")
stub="$(make_stub_hot_dev_bg)"
output="$(
HOT_DEV_BG_PATH="${stub}" \
HOT_DEV_BG_STUB_LOG="${state}/calls.log" \
HOT_DEV_BG_STUB_RUNNING=false \
TOGGLE_MOCK_PATH="${TOGGLE_MOCK}" \
bash -lc '
source "${TOGGLE_MOCK_PATH}"
start_hot_dev_runtime
'
)"
calls="$(cat "${state}/calls.log")"
assert_contains "start_hot_dev_runtime announces managed startup" "${output}" "Starting managed hot-dev runtime"
assert_contains "start_hot_dev_runtime uses managed takeover start" "${calls}" "start --takeover"
}
test_managed_hot_dev_stop_uses_control_plane() {
local stub state output calls
state="$(mktemp -d)"
temp_dirs+=("${state}")
stub="$(make_stub_hot_dev_bg)"
output="$(
HOT_DEV_BG_PATH="${stub}" \
HOT_DEV_BG_STUB_LOG="${state}/calls.log" \
HOT_DEV_BG_STUB_RUNNING=true \
TOGGLE_MOCK_PATH="${TOGGLE_MOCK}" \
bash -lc '
source "${TOGGLE_MOCK_PATH}"
stop_hot_dev_runtime managed-hot-dev
'
)"
calls="$(cat "${state}/calls.log")"
assert_contains "stop_hot_dev_runtime announces managed stop" "${output}" "Stopping managed hot-dev runtime"
assert_contains "stop_hot_dev_runtime uses managed stop command" "${calls}" "stop "
}
main() {
test_detects_managed_hot_dev_runtime
test_managed_hot_dev_start_uses_takeover
test_managed_hot_dev_stop_uses_control_plane
if (( failures > 0 )); then
echo "Total failures: ${failures}" >&2
exit 1
fi
echo "toggle-mock managed runtime smoke tests passed."
}
main "$@"