Generally functional. Added upload script
This commit is contained in:
235
tests/test_thrower_info.sh
Executable file
235
tests/test_thrower_info.sh
Executable file
@@ -0,0 +1,235 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test SUP-06: Thrower Information Publishing
|
||||
# Tests: Kind 12222 thrower information events
|
||||
|
||||
set -e
|
||||
|
||||
TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$TEST_DIR/helpers/timing_utils.sh"
|
||||
source "$TEST_DIR/helpers/event_utils.sh"
|
||||
|
||||
# Load test configuration
|
||||
KEYS_FILE="$TEST_DIR/fixtures/test_keys.json"
|
||||
RELAYS_FILE="$TEST_DIR/fixtures/test_relays.json"
|
||||
|
||||
# Extract keys
|
||||
THROWER_A_PUBKEY=$(jq -r '.thrower_a.pubkey' "$KEYS_FILE")
|
||||
|
||||
# Extract relays
|
||||
THROWER_RELAY=$(jq -r '.test_scenarios.single_hop.thrower_relay' "$RELAYS_FILE")
|
||||
|
||||
echo "=== SUP-06: Thrower Information Test ==="
|
||||
echo "Thrower A: $THROWER_A_PUBKEY"
|
||||
echo "Monitoring relay: $THROWER_RELAY"
|
||||
echo ""
|
||||
|
||||
echo "Step 1: Query for existing kind 12222 events from Thrower A"
|
||||
echo "Searching for thrower information document..."
|
||||
echo ""
|
||||
|
||||
# Query for kind 12222 events from this thrower
|
||||
THROWER_INFO=$(nak req --relay "$THROWER_RELAY" -k 12222 -a "$THROWER_A_PUBKEY" --limit 1 --timeout 10 2>/dev/null | \
|
||||
jq -s 'sort_by(.created_at) | reverse | .[0]' 2>/dev/null || echo "{}")
|
||||
|
||||
if [ "$(echo "$THROWER_INFO" | jq -r '.id')" = "null" ] || [ "$(echo "$THROWER_INFO" | jq -r '.id')" = "" ]; then
|
||||
echo "⚠ No thrower information found"
|
||||
echo "This could mean:"
|
||||
echo " - Thrower A is not running"
|
||||
echo " - Auto-publish hasn't triggered yet"
|
||||
echo " - Thrower A hasn't published to this relay"
|
||||
echo ""
|
||||
echo "Waiting 10 seconds for auto-publish..."
|
||||
sleep 10
|
||||
|
||||
# Try again
|
||||
THROWER_INFO=$(nak req --relay "$THROWER_RELAY" -k 12222 -a "$THROWER_A_PUBKEY" --limit 1 --timeout 10 2>/dev/null | \
|
||||
jq -s 'sort_by(.created_at) | reverse | .[0]' 2>/dev/null || echo "{}")
|
||||
|
||||
if [ "$(echo "$THROWER_INFO" | jq -r '.id')" = "null" ] || [ "$(echo "$THROWER_INFO" | jq -r '.id')" = "" ]; then
|
||||
echo "✗ FAILED: No thrower information found after waiting"
|
||||
echo "Please ensure Thrower A is running with auto-publish enabled"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
THROWER_INFO_ID=$(echo "$THROWER_INFO" | jq -r '.id')
|
||||
echo "✓ Found thrower information: $THROWER_INFO_ID"
|
||||
echo ""
|
||||
|
||||
echo "Step 2: Verify event structure"
|
||||
echo ""
|
||||
|
||||
# Verify kind
|
||||
KIND=$(echo "$THROWER_INFO" | jq -r '.kind')
|
||||
if [ "$KIND" != "12222" ]; then
|
||||
echo "✗ FAILED: Wrong event kind (expected 12222, got $KIND)"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Kind: 12222"
|
||||
|
||||
# Verify pubkey
|
||||
PUBKEY=$(echo "$THROWER_INFO" | jq -r '.pubkey')
|
||||
if [ "$PUBKEY" != "$THROWER_A_PUBKEY" ]; then
|
||||
echo "✗ FAILED: Wrong pubkey"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Pubkey: $PUBKEY"
|
||||
|
||||
# Parse content (should be JSON)
|
||||
CONTENT=$(echo "$THROWER_INFO" | jq -r '.content')
|
||||
CONTENT_JSON=$(echo "$CONTENT" | jq '.' 2>/dev/null || echo "{}")
|
||||
|
||||
if [ "$(echo "$CONTENT_JSON" | jq -r 'type')" != "object" ]; then
|
||||
echo "✗ FAILED: Content is not valid JSON"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Content is valid JSON"
|
||||
echo ""
|
||||
|
||||
echo "Step 3: Verify required fields"
|
||||
echo ""
|
||||
|
||||
# Check required fields
|
||||
REQUIRED_FIELDS=("name" "description" "maxDelay" "refreshRate" "supportedSups" "software" "version" "relays")
|
||||
MISSING_FIELDS=()
|
||||
|
||||
for field in "${REQUIRED_FIELDS[@]}"; do
|
||||
if ! echo "$CONTENT_JSON" | jq -e ".$field" > /dev/null 2>&1; then
|
||||
MISSING_FIELDS+=("$field")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#MISSING_FIELDS[@]} -gt 0 ]; then
|
||||
echo "✗ FAILED: Missing required fields: ${MISSING_FIELDS[*]}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ All required fields present"
|
||||
echo ""
|
||||
|
||||
echo "Step 4: Verify field values"
|
||||
echo ""
|
||||
|
||||
# Extract and display fields
|
||||
NAME=$(echo "$CONTENT_JSON" | jq -r '.name')
|
||||
DESCRIPTION=$(echo "$CONTENT_JSON" | jq -r '.description')
|
||||
MAX_DELAY=$(echo "$CONTENT_JSON" | jq -r '.maxDelay')
|
||||
REFRESH_RATE=$(echo "$CONTENT_JSON" | jq -r '.refreshRate')
|
||||
SUPPORTED_SUPS=$(echo "$CONTENT_JSON" | jq -r '.supportedSups')
|
||||
SOFTWARE=$(echo "$CONTENT_JSON" | jq -r '.software')
|
||||
VERSION=$(echo "$CONTENT_JSON" | jq -r '.version')
|
||||
RELAYS=$(echo "$CONTENT_JSON" | jq -r '.relays')
|
||||
|
||||
echo "Name: $NAME"
|
||||
echo "Description: $DESCRIPTION"
|
||||
echo "Max Delay: ${MAX_DELAY}s"
|
||||
echo "Refresh Rate: ${REFRESH_RATE}s"
|
||||
echo "Supported SUPs: $SUPPORTED_SUPS"
|
||||
echo "Software: $SOFTWARE"
|
||||
echo "Version: $VERSION"
|
||||
echo ""
|
||||
|
||||
# Verify maxDelay is a number
|
||||
if ! [[ "$MAX_DELAY" =~ ^[0-9]+$ ]]; then
|
||||
echo "✗ FAILED: maxDelay is not a number"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ maxDelay is valid: ${MAX_DELAY}s"
|
||||
|
||||
# Verify refreshRate is a number
|
||||
if ! [[ "$REFRESH_RATE" =~ ^[0-9]+$ ]]; then
|
||||
echo "✗ FAILED: refreshRate is not a number"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ refreshRate is valid: ${REFRESH_RATE}s"
|
||||
|
||||
# Verify supportedSups contains expected values
|
||||
if ! echo "$SUPPORTED_SUPS" | grep -qE "[1-6]"; then
|
||||
echo "✗ FAILED: supportedSups doesn't contain expected SUP numbers"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ supportedSups is valid: $SUPPORTED_SUPS"
|
||||
|
||||
# Verify relays is an array
|
||||
RELAY_COUNT=$(echo "$CONTENT_JSON" | jq '.relays | length')
|
||||
if [ "$RELAY_COUNT" -eq 0 ]; then
|
||||
echo "✗ FAILED: No relays configured"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Relays configured: $RELAY_COUNT relay(s)"
|
||||
echo ""
|
||||
|
||||
echo "Step 5: Verify relay configurations"
|
||||
echo ""
|
||||
|
||||
# Check each relay has required fields
|
||||
for i in $(seq 0 $((RELAY_COUNT - 1))); do
|
||||
RELAY_URL=$(echo "$CONTENT_JSON" | jq -r ".relays[$i].url")
|
||||
RELAY_READ=$(echo "$CONTENT_JSON" | jq -r ".relays[$i].read")
|
||||
RELAY_WRITE=$(echo "$CONTENT_JSON" | jq -r ".relays[$i].write")
|
||||
|
||||
if [ -z "$RELAY_URL" ] || [ "$RELAY_URL" = "null" ]; then
|
||||
echo "✗ FAILED: Relay $i missing URL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$RELAY_READ" != "true" ] && [ "$RELAY_READ" != "false" ]; then
|
||||
echo "✗ FAILED: Relay $i has invalid read flag"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$RELAY_WRITE" != "true" ] && [ "$RELAY_WRITE" != "false" ]; then
|
||||
echo "✗ FAILED: Relay $i has invalid write flag"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " Relay $((i+1)): $RELAY_URL (read: $RELAY_READ, write: $RELAY_WRITE)"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "✓ All relay configurations valid"
|
||||
echo ""
|
||||
|
||||
echo "Step 6: Verify event signature"
|
||||
if ! verify_event_signature "$THROWER_INFO"; then
|
||||
echo "✗ FAILED: Invalid event signature"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Event signature valid"
|
||||
echo ""
|
||||
|
||||
echo "Step 7: Check event age (should be recent)"
|
||||
CREATED_AT=$(echo "$THROWER_INFO" | jq -r '.created_at')
|
||||
CURRENT_TIME=$(date +%s)
|
||||
AGE=$((CURRENT_TIME - CREATED_AT))
|
||||
|
||||
echo "Event age: ${AGE}s"
|
||||
|
||||
if [ $AGE -gt 3600 ]; then
|
||||
echo "⚠ WARNING: Event is older than 1 hour"
|
||||
echo " This may indicate auto-publish is not working correctly"
|
||||
else
|
||||
echo "✓ Event is recent (< 1 hour old)"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=== TEST PASSED ==="
|
||||
echo "✓ Thrower information document found"
|
||||
echo "✓ Event structure valid (kind 12222)"
|
||||
echo "✓ All required fields present"
|
||||
echo "✓ Field values valid"
|
||||
echo "✓ Relay configurations valid"
|
||||
echo "✓ Event signature valid"
|
||||
echo ""
|
||||
|
||||
echo "Thrower Information Summary:"
|
||||
echo " Name: $NAME"
|
||||
echo " Supported SUPs: $SUPPORTED_SUPS"
|
||||
echo " Max Delay: ${MAX_DELAY}s"
|
||||
echo " Refresh Rate: ${REFRESH_RATE}s"
|
||||
echo " Relays: $RELAY_COUNT"
|
||||
echo " Version: $VERSION"
|
||||
echo ""
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user