From 33f358c13a501c484a155af22545b77ee2d74010 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 27 Apr 2026 21:35:48 +0200 Subject: [PATCH] test(smoke): bash + curl + jq script per i 6 MCP --- tests/smoke/README.md | 18 ++++++++++++ tests/smoke/run.sh | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 tests/smoke/README.md create mode 100755 tests/smoke/run.sh diff --git a/tests/smoke/README.md b/tests/smoke/README.md new file mode 100644 index 0000000..0dc5a62 --- /dev/null +++ b/tests/smoke/README.md @@ -0,0 +1,18 @@ +# Smoke locale Cerbero_mcp + +```bash +# da repo root Cerbero_mcp/ +docker compose up -d +bash tests/smoke/run.sh +docker compose down +``` + +Il file `run.sh` verifica: +- `/health` di tutti i 6 MCP (atteso `200`) +- `environment_info` dei 4 exchange (atteso shape `{environment, source, env_value, base_url, max_leverage}`) + +Variabili di ambiente: +- `GATEWAY` — URL base gateway (default `http://localhost:8080`) +- `TOKEN_FILE` — path al token bearer di lettura (default `secrets/observer.token`) + +Exit code 0 = tutto OK, 1 = uno o più check falliti. diff --git a/tests/smoke/run.sh b/tests/smoke/run.sh new file mode 100755 index 0000000..78a4f91 --- /dev/null +++ b/tests/smoke/run.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# Smoke test locale per Cerbero_mcp. +# Presuppone: docker compose up -d già eseguito da repo root. +# Verifica: ogni MCP risponde /health; i 4 exchange espongono environment_info. + +set -euo pipefail + +cd "$(dirname "$0")/../.." + +GATEWAY="${GATEWAY:-http://localhost:8080}" +TOKEN_FILE="${TOKEN_FILE:-secrets/observer.token}" + +if [ ! -f "$TOKEN_FILE" ]; then + echo "ERROR: token file $TOKEN_FILE not found" >&2 + exit 2 +fi + +TOKEN="$(cat "$TOKEN_FILE")" +fail=0 + +echo "=== /health ===" +for svc in mcp-deribit mcp-bybit mcp-hyperliquid mcp-alpaca mcp-macro mcp-sentiment; do + code=$(curl -s -o /dev/null -w "%{http_code}" \ + -H "Authorization: Bearer $TOKEN" \ + "$GATEWAY/$svc/health" || echo "000") + if [ "$code" = "200" ]; then + echo " $svc: OK" + else + echo " $svc: FAIL ($code)" + fail=$((fail + 1)) + fi +done + +echo +echo "=== environment_info on 4 exchange MCPs ===" +for ex in deribit bybit hyperliquid alpaca; do + body=$(curl -s -X POST \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{}' \ + "$GATEWAY/mcp-${ex}/tools/environment_info" 2>/dev/null || echo '{}') + + if [ -z "$body" ] || [ "$body" = "{}" ]; then + echo " $ex: FAIL (empty body)" + fail=$((fail + 1)) + continue + fi + + if echo "$body" | jq -e '.environment, .source, .base_url, .max_leverage' > /dev/null 2>&1; then + env=$(echo "$body" | jq -r '.environment') + src=$(echo "$body" | jq -r '.source') + cap=$(echo "$body" | jq -r '.max_leverage') + echo " $ex: OK (env=$env source=$src max_leverage=$cap)" + else + echo " $ex: FAIL (shape mismatch)" + echo " body: $body" + fail=$((fail + 1)) + fi +done + +echo +if [ "$fail" -gt 0 ]; then + echo "SMOKE FAILED: $fail check(s) failed" + exit 1 +fi +echo "SMOKE OK"