189 lines
5.3 KiB
Bash
Executable File
189 lines
5.3 KiB
Bash
Executable File
#!/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
|
|
|