140 lines
4.1 KiB
Bash
Executable File
140 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test SUP-04: Delay and Jitter Verification
|
|
# Tests: Timing requirements and jitter application
|
|
|
|
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
|
|
BUILDER_PRIVKEY=$(jq -r '.builder.privkey' "$KEYS_FILE")
|
|
THROWER_A_PUBKEY=$(jq -r '.thrower_a.pubkey' "$KEYS_FILE")
|
|
|
|
# Extract relays
|
|
THROWER_RELAY=$(jq -r '.test_scenarios.single_hop.thrower_relay' "$RELAYS_FILE")
|
|
FINAL_RELAY=$(jq -r '.test_scenarios.single_hop.final_relay' "$RELAYS_FILE")
|
|
|
|
echo "=== SUP-04: Delay and Jitter Test ==="
|
|
echo "Testing multiple delay values with jitter verification"
|
|
echo ""
|
|
|
|
# Test different delay values
|
|
DELAY_VALUES=(0 2 2 2 2)
|
|
AUDIT_TAG_BASE="test-delays-$(date +%s)"
|
|
|
|
PASSED=0
|
|
FAILED=0
|
|
|
|
for DELAY in "${DELAY_VALUES[@]}"; do
|
|
echo "----------------------------------------"
|
|
echo "Test Case: ${DELAY}s delay"
|
|
echo "----------------------------------------"
|
|
|
|
AUDIT_TAG="${AUDIT_TAG_BASE}-${DELAY}"
|
|
TEST_CONTENT="Delay test ${DELAY}s at $(date +%s)"
|
|
|
|
# Create and publish event
|
|
INNER_EVENT=$(create_test_event "$BUILDER_PRIVKEY" "$TEST_CONTENT")
|
|
INNER_EVENT_ID=$(echo "$INNER_EVENT" | jq -r '.id')
|
|
|
|
ROUTING_PAYLOAD=$(create_routing_payload "$INNER_EVENT" "$FINAL_RELAY" "$DELAY" "null" "$AUDIT_TAG")
|
|
ENCRYPTED_CONTENT=$(encrypt_payload "$BUILDER_PRIVKEY" "$THROWER_A_PUBKEY" "$ROUTING_PAYLOAD")
|
|
ROUTING_EVENT=$(create_routing_event "$BUILDER_PRIVKEY" "$THROWER_A_PUBKEY" "$ENCRYPTED_CONTENT")
|
|
|
|
echo "Publishing event with ${DELAY}s delay..."
|
|
PUBLISH_TIME=$(get_timestamp)
|
|
publish_event "$ROUTING_EVENT" "$THROWER_RELAY" > /dev/null 2>&1
|
|
|
|
# Monitor for arrival
|
|
TIMEOUT=$((DELAY + 30))
|
|
FOUND=false
|
|
START_MONITOR=$(get_timestamp)
|
|
|
|
while [ $(($(get_timestamp) - START_MONITOR)) -lt $TIMEOUT ]; do
|
|
if query_event "$INNER_EVENT_ID" "$FINAL_RELAY" 2 2>/dev/null | grep -q "$INNER_EVENT_ID"; then
|
|
ARRIVAL_TIME=$(get_timestamp)
|
|
FOUND=true
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
if [ "$FOUND" = false ]; then
|
|
echo "✗ FAILED: Event not found within ${TIMEOUT}s"
|
|
((FAILED++))
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Calculate actual delay
|
|
ACTUAL_DELAY=$((ARRIVAL_TIME - PUBLISH_TIME))
|
|
|
|
# Verify minimum delay
|
|
if [ $ACTUAL_DELAY -lt $DELAY ]; then
|
|
echo "✗ FAILED: Event arrived too early"
|
|
echo " Expected: >= ${DELAY}s"
|
|
echo " Actual: ${ACTUAL_DELAY}s"
|
|
((FAILED++))
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Calculate jitter
|
|
if [ $DELAY -gt 0 ]; then
|
|
JITTER_PCT=$(calculate_jitter "$DELAY" "$ACTUAL_DELAY")
|
|
echo "Actual delay: ${ACTUAL_DELAY}s (jitter: ${JITTER_PCT}%)"
|
|
|
|
# Verify jitter is reasonable (within 50% for testing)
|
|
if [ $JITTER_PCT -gt 50 ]; then
|
|
echo "⚠ WARNING: High jitter (${JITTER_PCT}% > 50%)"
|
|
fi
|
|
else
|
|
echo "Actual delay: ${ACTUAL_DELAY}s (0s delay + processing time)"
|
|
fi
|
|
|
|
# Verify content
|
|
FINAL_EVENT=$(query_event "$INNER_EVENT_ID" "$FINAL_RELAY" 5 2>/dev/null)
|
|
FINAL_CONTENT=$(echo "$FINAL_EVENT" | jq -r '.content')
|
|
|
|
if [ "$FINAL_CONTENT" != "$TEST_CONTENT" ]; then
|
|
echo "✗ FAILED: Content mismatch"
|
|
((FAILED++))
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
echo "✓ PASSED: Delay constraint respected, content verified"
|
|
((PASSED++))
|
|
echo ""
|
|
|
|
# Small delay between tests
|
|
sleep 2
|
|
done
|
|
|
|
echo "========================================"
|
|
echo "Delay Test Summary"
|
|
echo "========================================"
|
|
echo "Passed: $PASSED / ${#DELAY_VALUES[@]}"
|
|
echo "Failed: $FAILED / ${#DELAY_VALUES[@]}"
|
|
echo ""
|
|
|
|
if [ $FAILED -gt 0 ]; then
|
|
echo "=== TEST FAILED ==="
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== TEST PASSED ==="
|
|
echo "✓ All delay values tested successfully"
|
|
echo "✓ Minimum delay constraints respected"
|
|
echo "✓ Jitter applied appropriately"
|
|
echo "✓ Content preserved across all tests"
|
|
echo ""
|
|
|
|
exit 0 |