A Transparent and Verifiable Way to Sync the AT Protocol's PLC Directory
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