Files
pangolin/server/run_mysql_test.sh
T
wangjia 4783f3e32e feat(nodes): 节点生命周期状态机 [tsk_aG4yOS90inF_]
实现 Lifecycle 类型及其全部公开方法,覆盖 6 个状态迁移动作:
MarkProbing / MarkUp / MarkDraining / MarkDown / MarkDestroyed /
MarkBlockedSuspect。每次合法迁移在同一个 SQL 事务中原子执行
UPDATE nodes + INSERT node_events + BumpVersion;MarkDestroyed
事务提交后异步调用 mtls.CRL.Revoke() 并清除 Redis 负载缓存与
命令队列键。配套集成测试覆盖 5 类场景(合法迁移、非法迁移、
并发写、后置钩子、blocked_suspect 幂等),全部通过。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 23:49:45 +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"
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"