| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/bin/sh
- set -eu
- ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
- IMAGE_NAME=${IMAGE_NAME:-emoon-okr:persistence-test}
- CONTAINER_NAME="okr-persistence-test-$$"
- DATA_DIR=$(mktemp -d "${TMPDIR:-/tmp}/okr-docker-data.XXXXXX")
- cleanup() {
- docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
- rm -rf "$DATA_DIR"
- }
- trap cleanup EXIT INT TERM
- wait_for_startup() {
- attempts=0
- while [ "$attempts" -lt 90 ]; do
- if docker logs "$CONTAINER_NAME" 2>&1 | grep -q "Started OkrApplication"; then
- return 0
- fi
- if [ "$(docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null || true)" != "true" ]; then
- docker logs "$CONTAINER_NAME" >&2 || true
- return 1
- fi
- attempts=$((attempts + 1))
- sleep 1
- done
- docker logs "$CONTAINER_NAME" >&2 || true
- echo "容器启动超时" >&2
- return 1
- }
- start_container() {
- docker run -d \
- --name "$CONTAINER_NAME" \
- -e APP_SEED_DEMO_DATA=false \
- -v "$DATA_DIR:/app/data" \
- "$IMAGE_NAME" >/dev/null
- wait_for_startup
- }
- cd "$ROOT_DIR"
- docker build -t "$IMAGE_NAME" .
- start_container
- test -f "$DATA_DIR/okr-performance.db"
- docker rm -f "$CONTAINER_NAME" >/dev/null
- sqlite3 "$DATA_DIR/okr-performance.db" \
- "CREATE TABLE docker_persistence_probe (value TEXT NOT NULL); INSERT INTO docker_persistence_probe VALUES ('survived');"
- start_container
- docker rm -f "$CONTAINER_NAME" >/dev/null
- RESULT=$(sqlite3 "$DATA_DIR/okr-performance.db" "SELECT value FROM docker_persistence_probe LIMIT 1;")
- if [ "$RESULT" != "survived" ]; then
- echo "容器重建后 SQLite 哨兵数据丢失" >&2
- exit 1
- fi
- echo "Docker SQLite 首次初始化与容器重建持久性检查通过"
|