Files
pangolin/server/run_mysql_test.sh
wangjia 390b8b8f84 chore(server): pay v2 接入终验 + OpenAPI 登记 + 交付说明
全量矩阵本地全绿(build/vet/test/run_sqlite_test.sh + 新增 SQLite 文件库带数据
升级彩排 + MySQL 8 容器验证 000021 MODIFY ENUM;client analyze/test 功能全绿,
27 个既有 golden 像素噪声与本次接入无关)。server/api/openapi.yaml 登记 6 个新
Pay 端点(catalog/orders/orderNo/retry/cancel/webhook)+ schema,通过结构校验。

顺手修复 run_mysql_test.sh 缺 multiStatements=true 的既有 bug(与 pay-v2 无关)。
新增 pay_migration_rehearsal_test.go 验证 000021 升级不丢行/AUTOINCREMENT 续序,
并确认一处安全特性:已有 source='pay' 行后 down 会被 CHECK 约束正确拒绝。

交付说明 docs/pay-v2-integration-delivery.html(含测试矩阵/联调 checklist/部署
附录)已登记 docs/index.html,记录一处既有但未修的部署前置阻断项(go.mod 的
wangjia/codes 本地路径 replace 会阻断异机构建,超出本任务授权范围)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-11 00:34:10 +08:00

42 lines
1.1 KiB
Bash

#!/bin/bash
# Start a MySQL 8 container, wait for it to be ready, run lifecycle integration tests, and clean up.
set -e
CONTAINER_NAME="lc-mysql-$(date +%s)"
PORT=13307
echo "Starting MySQL container: $CONTAINER_NAME on port $PORT"
docker run -d \
--name "$CONTAINER_NAME" \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=pangolin_test \
-p "$PORT:3306" \
mysql:8 >/dev/null
cleanup() {
echo "Stopping container $CONTAINER_NAME"
docker stop "$CONTAINER_NAME" >/dev/null 2>&1 || true
docker rm "$CONTAINER_NAME" >/dev/null 2>&1 || true
}
trap cleanup EXIT
# Wait for MySQL to be ready (max 60 s)
echo "Waiting for MySQL to be ready..."
for i in $(seq 1 30); do
if docker exec "$CONTAINER_NAME" mysqladmin ping --silent 2>/dev/null; then
echo "MySQL ready after ${i}*2 seconds"
break
fi
sleep 2
done
DSN="root:secret@tcp(127.0.0.1:${PORT})/pangolin_test?multiStatements=true"
echo "Running lifecycle integration tests with DSN=$DSN"
PANGOLIN_TEST_DSN="$DSN" go test -tags integration \
./internal/nodes/... \
-run "TestLifecycle" \
-v -count=1 -timeout 120s
echo "Tests complete"