mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-08-01 02:46:02 +00:00
171 lines
6.2 KiB
Bash
171 lines
6.2 KiB
Bash
#!/usr/bin/env bash
|
||
set +e
|
||
|
||
echo "=========================================="
|
||
echo " Frontend Page Smoke Check"
|
||
echo "=========================================="
|
||
echo ""
|
||
|
||
BASE_URL="${BASE_URL:-http://localhost:2026}"
|
||
DOC_PATH="${DOC_PATH:-/en/docs}"
|
||
|
||
# When the gateway has authentication enabled (DEER_FLOW_AUTH_DISABLED != 1),
|
||
# protected /workspace/* routes redirect anonymous requests to /login.
|
||
# We detect auth, register / log in a smoke-test user, and pass the session
|
||
# cookie to all curl calls so the real pages are verified, not the login form.
|
||
SMOKE_TEST_EMAIL="${SMOKE_TEST_EMAIL:-smoke-test@deerflow.dev}"
|
||
SMOKE_TEST_PASSWORD="${SMOKE_TEST_PASSWORD:-SmokeTest123!}"
|
||
COOKIE_JAR=$(mktemp /tmp/deerflow-smoke-cookies.XXXXXX)
|
||
trap 'rm -f "$COOKIE_JAR"' EXIT
|
||
CURL_AUTH_OPTS=""
|
||
|
||
authenticate() {
|
||
# Make sure the service is reachable before detecting auth
|
||
local health
|
||
health=$(curl -s -o /dev/null -w "%{http_code}" "${BASE_URL}/" 2>/dev/null)
|
||
if [ "$health" = "000" ]; then
|
||
echo "✗ Cannot reach ${BASE_URL} — is the service running?"
|
||
return 1
|
||
fi
|
||
|
||
# A protected endpoint returns 401 when auth is on
|
||
local auth_check
|
||
auth_check=$(curl -s -o /dev/null -w "%{http_code}" "${BASE_URL}/api/models" 2>/dev/null)
|
||
if [ "$auth_check" != "401" ]; then
|
||
echo "ℹ Auth is disabled — no login needed"
|
||
return 0
|
||
fi
|
||
|
||
echo "🔐 Auth is enabled — setting up smoke test session..."
|
||
|
||
# Check whether the system needs first-boot initialization
|
||
local needs_setup
|
||
needs_setup=$(curl -s "${BASE_URL}/api/v1/auth/setup-status" \
|
||
| grep -o '"needs_setup":[^,}]*' | grep -o 'true\|false')
|
||
if [ "$needs_setup" = "true" ]; then
|
||
echo " Initializing system with smoke test admin..."
|
||
local init_code
|
||
init_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||
-X POST "${BASE_URL}/api/v1/auth/initialize" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"email\":\"${SMOKE_TEST_EMAIL}\",\"password\":\"${SMOKE_TEST_PASSWORD}\"}" \
|
||
-c "$COOKIE_JAR" 2>/dev/null)
|
||
if [ "$init_code" != "201" ]; then
|
||
echo "✗ Initialize failed (HTTP $init_code)"
|
||
return 1
|
||
fi
|
||
echo "✓ Admin initialized & logged in"
|
||
elif [ -z "$needs_setup" ]; then
|
||
echo "⚠ Could not determine setup status — skipping initialize, trying register/login"
|
||
else
|
||
# Register first — on success (201) it also auto-logs-in via the cookie.
|
||
# This avoids a wasted login attempt that counts toward rate-limiting.
|
||
local auth_code
|
||
auth_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||
-X POST "${BASE_URL}/api/v1/auth/register" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"email\":\"${SMOKE_TEST_EMAIL}\",\"password\":\"${SMOKE_TEST_PASSWORD}\"}" \
|
||
-c "$COOKIE_JAR" 2>/dev/null)
|
||
|
||
if [ "$auth_code" = "201" ]; then
|
||
echo "✓ Registered as ${SMOKE_TEST_EMAIL}"
|
||
else
|
||
# User already exists — clear stale cookies from register attempt, then log in
|
||
: > "$COOKIE_JAR"
|
||
local login_code
|
||
login_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||
-X POST "${BASE_URL}/api/v1/auth/login/local" \
|
||
--data-urlencode "username=${SMOKE_TEST_EMAIL}" \
|
||
--data-urlencode "password=${SMOKE_TEST_PASSWORD}" \
|
||
-c "$COOKIE_JAR" 2>/dev/null)
|
||
if [ "$login_code" != "200" ]; then
|
||
echo "✗ Login failed (HTTP $login_code)"
|
||
return 1
|
||
fi
|
||
echo "✓ Logged in as ${SMOKE_TEST_EMAIL}"
|
||
fi
|
||
fi
|
||
|
||
# Verify the session cookie works across all branches
|
||
local me_code
|
||
me_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||
-b "$COOKIE_JAR" "${BASE_URL}/api/v1/auth/me" 2>/dev/null)
|
||
|
||
if [ "$me_code" = "200" ]; then
|
||
echo "✓ Session verified for ${SMOKE_TEST_EMAIL}"
|
||
CURL_AUTH_OPTS="-b $COOKIE_JAR"
|
||
return 0
|
||
fi
|
||
|
||
echo "✗ Auth failed — session cookie not accepted (HTTP $me_code)"
|
||
echo " Set SMOKE_TEST_EMAIL / SMOKE_TEST_PASSWORD or check the existing account"
|
||
return 1
|
||
}
|
||
|
||
all_passed=true
|
||
|
||
check_status() {
|
||
local name="$1"
|
||
local url="$2"
|
||
local expected_re="$3"
|
||
|
||
local status
|
||
status="$(curl -s -o /dev/null -w "%{http_code}" -L ${CURL_AUTH_OPTS} "$url")"
|
||
if echo "$status" | grep -Eq "$expected_re"; then
|
||
echo "✓ $name ($url) -> $status"
|
||
else
|
||
echo "✗ $name ($url) -> $status (expected: $expected_re)"
|
||
all_passed=false
|
||
fi
|
||
}
|
||
|
||
check_final_url() {
|
||
local name="$1"
|
||
local url="$2"
|
||
local expected_path_re="$3"
|
||
|
||
local effective
|
||
effective="$(curl -s -o /dev/null -w "%{url_effective}" -L ${CURL_AUTH_OPTS} "$url")"
|
||
if echo "$effective" | grep -Eq "$expected_path_re"; then
|
||
echo "✓ $name redirect target -> $effective"
|
||
else
|
||
echo "✗ $name redirect target -> $effective (expected path: $expected_path_re)"
|
||
all_passed=false
|
||
fi
|
||
}
|
||
|
||
# Authenticate before checking protected routes
|
||
authenticate || exit 1
|
||
|
||
echo ""
|
||
echo "1. Checking entry pages..."
|
||
check_status "Landing page" "${BASE_URL}/" "200"
|
||
check_status "Workspace redirect" "${BASE_URL}/workspace" "200|301|302|307|308"
|
||
check_final_url "Workspace redirect" "${BASE_URL}/workspace" "/workspace/chats/"
|
||
echo ""
|
||
|
||
echo "2. Checking key workspace routes..."
|
||
check_status "New chat page" "${BASE_URL}/workspace/chats/new" "200"
|
||
check_final_url "New chat page" "${BASE_URL}/workspace/chats/new" "/workspace/"
|
||
check_status "Chats list page" "${BASE_URL}/workspace/chats" "200"
|
||
check_final_url "Chats list page" "${BASE_URL}/workspace/chats" "/workspace/"
|
||
check_status "Agents gallery page" "${BASE_URL}/workspace/agents" "200"
|
||
check_final_url "Agents gallery page" "${BASE_URL}/workspace/agents" "/workspace/agents"
|
||
echo ""
|
||
|
||
echo "3. Checking docs route (optional)..."
|
||
check_status "Docs page" "${BASE_URL}${DOC_PATH}" "200|404"
|
||
echo ""
|
||
|
||
echo "=========================================="
|
||
echo " Frontend Smoke Check Summary"
|
||
echo "=========================================="
|
||
echo ""
|
||
if [ "$all_passed" = true ]; then
|
||
echo "✅ Frontend smoke checks passed!"
|
||
exit 0
|
||
else
|
||
echo "❌ Frontend smoke checks failed"
|
||
exit 1
|
||
fi
|