66 lines
2.2 KiB
Bash
66 lines
2.2 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# 一鍵 E2E:全新 Docker → index → seed → 起 Gateway → 跑測試 → 關閉並清 volume
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|||
|
|
# shellcheck source=scripts/e2e-lib.sh
|
|||
|
|
source "${ROOT}/scripts/e2e-lib.sh"
|
|||
|
|
cd "$ROOT"
|
|||
|
|
|
|||
|
|
E2E_CONFIG="${E2E_CONFIG:-test/e2e/fixtures/e2e.yaml}"
|
|||
|
|
E2E_STATE="${E2E_STATE:-${ROOT}/test/e2e/fixtures/state.json}"
|
|||
|
|
E2E_TEST_PATTERN="${E2E_TEST_PATTERN:-Test(Auth_|Health|Member|Permission)}"
|
|||
|
|
GATEWAY_PORT="${GATEWAY_PORT:-18888}"
|
|||
|
|
PID_FILE="${PID_FILE:-${ROOT}/test/e2e/fixtures/gateway.pid}"
|
|||
|
|
|
|||
|
|
cleanup() {
|
|||
|
|
e2e_stop_gateway "${GATEWAY_PORT}" "${PID_FILE}"
|
|||
|
|
if [[ "${E2E_KEEP_DOCKER:-}" != "1" ]]; then
|
|||
|
|
echo ">> docker compose down -v"
|
|||
|
|
docker compose down -v
|
|||
|
|
else
|
|||
|
|
echo ">> E2E_KEEP_DOCKER=1: leaving containers running"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
trap cleanup EXIT
|
|||
|
|
|
|||
|
|
echo ">> [1/6] fresh docker compose (mongo + redis)"
|
|||
|
|
docker compose down -v >/dev/null 2>&1 || true
|
|||
|
|
docker compose up -d mongo redis
|
|||
|
|
|
|||
|
|
echo ">> [2/6] wait for mongo/redis healthy"
|
|||
|
|
for i in $(seq 1 60); do
|
|||
|
|
if docker compose ps mongo 2>/dev/null | grep -q "(healthy)" && docker compose ps redis 2>/dev/null | grep -q "(healthy)"; then
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
sleep 1
|
|||
|
|
if [[ "$i" -eq 60 ]]; then
|
|||
|
|
echo "timeout waiting for docker health" >&2
|
|||
|
|
docker compose ps >&2
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo ">> [3/6] mongo indexes"
|
|||
|
|
go run ./cmd/mongo-index -f "${E2E_CONFIG}"
|
|||
|
|
|
|||
|
|
echo ">> [4/6] e2e seed (tenant + member + permission + JWT)"
|
|||
|
|
rm -f "${E2E_STATE}"
|
|||
|
|
seed_args=(-f "${E2E_CONFIG}" -out "${E2E_STATE}")
|
|||
|
|
if [[ -n "${E2E_ROLE:-}" ]]; then
|
|||
|
|
seed_args+=(-role "${E2E_ROLE}")
|
|||
|
|
fi
|
|||
|
|
go run ./cmd/e2e-seed "${seed_args[@]}"
|
|||
|
|
|
|||
|
|
echo ">> [5/6] start gateway on :${GATEWAY_PORT}"
|
|||
|
|
e2e_start_gateway "${ROOT}" "${E2E_CONFIG}" "${GATEWAY_PORT}" "${PID_FILE}" >/dev/null
|
|||
|
|
e2e_wait_gateway "${GATEWAY_PORT}"
|
|||
|
|
|
|||
|
|
echo ">> [6/6] run e2e tests (main suite, then auth teardown)"
|
|||
|
|
GATEWAY_E2E=1 E2E_STATE_FILE="${E2E_STATE}" E2E_BASE_URL="http://127.0.0.1:${GATEWAY_PORT}" \
|
|||
|
|
go test -tags=e2e -v -count=1 ./test/e2e/... -run "${E2E_TEST_PATTERN}"
|
|||
|
|
GATEWAY_E2E=1 E2E_STATE_FILE="${E2E_STATE}" E2E_BASE_URL="http://127.0.0.1:${GATEWAY_PORT}" \
|
|||
|
|
go test -tags=e2e -v -count=1 ./test/e2e/... -run 'TestZZZ_AuthTokenRefreshAndLogout'
|
|||
|
|
|
|||
|
|
echo ">> E2E OK"
|