95 lines
4.0 KiB
Bash
95 lines
4.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
# shellcheck disable=SC1091
|
|
source "$ROOT_DIR/scripts/acceptance/route_acceptance_lib.sh"
|
|
|
|
PORTAL_ACCEPTANCE_ROOT="${PORTAL_ACCEPTANCE_ROOT:-$ROOT_DIR/artifacts/frontend-acceptance-matrix}"
|
|
TS="${TS:-$(timestamp_token)}"
|
|
ARTIFACT_DIR="${ARTIFACT_DIR:-$PORTAL_ACCEPTANCE_ROOT/${TS}_portal_catalog_ui}"
|
|
|
|
PORTAL_PAGE_URL="${PORTAL_PAGE_URL:-https://sub.tksea.top/portal/}"
|
|
PORTAL_CATALOG_BASE="${PORTAL_CATALOG_BASE:-https://sub.tksea.top/portal-admin-api/api/portal}"
|
|
PORTAL_PROXY_BASE="${PORTAL_PROXY_BASE:-https://sub.tksea.top/portal-proxy/api/v1}"
|
|
PORTAL_ACCESS_TOKEN="${PORTAL_ACCESS_TOKEN:-}"
|
|
|
|
ensure_artifact_dir
|
|
curl_status_to_file "$PORTAL_PAGE_URL" "$ARTIFACT_DIR/00-portal.html"
|
|
|
|
curl -fsS "${PORTAL_CATALOG_BASE%/}/logical-groups" >"$ARTIFACT_DIR/01-logical-groups.json"
|
|
|
|
first_group_id="$(
|
|
python3 - "$ARTIFACT_DIR/01-logical-groups.json" <<'PY'
|
|
import json
|
|
import sys
|
|
|
|
payload = json.load(open(sys.argv[1], "r", encoding="utf-8"))
|
|
items = payload.get("logical_groups") or []
|
|
if not items:
|
|
raise SystemExit(2)
|
|
first = items[0]
|
|
print(first.get("logical_group_id") or "")
|
|
PY
|
|
)" || first_group_id=""
|
|
|
|
if [[ -n "$first_group_id" ]]; then
|
|
curl -fsS "${PORTAL_CATALOG_BASE%/}/logical-groups/${first_group_id}/models" >"$ARTIFACT_DIR/02-group-models.json"
|
|
fi
|
|
|
|
if [[ -n "$PORTAL_ACCESS_TOKEN" ]]; then
|
|
curl -fsS -H "Authorization: Bearer $PORTAL_ACCESS_TOKEN" "${PORTAL_PROXY_BASE%/}/auth/me" >"$ARTIFACT_DIR/03-auth-me.json"
|
|
curl -fsS -H "Authorization: Bearer $PORTAL_ACCESS_TOKEN" "${PORTAL_PROXY_BASE%/}/groups/available" >"$ARTIFACT_DIR/04-groups-available.json"
|
|
curl -fsS -H "Authorization: Bearer $PORTAL_ACCESS_TOKEN" "${PORTAL_PROXY_BASE%/}/subscriptions" >"$ARTIFACT_DIR/05-subscriptions.json"
|
|
curl -fsS -H "Authorization: Bearer $PORTAL_ACCESS_TOKEN" "${PORTAL_PROXY_BASE%/}/keys?page=1&page_size=20" >"$ARTIFACT_DIR/06-keys.json"
|
|
fi
|
|
|
|
python3 - "$ARTIFACT_DIR" "$PORTAL_ACCESS_TOKEN" >"$ARTIFACT_DIR/99-summary.json" <<'PY'
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
art_dir = Path(sys.argv[1])
|
|
access_token = sys.argv[2]
|
|
|
|
page = (art_dir / "00-portal.html").read_text(encoding="utf-8")
|
|
catalog = json.loads((art_dir / "01-logical-groups.json").read_text(encoding="utf-8"))
|
|
groups = catalog.get("logical_groups") or []
|
|
|
|
assert "Sub2API 多模型接入中心" in page
|
|
assert "逻辑分组目录" in page
|
|
assert groups, groups
|
|
|
|
summary = {
|
|
"page_url": "portal",
|
|
"page_title_seen": "Sub2API 多模型接入中心" in page,
|
|
"logical_group_count": len(groups),
|
|
"first_logical_group_id": groups[0].get("logical_group_id"),
|
|
"first_logical_group_display_name": groups[0].get("display_name"),
|
|
"user_projection_checked": bool(access_token),
|
|
}
|
|
|
|
models_file = art_dir / "02-group-models.json"
|
|
if models_file.exists():
|
|
models_payload = json.loads(models_file.read_text(encoding="utf-8"))
|
|
public_models = models_payload.get("public_models") or []
|
|
summary["first_group_models_count"] = len(public_models)
|
|
if public_models:
|
|
summary["first_group_first_model"] = public_models[0].get("public_model")
|
|
|
|
if access_token:
|
|
auth_me = json.loads((art_dir / "03-auth-me.json").read_text(encoding="utf-8"))
|
|
groups_available = json.loads((art_dir / "04-groups-available.json").read_text(encoding="utf-8"))
|
|
subscriptions = json.loads((art_dir / "05-subscriptions.json").read_text(encoding="utf-8"))
|
|
keys_page = json.loads((art_dir / "06-keys.json").read_text(encoding="utf-8"))
|
|
summary["auth_me_present"] = bool(auth_me.get("data") or auth_me)
|
|
summary["available_group_count"] = len((groups_available.get("data") if isinstance(groups_available, dict) else groups_available) or [])
|
|
summary["subscription_count"] = len((subscriptions.get("data") if isinstance(subscriptions, dict) else subscriptions) or [])
|
|
key_data = keys_page.get("data") if isinstance(keys_page, dict) else keys_page
|
|
summary["key_count"] = len((key_data or {}).get("items") or [])
|
|
|
|
print(json.dumps(summary, ensure_ascii=False, indent=2))
|
|
PY
|
|
|
|
cat "$ARTIFACT_DIR/99-summary.json"
|