55 lines
2.0 KiB
Bash
Executable File
55 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
ROOT=$(CDPATH=; cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
|
TMP=$(mktemp -d)
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
expect_fail() {
|
|
local label=$1; shift
|
|
if "$@" >"$TMP/stdout" 2>"$TMP/stderr"; then
|
|
printf 'FAIL: %s unexpectedly succeeded\n' "$label" >&2
|
|
return 1
|
|
fi
|
|
printf 'ok: %s\n' "$label"
|
|
}
|
|
|
|
mkdir -p "$TMP/real" "$TMP/bin"
|
|
ln -s "$TMP/real" "$TMP/path-link"
|
|
|
|
# deploy/install.sh must reject an existing symlink component and a missing
|
|
# parent before git clone can create or write the checkout.
|
|
expect_fail 'deploy install rejects symlink component' \
|
|
env PLUGIN_SOURCE_DIR="$TMP/path-link/sub2api-add" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
|
bash "$ROOT/deploy/install.sh"
|
|
expect_fail 'deploy install rejects missing parent' \
|
|
env PLUGIN_SOURCE_DIR="$TMP/missing/sub2api-add" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
|
bash "$ROOT/deploy/install.sh"
|
|
|
|
# Stub host tools so install-local reaches path validation without requiring
|
|
# Go or a running systemd instance.
|
|
cat >"$TMP/bin/go" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
if [[ ${1:-} == version ]]; then printf 'go version go1.23.0 linux/amd64\n'; else exit 0; fi
|
|
EOF
|
|
cat >"$TMP/bin/systemctl" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
exit 0
|
|
EOF
|
|
chmod +x "$TMP/bin/go" "$TMP/bin/systemctl"
|
|
|
|
expect_fail 'install-local rejects symlink component' \
|
|
env PATH="$TMP/bin:/usr/bin:/bin" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
|
PLUGIN_INSTALL_PREFIX="$TMP/path-link/sub2api-add" \
|
|
PLUGIN_ETC_DIR="$TMP/etc/sub2api-add" PLUGIN_VAR_DIR="$TMP/var/sub2api-add" \
|
|
bash "$ROOT/scripts/install-local.sh" --plugin plugin-admin
|
|
|
|
expect_fail 'uninstall rejects symlink component' \
|
|
env PATH="$TMP/bin:/usr/bin:/bin" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
|
PLUGIN_INSTALL_PREFIX="$TMP/path-link/sub2api-add" \
|
|
PLUGIN_ETC_DIR="$TMP/etc/sub2api-add" PLUGIN_VAR_DIR="$TMP/var/sub2api-add" \
|
|
PLUGIN_SOURCE_DIR="$TMP/source/sub2api-add" \
|
|
bash "$ROOT/deploy/uninstall.sh" --plugin plugin-admin --yes
|
|
|
|
printf '%s\n' 'deploy path safety checks passed'
|