390b8b8f84
全量矩阵本地全绿(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
42 lines
1.1 KiB
Bash
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"
|