Files
TA-Deployment-Broker/tests/test-deployment-scripts.sh
T
2026-07-28 17:30:17 -05:00

86 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
TEST_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd -P)"
test_dir="$(mktemp -d)"
trap 'rm -rf "$test_dir"' EXIT
deployment="${test_dir}/deployment"
mock_bin="${test_dir}/bin"
mkdir -p "$deployment" "$mock_bin"
cp -R \
"${TEST_ROOT}/install.sh" \
"${TEST_ROOT}/manage.sh" \
"${TEST_ROOT}/compose.yaml" \
"${TEST_ROOT}/compose.http.yaml" \
"${TEST_ROOT}/compose.tls.yaml" \
"${TEST_ROOT}/compose.direct.yaml" \
"${TEST_ROOT}/deploy" \
"$deployment/"
cat >"${mock_bin}/docker" <<'MOCK'
#!/usr/bin/env bash
printf '%s\n' "$*" >>"$MOCK_DOCKER_LOG"
case "$*" in
"compose version" | "info" | "network inspect tapm-edge")
exit 0
;;
esac
exit 0
MOCK
chmod +x "${mock_bin}/docker"
export MOCK_DOCKER_LOG="${test_dir}/docker.log"
export PATH="${mock_bin}:${PATH}"
printf '%s\n' \
'broker.test' \
'git.test' \
'8780' \
'8743' \
'' |
"${deployment}/install.sh" >/dev/null
assert_env() {
local expected="$1"
grep -Fx "$expected" "${deployment}/.env" >/dev/null || {
printf 'FAIL: missing environment line: %s\n' "$expected" >&2
exit 1
}
}
assert_env 'SSL_MODE=none'
assert_env 'TAPM_PUBLIC_URL=http://broker.test:8780'
assert_env 'TAPM_GITEA_URL=http://git.test:8780'
assert_env 'GITEA_PUBLIC_URL=http://git.test:8780/'
grep -F -- '-f compose.yaml -f compose.http.yaml up -d gitea nginx' \
"$MOCK_DOCKER_LOG" >/dev/null || {
printf 'FAIL: HTTP bootstrap did not select compose.http.yaml\n' >&2
exit 1
}
if stat -c '%a' "${deployment}/.env" >/dev/null 2>&1; then
env_mode="$(stat -c '%a' "${deployment}/.env")"
else
env_mode="$(stat -f '%Lp' "${deployment}/.env")"
fi
[[ "$env_mode" == 600 ]] || {
printf 'FAIL: .env mode is %s, want 600\n' "$env_mode" >&2
exit 1
}
if "${deployment}/manage.sh" start >/dev/null 2>&1; then
printf 'FAIL: broker started without Gitea credentials\n' >&2
exit 1
fi
printf '%s\n' 'admin@example.test' |
"${deployment}/manage.sh" set-ssl letsencrypt >/dev/null
assert_env 'SSL_MODE=letsencrypt'
assert_env 'TAPM_PUBLIC_URL=https://broker.test'
assert_env 'GITEA_PUBLIC_URL=https://git.test/'
"${deployment}/manage.sh" set-ssl none >/dev/null
assert_env 'SSL_MODE=none'
assert_env 'TAPM_PUBLIC_URL=http://broker.test:8780'
printf 'PASS: guided HTTP deployment and TLS transition\n'