#!/bin/sh # Runs against an isolated disposable database, never a developer's existing DB. set -eu TASK_DOCKER=${DOCKER:-docker} TASK_GO=${GO:-go} TASK_MYSQL_IMAGE=${ORBIT_TEST_MYSQL_IMAGE:-mysql:8.4} TASK_TEST_NAME="orbit-model-test-$$" TASK_TEST_DIR=$(mktemp -d "${TMPDIR:-/tmp}/orbit-model-test.XXXXXX") TASK_SERVER_PID= cleanup() { if [ -n "$TASK_SERVER_PID" ]; then kill "$TASK_SERVER_PID" >/dev/null 2>&1 || true; wait "$TASK_SERVER_PID" 2>/dev/null || true; fi "$TASK_DOCKER" rm -f "$TASK_TEST_NAME" >/dev/null 2>&1 || true rm -rf "$TASK_TEST_DIR" } trap cleanup EXIT HUP INT TERM umask 077 TASK_DB_PASSWORD=$(openssl rand -hex 24) printf 'MYSQL_ROOT_PASSWORD=%s\nMYSQL_DATABASE=orbit_test\n' "$TASK_DB_PASSWORD" > "$TASK_TEST_DIR/mysql.env" "$TASK_DOCKER" run -d --name "$TASK_TEST_NAME" --env-file "$TASK_TEST_DIR/mysql.env" -p 127.0.0.1::3306 "$TASK_MYSQL_IMAGE" > /dev/null TASK_READY=0 for task_attempt in $(seq 1 60); do if "$TASK_DOCKER" exec "$TASK_TEST_NAME" sh -c 'MYSQL_PWD="$MYSQL_ROOT_PASSWORD" mysql -uroot --protocol=tcp -e "SELECT 1" >/dev/null 2>&1'; then TASK_READY=1; break; fi sleep 1 done if [ "$TASK_READY" -ne 1 ]; then printf '%s\n' 'Disposable MySQL failed to become ready.' >&2 "$TASK_DOCKER" logs --tail 30 "$TASK_TEST_NAME" >&2 exit 1 fi TASK_DB_PORT=$("$TASK_DOCKER" port "$TASK_TEST_NAME" 3306/tcp | sed 's/.*://') export ORBIT_TEST_MYSQL_DSN="root:$TASK_DB_PASSWORD@tcp(127.0.0.1:$TASK_DB_PORT)/orbit_test" "$TASK_GO" test -race -count=1 -run Integration -v ./internal/storage/mysql "$TASK_GO" build -o "$TASK_TEST_DIR/orbit" ./cmd/orbit "$TASK_GO" build -o "$TASK_TEST_DIR/orbit-migrate" ./cmd/orbit-migrate ORBIT_MYSQL_DSN="$ORBIT_TEST_MYSQL_DSN" "$TASK_TEST_DIR/orbit-migrate" status ORBIT_MYSQL_DSN="$ORBIT_TEST_MYSQL_DSN" ORBIT_HTTP_ADDR=127.0.0.1:0 "$TASK_TEST_DIR/orbit" > "$TASK_TEST_DIR/server.log" 2>&1 & TASK_SERVER_PID=$! TASK_HTTP_PORT= for task_attempt in $(seq 1 20); do TASK_HTTP_PORT=$(sed -n 's/.*"address":"127.0.0.1:\([0-9]*\)".*/\1/p' "$TASK_TEST_DIR/server.log" | head -n 1) if [ -n "$TASK_HTTP_PORT" ]; then break; fi if ! kill -0 "$TASK_SERVER_PID" 2>/dev/null; then cat "$TASK_TEST_DIR/server.log" >&2; exit 1; fi sleep 1 done if [ -z "$TASK_HTTP_PORT" ]; then printf '%s\n' 'Bootstrap HTTP server did not start.' >&2; exit 1; fi (cd sdk/go && ORBIT_URL="http://127.0.0.1:$TASK_HTTP_PORT" "$TASK_GO" run ./examples/health)