A Transparent and Verifiable Way to Sync the AT Protocol's PLC Directory
at did-resolver 104 lines 2.6 kB view raw
1#!/bin/bash 2# test-did-resolution.sh 3# Compares local DID resolution with plc.directory 4 5set -e 6 7BUNDLE_RANGE="${1:-1}" 8PLC_URL="https://plc.wtf" 9TEMP_DIR=$(mktemp -d) 10trap "rm -rf $TEMP_DIR" EXIT 11 12# Colors 13RED='\033[0;31m' 14GREEN='\033[0;32m' 15YELLOW='\033[1;33m' 16NC='\033[0m' # No Color 17 18echo "Testing DID resolution for bundle(s): $BUNDLE_RANGE" 19echo "Temp directory: $TEMP_DIR" 20echo "" 21 22# Extract unique DIDs from bundle(s) 23echo "Extracting DIDs from bundles..." 24DIDS=$(plcbundle export --bundles "$BUNDLE_RANGE" | jq -r '.did' | sort -u) 25DID_COUNT=$(echo "$DIDS" | wc -l | tr -d ' ') 26 27echo "Found $DID_COUNT unique DIDs" 28echo "" 29 30# Test counters 31TOTAL=0 32PASSED=0 33FAILED=0 34ERRORS=0 35 36# Test each DID 37while IFS= read -r DID; do 38 TOTAL=$((TOTAL + 1)) 39 40 # Progress 41 echo -ne "\r[$TOTAL/$DID_COUNT] Testing $DID..." 42 43 # Resolve locally 44 LOCAL_FILE="$TEMP_DIR/local.json" 45 if ! plcbundle index resolve "$DID" 2>/dev/null | jq --sort-keys . > "$LOCAL_FILE" 2>/dev/null; then 46 echo -e "\r[$TOTAL/$DID_COUNT] ${RED}ERROR${NC} $DID (local resolution failed)" 47 ERRORS=$((ERRORS + 1)) 48 continue 49 fi 50 51 # Resolve remotely 52 REMOTE_FILE="$TEMP_DIR/remote.json" 53 if ! curl -s "$PLC_URL/$DID" | jq --sort-keys . > "$REMOTE_FILE" 2>/dev/null; then 54 echo -e "\r[$TOTAL/$DID_COUNT] ${YELLOW}SKIP${NC} $DID (remote fetch failed)" 55 ERRORS=$((ERRORS + 1)) 56 continue 57 fi 58 59 # Compare 60 if diff -q "$LOCAL_FILE" "$REMOTE_FILE" > /dev/null 2>&1; then 61 echo -e "\r[$TOTAL/$DID_COUNT] ${GREEN}${NC} $DID" 62 PASSED=$((PASSED + 1)) 63 else 64 echo -e "\r[$TOTAL/$DID_COUNT] ${RED}${NC} $DID" 65 echo "" 66 echo "Differences found:" 67 diff -u "$REMOTE_FILE" "$LOCAL_FILE" | head -20 68 echo "" 69 FAILED=$((FAILED + 1)) 70 71 # Ask to continue 72 if [ $FAILED -ge 3 ]; then 73 echo "" 74 read -p "Continue testing? (y/N) " -n 1 -r 75 echo 76 if [[ ! $REPLY =~ ^[Yy]$ ]]; then 77 break 78 fi 79 fi 80 fi 81 82 # Rate limit 83 sleep 0.1 84 85done <<< "$DIDS" 86 87# Summary 88echo "" 89echo "=========================================" 90echo "Test Results" 91echo "=========================================" 92echo -e "Total: $TOTAL" 93echo -e "${GREEN}Passed: $PASSED${NC}" 94echo -e "${RED}Failed: $FAILED${NC}" 95echo -e "${YELLOW}Errors: $ERRORS${NC}" 96echo "" 97 98if [ $FAILED -eq 0 ] && [ $ERRORS -eq 0 ]; then 99 echo -e "${GREEN}✓ All tests passed!${NC}" 100 exit 0 101else 102 echo -e "${RED}✗ Some tests failed${NC}" 103 exit 1 104fi