Files
hfb_sys/scripts/prepare-test-db.sh
yml2213andCursor 47ceb53c09 test: 测试库改为模板克隆并纳入完整租号 e2e
每个包不再重复 DROP+迁移,清空改用 DELETE 并重置自增,go test ./... 从约 6 分钟降到十几秒。租号全链路改走 NewTestDB,去掉依赖额外 DSN 才会跑的过渡测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 15:46:18 +08:00

47 lines
2.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# 准备后端测试所需的 MySQL 库与授权。
#
# 测试按包使用独立库(默认 hfb_sys_test_<包名>),这里用一条通配授权覆盖全部包,
# 因此只需在搭建环境时执行一次。可重复执行。
#
# 可用环境变量覆盖:
# TEST_MYSQL_HOST/PORT 应用账号连接地址(默认 127.0.0.1:13306)
# MYSQL_ADMIN_USER/PASSWORD 管理员账号(默认 root/rootsecret)
# TEST_MYSQL_USER/PASSWORD 应用账号(默认 hfb/secret)
# HFB_TEST_DATABASE 测试库基础名(默认 hfb_sys_test)
# TEST_MYSQL_CONTAINER 优先使用的容器名(默认 hfb-mysql)
host="${TEST_MYSQL_HOST:-127.0.0.1}"
port="${TEST_MYSQL_PORT:-13306}"
admin_user="${MYSQL_ADMIN_USER:-root}"
admin_password="${MYSQL_ADMIN_PASSWORD:-rootsecret}"
app_user="${TEST_MYSQL_USER:-hfb}"
app_password="${TEST_MYSQL_PASSWORD:-secret}"
base_database="${HFB_TEST_DATABASE:-hfb_sys_test}"
container="${TEST_MYSQL_CONTAINER:-hfb-mysql}"
[[ "${base_database}" =~ ^[A-Za-z0-9_]+$ ]] || { printf '测试库基础名不合法: %s\n' "${base_database}" >&2; exit 2; }
# MySQL 模式串里下划线是通配符,需要转义成字面量。
pattern="$(printf '%s' "${base_database}" | sed 's/_/\\\\_/g')"
run_admin_sql() {
if command -v docker >/dev/null 2>&1 && docker ps --format '{{.Names}}' 2>/dev/null | grep -qx "${container}"; then
docker exec -i "${container}" mysql -u"${admin_user}" -p"${admin_password}"
else
MYSQL_PWD="${admin_password}" mysql --host="${host}" --port="${port}" --user="${admin_user}"
fi
}
printf '准备 MySQL 测试库授权:%s_%% -> %s@%%\n' "${base_database}" "${app_user}"
run_admin_sql <<SQL
CREATE USER IF NOT EXISTS '${app_user}'@'%' IDENTIFIED BY '${app_password}';
GRANT ALL PRIVILEGES ON \`${pattern}\_%\`.* TO '${app_user}'@'%';
FLUSH PRIVILEGES;
SQL
printf '测试库授权已就绪。测试运行时会维护模板库 %s__template,并按包克隆为 %s_<包名>\n' "${base_database}" "${base_database}"