- Organized 252 files across project - Root directory: 187 → 2 files (98.9% reduction) - Moved configuration guides to docs/04-configuration/ - Moved troubleshooting guides to docs/09-troubleshooting/ - Moved quick start guides to docs/01-getting-started/ - Moved reports to reports/ directory - Archived temporary files - Generated comprehensive reports and documentation - Created maintenance scripts and guides All files organized according to established standards.
521 lines
20 KiB
Bash
Executable File
521 lines
20 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Comprehensive testing of bridge functionality for all 7 networks
|
|
# Performs actual contract calls and validations (not simulation)
|
|
# Usage: ./test-bridge-all-7-networks.sh [token]
|
|
# Example: ./test-bridge-all-7-networks.sh weth9
|
|
|
|
set -uo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SOURCE_PROJECT="/home/intlc/projects/smom-dbis-138"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
MAGENTA='\033[0;35m'
|
|
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"; }
|
|
log_test() { echo -e "${CYAN}[TEST]${NC} $1"; }
|
|
log_detail() { echo -e "${MAGENTA}[DETAIL]${NC} $1"; }
|
|
|
|
# Load environment variables
|
|
if [ -f "$SOURCE_PROJECT/.env" ]; then
|
|
source "$SOURCE_PROJECT/.env"
|
|
else
|
|
log_error ".env file not found in $SOURCE_PROJECT"
|
|
exit 1
|
|
fi
|
|
|
|
# Configuration
|
|
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
|
WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
|
WETH10_ADDRESS="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
|
|
WETH9_BRIDGE="${CCIPWETH9_BRIDGE_CHAIN138:-0x89dd12025bfCD38A168455A44B400e913ED33BE2}"
|
|
WETH10_BRIDGE="${CCIPWETH10_BRIDGE_CHAIN138:-0xe0E93247376aa097dB308B92e6Ba36bA015535D0}"
|
|
|
|
# Parse arguments
|
|
TOKEN="${1:-weth9}"
|
|
|
|
# All 7 destination chains (including Ethereum Mainnet)
|
|
declare -A CHAIN_SELECTORS=(
|
|
["BSC"]="11344663589394136015"
|
|
["Polygon"]="4051577828743386545"
|
|
["Avalanche"]="6433500567565415381"
|
|
["Base"]="15971525489660198786"
|
|
["Arbitrum"]="4949039107694359620"
|
|
["Optimism"]="3734403246176062136"
|
|
["Ethereum"]="5009297550715157269"
|
|
)
|
|
|
|
# Determine token and bridge
|
|
if [ "$TOKEN" = "weth9" ]; then
|
|
TOKEN_ADDRESS="$WETH9_ADDRESS"
|
|
BRIDGE_ADDRESS="$WETH9_BRIDGE"
|
|
TOKEN_NAME="WETH9"
|
|
elif [ "$TOKEN" = "weth10" ]; then
|
|
TOKEN_ADDRESS="$WETH10_ADDRESS"
|
|
BRIDGE_ADDRESS="$WETH10_BRIDGE"
|
|
TOKEN_NAME="WETH10"
|
|
else
|
|
log_error "Invalid token: $TOKEN (use weth9 or weth10)"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${PRIVATE_KEY:-}" ]; then
|
|
log_error "PRIVATE_KEY not set in .env file"
|
|
exit 1
|
|
fi
|
|
|
|
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo "")
|
|
if [ -z "$DEPLOYER" ]; then
|
|
log_error "Failed to get deployer address"
|
|
exit 1
|
|
fi
|
|
|
|
# Test amount for calculations (0.01 ETH)
|
|
TEST_AMOUNT_WEI="10000000000000000"
|
|
TEST_AMOUNT_ETH="0.01"
|
|
|
|
# Test counters
|
|
TOTAL_TESTS=0
|
|
PASSED_TESTS=0
|
|
FAILED_TESTS=0
|
|
WARNINGS=0
|
|
|
|
# Test result tracking
|
|
declare -A TEST_RESULTS=()
|
|
|
|
test_pass() {
|
|
((TOTAL_TESTS++))
|
|
((PASSED_TESTS++))
|
|
TEST_RESULTS["$1"]="PASS"
|
|
log_success "$1"
|
|
}
|
|
|
|
test_fail() {
|
|
((TOTAL_TESTS++))
|
|
((FAILED_TESTS++))
|
|
TEST_RESULTS["$1"]="FAIL"
|
|
log_error "$1"
|
|
}
|
|
|
|
test_warn() {
|
|
((TOTAL_TESTS++))
|
|
((WARNINGS++))
|
|
TEST_RESULTS["$1"]="WARN"
|
|
log_warn "$1"
|
|
}
|
|
|
|
log_info "========================================="
|
|
log_info "Comprehensive Bridge Testing"
|
|
log_info "========================================="
|
|
log_info ""
|
|
log_info "Configuration:"
|
|
log_info " Token: $TOKEN_NAME"
|
|
log_info " Token Address: $TOKEN_ADDRESS"
|
|
log_info " Bridge Address: $BRIDGE_ADDRESS"
|
|
log_info " Deployer: $DEPLOYER"
|
|
log_info " RPC URL: $RPC_URL"
|
|
log_info " Test Amount: $TEST_AMOUNT_ETH ETH"
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 1: RPC Connectivity
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 1: RPC Connectivity"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
# Test 1.1: RPC Connection
|
|
log_test "Test 1.1: RPC Connection"
|
|
BLOCK_NUMBER=$(timeout 10 cast block-number --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$BLOCK_NUMBER" ] && [ "$BLOCK_NUMBER" != "" ] && [ "$BLOCK_NUMBER" != "0" ]; then
|
|
test_pass "RPC connection successful (Block: $BLOCK_NUMBER)"
|
|
log_detail "Current block number: $BLOCK_NUMBER"
|
|
else
|
|
test_fail "RPC connection failed"
|
|
log_error "Cannot connect to RPC: $RPC_URL"
|
|
exit 1
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 1.2: Chain ID
|
|
log_test "Test 1.2: Chain ID Verification"
|
|
CHAIN_ID=$(timeout 10 cast chain-id --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ "$CHAIN_ID" = "138" ]; then
|
|
test_pass "Chain ID correct: $CHAIN_ID"
|
|
else
|
|
test_fail "Chain ID mismatch: expected 138, got $CHAIN_ID"
|
|
fi
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 2: Contract Code Verification
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 2: Contract Code Verification"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
# Test 2.1: Bridge Contract Code
|
|
log_test "Test 2.1: Bridge Contract Code Existence"
|
|
BRIDGE_CODE=$(timeout 10 cast code "$BRIDGE_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$BRIDGE_CODE" ] && [ "${#BRIDGE_CODE}" -gt 10 ]; then
|
|
CODE_SIZE=$(( ${#BRIDGE_CODE} / 2 - 1 ))
|
|
test_pass "Bridge contract code exists (${CODE_SIZE} bytes)"
|
|
log_detail "Contract address: $BRIDGE_ADDRESS"
|
|
else
|
|
test_fail "Bridge contract has no code or invalid"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 2.2: Token Contract Code
|
|
log_test "Test 2.2: Token Contract Code Existence"
|
|
TOKEN_CODE=$(timeout 10 cast code "$TOKEN_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$TOKEN_CODE" ] && [ "${#TOKEN_CODE}" -gt 10 ]; then
|
|
CODE_SIZE=$(( ${#TOKEN_CODE} / 2 - 1 ))
|
|
test_pass "Token contract code exists (${CODE_SIZE} bytes)"
|
|
log_detail "Contract address: $TOKEN_ADDRESS"
|
|
else
|
|
test_fail "Token contract has no code or invalid"
|
|
fi
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 3: Account & Balance Verification
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 3: Account & Balance Verification"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
# Test 3.1: ETH Balance
|
|
log_test "Test 3.1: ETH Balance Check"
|
|
ETH_BALANCE=$(timeout 10 cast balance "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -z "$ETH_BALANCE" ]; then
|
|
ETH_BALANCE="0"
|
|
fi
|
|
ETH_BALANCE_ETH=$(echo "scale=6; $ETH_BALANCE / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
|
if [ -z "$ETH_BALANCE_ETH" ]; then
|
|
ETH_BALANCE_ETH="0"
|
|
fi
|
|
if [ -n "$ETH_BALANCE" ] && [ "$ETH_BALANCE" != "0" ]; then
|
|
test_pass "ETH balance: $ETH_BALANCE_ETH ETH"
|
|
log_detail "Balance in wei: $ETH_BALANCE"
|
|
else
|
|
test_warn "ETH balance is zero or cannot be read"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 3.2: Token Balance
|
|
log_test "Test 3.2: $TOKEN_NAME Balance Check"
|
|
TOKEN_BALANCE=$(timeout 10 cast call "$TOKEN_ADDRESS" "balanceOf(address)" "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -z "$TOKEN_BALANCE" ]; then
|
|
TOKEN_BALANCE="0"
|
|
fi
|
|
TOKEN_BALANCE_ETH=$(echo "scale=6; $TOKEN_BALANCE / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
|
if [ -z "$TOKEN_BALANCE_ETH" ]; then
|
|
TOKEN_BALANCE_ETH="0"
|
|
fi
|
|
if [ -n "$TOKEN_BALANCE" ]; then
|
|
test_pass "$TOKEN_NAME balance: $TOKEN_BALANCE_ETH ETH"
|
|
log_detail "Balance in wei: $TOKEN_BALANCE"
|
|
else
|
|
test_warn "$TOKEN_NAME balance cannot be read"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 3.3: Bridge Allowance
|
|
log_test "Test 3.3: Bridge Allowance Check"
|
|
ALLOWANCE=$(timeout 10 cast call "$TOKEN_ADDRESS" "allowance(address,address)" "$DEPLOYER" "$BRIDGE_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -z "$ALLOWANCE" ]; then
|
|
ALLOWANCE="0"
|
|
fi
|
|
ALLOWANCE_ETH=$(echo "scale=6; $ALLOWANCE / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
|
if [ -z "$ALLOWANCE_ETH" ]; then
|
|
ALLOWANCE_ETH="0"
|
|
fi
|
|
if [ -n "$ALLOWANCE" ]; then
|
|
test_pass "Bridge allowance: $ALLOWANCE_ETH ETH"
|
|
log_detail "Allowance in wei: $ALLOWANCE"
|
|
if [ "$ALLOWANCE" = "0" ]; then
|
|
log_warn "Allowance is zero - approval will be needed for transfers"
|
|
fi
|
|
else
|
|
test_warn "Bridge allowance cannot be read"
|
|
fi
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 4: Bridge Configuration - All 7 Networks
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 4: Bridge Destination Configuration (7 Networks)"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
DESTINATIONS_CONFIGURED=0
|
|
declare -A DESTINATION_ADDRESSES=()
|
|
declare -A DESTINATION_STATUS=()
|
|
|
|
for chain in "${!CHAIN_SELECTORS[@]}"; do
|
|
selector="${CHAIN_SELECTORS[$chain]}"
|
|
|
|
log_test "Test 4.$((DESTINATIONS_CONFIGURED + 1)): $chain Destination Configuration"
|
|
log_detail "Chain Selector: $selector"
|
|
|
|
# Get destination address
|
|
DEST_ADDR=$(timeout 10 cast call "$BRIDGE_ADDRESS" "destinations(uint64)" "$selector" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
|
|
if [ -n "$DEST_ADDR" ] && ! echo "$DEST_ADDR" | grep -qE "^0x0+$" && ! echo "$DEST_ADDR" | grep -qE "^0x0000000000000000000000000000000000000000$"; then
|
|
# Format address properly (remove leading zeros padding)
|
|
DEST_ADDR_CLEAN=$(echo "$DEST_ADDR" | sed 's/^0x0*//' | sed 's/^$/0/' | sed 's/^/0x/')
|
|
if [ "${#DEST_ADDR_CLEAN}" -lt 42 ]; then
|
|
DEST_ADDR_CLEAN=$(printf "0x%040s" "${DEST_ADDR_CLEAN#0x}" | tr ' ' '0')
|
|
fi
|
|
DESTINATION_ADDRESSES["$chain"]="$DEST_ADDR_CLEAN"
|
|
DESTINATION_STATUS["$chain"]="CONFIGURED"
|
|
test_pass "$chain destination configured: $DEST_ADDR_CLEAN"
|
|
((DESTINATIONS_CONFIGURED++))
|
|
else
|
|
DESTINATION_STATUS["$chain"]="NOT_CONFIGURED"
|
|
test_fail "$chain destination not configured or invalid"
|
|
log_detail "Returned value: $DEST_ADDR"
|
|
fi
|
|
log_info ""
|
|
done
|
|
|
|
log_info "Summary: $DESTINATIONS_CONFIGURED/7 destinations configured"
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 5: Fee Calculation - All 7 Networks
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 5: Fee Calculation Testing (7 Networks)"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
FEES_CALCULATED=0
|
|
declare -A FEE_VALUES=()
|
|
declare -A FEE_STATUS=()
|
|
|
|
for chain in "${!CHAIN_SELECTORS[@]}"; do
|
|
selector="${CHAIN_SELECTORS[$chain]}"
|
|
|
|
log_test "Test 5.$((FEES_CALCULATED + 1)): $chain Fee Calculation"
|
|
log_detail "Testing with amount: $TEST_AMOUNT_ETH ETH ($TEST_AMOUNT_WEI wei)"
|
|
|
|
# Calculate fee
|
|
FEE=$(timeout 10 cast call "$BRIDGE_ADDRESS" "calculateFee(uint64,uint256)" "$selector" "$TEST_AMOUNT_WEI" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
|
|
if [ -n "$FEE" ] && [ "$FEE" != "0" ] && [ "$FEE" != "" ]; then
|
|
FEE_ETH=$(echo "scale=10; $FEE / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
|
FEE_VALUES["$chain"]="$FEE"
|
|
FEE_STATUS["$chain"]="SUCCESS"
|
|
test_pass "$chain fee calculation: $FEE_ETH ETH ($FEE wei)"
|
|
log_detail "Fee calculated successfully"
|
|
((FEES_CALCULATED++))
|
|
else
|
|
FEE_STATUS["$chain"]="FAILED"
|
|
test_warn "$chain fee calculation returned 0 or error"
|
|
log_detail "This may require LINK tokens or CCIP router configuration"
|
|
log_detail "Returned value: $FEE"
|
|
fi
|
|
log_info ""
|
|
done
|
|
|
|
log_info "Summary: $FEES_CALCULATED/7 fee calculations successful"
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 6: Contract Function Verification
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 6: Contract Function Verification"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
# Test 6.1: destinations() function
|
|
log_test "Test 6.1: destinations() Function"
|
|
BSC_SELECTOR="${CHAIN_SELECTORS[BSC]}"
|
|
DEST_TEST=$(timeout 10 cast call "$BRIDGE_ADDRESS" "destinations(uint64)" "$BSC_SELECTOR" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$DEST_TEST" ]; then
|
|
test_pass "destinations() function accessible"
|
|
log_detail "BSC destination: $DEST_TEST"
|
|
else
|
|
test_fail "destinations() function call failed"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 6.2: calculateFee() function
|
|
log_test "Test 6.2: calculateFee() Function"
|
|
FEE_TEST=$(timeout 10 cast call "$BRIDGE_ADDRESS" "calculateFee(uint64,uint256)" "$BSC_SELECTOR" "$TEST_AMOUNT_WEI" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -n "$FEE_TEST" ]; then
|
|
test_pass "calculateFee() function accessible"
|
|
log_detail "BSC fee result: $FEE_TEST wei"
|
|
else
|
|
test_fail "calculateFee() function call failed"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 6.3: Token balanceOf() function
|
|
log_test "Test 6.3: Token balanceOf() Function"
|
|
BALANCE_TEST=$(timeout 10 cast call "$TOKEN_ADDRESS" "balanceOf(address)" "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -n "$BALANCE_TEST" ]; then
|
|
test_pass "Token balanceOf() function accessible"
|
|
log_detail "Balance result: $BALANCE_TEST wei"
|
|
else
|
|
test_fail "Token balanceOf() function call failed"
|
|
fi
|
|
log_info ""
|
|
|
|
# Test 6.4: Token allowance() function
|
|
log_test "Test 6.4: Token allowance() Function"
|
|
ALLOWANCE_TEST=$(timeout 10 cast call "$TOKEN_ADDRESS" "allowance(address,address)" "$DEPLOYER" "$BRIDGE_ADDRESS" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ -n "$ALLOWANCE_TEST" ]; then
|
|
test_pass "Token allowance() function accessible"
|
|
log_detail "Allowance result: $ALLOWANCE_TEST wei"
|
|
else
|
|
test_fail "Token allowance() function call failed"
|
|
fi
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 7: Gas Estimation (Read-Only)
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 7: Gas Estimation Testing"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
# Test 7.1: Estimate gas for sendCrossChain (if allowance exists)
|
|
log_test "Test 7.1: Gas Estimation for sendCrossChain()"
|
|
if [ "$ALLOWANCE" != "0" ] && [ -n "$ALLOWANCE" ]; then
|
|
BSC_SELECTOR="${CHAIN_SELECTORS[BSC]}"
|
|
GAS_ESTIMATE=$(timeout 15 cast estimate "$BRIDGE_ADDRESS" "sendCrossChain(uint64,address,uint256)" "$BSC_SELECTOR" "$DEPLOYER" "$TEST_AMOUNT_WEI" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$GAS_ESTIMATE" ] && [ "$GAS_ESTIMATE" != "0" ]; then
|
|
test_pass "Gas estimation successful: $GAS_ESTIMATE gas units"
|
|
log_detail "Estimated gas for BSC transfer"
|
|
else
|
|
test_warn "Gas estimation failed or returned 0"
|
|
log_detail "This may indicate insufficient allowance or other issues"
|
|
fi
|
|
else
|
|
test_warn "Skipping gas estimation - allowance is zero"
|
|
log_detail "Set allowance first to test gas estimation"
|
|
fi
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE 8: Chain Selector Validation
|
|
# ============================================================================
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_test "TEST SUITE 8: Chain Selector Validation"
|
|
log_test "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
SELECTORS_VALID=0
|
|
for chain in "${!CHAIN_SELECTORS[@]}"; do
|
|
selector="${CHAIN_SELECTORS[$chain]}"
|
|
log_test "Test 8.$((SELECTORS_VALID + 1)): $chain Selector Validation"
|
|
|
|
if [ -n "$selector" ] && [[ "$selector" =~ ^[0-9]+$ ]] && [ "${#selector}" -ge 10 ]; then
|
|
test_pass "$chain selector valid: $selector"
|
|
log_detail "Selector format: numeric, ${#selector} digits"
|
|
((SELECTORS_VALID++))
|
|
else
|
|
test_fail "$chain selector invalid: $selector"
|
|
fi
|
|
log_info ""
|
|
done
|
|
|
|
log_info "Summary: $SELECTORS_VALID/7 chain selectors valid"
|
|
log_info ""
|
|
|
|
# ============================================================================
|
|
# FINAL SUMMARY REPORT
|
|
# ============================================================================
|
|
log_info "========================================="
|
|
log_info "TEST EXECUTION SUMMARY"
|
|
log_info "========================================="
|
|
log_info ""
|
|
log_info "Total Tests: $TOTAL_TESTS"
|
|
log_success "Passed: $PASSED_TESTS"
|
|
log_error "Failed: $FAILED_TESTS"
|
|
log_warn "Warnings: $WARNINGS"
|
|
log_info ""
|
|
|
|
# Calculate success rate
|
|
if [ "$TOTAL_TESTS" -gt 0 ]; then
|
|
SUCCESS_RATE=$(echo "scale=2; ($PASSED_TESTS * 100) / $TOTAL_TESTS" | bc 2>/dev/null || echo "0")
|
|
log_info "Success Rate: $SUCCESS_RATE%"
|
|
fi
|
|
log_info ""
|
|
|
|
# Detailed Results
|
|
log_info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info "DETAILED RESULTS"
|
|
log_info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
log_info "Destination Configuration:"
|
|
for chain in "${!CHAIN_SELECTORS[@]}"; do
|
|
status="${DESTINATION_STATUS[$chain]:-UNKNOWN}"
|
|
addr="${DESTINATION_ADDRESSES[$chain]:-N/A}"
|
|
if [ "$status" = "CONFIGURED" ]; then
|
|
log_success " $chain: $addr"
|
|
else
|
|
log_error " $chain: NOT CONFIGURED"
|
|
fi
|
|
done
|
|
log_info ""
|
|
|
|
log_info "Fee Calculation Status:"
|
|
for chain in "${!CHAIN_SELECTORS[@]}"; do
|
|
status="${FEE_STATUS[$chain]:-UNKNOWN}"
|
|
fee="${FEE_VALUES[$chain]:-N/A}"
|
|
if [ "$status" = "SUCCESS" ]; then
|
|
fee_eth=$(echo "scale=10; $fee / 1000000000000000000" | bc 2>/dev/null || echo "0")
|
|
log_success " $chain: $fee_eth ETH"
|
|
else
|
|
log_warn " $chain: Failed or requires LINK"
|
|
fi
|
|
done
|
|
log_info ""
|
|
|
|
# Final Status
|
|
log_info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
if [ "$FAILED_TESTS" -eq 0 ] && [ "$DESTINATIONS_CONFIGURED" -eq 7 ]; then
|
|
log_success "✅ ALL CRITICAL TESTS PASSED"
|
|
log_success "Bridge is fully configured and ready for all 7 networks"
|
|
elif [ "$DESTINATIONS_CONFIGURED" -eq 7 ]; then
|
|
log_warn "⚠ Bridge configured but some tests had warnings"
|
|
log_info "Review warnings above for details"
|
|
else
|
|
log_error "✗ SOME CRITICAL TESTS FAILED"
|
|
log_error "Bridge may not be fully configured for all networks"
|
|
fi
|
|
log_info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_info ""
|
|
|
|
log_info "Next Steps:"
|
|
if [ "$ALLOWANCE" = "0" ] || [ -z "$ALLOWANCE" ]; then
|
|
log_info " 1. Approve bridge to spend tokens (if needed)"
|
|
fi
|
|
if [ "$TOKEN_BALANCE" = "0" ] || [ -z "$TOKEN_BALANCE" ]; then
|
|
log_info " 2. Wrap ETH to $TOKEN_NAME (if needed)"
|
|
fi
|
|
log_info " 3. Review fee calculation results (may need LINK tokens)"
|
|
log_info " 4. Execute bridge transfers when ready"
|
|
log_info ""
|
|
|