117 lines
4.1 KiB
Bash
117 lines
4.1 KiB
Bash
#!/usr/bin/env bash
|
|
# e2e/run-smoke-local.sh
|
|
# Smoke test helper: arranca mock server, arranca Chrome (opcional) o fallback via puppeteer launcher,
|
|
# ejecuta `validate-flow-remote-chrome.js` y limpia los procesos.
|
|
# Usage:
|
|
# CHROME_CMD="/usr/bin/google-chrome" ./run-smoke-local.sh
|
|
# or set CHROME_HOST/CHROME_WS to reuse an existing remote Chrome
|
|
set -euo pipefail
|
|
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
LOGDIR="$ROOT_DIR/logs"
|
|
mkdir -p "$LOGDIR"
|
|
|
|
MOCK_LOG="$LOGDIR/mock_server.log"
|
|
CHROME_LOG="$LOGDIR/chrome_launch.log"
|
|
VALIDATOR_LOG="$LOGDIR/validator.log"
|
|
|
|
echo "[smoke] working dir: $ROOT_DIR"
|
|
|
|
# Start mock server
|
|
echo "[smoke] starting mock server... (logs: $MOCK_LOG)"
|
|
node mock_server.js > "$MOCK_LOG" 2>&1 &
|
|
MOCK_PID=$!
|
|
sleep 0.6
|
|
if ! kill -0 "$MOCK_PID" 2>/dev/null; then
|
|
echo "[smoke][error] failed to start mock server; see $MOCK_LOG"
|
|
tail -n 200 "$MOCK_LOG" || true
|
|
exit 2
|
|
fi
|
|
echo "[smoke] mock server pid=$MOCK_PID"
|
|
|
|
# Determine Chrome websocket endpoint
|
|
WS=""
|
|
if [ -n "${CHROME_WS:-}" ]; then
|
|
WS="$CHROME_WS"
|
|
echo "[smoke] using CHROME_WS from env"
|
|
fi
|
|
|
|
# If user provided CHROME_HOST, resolve ws
|
|
if [ -z "$WS" ] && [ -n "${CHROME_HOST:-}" ]; then
|
|
echo "[smoke] resolving websocket endpoint from CHROME_HOST=$CHROME_HOST"
|
|
URL="http://${CHROME_HOST%:*}:${CHROME_HOST##*:}/json/version"
|
|
# if CHROME_HOST already has port include it directly
|
|
if [[ "$CHROME_HOST" == *":"* ]]; then URL="http://$CHROME_HOST/json/version"; fi
|
|
if ! curl -sS "$URL" > /dev/null 2>&1; then
|
|
echo "[smoke] warning: cannot reach $URL"
|
|
else
|
|
WS=$(curl -sS "$URL" | python3 -c "import sys,json;print(json.load(sys.stdin).get('webSocketDebuggerUrl',''))") || true
|
|
echo "[smoke] resolved WS=$WS"
|
|
fi
|
|
fi
|
|
|
|
# If still no WS, try to launch Chrome via CHROME_CMD if provided
|
|
LAUNCHED_CHROME_PID=""
|
|
if [ -z "$WS" ]; then
|
|
if [ -n "${CHROME_CMD:-}" ]; then
|
|
echo "[smoke] launching Chrome via CHROME_CMD=$CHROME_CMD"
|
|
"$CHROME_CMD" --remote-debugging-port=9222 --user-data-dir=/tmp/avz_smoke_profile --no-first-run --no-default-browser-check > "$CHROME_LOG" 2>&1 &
|
|
LAUNCHED_CHROME_PID=$!
|
|
sleep 1
|
|
# try to fetch ws
|
|
for i in 1 2 3 4 5; do
|
|
if curl -sS http://localhost:9222/json/version >/dev/null 2>&1; then
|
|
WS=$(curl -sS http://localhost:9222/json/version | python3 -c "import sys,json;print(json.load(sys.stdin).get('webSocketDebuggerUrl',''))") || true
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo "[smoke] chrome launched pid=$LAUNCHED_CHROME_PID ws=$WS"
|
|
else
|
|
# fallback: use puppeteer launcher script
|
|
echo "[smoke] no CHROME_CMD provided; launching Chromium via puppeteer (fallback)"
|
|
node _launch_chrome_puppeteer.js > "$CHROME_LOG" 2>&1 &
|
|
LAUNCHER_PID=$!
|
|
sleep 0.8
|
|
# read ws from log
|
|
for i in 1 2 3 4 5; do
|
|
if grep -m1 PUPPETEER_WS= "$CHROME_LOG" >/dev/null 2>&1; then
|
|
WS_LINE=$(grep -m1 PUPPETEER_WS= "$CHROME_LOG" || true)
|
|
WS=${WS_LINE#PUPPETEER_WS=}
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo "[smoke] puppeteer-launched chrome pid=$LAUNCHER_PID ws=$WS"
|
|
LAUNCHED_CHROME_PID=${LAUNCHER_PID:-}
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$WS" ]; then
|
|
echo "[smoke][warn] could not resolve Chrome websocket endpoint; you can set CHROME_WS or CHROME_HOST to skip launch"
|
|
echo "[smoke] continuing to try validator using CHROME_HOST if set"
|
|
fi
|
|
|
|
# Run validator using CHROME_WS if available else CHROME_HOST
|
|
echo "[smoke] running validator (logs: $VALIDATOR_LOG)"
|
|
export CHROME_WS="$WS"
|
|
export BROADCAST_URL="http://localhost:4001/broadcast"
|
|
export STUDIO_URL="http://localhost:4001/studio"
|
|
export TOKEN="smoketest-token-123"
|
|
node validate-flow-remote-chrome.js > "$VALIDATOR_LOG" 2>&1 || echo "[smoke] validator exited non-zero; see $VALIDATOR_LOG"
|
|
|
|
# show result snippets
|
|
echo "[smoke] validator log (tail 200):"
|
|
tail -n 200 "$VALIDATOR_LOG" || true
|
|
|
|
# cleanup
|
|
echo "[smoke] cleaning up..."
|
|
if [ -n "${MOCK_PID:-}" ]; then kill $MOCK_PID >/dev/null 2>&1 || true; fi
|
|
if [ -n "${LAUNCHED_CHROME_PID:-}" ]; then kill $LAUNCHED_CHROME_PID >/dev/null 2>&1 || true; fi
|
|
if [ -n "${LAUNCHER_PID:-}" ]; then kill $LAUNCHER_PID >/dev/null 2>&1 || true; fi
|
|
|
|
echo "[smoke] logs stored in $LOGDIR"
|
|
exit 0
|
|
|