Files
LMS/scripts/ldd-browser.sh

114 lines
3.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# LDD browser E2E: полный стек + Playwright (Chromium) на одноразовой БД.
set -euo pipefail
cd "$(dirname "$0")/.."
DB="lms_e2e_$(date -u +%H%M%S)_$$"
POSTGRES_WAS_RUNNING=0
STACK_STARTED=0
E2E_STATUS=1
log() { echo ">> $*"; }
cleanup() {
local code=$?
if ((STACK_STARTED)); then
log "Останавливаю тестовый стек..."
./run.sh stop >/dev/null 2>&1 || true
fi
docker exec -i lms-postgres psql -U lms -d postgres -v ON_ERROR_STOP=1 \
-c "DROP DATABASE IF EXISTS $DB;" >/dev/null 2>&1 || true
if ((POSTGRES_WAS_RUNNING == 0)); then
docker compose stop postgres >/dev/null 2>&1 || true
fi
exit $code
}
trap cleanup EXIT INT TERM
for port in 8080 8081 8082 8083 8090; do
if ss -ltn 2>/dev/null | grep -q ":$port "; then
echo "Порт $port занят. Остановите текущий стек (./run.sh stop) и повторите." >&2
exit 1
fi
done
command -v docker >/dev/null 2>&1 || { echo "Нужен docker" >&2; exit 1; }
command -v npx >/dev/null 2>&1 || { echo "Нужен Node.js/npx" >&2; exit 1; }
JAVA_BIN="${JAVA_BIN:-/usr/lib/jvm/java-21-openjdk/bin/java}"
[[ -x "$JAVA_BIN" ]] || { echo "Не найден Java 21: $JAVA_BIN" >&2; exit 1; }
[[ -d e2e/node_modules ]] || { echo "Выполните: cd e2e && npm install" >&2; exit 1; }
if docker compose ps --status running --services 2>/dev/null | grep -qx postgres; then
POSTGRES_WAS_RUNNING=1
fi
log "Запускаю PostgreSQL..."
docker compose up -d postgres >/dev/null
for _ in $(seq 1 40); do
docker exec lms-postgres pg_isready -U lms -d postgres >/dev/null 2>&1 && break
sleep 1
done
docker exec lms-postgres pg_isready -U lms -d postgres >/dev/null
docker exec -i lms-postgres psql -U lms -d postgres -v ON_ERROR_STOP=1 \
-c "CREATE DATABASE $DB;" >/dev/null
log "Собираю bootJar..."
./gradlew bootJar --console=plain >/tmp/lms-ldd-e2e-bootjar.log
log "Запускаю стек..."
export LMS_DB_URL="jdbc:postgresql://localhost:5432/$DB"
export LMS_DB_NAME="$DB"
export LMS_DB_USER="lms"
export LMS_DB_PASSWORD="lms"
export LMS_INTERNAL_TOKEN="ldd-internal-token"
export LMS_SESSION_COOKIE_SECURE="false"
export JAVA_BIN
STACK_STARTED=1
./run.sh start
mkdir -p build/evidence
log "Запускаю Playwright..."
set +e
(
cd e2e
LDD_WEB_URL="http://localhost:8090" \
LDD_API_URL="http://localhost:8080" \
npx playwright test --config=playwright.config.ts
)
E2E_STATUS=$?
set -e
python3 - "$E2E_STATUS" <<'PY'
import json
import os
import sys
status_code = int(sys.argv[1])
playwright_path = "build/evidence/playwright.json"
detail = "Playwright exit=" + str(status_code)
if os.path.isfile(playwright_path):
try:
root = json.load(open(playwright_path, encoding="utf-8"))
stats = root.get("stats", {})
detail += (
f"; expected={stats.get('expected', 0)}"
f", unexpected={stats.get('unexpected', 0)}"
f", flaky={stats.get('flaky', 0)}"
f", skipped={stats.get('skipped', 0)}"
)
except Exception as exc:
detail += "; не удалось разобрать playwright.json: " + str(exc)
status = "passed" if status_code == 0 else "failed"
with open("build/evidence/browser.json", "w", encoding="utf-8") as fh:
now = __import__("datetime").datetime.now(__import__("datetime").UTC).isoformat()
json.dump(
{"generatedAt": now, "checks": [{"id": "browser.e2e", "status": status, "detail": detail}]},
fh,
ensure_ascii=False,
indent=2,
)
print(("PASS " if status == "passed" else "FAIL ") + "browser.e2e: " + detail)
sys.exit(0 if status == "passed" else 1)
PY