Files
proxmox/scripts/test-all-explorer-links.sh.bak

272 lines
10 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# Comprehensive Link and Functionality Test for Blockscout Explorer
# Tests all navigation, API endpoints, contract addresses, and interactive elements
set -euo pipefail
IP="${IP:-192.168.11.140}"
DOMAIN="${DOMAIN:-explorer.d-bis.org}"
PASSWORD="${PASSWORD:-L@kers2010}"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
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"; }
echo "════════════════════════════════════════════════════════"
echo "Explorer Link and Functionality Test"
echo "════════════════════════════════════════════════════════"
echo ""
FAILED=0
PASSED=0
test_endpoint() {
local name="$1"
local url="$2"
log_test "Testing: $name"
if response=$(curl -k -sL "$url" 2>&1); then
if echo "$response" | grep -qE "(error|Error|ERROR|404|500)" && ! echo "$response" | grep -qE '"status":"1"|"result":'; then
log_error "Failed: $name"
((FAILED++))
return 1
else
log_success "Passed: $name"
((PASSED++))
return 0
fi
else
log_error "Failed: $name (connection error)"
((FAILED++))
return 1
fi
}
test_api_endpoint() {
local name="$1"
local url="$2"
log_test "Testing API: $name"
if response=$(curl -k -sL "$url" 2>&1); then
if echo "$response" | python3 -c "import sys, json; d=json.load(sys.stdin); sys.exit(0 if ('result' in d or 'status' in d or 'total_blocks' in d) else 1)" 2>/dev/null; then
log_success "Passed: $name"
((PASSED++))
return 0
else
log_error "Failed: $name (invalid JSON or missing expected fields)"
((FAILED++))
return 1
fi
else
log_error "Failed: $name (connection error)"
((FAILED++))
return 1
fi
}
echo "════════════════════════════════════════════════════════"
echo "1. BASIC CONNECTIVITY TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
test_endpoint "Home Page" "https://explorer.d-bis.org/"
test_endpoint "HTTPS Redirect" "http://explorer.d-bis.org/"
echo ""
echo "════════════════════════════════════════════════════════"
echo "2. API ENDPOINT TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
# Get latest block number first
LATEST_BLOCK_HEX=$(curl -k -sL 'https://explorer.d-bis.org/api?module=block&action=eth_block_number' 2>&1 | python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('result', '0x0'))" 2>/dev/null || echo "0x0")
test_api_endpoint "Network Stats API" "https://explorer.d-bis.org/api/v2/stats"
test_api_endpoint "Block Number API" "https://explorer.d-bis.org/api?module=block&action=eth_block_number"
if [ "$LATEST_BLOCK_HEX" != "0x0" ] && [ -n "$LATEST_BLOCK_HEX" ]; then
test_api_endpoint "Block Data API" "https://explorer.d-bis.org/api?module=block&action=eth_get_block_by_number&tag=$LATEST_BLOCK_HEX&boolean=false"
fi
echo ""
echo "════════════════════════════════════════════════════════"
echo "3. CONTRACT ADDRESS TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
# Contract addresses
CONTRACTS=(
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2:WETH9"
"0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f:WETH10"
"0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e:CCIP Router"
"0x105F8A15b819948a89153505762444Ee9f324684:CCIP Sender"
"0x89dd12025bfCD38A168455A44B400e913ED33BE2:WETH9 Bridge"
"0xe0E93247376aa097dB308B92e6Ba36bA015535D0:WETH10 Bridge"
)
for contract_info in "${CONTRACTS[@]}"; do
IFS=':' read -r addr name <<< "$contract_info"
test_api_endpoint "$name Balance" "https://explorer.d-bis.org/api?module=account&action=eth_get_balance&address=$addr&tag=latest"
done
echo ""
echo "════════════════════════════════════════════════════════"
echo "4. EXTERNAL RESOURCE TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
test_endpoint "Font Awesome CDN" "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
test_endpoint "Ethers.js CDN" "https://cdn.ethers.io/lib/ethers-5.7.2.umd.min.js"
echo ""
echo "════════════════════════════════════════════════════════"
echo "5. NAVIGATION FUNCTION TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
# Check if JavaScript functions exist in HTML
log_test "Checking JavaScript functions..."
FUNCTIONS=(
"showHome"
"showBlocks"
"showTransactions"
"showBridgeMonitoring"
"showWETHUtilities"
"connectMetaMask"
"wrapWETH9"
"unwrapWETH9"
"wrapWETH10"
"unwrapWETH10"
"refreshWETHBalances"
"handleSearch"
)
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no root@"$IP" "cat /var/www/html/index.html" > /tmp/explorer-html.txt
for func in "${FUNCTIONS[@]}"; do
if grep -q "function $func\|$func()" /tmp/explorer-html.txt; then
log_success "Function exists: $func"
((PASSED++))
else
log_error "Function missing: $func"
((FAILED++))
fi
done
echo ""
echo "════════════════════════════════════════════════════════"
echo "6. HTML STRUCTURE TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
log_test "Checking HTML structure..."
ELEMENTS=(
"navbar"
"nav-links"
"searchInput"
"homeView"
"blocksView"
"transactionsView"
"bridgeView"
"wethView"
"metamaskStatus"
)
for element in "${ELEMENTS[@]}"; do
if grep -q "id=\"$element\"\|class=\"$element\"" /tmp/explorer-html.txt; then
log_success "Element exists: $element"
((PASSED++))
else
log_warn "Element may be missing: $element (checking alternative patterns...)"
if grep -qi "$element" /tmp/explorer-html.txt; then
log_success "Element found (alternative pattern): $element"
((PASSED++))
else
log_error "Element missing: $element"
((FAILED++))
fi
fi
done
echo ""
echo "════════════════════════════════════════════════════════"
echo "7. CONTRACT ADDRESS REFERENCES"
echo "════════════════════════════════════════════════════════"
echo ""
log_test "Checking contract address references..."
for contract_info in "${CONTRACTS[@]}"; do
IFS=':' read -r addr name <<< "$contract_info"
if grep -qi "$addr" /tmp/explorer-html.txt; then
log_success "Address referenced: $name ($addr)"
((PASSED++))
else
log_warn "Address not found: $name ($addr)"
((FAILED++))
fi
done
echo ""
echo "════════════════════════════════════════════════════════"
echo "8. SSL/TLS TESTS"
echo "════════════════════════════════════════════════════════"
echo ""
log_test "Testing SSL configuration..."
if curl -k -sI "https://explorer.d-bis.org/" 2>&1 | grep -qi "HTTP/2\|200\|strict-transport-security"; then
log_success "SSL/TLS working correctly"
((PASSED++))
else
log_error "SSL/TLS issue detected"
((FAILED++))
fi
# Test HSTS header
if curl -k -sI "https://explorer.d-bis.org/" 2>&1 | grep -qi "strict-transport-security"; then
log_success "HSTS header present"
((PASSED++))
else
log_warn "HSTS header not found (may be in Cloudflare)"
((PASSED++))
fi
echo ""
echo "════════════════════════════════════════════════════════"
echo "TEST SUMMARY"
echo "════════════════════════════════════════════════════════"
echo ""
TOTAL=$((PASSED + FAILED))
PERCENTAGE=$((PASSED * 100 / TOTAL))
echo "Tests Passed: $PASSED / $TOTAL"
echo "Tests Failed: $FAILED / $TOTAL"
echo "Success Rate: $PERCENTAGE%"
echo ""
if [ $FAILED -eq 0 ]; then
log_success "All tests passed! ✅"
exit 0
elif [ $PERCENTAGE -ge 90 ]; then
log_warn "Most tests passed, minor issues detected ⚠️"
exit 0
else
log_error "Multiple test failures detected ❌"
exit 1
fi