Files
metamask-integration/scripts/test-metamask-integration.sh

189 lines
5.3 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# End-to-end MetaMask integration test script
# Tests network, RPC, tokens, and price feeds
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Colors
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_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
RPC_URL="${RPC_URL:-https://rpc-core.d-bis.org}"
CHAIN_ID=138
# Contract addresses
ORACLE_PROXY="0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6"
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
WETH10="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
log_info "========================================="
log_info "MetaMask Integration Test"
log_info "========================================="
log_info ""
log_info "RPC URL: $RPC_URL"
log_info "Chain ID: $CHAIN_ID"
log_info ""
PASSED=0
FAILED=0
test_rpc_connection() {
log_info "Test 1: RPC Connection"
if cast block-number --rpc-url "$RPC_URL" &>/dev/null; then
BLOCK=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null)
log_success "RPC connected - Block: $BLOCK"
((PASSED++))
return 0
else
log_error "RPC connection failed"
((FAILED++))
return 1
fi
}
test_chain_id() {
log_info "Test 2: Chain ID"
ACTUAL_CHAIN_ID=$(cast chain-id --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
if [ "$ACTUAL_CHAIN_ID" = "$CHAIN_ID" ]; then
log_success "Chain ID correct: $CHAIN_ID"
((PASSED++))
return 0
else
log_error "Chain ID mismatch - Expected: $CHAIN_ID, Got: $ACTUAL_CHAIN_ID"
((FAILED++))
return 1
fi
}
test_weth9_contract() {
log_info "Test 3: WETH9 Contract"
if cast code "$WETH9" --rpc-url "$RPC_URL" 2>/dev/null | grep -q "0x"; then
SUPPLY=$(cast call "$WETH9" "totalSupply()" --rpc-url "$RPC_URL" 2>/dev/null | xargs -I {} cast --to-unit {} ether 2>/dev/null || echo "0")
log_success "WETH9 contract exists - Total Supply: $SUPPLY WETH"
((PASSED++))
return 0
else
log_error "WETH9 contract not found"
((FAILED++))
return 1
fi
}
test_weth10_contract() {
log_info "Test 4: WETH10 Contract"
if cast code "$WETH10" --rpc-url "$RPC_URL" 2>/dev/null | grep -q "0x"; then
log_success "WETH10 contract exists"
((PASSED++))
return 0
else
log_error "WETH10 contract not found"
((FAILED++))
return 1
fi
}
test_oracle_contract() {
log_info "Test 5: Oracle Contract"
if cast code "$ORACLE_PROXY" --rpc-url "$RPC_URL" 2>/dev/null | grep -q "0x"; then
# Try to get price data
PRICE_DATA=$(cast call "$ORACLE_PROXY" "latestRoundData()" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
if [ -n "$PRICE_DATA" ] && [ "$PRICE_DATA" != "0x" ]; then
log_success "Oracle contract exists and responds"
((PASSED++))
return 0
else
log_warn "Oracle contract exists but may not be updating"
((PASSED++))
return 0
fi
else
log_error "Oracle contract not found"
((FAILED++))
return 1
fi
}
test_token_list_json() {
log_info "Test 6: Token List JSON"
TOKEN_LIST="$PROJECT_ROOT/docs/METAMASK_TOKEN_LIST.json"
if [ -f "$TOKEN_LIST" ]; then
if jq empty "$TOKEN_LIST" 2>/dev/null; then
TOKEN_COUNT=$(jq '.tokens | length' "$TOKEN_LIST" 2>/dev/null || echo "0")
log_success "Token list JSON valid - $TOKEN_COUNT tokens"
((PASSED++))
return 0
else
log_error "Token list JSON is invalid"
((FAILED++))
return 1
fi
else
log_error "Token list JSON not found"
((FAILED++))
return 1
fi
}
test_network_config() {
log_info "Test 7: Network Configuration"
NETWORK_CONFIG="$PROJECT_ROOT/docs/METAMASK_NETWORK_CONFIG.json"
if [ -f "$NETWORK_CONFIG" ]; then
if jq empty "$NETWORK_CONFIG" 2>/dev/null; then
CONFIG_CHAIN_ID=$(jq -r '.chainId' "$NETWORK_CONFIG" 2>/dev/null | sed 's/0x//' | xargs -I {} echo "ibase=16; {}" | bc 2>/dev/null || echo "0")
if [ "$CONFIG_CHAIN_ID" = "$CHAIN_ID" ]; then
log_success "Network config valid - Chain ID: $CHAIN_ID"
((PASSED++))
return 0
else
log_error "Network config Chain ID mismatch"
((FAILED++))
return 1
fi
else
log_error "Network config JSON is invalid"
((FAILED++))
return 1
fi
else
log_error "Network config JSON not found"
((FAILED++))
return 1
fi
}
# Run all tests
test_rpc_connection
test_chain_id
test_weth9_contract
test_weth10_contract
test_oracle_contract
test_token_list_json
test_network_config
# Summary
log_info ""
log_info "========================================="
log_info "Test Summary"
log_info "========================================="
log_info "Passed: $PASSED"
if [ $FAILED -gt 0 ]; then
log_error "Failed: $FAILED"
exit 1
else
log_success "Failed: $FAILED"
log_success "All tests passed!"
exit 0
fi