Files
huike-back/scripts/run-authcore-e2e-docker.sh
T

90 lines
3.4 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# 启动 docker-compose.authcore-e2e.yml → 迁移与 UC 种子数据 → 构建并启动 htyuc → 运行 ts_e2e_authcore_http--ignored)。
# 依赖:docker、psql、diesel_cli、cargoAuthCore 默认路径为仓库上一级的 AuthCore。
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
AUTHCORE="${AUTHCORE_ROOT:-$ROOT/../AuthCore}"
COMPOSE_FILE="$ROOT/docker-compose.authcore-e2e.yml"
export TS_DATABASE_URL="${TS_DATABASE_URL:-postgres://htyts_e2e:htyts_e2e@127.0.0.1:15432/htyts_e2e}"
export UC_DB_URL="${UC_DB_URL:-postgres://htyuc:htyuc@127.0.0.1:15433/htyuc_test}"
export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
export REDIS_PORT="${REDIS_PORT:-16379}"
export HTYUC_URL="${HTYUC_URL:-http://127.0.0.1:18080}"
export UC_PORT="${UC_PORT:-18080}"
export JWT_KEY="${JWT_KEY:-test_jwt_key_for_testing_only_1234567890}"
export TOKEN_VERIFY="${TOKEN_VERIFY:-true}"
export AUTH_CHECKING="${AUTH_CHECKING:-true}"
export TS_DOMAIN="${TS_DOMAIN:-e2e.test.local}"
export POOL_SIZE="${POOL_SIZE:-8}"
export ZOMBIE_MIN="${ZOMBIE_MIN:-10}"
export EXPIRATION_DAYS="${EXPIRATION_DAYS:-7}"
export SKIP_POST_LOGIN="${SKIP_POST_LOGIN:-true}"
export SKIP_REGISTRATION="${SKIP_REGISTRATION:-true}"
export LOGGER_LEVEL="${LOGGER_LEVEL:-INFO}"
if [[ ! -f "$AUTHCORE/Cargo.toml" ]]; then
echo "AuthCore not found at $AUTHCORE; set AUTHCORE_ROOT" >&2
exit 1
fi
cd "$ROOT"
docker compose -f "$COMPOSE_FILE" up -d --wait
command -v diesel >/dev/null 2>&1 || {
echo "diesel_cli not found; install: cargo install diesel_cli --no-default-features --features postgres --locked" >&2
exit 1
}
echo "==> htyts_models diesel migration"
(cd "$ROOT/htyts_models" && DATABASE_URL="$TS_DATABASE_URL" diesel migration run)
echo "==> htyuc_models diesel"
(cd "$AUTHCORE/htyuc_models" && DATABASE_URL="$UC_DB_URL" diesel setup && diesel migration run)
echo "==> UC init_test_data.sql"
PGPASSWORD=htyuc psql -h 127.0.0.1 -p 15433 -U htyuc -d htyuc_test -f "$AUTHCORE/htyuc/tests/fixtures/init_test_data.sql"
echo "==> cargo build htyuc (release)"
# 避免 IDE/CI 注入的 CARGO_TARGET_DIR 使可执行文件不在 $AUTHCORE/target/release
(cd "$AUTHCORE" && env -u CARGO_TARGET_DIR cargo build --release -p htyuc)
HTYUC_BIN="$AUTHCORE/target/release/htyuc"
if [[ ! -x "$HTYUC_BIN" ]]; then
echo "missing $HTYUC_BIN (after env -u CARGO_TARGET_DIR build)" >&2
exit 1
fi
cleanup() {
if [[ -n "${HTYUC_PID:-}" ]] && kill -0 "$HTYUC_PID" 2>/dev/null; then
kill "$HTYUC_PID" 2>/dev/null || true
fi
}
trap cleanup EXIT
echo "==> start htyuc (port $UC_PORT)"
nohup env UC_DB_URL="$UC_DB_URL" REDIS_HOST="$REDIS_HOST" REDIS_PORT="$REDIS_PORT" \
JWT_KEY="$JWT_KEY" UC_PORT="$UC_PORT" POOL_SIZE=5 EXPIRATION_DAYS="$EXPIRATION_DAYS" \
SKIP_POST_LOGIN="$SKIP_POST_LOGIN" SKIP_REGISTRATION="$SKIP_REGISTRATION" \
LOGGER_LEVEL="$LOGGER_LEVEL" \
"$HTYUC_BIN" > /tmp/htyuc-authcore-e2e.log 2>&1 &
HTYUC_PID=$!
for _ in $(seq 1 90); do
if curl -fsS "http://127.0.0.1:${UC_PORT}/api/v1/uc/index" >/dev/null 2>&1; then
echo "==> htyuc ready"
break
fi
sleep 1
done
if ! curl -fsS "http://127.0.0.1:${UC_PORT}/api/v1/uc/index" >/dev/null 2>&1; then
echo "htyuc did not become ready; log:" >&2
tail -80 /tmp/htyuc-authcore-e2e.log >&2 || true
exit 1
fi
echo "==> cargo test ts_e2e_authcore_http"
cd "$ROOT"
cargo test -p htyts --test ts_e2e_authcore_http -- --ignored --test-threads=1 --nocapture