98 lines
2.9 KiB
Bash
98 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
source "$SCRIPT_DIR/detect-platform.sh"
|
|
|
|
fail() {
|
|
echo "FAIL: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
assert_eq() {
|
|
local expected="$1"
|
|
local actual="$2"
|
|
local message="$3"
|
|
if [[ "$actual" != "$expected" ]]; then
|
|
fail "$message: expected '$expected', got '$actual'"
|
|
fi
|
|
}
|
|
|
|
unset GITEA_LOGIN || true
|
|
assert_eq "usc" "$(get_gitea_login git.uscllc.com)" "USC Gitea host should select usc tea login"
|
|
assert_eq "mosaicstack" "$(get_gitea_login git.mosaicstack.dev)" "Mosaic Gitea host should select mosaicstack tea login"
|
|
|
|
GITEA_LOGIN="custom-login"
|
|
export GITEA_LOGIN
|
|
assert_eq "custom-login" "$(get_gitea_login git.uscllc.com)" "Explicit GITEA_LOGIN should override host default"
|
|
|
|
unset GITEA_LOGIN || true
|
|
unknown_login="$(get_gitea_login git.example.invalid || true)"
|
|
assert_eq "" "$unknown_login" "Unknown Gitea hosts should not force a mismatched login"
|
|
|
|
TEST_WORKDIR="${TEST_WORKDIR:-$SCRIPT_DIR/tests/.tmp-gitea-login-selection}"
|
|
rm -rf "$TEST_WORKDIR"
|
|
mkdir -p "$TEST_WORKDIR"
|
|
trap 'rm -rf "$TEST_WORKDIR"' EXIT
|
|
|
|
cat > "$TEST_WORKDIR/credentials.json" <<'JSON'
|
|
{
|
|
"gitea": {
|
|
"mosaicstack": {
|
|
"url": "https://git.mosaicstack.dev",
|
|
"token": "mosaic-token"
|
|
},
|
|
"usc": {
|
|
"url": "https://git.uscllc.com",
|
|
"token": "usc-token"
|
|
}
|
|
}
|
|
}
|
|
JSON
|
|
|
|
export MOSAIC_CREDENTIALS_FILE="$TEST_WORKDIR/credentials.json"
|
|
GITEA_TOKEN="ambient-wrong-token"
|
|
GITEA_URL="https://git.mosaicstack.dev"
|
|
export GITEA_TOKEN GITEA_URL
|
|
assert_eq "usc-token" "$(get_gitea_token git.uscllc.com)" "Host-specific credential lookup should ignore ambient mismatched GITEA_TOKEN"
|
|
assert_eq "mosaic-token" "$(get_gitea_token git.mosaicstack.dev)" "Host-specific credential lookup should select Mosaic token for Mosaic host"
|
|
|
|
FAKEBIN="$TEST_WORKDIR/fakebin"
|
|
REPO_DIR="$TEST_WORKDIR/repo"
|
|
CAPTURE_FILE="$TEST_WORKDIR/tea-args.txt"
|
|
mkdir -p "$FAKEBIN" "$REPO_DIR"
|
|
|
|
cat > "$FAKEBIN/python3" <<'SH'
|
|
#!/usr/bin/env bash
|
|
cat >/dev/null
|
|
printf 'main\n'
|
|
SH
|
|
chmod +x "$FAKEBIN/python3"
|
|
|
|
cat > "$FAKEBIN/tea" <<'SH'
|
|
#!/usr/bin/env bash
|
|
printf '%s\n' "$@" > "$TEA_CAPTURE_FILE"
|
|
SH
|
|
chmod +x "$FAKEBIN/tea"
|
|
|
|
(
|
|
cd "$REPO_DIR"
|
|
git init -q
|
|
git remote add origin https://git.uscllc.com/USC/uconnect.git
|
|
PATH="$FAKEBIN:$PATH" TEA_CAPTURE_FILE="$CAPTURE_FILE" "$SCRIPT_DIR/pr-merge.sh" --skip-queue-guard -n 1905
|
|
)
|
|
assert_eq $'pr\nmerge\n1905\n--style\nsquash\n--repo\nUSC/uconnect\n--login\nusc' "$(cat "$CAPTURE_FILE")" "pr-merge should pass USC tea login as isolated argv entries"
|
|
|
|
PWNED_FILE="$TEST_WORKDIR/pwned"
|
|
if (
|
|
cd "$REPO_DIR"
|
|
PATH="$FAKEBIN:$PATH" TEA_CAPTURE_FILE="$CAPTURE_FILE" GITEA_LOGIN="bad;touch $PWNED_FILE" "$SCRIPT_DIR/pr-merge.sh" --skip-queue-guard -n 1905 >/dev/null 2>&1
|
|
); then
|
|
fail "pr-merge should reject GITEA_LOGIN values with shell metacharacters"
|
|
fi
|
|
if [[ -e "$PWNED_FILE" ]]; then
|
|
fail "pr-merge executed shell metacharacters from GITEA_LOGIN"
|
|
fi
|
|
|
|
echo "gitea-login-selection tests passed"
|