test(docduty): add isolated PG heal, backfill, and concurrency fixtures

Require TEST_DATABASE_URL and refuse agent_system_dev. Script creates a
throwaway database, runs packages serially, then drops it.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-13 22:16:44 +00:00
co-authored by Cursor
parent 7ef34a685d
commit c2d4e9a55c
4 changed files with 386 additions and 14 deletions
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# 隔离库跑 document_duty 相关 PostgreSQL 集成测试。
# 不启停/重建 compose,不连 agent_system_dev / 共享对话库。
#
# 用法 A(已有隔离库):
# TEST_DATABASE_URL='postgres://app:pass@127.0.0.1:55432/agent_duty_sync_itest?sslmode=disable' \
# ./scripts/run-isolated-duty-sync-pg-tests.sh
#
# 用法 B(Codex/本机用管理连接建临时库,测完删除):
# PG_ADMIN_URL='postgres://postgres:pass@127.0.0.1:55432/postgres?sslmode=disable' \
# ./scripts/run-isolated-duty-sync-pg-tests.sh
#
# 禁止:把 TEST_DATABASE_URL 指到 agent_system_dev、5433 默认开发库。
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT_DIR}"
refuse_shared_dsn() {
local dsn="$1"
if [[ "${dsn}" == *"agent_system_dev"* || "${dsn}" == *"/agent_system_test"* || "${dsn}" == *"/agent_system_main"* ]]; then
echo "[错误] 拒绝共享环境库名(agent_system_dev/test/main)。请 CREATE DATABASE 临时库。" >&2
exit 2
fi
}
rewrite_db_name() {
local src="$1"
local dbname="$2"
local prefix query
if [[ "${src}" == *"?"* ]]; then
prefix="${src%%\?*}"
query="${src#*\?}"
echo "${prefix%/*}/${dbname}?${query}"
else
echo "${src%/*}/${dbname}"
fi
}
CREATED_DB=""
ADMIN_URL="${PG_ADMIN_URL:-}"
TEST_URL="${TEST_DATABASE_URL:-}"
if [[ -n "${ADMIN_URL}" ]]; then
refuse_shared_dsn "${ADMIN_URL}"
if ! command -v psql >/dev/null 2>&1; then
echo "[错误] 需要 psql 才能用 PG_ADMIN_URL 建临时库" >&2
exit 1
fi
CREATED_DB="agent_duty_sync_itest_$$"
echo "[info] creating isolated database ${CREATED_DB}"
psql "${ADMIN_URL}" -v ON_ERROR_STOP=1 -c "CREATE DATABASE ${CREATED_DB};"
cleanup() {
if [[ -n "${CREATED_DB}" ]]; then
echo "[info] dropping isolated database ${CREATED_DB}"
psql "${ADMIN_URL}" -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS ${CREATED_DB};" || true
fi
}
trap cleanup EXIT
TEST_URL="$(rewrite_db_name "${ADMIN_URL}" "${CREATED_DB}")"
elif [[ -n "${TEST_URL}" ]]; then
refuse_shared_dsn "${TEST_URL}"
else
echo "[错误] 请设置 TEST_DATABASE_URL(隔离库)或 PG_ADMIN_URL(自动建临时库)" >&2
echo "示例:" >&2
echo " createdb agent_duty_sync_itest" >&2
echo " TEST_DATABASE_URL='postgres://app:pass@127.0.0.1:55432/agent_duty_sync_itest?sslmode=disable' \\" >&2
echo " go test ./internal/docduty ./internal/authz ./internal/server -count=1 -run 'Duty|ReviewerDuty|DocumentDuty|ConcurrentLastWriter|OwnerAuthor'" >&2
exit 1
fi
export TEST_DATABASE_URL="${TEST_URL}"
echo "[info] running isolated duty-sync PostgreSQL tests"
# 包串行,避免并行 goose 抢同一临时库。
go test ./internal/docduty -count=1 -run 'Duty|ReviewerDuty|DocumentDuty|OwnerAuthor|HealBinding'
go test ./internal/authz -count=1 -run 'ConcurrentLastWriter|DocumentDuty'
go test ./internal/server -count=1 -run 'AuthorizeDocRevision|ResolveUpdateProjectRole'