#!/usr/bin/env bash # # Regression test for setup.sh safe_symlink guard (GitHub #660). # # #660: `aipass install` (via setup.sh) must NEVER silently repoint a global # `drone`/`aipass` symlink that points at a DIFFERENT install. This test sources # the real safe_symlink function out of setup.sh and asserts its behaviour across # the meaningful cases. Exits 0 on all-pass, non-zero on any regression. # # Run: bash tests/setup_symlink_guard_test.sh set -u REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" SETUP="$REPO_ROOT/setup.sh" TMP="$(mktemp -d)" FAILURES=0 cleanup() { rm -f "$TMP"/binA/* "$TMP"/binB/* "$TMP"/dest/* 2>/dev/null; rmdir "$TMP"/binA "$TMP"/binB "$TMP"/dest "$TMP" 2>/dev/null; } trap cleanup EXIT # Pull the real safe_symlink out of setup.sh (single source of truth — no copy). FN="$TMP/fn.sh" sed -n '/^safe_symlink() {/,/^}/p' "$SETUP" > "$FN" if ! grep -q "safe_symlink()" "$FN"; then echo "FAIL: could not extract safe_symlink from $SETUP" exit 1 fi # shellcheck disable=SC1090 source "$FN" mkdir -p "$TMP/binA" "$TMP/binB" "$TMP/dest" echo A > "$TMP/binA/aipass" echo B > "$TMP/binB/aipass" echo A > "$TMP/binA/drone" assert() { # assert