177 lines
5.9 KiB
Bash
Executable File
177 lines
5.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Full integration test: provider, explorer config, optional explorer API and token-aggregation API.
|
|
# Usage: ./scripts/integration-test-all.sh
|
|
# Optional env: EXPLORER_API_URL (e.g. http://localhost:8080), TOKEN_AGGREGATION_URL (e.g. http://localhost:3000)
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
# Repo root: parent of metamask-integration (proxmox workspace)
|
|
REPO_ROOT="$(cd "$PROJECT_ROOT/.." && pwd)"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_ok() { echo -e "${GREEN}[PASS]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_fail() { echo -e "${RED}[FAIL]${NC} $1"; }
|
|
|
|
PASSED=0
|
|
FAILED=0
|
|
|
|
# --- 1. Provider integration test (Node) ---
|
|
log_info "========================================="
|
|
log_info "1. Provider integration test"
|
|
log_info "========================================="
|
|
if (cd "$PROJECT_ROOT/provider" && node test-integration.mjs); then
|
|
log_ok "Provider test passed"
|
|
PASSED=$((PASSED + 1))
|
|
else
|
|
log_fail "Provider test failed"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# --- 2. Validate explorer config JSONs (in-repo) ---
|
|
log_info "========================================="
|
|
log_info "2. Validate explorer config JSONs"
|
|
log_info "========================================="
|
|
CONFIG_DIR="$REPO_ROOT/docs/04-configuration/metamask"
|
|
NETWORKS_JSON="$CONFIG_DIR/DUAL_CHAIN_NETWORKS.json"
|
|
TOKENLIST_JSON="$CONFIG_DIR/DUAL_CHAIN_TOKEN_LIST.tokenlist.json"
|
|
|
|
validate_networks() {
|
|
if [[ ! -f "$NETWORKS_JSON" ]]; then
|
|
log_fail "Missing $NETWORKS_JSON"
|
|
return 1
|
|
fi
|
|
local chains
|
|
chains=$(node -e "
|
|
const fs = require('fs');
|
|
const path = process.argv[1];
|
|
const data = JSON.parse(fs.readFileSync(path, 'utf8'));
|
|
if (!data.chains || !Array.isArray(data.chains)) { process.exit(1); }
|
|
const ids = data.chains.map(c => c.chainIdDecimal || c.chainId).filter(Boolean);
|
|
if (!ids.includes(138) || !ids.includes(1)) { process.exit(2); }
|
|
console.log(ids.join(','));
|
|
" "$NETWORKS_JSON" 2>/dev/null) || true
|
|
if [[ -z "$chains" ]]; then
|
|
log_fail "DUAL_CHAIN_NETWORKS.json invalid or missing chain 138/1"
|
|
return 1
|
|
fi
|
|
log_ok "DUAL_CHAIN_NETWORKS.json valid (chains: $chains)"
|
|
return 0
|
|
}
|
|
|
|
validate_tokenlist() {
|
|
if [[ ! -f "$TOKENLIST_JSON" ]]; then
|
|
log_fail "Missing $TOKENLIST_JSON"
|
|
return 1
|
|
fi
|
|
local ok
|
|
ok=$(node -e "
|
|
const fs = require('fs');
|
|
const path = process.argv[1];
|
|
const data = JSON.parse(fs.readFileSync(path, 'utf8'));
|
|
if (!data.tokens || !Array.isArray(data.tokens)) { process.exit(1); }
|
|
const chainIds = [...new Set(data.tokens.map(t => t.chainId))];
|
|
console.log(chainIds.join(','));
|
|
" "$TOKENLIST_JSON" 2>/dev/null) || true
|
|
if [[ -z "$ok" ]]; then
|
|
log_fail "DUAL_CHAIN_TOKEN_LIST.tokenlist.json invalid (no tokens array)"
|
|
return 1
|
|
fi
|
|
log_ok "DUAL_CHAIN_TOKEN_LIST.tokenlist.json valid (chainIds: $ok)"
|
|
return 0
|
|
}
|
|
|
|
if validate_networks; then PASSED=$((PASSED + 1)); else FAILED=$((FAILED + 1)); fi
|
|
if validate_tokenlist; then PASSED=$((PASSED + 1)); else FAILED=$((FAILED + 1)); fi
|
|
echo ""
|
|
|
|
# --- 3. Optional: Explorer API (config endpoints) ---
|
|
EXPLORER_API_URL="${EXPLORER_API_URL:-}"
|
|
if [[ -n "$EXPLORER_API_URL" ]]; then
|
|
log_info "========================================="
|
|
log_info "3. Explorer API ($EXPLORER_API_URL)"
|
|
log_info "========================================="
|
|
if curl -sf --max-time 10 "$EXPLORER_API_URL/api/config/networks" | node -e "
|
|
const chunks = [];
|
|
process.stdin.on('data', c => chunks.push(c));
|
|
process.stdin.on('end', () => {
|
|
const data = JSON.parse(Buffer.concat(chunks).toString());
|
|
if (!data.chains || !data.chains.length) process.exit(1);
|
|
const has138 = data.chains.some(c => (c.chainIdDecimal || c.chainId) == 138);
|
|
if (!has138) process.exit(2);
|
|
console.log('ok');
|
|
});
|
|
" 2>/dev/null; then
|
|
log_ok "GET /api/config/networks OK"
|
|
PASSED=$((PASSED + 1))
|
|
else
|
|
log_fail "GET /api/config/networks failed or invalid"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
if curl -sf --max-time 10 "$EXPLORER_API_URL/api/config/token-list" | node -e "
|
|
const chunks = [];
|
|
process.stdin.on('data', c => chunks.push(c));
|
|
process.stdin.on('end', () => {
|
|
const data = JSON.parse(Buffer.concat(chunks).toString());
|
|
if (!data.tokens || !Array.isArray(data.tokens)) process.exit(1);
|
|
console.log('ok');
|
|
});
|
|
" 2>/dev/null; then
|
|
log_ok "GET /api/config/token-list OK"
|
|
PASSED=$((PASSED + 1))
|
|
else
|
|
log_fail "GET /api/config/token-list failed or invalid"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
echo ""
|
|
else
|
|
log_info "Skip Explorer API (set EXPLORER_API_URL to test)"
|
|
fi
|
|
|
|
# --- 4. Optional: Token-aggregation API ---
|
|
TOKEN_AGGREGATION_URL="${TOKEN_AGGREGATION_URL:-}"
|
|
if [[ -n "$TOKEN_AGGREGATION_URL" ]]; then
|
|
log_info "========================================="
|
|
log_info "4. Token-aggregation API ($TOKEN_AGGREGATION_URL)"
|
|
log_info "========================================="
|
|
if curl -sf --max-time 10 "$TOKEN_AGGREGATION_URL/api/v1/chains" | node -e "
|
|
const chunks = [];
|
|
process.stdin.on('data', c => chunks.push(c));
|
|
process.stdin.on('end', () => {
|
|
const data = JSON.parse(Buffer.concat(chunks).toString());
|
|
if (!data.chains || !data.chains.length) process.exit(1);
|
|
const has138 = data.chains.some(c => c.chainId === 138);
|
|
if (!has138) process.exit(2);
|
|
console.log('ok');
|
|
});
|
|
" 2>/dev/null; then
|
|
log_ok "GET /api/v1/chains OK"
|
|
PASSED=$((PASSED + 1))
|
|
else
|
|
log_fail "GET /api/v1/chains failed or invalid"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
echo ""
|
|
else
|
|
log_info "Skip Token-aggregation API (set TOKEN_AGGREGATION_URL to test)"
|
|
fi
|
|
|
|
# --- Summary ---
|
|
log_info "========================================="
|
|
log_info "Summary"
|
|
log_info "========================================="
|
|
echo "Passed: $PASSED, Failed: $FAILED"
|
|
if [[ $FAILED -gt 0 ]]; then
|
|
exit 1
|
|
fi
|
|
exit 0
|