Files
proxmox/scripts/verify/run-full-connection-and-fastly-tests.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

126 lines
5.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Run all connection tests: validations, DNS, SSL, E2E routing, NPMplus FQDN+SSL, Fastly/origin.
# Tests in both directions: public → origin (76.53.10.36) and per-FQDN DNS + SSL + HTTP.
#
# Usage: bash scripts/verify/run-full-connection-and-fastly-tests.sh [--skip-npmplus-api]
# --skip-npmplus-api Skip NPMplus API config export (requires NPM_PASSWORD and LAN)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
PUBLIC_IP="${PUBLIC_IP:-76.53.10.36}"
SKIP_NPMPLUS_API=false
[[ "${1:-}" == "--skip-npmplus-api" ]] && SKIP_NPMPLUS_API=true
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
ok() { echo -e "${GREEN}[✓]${NC} $1"; }
fail() { echo -e "${RED}[✗]${NC} $1"; }
warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Full connection tests: validations, DNS, SSL, E2E, NPMplus FQDN+SSL, Fastly/origin"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
FAIL=0
# 1) Validations
info "1. Validations (deps, config, IPs/gateways)"
bash scripts/verify/check-dependencies.sh >/dev/null 2>&1 && ok "Dependencies" || warn "Some optional deps missing"
bash scripts/validation/validate-config-files.sh >/dev/null 2>&1 && ok "Config files" || { fail "Config validation"; FAIL=1; }
bash scripts/validation/validate-ips-and-gateways.sh >/dev/null 2>&1 && ok "IPs and gateways" || { fail "IP/gateway validation"; FAIL=1; }
echo ""
# 2) Fastly / origin reachability (76.53.10.36:80 and :443 from this host)
info "2. Fastly origin reachability (public IP $PUBLIC_IP:80 and :443)"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "http://${PUBLIC_IP}/" 2>/dev/null || echo "000")
HTTPS_CODE=$(curl -s -o /dev/null -w "%{http_code}" -k --connect-timeout 5 "https://${PUBLIC_IP}/" 2>/dev/null || echo "000")
if [[ "$HTTP_CODE" =~ ^[23]0[0-9]$ ]] || [[ "$HTTP_CODE" == "301" ]] || [[ "$HTTP_CODE" == "302" ]]; then
ok "Origin HTTP $PUBLIC_IP:80 → $HTTP_CODE"
else
[[ "$HTTP_CODE" == "000" ]] && warn "Origin HTTP $PUBLIC_IP:80 unreachable (expected if run off-LAN or firewall)" || warn "Origin HTTP → $HTTP_CODE"
fi
if [[ "$HTTPS_CODE" =~ ^[23]0[0-9]$ ]] || [[ "$HTTPS_CODE" == "301" ]] || [[ "$HTTPS_CODE" == "302" ]]; then
ok "Origin HTTPS $PUBLIC_IP:443 → $HTTPS_CODE"
else
[[ "$HTTPS_CODE" == "000" ]] && warn "Origin HTTPS $PUBLIC_IP:443 unreachable" || warn "Origin HTTPS → $HTTPS_CODE"
fi
echo ""
# 3) FQDN DNS resolution (key NPMplus-served domains)
info "3. FQDN DNS resolution (key domains → $PUBLIC_IP or any)"
DOMAINS=( "dbis-admin.d-bis.org" "explorer.d-bis.org" "rpc-http-pub.d-bis.org" "sankofa.nexus" "mim4u.org" )
for d in "${DOMAINS[@]}"; do
RESOLVED=$(dig +short "$d" @8.8.8.8 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 || true)
if [[ -n "$RESOLVED" ]]; then
if [[ "$RESOLVED" == "$PUBLIC_IP" ]]; then
ok "DNS $d$RESOLVED"
else
ok "DNS $d$RESOLVED (Fastly or other edge)"
fi
else
fail "DNS $d → no resolution"
FAIL=1
fi
done
echo ""
# 4) NPMplus SSL and HTTPS (per FQDN same as E2E but explicit)
info "4. NPMplus SSL and HTTPS (FQDN → SSL + HTTP)"
for d in "${DOMAINS[@]}"; do
CODE=$(curl -s -o /dev/null -w "%{http_code}" -L --connect-timeout 10 "https://${d}/" 2>/dev/null || echo "000")
CODE="${CODE:0:3}"
if [[ "$CODE" =~ ^[234][0-9][0-9]$ ]] || [[ "$CODE" == "301" ]] || [[ "$CODE" == "302" ]]; then
ok "HTTPS $d$CODE"
else
[[ "$CODE" == "000" ]] && warn "HTTPS $d unreachable" || warn "HTTPS $d$CODE"
fi
done
echo ""
# 5) End-to-end routing (full domain list: DNS, SSL, HTTPS, RPC where applicable)
# When only RPC fails (edge blocks POST), treat as success so full run passes
info "5. End-to-end routing (all domains)"
if E2E_SUCCESS_IF_ONLY_RPC_BLOCKED=1 bash scripts/verify/verify-end-to-end-routing.sh 2>&1; then
ok "E2E routing completed"
else
warn "E2E routing had failures (see above)"
fi
echo ""
# 6) NPMplus API export (optional; requires LAN + NPM_PASSWORD)
if [[ "$SKIP_NPMPLUS_API" != true ]]; then
info "6. NPMplus config export (API)"
if bash scripts/verify/export-npmplus-config.sh 2>/dev/null; then
ok "NPMplus config export OK"
else
warn "NPMplus config export failed (need LAN + NPM_PASSWORD)"
fi
else
info "6. NPMplus API skipped (--skip-npmplus-api)"
fi
echo ""
# 7) UDM Pro port forwarding (public IP test)
info "7. UDM Pro port forwarding verification"
if bash scripts/verify/verify-udm-pro-port-forwarding.sh 2>/dev/null; then
ok "UDM Pro verification completed"
else
warn "UDM Pro verification had warnings"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
[[ $FAIL -eq 0 ]] && ok "All critical checks passed" || fail "Some checks failed"
echo ""